Motivasi
- Jaringan global Cloudflare menangani lebih dari 60 juta permintaan HTTP per detik
- Mengurangi penggunaan CPU dan meningkatkan kapasitas pemrosesan CDN dengan menggunakan crate Rust open source baru
- Pingora adalah inti dari layanan proksi berbasis Rust milik Cloudflare, dan telah dirilis sebagai open source
- Layanan Pingora-origin berperan meneruskan permintaan pengguna ke tujuan sebenarnya
- Saat permintaan meninggalkan Cloudflare, diperlukan proses untuk menghapus informasi internal
- Proses ini terjadi sangat sering dan menyumbang 1,7% dari penggunaan CPU
Benchmarking
- Menggunakan crate Rust Criterion untuk mengukur performa fungsi dalam satuan nanodetik
- Fungsi
clear_internal_headers awalnya memerlukan rata-rata 3.65µs
Mengurangi operasi baca
- Mengurangi operasi baca dengan membalik arah penghapusan header
- Perubahan ini meningkatkan waktu eksekusi fungsi dari 3.65µs menjadi 1.53µs
- Menurunkan penggunaan CPU dari 1,71% menjadi 0,717%
Pencarian struktur data
- Mencoba metode menyimpan dan mencari header internal menggunakan hash map
- Waktu baca hash map bersifat linear, sebanding dengan panjang key
- Mencoba struktur data lain seperti sorted set atau state machine
- Implementasi yang menggunakan regular expression dua kali lebih lambat daripada hash map
Menggunakan trie
- Trie adalah struktur data pohon yang digunakan untuk pencarian prefiks atau sistem autocomplete
- Trie dapat dengan cepat mengidentifikasi kasus ketika sebuah string tidak termasuk
- Implementasi trie yang sudah ada lebih lambat daripada hash map
- Cloudflare mengembangkan implementasi trie hasil optimasi mereka sendiri, yaitu trie-hard
Trie Hard
- trie-hard menyimpan relasi antar node dalam bit-bit integer dan menggunakan memori secara kontigu untuk meningkatkan kecepatan
- Menurunkan waktu eksekusi fungsi
clear_internal_headers menjadi 0.93µs
- Menurunkan penggunaan CPU dari 1,71% menjadi 0,43%
- Di lingkungan produksi nyata, performa trie-hard sesuai dengan hasil benchmark
Kesimpulan
- Penting untuk mengidentifikasi dan mengoptimalkan bagian kode yang lambat
- Optimasi kecil yang terakumulasi dapat menghasilkan peningkatan performa yang besar
- Cloudflare's connectivity cloud menyediakan fungsi seperti perlindungan jaringan, akselerasi aplikasi internet, dan pertahanan terhadap serangan DDoS
Ringkasan GN⁺
- Cloudflare mengurangi penggunaan CPU dan meningkatkan kapasitas pemrosesan CDN melalui crate open source baru berbasis Rust
- Dengan mengoptimalkan proses penghapusan header internal pada layanan Pingora-origin, penggunaan CPU berkurang 1,28%
- Dengan mengembangkan implementasi trie hasil optimasi mereka sendiri bernama trie-hard, performa meningkat secara signifikan
- Artikel ini menekankan pentingnya optimasi kode dan pemilihan struktur data, serta menunjukkan bahwa optimasi kecil dapat menghasilkan peningkatan performa yang besar
- Proyek dengan fungsi serupa antara lain NGINX dan HAProxy
1 komentar
Opini Hacker News
Ada berbagai spekulasi tentang cara Cloudflare menyimpan dan menghapus header internal
Awalnya mengira pemetaan karakter UTF-8 ke bitmask tidak efisien
a-zdan enam karakter khususA-Zdan enam karakter khususAda pertanyaan apakah optimisasi Cloudflare ini benar-benar sepadan
Tidak terlalu paham optimisasi struktur data, tetapi terkejut karena hash table langsung dikesampingkan
Menggunakan struktur data fancy untuk menyusun item yang akan dihapus lalu menghapusnya dari header map berdasarkan itu
remove_headerAkhirnya muncul juga postingan blog yang menggunakan trie
Penasaran apakah mereka mencoba Bloom Filter kecil
Penasaran apakah mereka mencoba perfect hash table untuk kasus pencocokan himpunan item statis
Optimalisasinya menarik
Penasaran mengapa crate regex tidak bekerja lebih baik