ANALISIS PENERAPAN PHP-FPM DAN HHVM SEBAGAI INTERPRETER KODE
PROGRAM PHP
NASKAH PUBLIKASI
diajukan oleh Rizqon Sadida
11.11.5381
kepada
JURUSAN TEKNIK INFORMATIKA
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER AMIKOM YOGYAKARTA
YOGYAKARTA
2015
1
ANALISIS PENERAPAN PHP-FPM DAN HHVM SEBAGAI INTERPRETER KODE PROGRAM PHP
Rizqon Sadida1), Andi Sunyoto2),
1,2) Teknik Informatika STMIK AMIKOM Yogyakarta
Jl Ringroad Utara, Condongcatur, Depok, Sleman, Yogyakarta Indonesia 55283 Email : [email protected]1), [email protected]2)
Abstract – The number of internet users in the world increases each year, so many web owner and system engineer has to allocate new servers in order to keep their service running. This has an impact on the cost should be getting bigger and bigger. Of this problem then it can be inferred that system not designed to handle a lot of request. One of the solutions of these problem is to use CGI, but implementation of CGI isn’t directly for PHP program, but using another software like PHP-FPM and HHVM. New problem is coming when system engineer confused about system will be in use, therefore it’s necessary to doing research about PHP- FPM and HHVM. So so that later the hoped answer which interpreters would be in use by the system engineer to resolve problems experienced.
Keywords - PHP-FPM, HHVM, System Engineer, PHP.
1. Pendahuluan 1.1 Latar Belakang
Kemajuan era globalisasi ikut berperan dalam cepatnya perkembangan teknologi saat ini, terutama teknologi website. Salah satu teknologi website yang popular adalah PHP, teknologi PHP sebagai bahasa pemrograman untuk aplikasi website berkembang sangat pesat, mulai dari startup, media sosial, blog, forum menggunakan bahasa pemrograman PHP, menurut survey [2] Aplikasi website yang online, sebanyak 82%
menggunakan bahasa pemrograman PHP [3] .
Seiring dengan pertumbuhan pengguna internet di dunia, yang dilansir oleh internet.org bahwa pengguna internet di dunia pada saat ini mencapai 31.7 miliar orang dan dari tahun ke tahun pengguna internet di dunia mengalami peningkatan sebanyak 7.6% [4]. Dengan pertumbuhan pengguna internet ini, pemilik website yang jumlah pengunjungnya terus bertambah di haruskan untuk mengalokasikan server baru agar service mereka tetap bejalan. Hal ini berdampak pada biaya yang harus di keluarkan semakin besar [5].
Dari permasalahan diatas dapat disimpulkan bahwa sistem yang di develop tidak di desain untuk mensupport jumlah request yang besar dan concurrency yang banyak. Sebagai alternatif, seorang system engineer dapat mengkonversi sistem yang mereka gunakan dengan teknologi yang tepat dan efisien. Salah satu
solusi mengatasi permasalahan tersebut adalah dengan menggunakan fastCGI, CGI sendiri berarti Common Gateway Interface dimana CGI adalah environment standar untuk webserver untuk mengeksekusi kode program. fastCGI berfungsi untuk menangani banyak proccess yang dilakukan secara terus-menerus dalam serangkaian permintaan. Proses ini dimiliki oleh fastCGI bukan dari webserver [1]
Namun pada implementasinya fastCGI tidak secara langsung di tunjukkan untuk program PHP. Melainkan harus menggunakan aplikasi tambahan seperti PHP- FPM (PHP-FastCGI Proccess Manager) atau HHVM (HipHop Virtual Machine) [6]. Aplikasi tambahan ini berfungsi sebagai interpreter yangmenghubungkan kode program PHP dengan fastCGI yang menghubungkan interpreter dengan bahasa mesin. Masalah baru muncul seiring banyaknya teknologi baru, hal ini menimbulkan kebingungan system engineer dalam menentukan sistem mana yang akan di gunakan, oleh sebab itu perlu diadakannya penelitian tentang penerapan PHP-FPM dan HHVM sebagai interpreter kode program PHP.
Penelitian yang akan di lakukan meliputi benchmark kecepatan kode program PHP, kecepatan request webserver, dan konsumsi resource server yang dihasilkan oleh masing-masing software tersebut, sehingga nantinya diharapkan dapat menjawab interpreter mana yang akan di gunakan oleh system engineer untuk mengatasi permasalahan yang dialami, karena seorang system engineer harus mengetahui kinerja dari sistem yang mereka pakai. Oleh sebab itu penulis akan melakukan analisis terhadap PHP-FPM dan HHVM sebagai interpreter dengan mengambil judul penelitian “Analisis Penerapan PHP-FPM dan HHVM Sebagai Interpreter kode Program PHP”.
1.2 Rumusan Masalah
Beradasarkan uraian latar belakang diatas, dapat dirumuskan permasalahan sebagai berikut:
1. Bagaimana kemampuan PHP-FPM dan HHVM dalam mengeksekusi kode program PHP?
1.3 Maksud dan Tujuan Penelitian
Adapun tujuan dilakukannya penelitian ini adalah dapat menganalisis kinerja interpreter PHP yaitu PHP- FPM dan HHVM dan resource yang digunakan di sisi server, serta hasil dari penelitian ini nantinya dapat dijadikan bahan pertimbangan dan referensi untuk system enginner dalam menentukan sistem yang akan di pakai.
2 2. Landasan Teori
2.1 Tinjauan Pustaka
Tobby Banerjee (2014), author dari flockport dalam tulisannya yang berjudul Deploy a faster wordpress with HHVM and PHP-FPM as fallback menjelaskan tentang perbandingan PHP-FPM dan HHVM, selain menjelaskan tentang perbandingan PHP- FPM dan HHVM Tobby Banerjee juga menjelaskan tentang konfigurasi dasar pada server NGINX yang digunakan untuk develop sebuah website berbasis wordpress [7].
Allan McGregor (2013), seorang author dari Medium.com pada tulisannya yang berjudul An Introduction to HHVM menjelaskan sejarah singkat dari dibuatnya HHVM oleh perusahaan raksasa Facebook, selain menjelaskan sejarah singkat Allan McGregor juga menjelaskan bagaimana HHVM bekerja pada server berbasis 64bit [8].
John Bickar (2011), pada tulisannya yang berjudul Benchmarking Site with Apache Brench. Dalam tulisannya menjelaskan tentang fungsi ApacheBrench sebagai sebuah tool untuk melakukan benchmark server, benchmark yang di lakukan oleh tool ini adalah untuk menguji kecepatan request sebuah server yang berjalan pada protokol HTTP. Dalam artikelnya John Bickar melakukan benchmark terhadap sebuah website yang menggunakan drupal sebagai objek yang di uji [9].
2.2 Definisi Interpreter dan Compiler
Interpreter adalah sebuah program yang mengimplementasikan kode program ke dalam bahasa mesin, interpreter berisi library dari kode program yang menginstrusikan perintah ke dalam Bahasa mesin.
Sebuah interpreter membaca statement dari kode program, kemudian mengeksekusi kode program tersebut dengan memanggil library yang tersedia di dalam interpreter [12].
Gambar 1 Proses Interpreter dan Compiler Gambar 1 menjelaskan bagaimana proses interpreter dan compiler bekerja. Sebuah interpreter bekerja dengan membaca sebuah kode program dan memasukkannya kedalam virtual machine, kemudian di eksekusi oleh interpreter yang berisi library, di dalam library tersebut terdapat kode basic program yang mentranslasikan kode program kedalam bahasa mesin,
sehingga bisa di baca oleh processor. Sedangkan compiler berfungsi untuk mentranslasikan kode program ke dalam bytecode, kemudian bytecode tersebut akan disimpan dalam memory, bytecode inilah yang dibaca dan di eksekusi langsung oleh processor [12].
2.3 Definisi Webserver
Web Server adalah sebuah aplikasi yang menangani protokol HTTP (Hypertext Transfer Protocol). Ketika sebuah webserver menerima request HTTP dari client, maka webserver tersebut akan mengirim respon kembali kepada client. Pada Gambar 2.3, menjelaskan bagaimana sebuah request yang di kirim menuju webserver, request yang di terima oleh webserver kemudian akan di serahkan menuju application server. Application server bertugas untuk mengolah data yang di terima dari webserver dan mengirimkan kembali data yang telah di olah menuju webserver, data yang telah selesai diolah akan disajikan oleh webserver kepada client, data tersebut tersaji dalam HTML, gambar, video, dan lain- lain melalui web browser [13] [14].
2.4 Definisi Benchmark
Benchmark webserver adalah sebuah proses untuk menguji kemampuan webserver dalam menangani beban webserver yang tinggi. Dalam proses benchmarking ada beberapa point yang di jadikan parameter, point tersebut berupa jumlah proses, waktu response, besar data yang ditangani oleh webserver. Untuk melakukan webserver benchmark, terdapat beberapa tools yang bisa digunakan yaitu, ApacheBench, Apache Jmeter, Curl-Loader, Httperf, Open STA [15].
2.5 Definisi HHVM
HHVM (HipHop Virtual Machine) adalah sebuah interpreter kode program PHP yang menerapkan JIT (Just In Time) compiler yang bekerja sebagai service dalam sebuah sistem [17]. HHVM di kembangkan pertama kali oleh Facebook, untuk meringankan kinerja server seiring bertambahnya pengguna Facebook.
HHVM merupakan pengembangan dari versi sebelumnya yang disebut HPHPc (HipHop Compiler) yang melakukan kompilasi program menjadi bahasa biner [18].
Gambar 2 menjelaskan alur kerja HPHPc dimana kode program akan di compile menjadi Bahasa C++ dan kemudian akan di terjemahkan ke Bahasa mesin. Dengan menggunakan HPHPc proses interpretasi kode program PHP tidak berjalan, karena kode program akan langsung di compile ke dalam Bahasa C++ oleh protokol AST (Abstract Syntax Tree) [18].
Gambar 2 Proses HPHPc
Namun pada implementasinya HPHPc menimbulkan masalah, hal ini di karenakan setiap kali Facebook akan mengganti kode programnya harus melewati langkah kompilasi yang sangat lama. Oleh sebab itu Facebook mengembangkan HHVM, dalam
3 interpretasinya HHVM menerapkan proses JIT (Just In Time) yang mengkompilasi kode program secara dinamis. Gambar 3 Menjelaskan kerja dari JIT Compiler, di mana tidak semua kode program akan di compile ketika di eksekusi, JIT hanya akan mengkompile kode program yang belum ada di dalam repo HHBC (HipHop Bytcode) [18].
Gambar 3 JIT (Just In Time) Compiler 2.6 Definisi PHP-FPM
PHP-FPM adalah sebuah alternative untuk FastCGI yang diimplementasikan untuk menangani server dengan beban berat atau High Load. PHP-FPM sendiri adalah sebuah protokol untuk Management Proccess yang berfungsi menjembatani program dengan webserver, PHP-FPM digunakan untuk webserver berbasis Nginx karena beban dari webserver lebih ringan dan dapat mengeksekusi beberapa request sekaligus dalam satu waktu [16].
Pada Gambar 4 menjelaskan alur kerja PHP-FPM, request yang dikirim oleh client akan di proses oleh PHP-FPM secara bersamaan dalam sebuah wadah yang di sebut pools. Akan tetapi pools tidak dapat menampung semua kode program untuk memproses request dari client, melainkan hanya beberapa kode program saja, oleh sebab itu kode program yang memproses request dari client akan secara bergantian masuk ke dalam pools hingga semua proses berhasil di penuhi [16].
Gambar 4 Proses Interpreter PHP-FPM
3. Metodologi Penelitian 3.1 Tinjauan Umum
PHP-FPM dan HHVM merupakan sebuah software yang berfungsi sebagai interpreter untuk mentranslasikan kode program PHP ke dalam bahasa mesin. dalam implementasinya PHP-FPM dan HHVM menerapkan fastCGI dalam proses interpretasinya, dengan menggunakan fastCGI sebagai environment web server, kode program dapat memproses request dari client dan memberikan response berupa data yang telah di olah kepada client melalui webserver.
Dari sekian banyak webserver yang ada. penulis menggunakan Nginx sebagai webserver yang akan digunakan dalam penelitian ini. menurut survey yang dilakukan netcraft terhadap 892,743,625 website 15%
diantaranya menggunakan Nginx, sedangkan 34.96%
lainnya menggunakan Apache [19]. Penulis menggunakan Nginx karena Nginx merupakan light- weight web server yang menggunakan asynchronous architecture untuk dapat menghandle banyak request secara serentak dengan efisien [20]. berbeda dengan apache yang menggunakan mod_PHP untuk untuk menyediakan response dinamis termasuk file statis didalamnya, nginx menyajikan static file dan konten dinamis secara terpisah, sehingga konsumsi RAM menjadi lebih efisien [21].
Keuntungan dari mengkombinasikan, interpreter PHP-FPM dan HHVM dengan web server Nginx adalah dapat menghemat resource server yang digunakan.
dengan proses yang lebih cepat dari pada menggunakan Apache dengan mod_PHP, yang menggunakan banyak memori dengan menangani file dinamis dan file statis secara bersamaan [21].
3.2 Alur Penelitian
Gambar 5 Alur Penelitian
Gambar 5 menjelaskan alur yang harus dilakukan dalam penelitian ini untuk memperoleh hasil yang sesuai dengan harapan, mulai dari identifikasi masalah, sampai dengan hasil dari solusi yang diterapkan untuk menganalisis tingkat optimalisasi penerapan HHVM dan PHP-FPM pada server, serta pemberian kesimpulan dan saran untuk penelitian lebih lanjut.
3.3 Rancangan Server
Dalam penelitian ini peneliti menggunakan Vultr sebagai provider server yang digunakan untuk menganalisa perbandingan optimasi server menggunakan PHP-FPM dan HHVM pada webserver. Gambar 6 menjelaskan schema penelitian yang menggunakan dua buah server, yaitu server_satu dan server_dua dimana server_satu akan di install PHP-FPM dan Nginx sedangkan server_dua akan di install HHVM dan Nginx, penulis menggunakan sebuah laptop untuk sebagai media remote server yang bertujuan untuk mengkonfigurasi ke dua server tersebut.
4 Gambar 6 Rancangan Server, Host1, Host2,
Laptop Remote 3.4 Metode Pengambilan data
Dalam langkah pemrosesan data, penulis akan mencari nilai rata-rata pemakaian resource pada tiap fungsi tersebut dengan menggunakan rumus.
𝑛 = 𝑁𝑖𝑙𝑎𝑖 𝑃𝑒𝑛𝑔𝑔𝑢𝑛𝑎𝑎𝑛 𝑅𝑒𝑠𝑜𝑢𝑟𝑐𝑒e 𝑡 = 𝑀𝑒𝑟𝑢𝑝𝑎𝑘𝑎𝑛 𝑈𝑟𝑢𝑡𝑎𝑛 𝐹𝑢𝑛𝑔𝑠𝑖
Dari nilai mean yang di dapatkan pada tiap interpreter penulis akan menggunakan nilai mean tersebut untuk menentukan nilai selisih pada variable yang digunakan
x = Nilai yang lebih besar y = Nilai yang lebih kecil
Untuk membandingkan kinerja proses HHVM terhadap kinerja proses PHP-FPM pada Variable profiling maka digunakan persamaan.
4. Hasil dan Pembahasan
4.1 Analisis Benchmark Kode Program PHP
Pada Gambar 7 dilihat hasil pengujian HHVM mempunyai waktu proses yang lebih singkat dari pada PHP-FPM. Hal ini dibuktikan total waktu HHVM (0.4598 detik) lebih kecil 83% bila di bandingkan dengan total waktu PHP-FPM. Nilai selisih yang di dapatkan dari nilai rata-rata fungsi yang di proses oleh masing-masing interpreter sebesar 2.286 detik. Artinya terdapat peredaan yang siginifikan antara kedua interpreter tersebut dimana HHVM 497% lebih cepat dari pada PHP-FPM dalam memproses script benchmark zend.
Gambar 7 Hasil Benchmark Zend 4.2 Analisis Request / Second
Gambar 8 Hasil Benchmark Request/Second 4.3 Analisa Transfer Rate
Gambar 9 Hasil Benchmark Transfer Rate 4.4 Analisa Time per Request
Gambar 10 Hasil Benchmark Time/Request 4.5 Analisa Maximum Time Taken
5 Gambar 11 Hasil Benchmark Maximum Time
Taken 4.6 Analisa Penggunaan CPU 4.6.1 Penggunaan CPU User
Gambar 12 Hasil Benchmark CPU User 4.6.2 Penggunaan CPU System
Gambar 13 Hasil Benchmark CPU System 4.7 Analisa Penggunaan Memory
Gambar 14 Hasil Benchmark Resource RAM 5. Kesimpulan Dan Saran
5.1 Kesimpulan
Bedasarkan uraian dan pembahsan keseluruhan materi pada bab-bab sebelumnya mengenai “ANALISIS PENERAPAN HHVM DAN PHP-FPM SEBAGAI INTERPRETER KODE PROGRAM PHP”, maka
penulis dapat mengambil beberapa kesimpulan mengenai penelitian tersebut, diantaranya
1. Bedasarkan data analisis, interpreter HHVM memiliki waku 5 kali lebih singkat dalam memproses script benchmark zend dibandingkan dengan
interpreter PHP-FPM
2. Bedasarkan data analisis, interpreter HHVM memiliki waktu yang lebih singkat pada saat proses profiling pada variable Walltime dan CPU Time.
3. Bedasarkan data analisis pada saat melakukan profiling, HHVM mengkonsumsi ram 22% lebih besar dibandingkan dengan interpreter PHP-FPM.
4. Pengujian rata-rata jumlah request/second menghasilkan jumlah request/second PHP-FPM lebih rendah 67% dibandingkan dengan HHVM.
5. Pengujian rata-rata transfer rate menghasilkan nilai transfer rate PHP-FPM
lebih rendah 63% dibandingkan dengan PHP-FPM.
6. Pengujian rata-rata time per request, HHVM memiliki nilai 67% waktu lebih singkat dibandingkan PHP-FPM.
7. Pada pengujian maximum time taken, HHVM memiliki waktu yang lebih
singkat sebesar 66% dibandingkan dengan PHP-FPM.
8. Data dari pengujian konsumsi CPU User memicu alert pada jumlah koneksi diatas 500. PHP-FPM mencapai alert Critical sedangkan HHVM mencapai
alert Warning.
9. Data dari pengujian konsumsi CPU System, menunjukkan HHVM mengkonsumsi CPU User lebih besar dibandingkan dengan PHP-FPM.
10. Dari data pengujian konsumsi RAM, HHVM memiliki nilai yang lebih tinggi sehingga menghasil alert Becarefull karena indikator RAM menunjukkan angka lebih dari 60%.
5.2 Saran
Berdasarkan hasil penelitian mengenai “ANALISIS PENERAP AN HHVM DAN PHP-FPM SEBAGAI INTERPRETER KODE PROGRAM PHP” yang telah dilakukan, ada beberapa saran sebagai bahan pertimbangan untuk penelitian atau penggunaan yang selanjutnya, di antaranya:
1. Penelitian dapat dikembangkan dengan mengubah base sistem operasi server yang digunakan, seperti Fedora, CentOS, CoreOS maupun jenis sistem
operasi yang lainnya.
2. Penelitian selanjutnya dapat dikembangkan dengan menggunakan monitoring software yang lainnya untuk memperoleh data yang lebih banyak dan lebih
valid lagi
3. Penelitian dapat dikembangkan dengan menggunakan web server lainnya seperti Apache2.
4. Penelitian dapat di kembangkan dengan interpreter kode program PHP lainya seperti PHP7 yang di rilis akhir bulan November 2015.
5. PHP-FPM sebaiknya tidak digunakan untuk mengatasi jumlah request yang besar di karenakan kemampuan menghandle PHP-FPM kurang baik.
6. PHP-FPM sebaiknya digunakan untuk aplikasi dengan skala kecil dengan request yang sedikit, contoh:
aplikasi kasir, aplikasi pembukuan skala lokal, dll
6 7. HHVM sebaiknya tidak digunakan untuk aplikasi skala kecil dikarenakan HHVM memakan resource yang lebih besar di bandingkan PHP-FPM, untuk menghindari pemborosan spesifikasi server yang dipakai.
Daftar Pustaka
[1] Liam Quin. (2005, Apr.) w3.org. [Online].
http://www.w3.org/CGI/
[2] Matthias Gelbmann. (2015, Januari) W3-Tech.
[Online].
http://w3techs.com/blog/entry/web_technologies_o f_the_year_2014
[3] Timothy Sergeant. (2014, Oktober) www.timsergeant.com. [Online].
http://www.timsergeant.com/files/hhvm/timothy_s ergeant_honours _thesis.pdf
[4] Simon Kemp. (2015, Agustus) wearesocial.org.
[Online].
http://wearesocial.sg/blog/2015/08/global-statshot- august-2015/
[5] Jucimar Maia da Silva, "COMPARING THE PERFORMANCE OF JAVA, ERLANG AND SCALA IN WEB 2.0 APPLICATIONS,"
COMPARING THE PERFORMANCE OF JAVA, ERLANG AND SCALA IN WEB 2.0 APPLICATIONS, p. 137, 2013.
[6] Paul Heinlein. (1998, Oct.) en.wikipedia.org.
[Online]. http://www.linuxjournal.com/article/2607 [7] Tobby Banerjee. (2014, Desember) Flockport.
[Online]. https://www.flockport.com/deploy- wordpress-with-hhvm-and-php- fpm-as-fallback/
[8] Allan MacGregor. (2013, Juli) Coderoncode.com.
[Online].
http://coderoncode.com/hhvm/programming/devel opment/vagrant/2 013/07/24/introduction- hhvm.html
[9] John Bickar. (2011, November) Stanford Tech
Commons. [Online].
https://techcommons.stanford.edu/topics/web- development/benchmarking-site-performance- apachebench
[10] Bill Kleyman. (2012, Agustus) Data Center
Knowledge. [Online].
http://searchservervirtualization.techtarget.com/def inition/hyperviso r
[11] Jason Podgorny. (2013, April) AccurIT Solutions.
[Online].
http://www.accuritsolutions.com/blog/how-does- virtualization- work/
[12] Pasteur Institute. (2008, Februari) pasteur.fr.
[Online].
https://www.pasteur.fr/formation/infobio/python/ch 05s02.html
[13] Tony Sintes. (2002, Agusutus) Java World.
[Online].
http://www.javaworld.com/article/2077354/learn-
java/app-server- web-server-what-s-the- difference.html
[14] Bryan Bibat. (2012, Agustus) Bryan Bibat Blog.
[Online].
http://blog.bryanbibat.net/2012/08/14/speed-up- your-websites-with- page-caching/
[15] Jarrod. (2012, September) Root Users. [Online].
https://www.rootusers.com/web-server- performance-benchmark/
[16] Schneller shoppen. (2012, Januari) Linux Magazine. [Online]. http://www.linux- magazin.de/Ausgaben/2012/01/Magento-Hosting [17] Joel Garcia jr. (2014, April) Medium. [Online].
https://medium.com/@joelgarciajr84/do-you- know-what-is-hhvm- f0e92dbb0798
[18] Jason Evans. (2011, Desember) Facebook
Engineering. [Online].
https://www.facebook.com/notes/facebook- engineering/the-hiphop- virtual- machine/10150415177928920
[19] Netcraft. (2015, September) Netcraft. [Online].
http://news.netcraft.com/archives/2015/09/16/septe mber-2015-web- server-survey.html
[20] Pingdom. (2010, Februari) Pingdom Blog.
[Online].
http://royal.pingdom.com/2010/02/23/nginx-the- little-russian-web- server-taking-on-the-giants/
[21] Benson Wong. (2012, Juli) Quora. [Online].
https://www.quora.com/Why-do-developers-use- nginx-along-with- Apache
Biodata Penulis
Rizqon Sadida, memperoleh gelar Sarjana Komputer (S.Kom), Jurusan Teknik Informatika STMIK AMIKOM Yogyakarta, lulus tahun 2015.
Andi Sunyoto, memproleh gelar Sarjana Komputer (S.
Kom), Jurusan Sistem Informasi STMIK AMIKOM Yogyakarta, lulus tahun 2003. Memperoleh gelar magister komputer (M. Kom), Jurusan Ilmu Komputer Fakultas MIPA UGM, lulus tahun 2007. Saat ini menjadi dosen tetap STMIK AMIKOM Yogyakarta.