Teknik untuk Website dengan Performa Tinggi

Minggu, 08 November 2009

Sudah merasa websitenya mulai banyak yang mengakses dan terasa lambat? atau ada keinginan untuk mengeksplorasi teknik-teknik optimasi website, yang tentunya bertujuan untuk mendapatkan performa yang paling optimal.
Untuk teknik-teknik yang akan dibahas ini, environment yang saya gunakan adalah Linux-Apache-Mysql-Php (LAMP). kolaborasi opensource yang menurut saya sudah terbukti handal untuk server-server dengan load yang tinggi. Untuk yang masih menggunakan windows, pertimbangkanlah untuk migrasi :)
Ada beberapa tahap dan pendekatan dari sisi teknologi yang bisa dilakukan untuk mencapai tujuan ini. selain tuning konfigurasi untuk setiap aplikasi, kita bisa juga install aplikasi pihak ketiga ataupun menggunakan fitur-fitur tambahan yang telah tersedia dari aplikasi tersebut.
*artikel ini hanya melingkupi deskripsi singkat dari setiap teknik. belum membahas secara teknis maupun komparasi kelebihan dan kekurangan antar produk.
Cache

  • PHP Accelerator / Opcode Cache: cara kerja accelerator ini adalah dengan mengoptimalkan proses kompilasi skrip. pertama-tama, hasil proses kompilasi suatu skrip akan disimpan pada memory, apabila ada skrip yang memanggil fungsi/perintah yang sama maka PHP dapat langsung memanggil hasil kompilasi tersebut dari memori. sehingga waktu yang digunakan untuk meng-compile skrip PHP akan lebih pendek dibandingkan apabila harus terus mengulangi proses kompilasi dari awal untuk skrip PHP yang sama. selain itu, teknik ini akan mengurangi load server secara keseluruhan. Manakah yang lebih baik? mungkin sudah banyak website-website yang membahas hasil benchmark antar PHP accelerator tersebut, dengan hasil benchmark yang berbeda-beda. tapi menurut saya, accelerator yang terbaik adalah hasil dari riset kita sendiri dengan platform dan framework yang kita gunakan. ada satu kasus xCache memberikan performa yang baik, tapi di kasus yang lain eAccelerator dapat menurunkan load server secara drastis.
  • Memcached: umumnya, memcached berfungsi untuk me-cache hasil query database. cache tersebut akan disimpan dalam memory, sehingga memiliki waktu respon lebih cepat ketimbang file-file cache yang disimpan di disk. lebih lanjut, selain hasil query database, memcache dapat pula me-cache object atau juga isi dari tipe data primitif (array, string, integer).
  • Penggunaan memcached akan lebih terasa apabila kita me-query database dengan record berjumlah besar dan diquery berulang-ulang kali. apabila data telah tersimpan di memcached, aplikasi akan mendapatkan hasil query lebih cepat karena tidak perlu melakukan koneksi ke database terlebih dahulu. dan dampak langsungnya, akan mengurangi jumlah koneksi di mysql dan menjaga agar load di database server tidak tinggi.
  • File Statik / HTML: Web server lebih cepat merespon rekues file-file statik (jpeg, js, css) atau file html untuk content. dan apabila aplikasi webnya menggunakan framework (codeigniter, symfony, cakePhp), CMF (drupal) atau CMS (Joomla, PhpNuke), biasanya telah tersedia module / class / addon untuk teknik cache jenis ini. file-file cache yang dihasilkan aplikasi tersebut akan disimpan di disk, maka pastikan masih ada ruang di disk agar dapat menyimpan file-file cache tersebut.
  • Reverse Proxy: Mungkin lebih familiar proxy server yang diinstall di gateway atau server yang khusus me-cache halaman-halaman web yang sudah dipernah dikunjungi sebelumnya. istilah sebenarnya untuk hal itu adalah forward proxy. kebalikannya, reverse proxy melakukan cache langsung ke webserver, tidak dari sisi user. dan apabila ada user yang rekues halaman web, reverse proxy akan mencek direktori cache-nya terlebih dahulu dan apabila halaman yang direkuesnya tidak ada atau sudah expire, maka reverse proxy akan meneruskan rekues tersebut ke webserver dan kemudian mengirim hasil rekues kembali ke user.
    • Contoh reverse proxy seperti Apache (mod_proxy), Nginx, Squid lihat gambar klik di sini 
     
     
    Balancing / Cluster
  • Web Load Balancing: Apabila load di webserver sudah semakin tinggi dan upgrade hardware sudah tidak memungkinkan, mungkin sudah saatnya mempertimbangkan menambah webserver lagi. balancing bisa juga dilakukan dengan menambah server dengan spesifikasi yang tidak terlalu tinggi tapi dengan jumlah yang banyak.
Balancer ini terdapat versi software (Nginx) dan hardware (F5, Barracuda). masing-masing aplikasi atau device memiliki fitur-fiturnya sendiri. tetap, fungsi dasarnya yakni untuk mendistribusikan setiap rekues ke server webnya.
  • Database Cluster: koneksi yang lambat ke database dapat mempengaruhi halaman web secara keseluruhan. umumnya, ada dua jenis cluster di database. master-master dan master-slave. salah satu tujuan utama dari clustering database yakni untuk setiap transaksi database akan dibagi tugasnya ke server-server database yang dicluster, sehingga dapat mengurangi waktu yang dibutuhkan untuk melakukan koneksi antara webserver dengan database server, dan hasilnya webserver akan lebih cepat menghasilkan halamannya. gambar klik di sini
Masih banyak lagi teknik-teknik untuk mendapatkan performa yang terbaik untuk server dalam melayani traffic yang tinggi. dan artikel ini hanya memberikan gambaran singkat dari teknik-teknik tersebut. berikutnya akan dibahas secara terpisah setiap teknik tersebut, lebih detail.