Apa itu Tengine?
Tengine adalah server web yang berasal dari Taobao, situs web e-commerce terbesar di Asia. Ini didasarkan pada server HTTP Nginx dan memiliki banyak fitur lanjutan. Tengine telah terbukti sangat stabil dan efisien di beberapa dari 100 situs web teratas di dunia, termasuk taobao.com dan tmall.com.
Tengine telah menjadi proyek open source sejak Desember 2011. Saat ini sedang dikembangkan secara aktif oleh tim Tengine, yang anggota intinya berasal dari Taobao, Sogou dan perusahaan Internet lainnya. Tengine adalah usaha masyarakat dan setiap orang didorong untuk terlibat.
Keistimewaan Tengine dari Web server lain
- Semua fitur ada di Nginx-1.8.1, yaitu, sangat kompatibel dengan Nginx.
- Dynamic module loading support (DSO). Anda tidak perlu mengkompilasi ulang Tengine saat menambahkan modul baru ke dalamnya.
- HTTP/2 support. The ngx_http_v2_module supersedes the ngx_http_spdy_module module.
- Sends unbuffered upload directly to HTTP and FastCGI backend servers, which saves disk I/Os.
- Metode load balancing lebih banyak, e.g., consistent hashing, session persistence, upstream health check, dan resolving upstream domain names lebih cepat.
- Input body filter support. It’s quite handy to write Web Application Firewalls using this mechanism.
- Dukungan bahasa scripting yang dinamis (Lua), yang sangat efisien dan membuatnya mudah untuk memperluas fungsi inti
Telah menerapkan dukungan SO_REUSEPORT [1] di Tengine.
Untuk melihat peningkatan kinerja, Tengine melakukan patokan yang sangat sederhana dengan empat Linux boxes. Tiga kotak digunakan sebagai klien, dan yang lainnya
satu sebagai server web dengan Tengine listening di port 81 dan Nginx listening di port 82. Serta semua perangkat kerasnya
Spesifikasi untuk Linux boxes semua sama.
Menjalankan tiga uji kasus dengan concurrency dari 100 sampai 1000. test cases adalah:
- Tengine with SO_REUSEPORT enabled (reuse_port on).
- Nginx with accept lock (accept_mutex on).
- Nginx without accept lock (accept_mutex off).
The benchmark software menggunakan ApacheBench. Berikut contoh command line:
ab -r -n 10000000 -c 100 http://ip:81/empty.gif
Hardware & Software
CPU: Intel(R)Xeon(R)E5-2650v2@2.60GHz 32core Memory: 128GB NIC: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection Kernel: Linux-3.17.2.x86_64 Tengine-2.1.0 Nginx-1.6.2 ApacheBench-2.3
System konfigurasi
net.ipv4.tcp_mem = 3097431 4129911 6194862 net.ipv4.tcp_rmem = 4096 87380 6291456 net.ipv4.tcp_wmem = 4096 65536 4194304 net.ipv4.tcp_max_tw_buckets = 262144 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.core.somaxconn = 65535 net.core.netdev_max_backlog = 200000
Limit Soft Limit Hard Limit Units Max open files 65535 65535 files
Web server konfigurasi
Nginx konfigurasi file:
worker_processes auto; worker_cpu_affinity 00000000000000000000000000000001 00000000000000000000000000000010 00000000000000000000000000000100 00000000000000000000000000001000 00000000000000000000000000010000 00000000000000000000000000100000 00000000000000000000000001000000 00000000000000000000000010000000 00000000000000000000000100000000 00000000000000000000001000000000 00000000000000000000010000000000 00000000000000000000100000000000 00000000000000000001000000000000 00000000000000000010000000000000 00000000000000000100000000000000 00000000000000001000000000000000 00000000000000010000000000000000 00000000000000100000000000000000 00000000000001000000000000000000 00000000000010000000000000000000 00000000000100000000000000000000 00000000001000000000000000000000 00000000010000000000000000000000 00000000100000000000000000000000 00000001000000000000000000000000 00000010000000000000000000000000 00000100000000000000000000000000 00001000000000000000000000000000 00010000000000000000000000000000 00100000000000000000000000000000 01000000000000000000000000000000 10000000000000000000000000000000 ; worker_rlimit_nofile 65535; events { worker_connections 65535; accept_mutex off; } http { include mime.types; default_type application/octet-stream; access_log logs/access.log; keepalive_timeout 0; server { listen 82 backlog=65535; server_name localhost; location = /empty.gif { empty_gif; } } }
Tengine konfigurasi file:
worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65535; events { worker_connections 65535; reuse_port on; } http { include mime.types; default_type application/octet-stream; access_log logs/access.log; keepalive_timeout 0; server { listen 81 backlog=65535; server_name localhost; location = /empty.gif { empty_gif; } } }
Seperti yang bisa Anda lihat, file konfigurasi Tengine dan Nginx umumnya sama kecuali ‘reuse_port’,
arahan ‘worker_cpu_affinity’, dan ‘accept_mutex’. Perhatikan juga itu
lebih mudah untuk mengatur afinitas CPU di Tengine karena mendukung ‘worker_cpu_affinity auto’.
Kesimpulan
- Tengine memiliki peningkatan kinerja 200% lebih cepat dibandingkan dengan Nginx dengan accept lock, yang merupakan setingan awal.
- Tengine mengalami peningkatan kinerja sebesar 60% dibandingkan dengan Nginx tanpa accept lock.
[1] The SO_REUSEPORT socket option: https://lwn.net/Articles/542629/
Sumber: http://tengine.taobao.org/document/benchmark.html