Skip to main content

Command Palette

Search for a command to run...

Peningkatan Kinerja 2x Lipat dan Hemat $300 Ribu: Kisah Penulisan Ulang Layanan Kritis dengan Rust

Updated
4 min read
Peningkatan Kinerja 2x Lipat dan Hemat $300 Ribu: Kisah Penulisan Ulang Layanan Kritis dengan Rust

Di dunia sistem dengan lalu lintas tinggi, kesuksesan sering kali membawa tantangannya sendiri. Hal ini dialami oleh salah satu layanan pembayaran inti di TikTok, yang awalnya dibangun dengan bahasa pemrograman Go. Seiring pertumbuhan basis pengguna TikTok LIVE, beban CPU pada layanan ini terus meningkat, menyebabkan alarm stabilitas terus-menerus berbunyi.

Menghadapi dilema ini, tim rekayasa mereka mengambil langkah berani: menulis ulang bagian yang menjadi biang keladi masalah performa dengan bahasa pemrograman Rust. Hasilnya luar biasa, menghasilkan peningkatan kinerja 2x lipat dan proyeksi penghematan biaya cloud tahunan mendekati $300.000.1

Latar Belakang Masalah: Korban dari Kesuksesan Sendiri

Layanan pembayaran inti yang dibangun dengan Go telah berfungsi dengan sangat baik selama bertahun-tahun. Namun, beberapa endpoint API spesifik—yang bertanggung jawab untuk mengambil saldo dan statistik pengguna—memiliki lalu lintas yang sangat tinggi dan intensif secara komputasi.

Seiring melonjaknya lalu lintas, endpoint ini menjadi penghambat utama kinerja CPU.2 Tim terpaksa terus-menerus menambah armada server untuk memenuhi permintaan, yang membuat biaya operasional membengkak. Analisis mendalam menunjukkan bahwa sebagian besar waktu CPU dihabiskan dalam fungsi-fungsi spesifik ini, sehingga optimalisasi umum pada kode Go kemungkinan besar hanya akan memberikan manfaat kecil.

Proses Eksekusi: Tiga Langkah Menuju Produksi

Pendekatan yang diambil sangat metodis dan hati-hati, dibagi menjadi tiga fase utama:

  1. Penulisan Ulang yang Tertarget: Alih-alih menulis ulang seluruh layanan yang berisiko tinggi, tim memilih pendekatan "serangan bedah". Mereka memutuskan untuk menulis ulang hanya beberapa endpoint API yang paling membebani CPU dengan Rust, sebuah bahasa yang terkenal dengan performa mendekati bare-metal dan keamanan memori.3 Sisa layanan tetap menggunakan Go.

  2. Pengujian Kebenaran (Correctness Testing): Sebelum memikirkan performa, prioritas utama adalah kebenaran data. Layanan Rust yang baru di-deploy dalam "mode bayangan" (shadow mode). Selama berminggu-minggu, layanan baru ini menerima salinan lalu lintas produksi langsung dan berjalan secara paralel dengan layanan Go yang asli. Tim secara cermat membandingkan respons dari layanan Rust dengan layanan Go untuk setiap permintaan. Hanya setelah memastikan konsistensi data 100%, mereka melanjutkan ke tahap berikutnya.

  3. Uji Stres (Stress Testing): Setelah kebenaran data terverifikasi, saatnya menguji performa. Dua klaster identik disiapkan di lingkungan produksi: satu menjalankan layanan Go asli, yang lain menjalankan layanan Rust baru. Menggunakan dataset lebih dari 16.000 ID pengguna anonim, kedua klaster diberi beban yang sama dan terus ditingkatkan hingga layanan mulai gagal. Metrik yang dipantau adalah QPS (Queries Per Second), latensi, penggunaan CPU, dan penggunaan memori.

Hasil yang Melampaui Harapan

Hasil dari uji stres bahkan lebih baik dari yang diharapkan. Secara keseluruhan, layanan Rust menunjukkan kinerja yang jauh lebih unggul.

  • Peningkatan Throughput: Untuk endpoint paling kritis, layanan Go yang lama menyerah pada sekitar 85.000 QPS. Layanan Rust baru, dengan perangkat keras yang sama persis, mampu menangani lebih dari 150.000 QPS—peningkatan sekitar 1,8x. Untuk endpoint kunci lainnya, perbedaannya bahkan lebih mencolok: layanan Go mencapai puncak 105.000 QPS, sementara layanan Rust mencapai 210.000 QPS—peningkatan kinerja 2x lipat.

Berikut perbandingan pada beban tinggi 80.000 QPS:

Metrik

Layanan Go Lama

Layanan Rust Baru

Peningkatan

Penggunaan CPU

78.3%

52.0%

33.6% lebih rendah

Penggunaan Memori

7.4%

2.07%

72% lebih rendah

Latensi p99

19.87 md

4.79 md

76% lebih rendah

Peningkatan kinerja ini secara langsung menghasilkan penghematan biaya yang besar. Dengan mampu menangani lalu lintas dua kali lipat per mesin, jumlah inti komputasi yang dibutuhkan dapat dikurangi secara drastis. Analisis akhir menunjukkan pengurangan lebih dari 400 inti vCPU, yang mengarah pada proyeksi penghematan biaya infrastruktur tahunan lebih dari $300.000.

Pelajaran yang Diambil

Proyek ini menegaskan kembali prinsip rekayasa yang krusial: gunakan alat yang tepat untuk pekerjaan yang tepat. Ini bukanlah cerita tentang "Rust lebih baik dari Go," melainkan tentang kematangan rekayasa dan optimalisasi strategis.

Go tetap menjadi pilihan ideal untuk 95% layanan di TikTok karena produktivitas pengembangnya yang luar biasa. Kesuksesan dengan Go-lah yang memungkinkan layanan ini menjadi begitu populer sehingga memerlukan tingkat optimalisasi ini.

Pelajaran utamanya adalah bahwa keunggulan rekayasa sejati terletak pada pemahaman mendalam tentang alat dan trade-off-nya. Go tetap menjadi bahasa utama untuk layanan mikro umum. Namun, untuk kasus-kasus langka yang sangat kritis dan terikat oleh CPU, mereka sekarang memiliki strategi yang terbukti untuk menerapkan alat seperti Rust secara bedah guna mencapai peningkatan kinerja dan efisiensi yang luar biasa.

sumber:

More from this blog

F

Finlup ID | Sharing dunia teknologi dan coding

206 posts

Membedah Tren dan Teknologi yang Mengubah Dunia.