Tantangan
besar bagi engineer Facebook adalah menjaga agar situs tetap hidup dan
berjalan lancar meskipun menangani hampir setengah miliar pengguna
aktif. Artikel ini mencoba melihat beberapa perangkat lunak dan teknik
yang mereka gunakan untuk mencapai hal tersebut.
Skala tantangan Facebook
Sebelum
kita masuk ke hal yang lebih detail, berikut adalah beberapa fakta
sebagai gambaran tentang skala tantangan yang harus diurusi Facebook :
- Facebook melayani 570 miliar tampilan halaman per bulan (menurut Google Ad Planner).
- Foto di Facebook lebih banyak daripada gabungan semua situs foto lainnya.
- Lebih dari 3 milyar foto di-upload setiap bulannya.
- Facebook melayani 1,2 juta foto per detik. Ini tidak termasuk gambar dilayani oleh CDN Facebook.
- Lebih dari 25 miliar konten (status update, komentar, dll) yang di-share setiap bulan.
- Facebook memiliki lebih dari 30.000 server (jumlah ini adalah data tahun lalu!)
Software di Balik Facebook
Dalam
beberapa hal Facebook masih merupakan situs yang berbasis LAMP
(sejenisnya), namun diubah dan diperluas operasinya dengan memasukkan
banyak elemen dan layanan lain, dan dimodifikasi pendekatannya menjadi
seperti yang ada saat ini.
Sebagai contoh:
- Facebook masih menggunakan PHP, tetapi telah dibuat compilernya sehingga dapat diubah menjadi kode asli pada server webnya, sehingga meningkatkan kinerja.
- Facebook menggunakan Linux, tetapi telah dioptimalkan untuk keperluan sendiri (terutama dalam hal jaringan).
- Facebook menggunakan MySQL, tetapi terutama sebagai key-value persistent storage, moving joins and logic ke server web karena optimasinya lebih mudah dilakukan di sana (di "sisi lain" dari memcached).
Lalu
ada custom-written systems, seperti Haystack, sebuah object store yang
sangat scalable digunakan untuk melayani foto-foto di Facebook yang
banyak sekali, atau Scribe, sistem logging yang dapat beroperasi pada
skala Facebook.
Sekarang
mari kita bahas (sebagian dari) perangkat lunak (software) yang
digunakan Facebook dalam menyediakan situs jejaring sosial terbesar di
dunia.
Memcached
Memcached
saat ini menjadi salah satu perangkat lunak paling terkenal di
internet. Ia merupakan sistem caching memori terdistribusi yang
digunakan Facebook (dan banyak situs lainnya) sebagai lapisan caching
antara server web dan server MySQL (karena akses database relatif
lambat).
Selama
bertahun-tahun, Facebook telah berkali-kali melakukan optimasi pada
memcached dan perangkat lunak sekitarnya (seperti mengoptimalkan
penumpukan jaringan).
Facebook
menjalankan ribuan server memcached dengan puluhan terabyte data cache
pada satu titik waktu. Kemungkinan ini merupakan instalasi memcached
terbesar di dunia.
HipHop for PHP
PHP,
sebagai scripting language, relatif lambat bila dibandingkan dengan
kode yang berjalan secara native di server. HipHop mengubah PHP menjadi
kode C++ yang kemudian dapat dikompilasi untuk menghasilkan performa
yang lebih baik.
Hal
ini telah memungkinkan Facebook untuk mengoptimalkan server webnya
karena ia sangat bergantung pada PHP untuk melayani konten.
Sebuah
tim kecil engineer (awalnya hanya tiga orang) di Facebook menghabiskan
18 bulan mengembangkan HipHop, dan sekarang telah di produksi.
Haystack
Haystack
adalah sistem penyimpanan/pencarian foto berkinerja tinggi pada
Facebook (Sesungguhnya Haystack adalah sebuah penyimpanan object,
sehingga tidak menyimpan foto). Ia mengerjakan kerja berat, ada lebih
dari 20 miliar foto yang diunggah di Facebook, dan masing-masing
disimpan dalam empat resolusi yang berbeda, menghasilkan lebih dari 80
miliar foto.
Dan
hal tersebut bukan hanya tentang kemampuan menangani miliaran foto,
kinerja juga sangatlah penting. Seperti yang telah disebutkan
sebelumnya, Facebook melayani sekitar 1,2 juta foto per detik, angka
yang tidak termasuk gambar/foto dilayani oleh CDN Facebook.
BigPipe
BigPipe
adalah sistem layanan halaman web dinamis yang dikembangkan oleh
Facebook. Facebook menggunakannya untuk melayani setiap halaman web
dalam beberapa bagian (disebut "pagelets") untuk menghasilkan kinerja
yang optimal.
Misalnya,
jendela chat diambil secara terpisah, feed berita diambil secara
terpisah, dan seterusnya. Pagelets ini dapat diambil secara paralel,
sehingga kenerja tetap terjaga, dan juga memungkinkan user mengakses
situs dengan baik meskipun beberapa bagian dinonaktifkan atau rusak.
Cassandra
Cassandra
adalah sistem open source yang berfungsi sebagai menejemen database
terdistribusi. Facebook kemudian mengembangkannya dengan NoSQL dan
menggunakannya untuk fitur Inbox Search. Selain facebook, sejumlah
layanan lain juga menggunakannya, misalnya Digg.
Scribe
Scribe
adalah sistem logging fleksibel yang digunakan secara internal oleh
Facebook untuk banyak tujuan. Ia dikembangkan untuk menangani logging
pada Facebook, dan secara otomatis menangani kategori logging baru yang
muncul.
Hadoop dan Hive
Hadoop
adalah implementasi map-reduce open source yang memungkinkan untuk
melakukan perhitungan data dalam jumlah besar. Facebook menggunakannya
untuk analisis data (dan seperti yang kita ketahui, Facebook memiliki
data dalam jumlah yang besar).
Hive
dikembangkan oleh Facebook, dan dengannya dimungkinkan untuk
menggunakan query SQL terhadap Hadoop, sehingga lebih mudah bagi
non-programmer untuk menggunakannya.
Baik Hadoop dan Hive adalah open source dan digunakan oleh sejumlah layanan besar, misalnya Yahoo dan Twitter.
Thrift
Facebook
menggunakan beberapa bahasa yang berbeda untuk beberapa layanannya. PHP
digunakan untuk front-end, Erlang digunakan untuk Chat, Java dan C + +
juga digunakan di beberapa tempat (dan mungkin bahasa lainnya juga).
Thrift
adalah cross-language framework yang dikembangkan secara internal untuk
mengikat semua bahasa yang berbeda tersebut, sehingga memungkinkan
komunikasi antar bahasa tersebut. Hal ini memudahkan Facebook untuk
pengembangan lintas-bahasanya.
Varnish
Varnish
adalah akselerator HTTP yang bertindak sebagai penyeimbang beban dan
juga konten cache yang kemudian dapat dilayani secepat kilat. Facebook
menggunakan Varnish untuk melayani foto dan gambar profil, penanganan
miliaran permintaan setiap hari. Seperti hampir semua yang digunakan
Facebook, Varnish adalah open source.
Hal-hal lain yang membantu Facebook berjalan lancar
Kita
telah menyebutkan beberapa perangkat lunak yang membangun sistem
Facebook dan membantu layanannya dengan benar. Tetapi penanganan sistem
sebesar itu merupakan tugas yang kompleks. Berikut adalah hal-hal yang
dilakukan Facebook untuk menjaga agar layanannya tetap berjalan lancar.
Gradual releases and dark launches
Facebook
memiliki sistem yang mereka sebut Gatekeeper yang memungkinkan mereka
menjalankan kode yang berbeda untuk sekumpulan pengguna yang berbeda.
Ini memungkinkan Facebook untuk melakukan rilis bertahap fitur-fitus
baru, pengujian A/B, mengaktifkan fitur tertentu hanya untuk karyawan
Facebook, dll.
Gatekeeper
juga memungkinkan Facebook untuk melakukan sesuatu yang disebut "dark
launches", yaitu untuk mengaktifkan unsur-unsur dari fitur tertentu di
balik layar sebelum ditayangkan (tanpa sepengetahuan pengguna).
Hal
ini berfungsi sebagai tes nyata dan membantu mengekspos kemacetan dan
masalah-masalah lain sebelum fitur tersebut secara resmi diluncurkan.
Dark launches biasanya dilakukan dua minggu sebelum peluncuran resmi.
Profiling of the live system
Facebook
memonitor sistemnya secara cermat dan juga memantau kinerja setiap
fungsi PHP dalam live production environment. Profiling PHP ini
dilakukan dengan menggunakan sebuah tool open source yang bernama
XHProf.
Gradual feature disabling for added performance
Jika
Facebook mengalami masalah kinerja, ada sejumlah tuas yang secara
bertahap menonaktifkan fitur kurang penting untuk meningkatkan kinerja
fitur utama Facebook.
Kalau
kita perhatikan, ternyata Facebook banyak menggunaka open source untuk
membangun sistemnya. Tidak hanya menggunakan, Facebook juga memberikan
kontribusi untuk perangkat lunak open source seperti Linux, memcached,
MySQL, Hadoop, dan lainnya.
Lebih
daripada itu, Facebook juga menjadikan software-software yang
dikembangkan secara internal oleh mereka sebagai open source. Contoh
proyek open source yang berasal dari Facebook adalah HipHop, Cassandra,
Thrift dan Scribe.
Daftar software open source di mana Facebook terlibat dalam pengembangannya dapat di lihat di halaman Facebook's Open Source.
Sumber :
No comments:
Post a Comment