<p>- Heap mengoperasikan Postgres multi-petabyte untuk analitik<br />
- Seiring pertumbuhan yang cepat, utilisasi node melampaui 80% dan menimbulkan masalah performa pada pipeline pengumpulan data <br />
- Penyebab masalahnya adalah SSD cenderung mengalami penurunan performa saat utilisasinya mendekati 100%<br />
- Masalah ini makin parah karena menggunakan ZFS yang berbasis CoW (Copy-on-Write) <br />
→ setiap kali blok diperbarui, salinan baru akan ditulis <br />
- Tentu saja, CoW juga punya berbagai keunggulan<br />
→ kompresi di tingkat filesystem lebih mudah dibanding filesystem lain, sehingga ruang bisa dihemat dengan kompresi 4-5x <br />
→ memiliki ketahanan yang lebih tinggi sehingga `full_page_writes` di Postgres bisa dinonaktifkan, yang pada gilirannya meningkatkan performa dan mengurangi total IO <br />
→ snapshot point-in-time yang menjamin konsistensi - karena halaman tidak benar-benar bisa diubah, halaman lama tetap dipertahankan bahkan selama snapshot berlangsung<br />
- Namun, filesystem CoW seperti ZFS akan mengalami penurunan performa saat kapasitasnya makin penuh<br />
→ setiap kali halaman diperbarui, block allocator harus mencari blok kosong, sehingga saat utilisasi tinggi penurunan performanya menjadi sangat serius <br />
→ blok yang sebelumnya sudah di-unlink harus dihapus dan dicampur kembali dengan blok yang ada <br />
→ untuk mendapatkan rasio kompresi yang lebih tinggi, ukuran blok diatur besar menjadi 64kb sehingga masalahnya makin parah <br />
→ karena alasan-alasan ini, sebaiknya utilisasi ZFS tidak melebihi 80% <br />
<br />
- Mereka mencoba meng-upgrade ke ZFS 2.x dan mengganti kompresi dari lz4 ke Zstandard <br />
→ lz4 sangat cepat dan menunjukkan rasio kompresi sekitar ~4.4x <br />
→ Zstandard menunjukkan rasio kompresi hingga ~5.5x, yaitu peningkatan 20% <br />
→ tetapi banyak benchmark menunjukkan bahwa Zstandard lebih lambat daripada lz4<br />
→ karena itu mereka memutuskan melakukan pengujian ketat di kondisi nyata <br />
→ hasil pengujian menunjukkan performa query tidak berubah, penggunaan storage turun ~20%, dan waktu query tulis berkurang setengahnya <br />
<br />
- Cluster DB Heap dibagi menjadi 5 node dan masing-masing berada dalam ASG terpisah <br />
→ perubahan node cukup dilakukan dengan melepaskannya dari ASG, lalu ASG membuat node baru, me-restore dari backup terakhir, dan masuk ke mode warm standby <br />
→ mereka membuat AMI dengan konfigurasi baru dan melanjutkan migrasi satu node demi satu <br />
→ total penggunaan turun ~21%, waktu tulis berkurang 50%, dan performa query hampir tidak berubah </p>
1 komentar