Kecepatan situs web Facebook menempati peringkat sebagai salah satu tugas perusahaan yang paling penting. Pada tahun 2009, kami berhasil meningkatkan kecepatan situs Facebook hingga tiga kali lipat. Dan beberapa inovasi penting dari tim insinyur kamilah yang mewujudkan hal ini. Dalam artikel ini, saya akan memperkenalkan Anda pada salah satu saus rahasia kami, teknologi dasar hebat yang kami sebut BigPipe .
BigPipe adalah sistem layanan web dinamis dasar yang didesain ulang. Ide umumnya adalah memecah halaman web menjadi bagian-bagian kecil yang disebut Pagelets, dan kemudian membangun saluran melalui server web dan browser untuk mengelola eksekusinya pada tahapan yang berbeda. Hal ini mirip dengan proses eksekusi pipeline pada sebagian besar mikroprosesor modern: beberapa pipeline instruksi melewati unit eksekusi prosesor yang berbeda untuk mencapai performa optimal. Meskipun BigPipe merupakan desain ulang dari proses infrastruktur jaringan layanan yang ada, hal ini tidak memerlukan perubahan pada browser web atau server yang ada, dan diimplementasikan sepenuhnya menggunakan PHP dan JavaScript.
motivasi
Untuk lebih memahami BigPipe, kita perlu melihat sistem layanan web dinamis yang ada. Sejarahnya dapat ditelusuri kembali ke masa-masa awal World Wide Web, namun sekarang tidak banyak berubah dibandingkan masa-masa awal. Situs web modern memiliki efek dan interaktivitas yang jauh lebih dinamis dibandingkan 10 tahun yang lalu, namun sistem layanan web tradisional telah lama tidak mampu mengimbangi persyaratan kecepatan Internet saat ini. Dalam model tradisional, siklus hidup permintaan pengguna adalah sebagai berikut:
Model tradisional sangat tidak efisien di situs web modern karena urutan operasi banyak sistem tidak dapat saling tumpang tindih. Beberapa teknik optimasi seperti penundaan pemuatan JavaScript dan pengunduhan paralel telah banyak diadopsi oleh komunitas online untuk mengatasi beberapa keterbatasan. Namun, pengoptimalan ini jarang mengatasi hambatan yang disebabkan oleh urutan eksekusi server web dan browser. Saat server web sibuk membuat halaman, browser menganggur, membuang-buang siklusnya tanpa melakukan apa pun. Ketika server web selesai membuat halaman dan mengirimkannya ke browser, browser menjadi penghambat kinerja dan server web tidak dapat membantu. Dengan tumpang tindih waktu pembuatan server web dan waktu rendering browser, kami tidak hanya dapat mengurangi penundaan waktu akhir, namun juga memungkinkan halaman web menampilkan area yang terlihat oleh pengguna lebih awal, sehingga sangat mengurangi persepsi pengguna tentang penundaan.
Hal ini sangat berguna terutama untuk situs kaya konten seperti Facebook, yang waktu kemunculan server webnya tumpang tindih dengan waktu rendering browser. Halaman web Facebook pada umumnya berisi data dari berbagai sumber: daftar teman, pembaruan teman, iklan, dll. Dalam mode rendering halaman web tradisional, pengguna harus menunggu hingga data kueri dikembalikan dan file akhir dibuat lalu dikirim ke komputer pengguna. Penundaan kueri apa pun akan memperlambat seluruh pembuatan file akhir.
Cara kerja BigPipe
Untuk memanfaatkan paralelisme antara server web dan browser, BigPipe pertama-tama memecah halaman web menjadi beberapa Pagelet yang dapat dipanggil. Sama seperti mikroprosesor pipa yang membagi siklus hidup suatu instruksi menjadi beberapa tahap (seperti "pengambilan instruksi", "penguraian kode instruksi", "eksekusi", "tulis kembali untuk mendaftar", dll.), proses pembuatan halaman BigPipe dibagi menjadi tahapan berikut :
Sumber: isd