Perjalanan skalabilitas Pinterest
Proses penskalaan Pinterest terbagi menjadi empat tahap:
- Era pencarian jati diri: Tim insinyur kecil menangani pembuatan prototipe cepat dan kebutuhan produk yang terus berkembang.
- Era eksperimen: Pertumbuhan jumlah pengguna yang sangat cepat menuntut penskalaan segera, tetapi juga menghasilkan sistem yang kompleks dan rapuh.
- Era kematangan: Arsitektur disederhanakan dengan menggunakan teknologi yang matang dan skalabel seperti MySQL, Memcache, dan Redis.
- Era regresi: Setelah memiliki arsitektur yang tepat, pertumbuhan dilanjutkan melalui penskalaan horizontal.
Teknologi inti
Pinterest memprioritaskan teknologi yang menekankan keandalan, kemudahan dipahami, dan skalabilitas:
- MySQL: Basis data relasional yang stabil dan mudah dipelihara.
- Memcache: Men-cache data yang sering diakses di memori untuk mengalihkan beban pembacaan dari basis data.
- Redis: Penyimpanan data yang fleksibel untuk menangani beragam struktur data.
- Solr: Platform pencarian yang bisa segera digunakan.
Skalabilitas basis data: clustering vs sharding
Pinterest mempertimbangkan dua pendekatan untuk mendistribusikan basis data:
Clustering
- Saat data masuk, node optimal ditentukan lalu data direplikasi ke beberapa node.
- Keunggulannya mencakup penskalaan otomatis, kemudahan konfigurasi, dan jaminan ketersediaan data, tetapi ada juga kekurangan seperti kompleksitas, kematangan yang kurang, dan sulitnya upgrade.
Sharding
- Data dibagi menjadi potongan-potongan kecil, lalu setiap potongan ditempatkan di server yang terpisah dan independen.
- Keunggulannya mencakup arsitektur yang sederhana, penskalaan independen, dan kepemilikan data yang jelas, tetapi ada juga kekurangan seperti tidak adanya join dan transaksi di level basis data serta meningkatnya kompleksitas aplikasi.
Pinterest memilih sharding karena pengalaman negatif mereka dengan clustering.
Transisi ke arsitektur sharding
Pinterest beralih ke sharding secara bertahap selama masa feature freeze:
- Menghapus join: Semua join MySQL dihapus, lalu memanfaatkan denormalisasi data dan caching.
- Sharding berbasis ID: Sharding dilakukan berdasarkan ID 64-bit untuk menyederhanakan perutean data.
Kekurangan sharding dan solusinya
- Skrip migrasi: Proses memindahkan data ke infrastruktur sharding memakan waktu lama.
- Logika aplikasi: Karena tidak ada join dan transaksi di level basis data, konsistensi data harus dijaga di tingkat aplikasi.
- Perubahan skema: Perubahan skema harus direncanakan dan diterapkan ke semua shard.
- Pembuatan laporan: Laporan dibuat dengan menggabungkan banyak shard.
Pelajaran
Pelajaran utama dari perjalanan skalabilitas Pinterest:
- Kesederhanaan itu penting: Memilih teknologi yang mudah dipahami membantu menyelesaikan masalah dan mengurangi risiko.
- Skalabilitas adalah prioritas: Dalam lingkungan pertumbuhan cepat, skalabilitas harus diprioritaskan meski harus mengorbankan sebagian fitur basis data.
- Rancang untuk penskalaan horizontal: Pilih arsitektur yang memungkinkan penambahan sumber daya seiring bertambahnya basis pengguna.
Belum ada komentar.