Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016
ISSN: 2089-9815
PERBANDINGAN WAKTU TANGGAP WEBSITE BERBASIS WORDPRESS PADA WEB SERVER APACHE DAN NGINX Alexander Waworuntu1 Program Studi Teknik Informatika, Fakultas Ilmu Komputer dan Ilmu Komunikasi, Institut Teknologi dan Bisnis Kalbis Jl. Pulomas Selatan Kav. 22, Jakarta Timur 13210 Telp. (021) 4788-3900 E-mail:
[email protected]
ABSTRAKS Salah satu aspek yang mempengaruhi kecepatan akses dari suatu website adalah aplikasi web server yang melayani website tersebut. Penelitian ini akan mencoba melakukan perbandingan kecepatan akses dari website berbasis WordPress terhadap Apache dan Nginx, dua aplikasi web server yang paling banyak digunakan saat ini khususnya pada server berbasis UNIX/LINUX. Karena WordPress merupakan aplikasi web yang ditulis menggunakan PHP, maka pada masing-masing web server akan dipasangkan modul untuk menangani proses PHP, pada Apache akan digunakan mod_php dan pada Nginx akan digunakan PHP-FPM dan HHVM. Tulisan ini akan menghasilkan tiga hasil pengamatan terhadap waktu tanggap web server dan penggunaan sumber daya server berupa CPU dan RAM. Hasil pengamatan mendapati bahwa web server Nginx dengan konfigurasi menggunakan HHVM dapat melayani akses website paling cepat dengan penggunaan sumber daya server yang minimum. Kata Kunci: apache, nginx, wordpress, kecepatan akses web merupakan website berbasis WordPress (Mullenweg, 2003). WordPress dikembangkan menggunakan Bahasa PHP yang dikombinasikan dengan JavaScript dan CSS. Kerangka WordPress terdiri dari sub-sistem untuk melakukan request-response routing, class untuk pengaturan basis data dan konten, fitur keamanan dan lain-lain. WordPress diawali dari proyek open-source oleh Matt Mullenweg pada tahun 2003. Sejak saat itu banyak programmer web dari seluruh dunia ikut berkontribusi mengembangkan WordPress (Williams, 2015). Apache merupakan aplikasi web server yang paling banyak digunakan pada komputer berbasis UNIX/LINUX. Apache mulai dikembangkan pada tahun 1995 sebagai proyek open-source yang merupakan turunan dari web server yang dikeluarkan oleh NCSA, yaitu NCSA HTTPd (Ford, 2008). Nginx merupakan server HTTP dengan kode sumber terbuka yang ditulis oleh Igor Sysoev yang berkebangsaan Rusia pada tahun 2002 dan di publikasikan pada tahun 2004 (Nedelcu, 2013).
1. PENDAHULUAN 1.1 Latar Belakang Kecepatan website dalam menampilkan konten merupakan salah satu aspek yang mempengaruhi tingkat kepuasan pengunjung website. Semakin lama waktu tanggap suatu website akan memperbesar peluang website tersebut akan ditinggalkan oleh para pengunjungnya yang secara tidak langsung akan mempengaruhi sisi ekonomis dari website tersebut. Salah satu aspek yang mempengaruhi waktu tanggap suatu website adalah aplikasi dari web server. Penelitian ini akan melakukan perbandingan dari dua web server paling banyak digunakan dalam pengembangan aplikasi web untuk melihat seberapa besar perbedaan waktu tanggap dari kedua web server ini. Selain aplikasi web server, kualitas penulisan kode program juga memberikan pengaruh terhadap waktu tanggap dari website. Salah satu aplikasi web yang banyak digunakan adalah WordPress sebagai Content Management System sumber terbuka. Pada penelitian ini WordPress akan digunakan untuk membandingkan Apache dan Nginx dalam memberikan respond terhadap request halaman web.
2. PEMBAHASAN 2.1 Optimasi Kecepatan Loading Website Secara umum ada beberapa teknik yang umum digunakan untuk menginkatkan tidak hanya kecepatan waktu tanggap halaman web, namun juga optimasi terhadap load server dan penggunaan sumber daya server. Beberapa teknik tersebut antara lain efisiensi aplikasi web server, server-side caching, client-side caching, minification dan kombinasi JavaScript dan CSS, Kompresi gambar
1.2
Referensi Wordpress merupakan aplikasi berbasis web yang dapat digunakan untuk membuat website yang menarik. WordPress merupakan aplikasi bersumber terbuka (open-source) untuk Content Management System, dan juga sebagai kerangka untuk membangun aplikasi web yang lebih kompleks. Sampai dengan penelitian ini dilakukan, diperkirakan 24% dari seluruh website yang ada
549
Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016
dan HTML, Optimasi gambar, CDN dan distribusi sumber daya (King, 2008). Penggunaan aplikasi web-server dengan penggunaan sumber daya server yang rendah biasanya merupakan salah satu cara yang paling efektif untuk meningkatkan kecepatan loading halaman web. Pada penelitian ini dilakukan perbandingan antara dua aplikasi web-server yang paling populer, yaitu Apache HTTP dan Nginx. Selain itu penelitian ini juga membahas perbandingan antar beberapa interpreter PHP yang digunakan pada web-server. Server-side caching merupakan proses penyimpanan hasil interpretasi kode PHP, hasil query basis data maupun file statis untuk dapat digunakan kembali. Setiap kali terjadi request terhadap suatu halaman web, maka interpreter PHP akan bekerja dan melakukan interpretasi terhadap kode PHP. Proses ini terjadi secara berulang setiap kali sebuah halaman web dipanggil, sehingga penggunaan cache atau data hasil interpretasi kode PHP yang disimpan dapat meningkatkan efisiensi penggunaan sumber daya web-server, karena PHP interpreter tidak perlu bekerja terus-menerus setiap kali halaman web dipanggil. Selain itu, hasil query dari basis data juga dapat disimpan menggunakan cache, sehingga jika terdapat query yang sama, tidak perlu melakukan query basis data kembali. Client-side caching merupakan teknik untuk menyimpan dokumen HTML, JavaScript dan CSS pada browser, sehingga ketika pengunjung website mengakses halaman yang sumbernya sudah ada di cache browser, maka tidak perlu lagi terjadi proses unduh sehingga halaman web dapat ditampilkan dengan lebih cepat. Namun teknik ini memerlukan mekanisme untuk menangani perubahan konten di sisi server, karena jika tidak ditangani dengan baik sangat memungkinkan pengunjung web melihat konten yang sudah tidak terbarui. WordPress menggunakan plugin dan theme yang seringkali terdiri dari banyak file JavaScript dan CSS khususnya untuk plugin dan theme yang kompleks. Hal ini menyebabkan beberapa permasalahan, yaitu adanya batasan unduh pada waktu yang bersamaan oleh browser dari domain yang sama. Untuk mengatasi hal ini, ada dua tenik yang biasa digunakan, yaitu kombinasi dan minifikasi. Kombinasi merupakan teknik mengkombinasikan beberapa file JavaScipt atau CSS menjadi satu file tunggal yang kemudian akan di kirim ke browser. Proses minifikasi merupakan teknik untuk memperkecil ukuran file dari JavaScipt maupun CSS dengan mencoba menghilangkan spasi dan karakter-karakter yang tidak terpakai sehingga ukuran file menjadi lebih kecil. Gambar, khususnya yang dihasilkan melalui mekanisme kompresi JPEG lousy dapat dikompresi kembali untuk menghasilkan file gambar dengan ukuran yang lebih kecil namun tetap mempertahankan kulitas gambar yang dapat
ISSN: 2089-9815
ditoleransi. Selain gambar, data tekstual juga dapat dikompresi sebelum dikirimkan ke browser dengan kompresi GZIP. Untuk website-website yang pengunjungnya berasal dari berbagai lokasi di dunia, optimasi dapat dilakukan dengan melakukan penyebaran konten website diberbagai lokasi server yang tersebar di beberapa negara yang berbeda menggunakan teknologi CDN. 2.2
Konfigurasi Lingkungan Pengujian Pengujian terhadap website WordPress akan dilakukan pada VPS berbasis Ubuntu. Spesifikasi dari server adalah 3x CPU, 4GB RAM, konektivitas 300Mbps. Ubuntu yang digunakan adalah versi 14.04. Konfigurasi Apache menggunakan Apache versi 2 dengan modul aktif yaitu: mod_access.so mod_auth.so mod_auth_anon.so mod_auth_dbm.so mod_auth_digest.so mod_include.so mod_log_config.so mod_env.so mod_mime_magic.so mod_cern_meta.so mod_expires.so mod_headers.so mod_usertrack.so mod_unique_id.so mod_setenvif.so mod_mime.so mod_dav.so mod_status.so mod_autoindex.so mod_asis.so mod_info.so mod_dav_fs.so mod_vhost_alias.so mod_negotiation.so mod_dir.so mod_imap.so mod_actions.so mod_speling.so mod_userdir.so mod_alias.so mod_rewrite.so mod_proxy.so mod_proxy_ftp.so mod_proxy_http.so mod_proxy_connect.so mod_cache.so mod_disk_cache.so
550
Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016
# This order might seem weird - this is attempted to match last if rules below fail. # http://wiki.nginx.org/HttpCoreModule location / { try_files $uri $uri/ /index.php?$args; }
mod_file_cache.so mod_mem_cache.so mod_cgi.so mod_auth_mysql mod_auth_pgsql mod_php
# Add trailing slash to */wp-admin requests. rewrite /wp-admin$ $scheme://$host$uri/ permanent;
Konfigurasi pada web server Nginx mengacu pada standar konfigurasi WordPress dengan pengaturan konfigurasi pada: /etc/nginx/nginx.conf /etc/nginx/global/wordpress.conf
# Directives to send expires headers and turn off 404 error logging. location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|t tf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz| gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|w av|bmp|rtf)$ { access_log off; log_not_found off; expires max; }
# Generic startup file. user {user} {group}; #usually equal to number of CPUs you have. run command "grep processor /proc/cpuinfo | wc -l" to find it worker_processes 2; error_log pid
# Uncomment one of the lines below for the appropriate caching plugin (if used). #include global/wordpress-wp-supercache.conf; #include global/wordpress-w3-totalcache.conf;
/var/log/nginx/error.log; /var/run/nginx.pid;
# Keeps the logs free of messages about not being able to bind(). #daemon off;
# Pass all .php files onto a php-fpm/phpfcgi server. location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default) include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # fastcgi_intercept_errors on; fastcgi_pass php; }
events { worker_connections
1024;
} http { #
ISSN: 2089-9815
rewrite_log on;
include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; # tcp_nopush on; keepalive_timeout 3; # tcp_nodelay on; # gzip on; #php max upload limit cannot be larger than this client_max_body_size 13m; index index.php index.html index.htm;
Gambar 2. Konfigurasi Nginx pada etc/nginx/global/wordpress.conf
# Upstream to abstract backend connection(s) for PHP. upstream php { #this should match value of "listen" directive in php-fpm pool server unix:/tmp/phpfpm.sock; # server 127.0.0.1:9000; }
Pada web server Nginx dengan HHVM, konfigurasi yang digunakan dapat dilihat pada tabel 1. Tabel 1. Konfigurasi HHVM pada Web Server Nginx Setting hhvm.server_variables hhvm.enable_obj_destruct_c all hhvm.hack.lang.look_for_ty pechecker hhvm.jit hhvm.jit_enable_rename_fun ction hhvm.server.thread_count hhvm.server.source_root
include sites-enabled/*; }
Gambar 1. Konfigurasi Nginx pada etc/nginx/nginx.conf # WordPress single site rules. # Designed to be included in any server {} block.
551
Jenis array bool
Nilai $_SERVER false
bool
true
bool bool
true false
int strin g
6 HHVM dir
Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016 hhvm.force_hh hhvm.log.file hhvm.repo.authoritative hhvm.repo.central.path hhvm.server.type hhvm.server.port hhvm.server.default_docume nt hhvm.server.error_document 404 hhvm.server.user
bool strin g boole an strin g strin g int Strin g strin g strin g
false stderr
ISSN: 2089-9815
/usr/sbin/apache2 dimulai dengan empat proses dengan penggunaan memory sebesar 115 MB dan ketika terjadi heavy load, CPU digunakan sepenuhnya dengan penggunaan memory mencapai 770 MB. Statistik dari loader.io memperlihatkan bahwa rata-rata waktu tanggap adalah 1229 ms, min waktu tanggap adalah 144 ms, max waktu tanggap adalah 4660 ms dan jumlah respond yang berhasil adalah 2178.
false “” fastcgi 80 “index.p hp” “index.p hp” ‘’
2.4
Nginx dengan PHP-FPM PHP-FPM merupakan server FastCGI yang terkait dengan port TCP atau socket, yang menjadi satu dengan interpreter PHP. Dibandingkan dengan mod_php pada Apache dimana request PHP diproses secara langsung oleh Apache, pada Nginx harus diteruskan ke PHP-FPM yang dapat memprosesnya. Dengan menggunakan loader.io dibuat pengujian dengan konfigurasi yang sama dengan Apache mod_php. Hasil pengujian dapat dilihat pada gambar 6 yang memperlihatkan rata-rata waktu tanggap 1024 ms. Hasil pengamatan dengan Htop sejak detik ke-1 hingga detik ke-22 memperlihatkan kondisi yang berbeda. Dapat dilihat pada kondisi 150 simultan request penggunaan RAM server hanya 46 MB dibandingkan dengan 770MB pada Apache. Hasil pengamatan Htop pada detik ke-1 dapat dilihat pada gambar 7 dan hasil pengamatan Htop pada detik ke-22 dapat dilihat pada gambar 8.
2.3
Apache dengan mod_php Apache mendukung beragam fitur yang diimplementasikan sebagai modul yang terkompilasi untuk menambah fungsionalitas utamanya. Apache menyediakan beragam Multi Processing Modules (MPMs), yang memungkinkan Apache berjalan berbasiskan proses, hybrid (proses dan thread) atau mode event-hybrid. Pada konfigurasi standar, ketika permintaan HTTP diterima, Apache akan memulai memproses permintaan tersebut satu-per-satu. Setiap proses berdiri sendiri dimana Apache menginisialisasi semua modul (termasuk mod_php) termasuk ketika memproses file statis. Hal ini menyebabkan penggunaan RAM yang tinggi. Mod_php merupakan modul interpreter PHP pada Apache. Modul mod_php di load pada setiap proses Apache, sehingga sebuah request PHP akan dijalankan secara langsung pada proses ini. Salah satu kelemahan dari hal ini adalah jika user melakukan request file statis seperti CSS atau JavaScript atau gambar, semua file statis tersebut akan tetap melalui proses Apache dengan modul PHP sehingga meningkatkan penggunaan CPU dan RAM. Hasil pengujian load pada Apache dengan mod_php untuk menjalankan website WordPress sederhana menggunakan loader.io dapat dilihat pada gambar 3. Grafik tersebut memperlihatkan waktu tanggap server ketika sejumlah request dikirimkan secara bersamaan. Dapat dilihat bahwa ketika terjadi request hingga 200 secara bersamaan waktu tanggap dibawah 2 detik dan meningkat secara linear. Untuk melihat bagaimana kinerja server dengan load tersebut dapat dilihat pada gambar 4 dan gambar 5. Kedua gambar tersebut merupakan tampilan dari Htop process viewer dari detik ke-2 dan detik ke-25 pada saat load testing. Pada gambar 4 merupakan tabel dari proses yang sedang berjalan. Kolom RES, CPU% dan MEM% memperlihatkan penggunaan RAM dalam kilobytes, persentase penggunaan CPU dan persentase penggunaan RAM terhadap proses. Dari kedua gambar dapat dilihat bahwa Apache HTTP yang direpresentasikan dengan
2.5
Nginx dengan HHVM Pada tahap ini kita PHP-FPM diganti dengan HHVM, interpreter PHP FastCGI yang berbeda. HipHop Virtual Machine (HHVM) merupakan proses mesin virtual berbasis kompilasi just-in-time (JIT), menjadi mesin kompilasi untuk PHP. Dengan penggunaan prinsip kompilasi JIT, kode PHP yang dikompilasi terlebih dahulu di ubah menjadi HipHop bytecode (HHBC) yang kemudian diubah secara dinamis menjadi kode mesin x86-64 yang teroptimasi dan dieksekusi secara natif. Hasil pengujian dengan loader.io dengan konfigurasi yang sama seperti pengujian pada Apache dengan mod_php dan Nginx dengan PHPFPM pada gambar 9 memperlihatkan bahwa waktu tanggap pada saat 200 simultan request turun dari 2 detik menjadi kurang dari 1 detik dengan rata-rata waktu tanggap sebesar 509 ms. Hasil pengamatan Htop pada detik ke-1 pada gambar 10 dan hasil pengamatan Htop pada detik ke-22 pada gambar 11 memperlihatkan bahwa penggunaan RAM pada HHVM lebih besar tiga kali lipat dibandingan dengan FPM. Penggunaan RAM pada detik ke-22 mencapai 167 MB dibandingkan dengan FPM sebesar 46 MB, namun masih lebih baik dibandingkan dengan Apache.
552
Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016
ISSN: 2089-9815
Gambar 3. Loader.io: Waktu tanggap terhadap klien pada Apache dengan mod_php
Gambar 4. Htop process viewer pada Apache dengan mod_php detik ke-2
Gambar 5. Htop process viewer pada Apache dengan mod_php detik ke-25
553
Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016
ISSN: 2089-9815
Gambar 6. Loader.io: Waktu tanggap terhadap klien pada Nginx dengan PHP-FPM
Gambar 7. Htop process viewer pada Nginx dengan PHP-FPM detik ke-1
Gambar 8. Htop process viewer pada Nginx dengan PHP-FPM detik ke-22
554
Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016
ISSN: 2089-9815
Gambar 9. Loader.io: Waktu tanggap terhadap klien pada Nginx dengan HHVM
Gambar 10. Htop process viewer pada Nginx dengan HHVM detik ke-1
Gambar 11. Htop process viewer pada Nginx dengan HHVM detik ke-22
555
Seminar Nasional Teknologi Informasi dan Komunikasi 2016 (SENTIKA 2016) Yogyakarta, 18-19 Maret 2016
3.
KESIMPULAN Waktu tanggap antara Apache dengan mod_php dengan Nginx dengan PHP-FPM secara umum tidak berbeda jauh, yaitu 2 detik pada 200 simultan request, namun terdapat perbedaan yang sangat nyata pada penggunaan sumber daya server, dimana penggunaan RAM pada Apache jauh lebih besar daripada Nginx dengan PHP-FPM. Ketika PHPFPM diganti dengan HHVM, waktu tanggap bertambah cepat hingga menjadi kurang dari 1 detik, namun penggunaan sumber daya server sedikit lebih besar yaitu tiga kali lipat dari Nginx dengan PHPFPM namun masih jauh lebih kecil dibandingkan dengan Apache dengan mod_php. Hasil perbandingan dapat dilihat pada tabel 2.
PUSTAKA Ford., A. 2008. Apache 2 Pocket Reference. O’Rilley Media. King, A. B. 2008. Website Optimization. O’Rilley Media. Mullenweg, M. 2003. WordPress (Online), (www.wordpress.org, diakses 20 Desember 2015) Nedelcu, C. 2013. Nginx HTTP Server, Second Edition. Packt Publishing. Williams, B., Damstra., D. & Stern, H. 2015. Professional WordPress Design and Development. Wrox.
Tabel 2. Hasil perbandingan waktu tanggap antara Apache dan Nginx dengan berbagai konfigurasi. Konfigurasi Apache dengan mod_php Nginx dengan PHP-FPM Nginx dengan PHP-HHVM
Rata-rata waktu tanggap
Penggunaan RAM
1229 ms
768 MB
1024 ms
46 MB
509 ms
167 MB
ISSN: 2089-9815
556