10 poin oleh xguru 2021-11-15 | 1 komentar | Bagikan ke WhatsApp
  • Heap mengoperasikan Postgres multi-petabyte untuk analitik

  • Seiring pertumbuhan yang cepat, utilisasi node melampaui 80% dan menimbulkan masalah performa pada pipeline pengumpulan data

  • Penyebab masalahnya adalah SSD cenderung mengalami penurunan performa saat utilisasinya mendekati 100%

  • Masalah ini makin parah karena menggunakan ZFS yang berbasis CoW (Copy-on-Write)

→ setiap kali blok diperbarui, salinan baru akan ditulis

  • Tentu saja, CoW juga punya berbagai keunggulan

→ kompresi di tingkat filesystem lebih mudah dibanding filesystem lain, sehingga ruang bisa dihemat dengan kompresi 4-5x

→ memiliki ketahanan yang lebih tinggi sehingga full_page_writes di Postgres bisa dinonaktifkan, yang pada gilirannya meningkatkan performa dan mengurangi total IO

→ snapshot point-in-time yang menjamin konsistensi - karena halaman tidak benar-benar bisa diubah, halaman lama tetap dipertahankan bahkan selama snapshot berlangsung

  • Namun, filesystem CoW seperti ZFS akan mengalami penurunan performa saat kapasitasnya makin penuh

→ setiap kali halaman diperbarui, block allocator harus mencari blok kosong, sehingga saat utilisasi tinggi penurunan performanya menjadi sangat serius

→ blok yang sebelumnya sudah di-unlink harus dihapus dan dicampur kembali dengan blok yang ada

→ untuk mendapatkan rasio kompresi yang lebih tinggi, ukuran blok diatur besar menjadi 64kb sehingga masalahnya makin parah

→ karena alasan-alasan ini, sebaiknya utilisasi ZFS tidak melebihi 80%

  • Mereka mencoba meng-upgrade ke ZFS 2.x dan mengganti kompresi dari lz4 ke Zstandard

→ lz4 sangat cepat dan menunjukkan rasio kompresi sekitar ~4.4x

→ Zstandard menunjukkan rasio kompresi hingga ~5.5x, yaitu peningkatan 20%

→ tetapi banyak benchmark menunjukkan bahwa Zstandard lebih lambat daripada lz4

→ karena itu mereka memutuskan melakukan pengujian ketat di kondisi nyata

→ hasil pengujian menunjukkan performa query tidak berubah, penggunaan storage turun ~20%, dan waktu query tulis berkurang setengahnya

  • Cluster DB Heap dibagi menjadi 5 node dan masing-masing berada dalam ASG terpisah

→ perubahan node cukup dilakukan dengan melepaskannya dari ASG, lalu ASG membuat node baru, me-restore dari backup terakhir, dan masuk ke mode warm standby

→ mereka membuat AMI dengan konfigurasi baru dan melanjutkan migrasi satu node demi satu

→ total penggunaan turun ~21%, waktu tulis berkurang 50%, dan performa query hampir tidak berubah

1 komentar

 
xguru 2021-11-15

Tulisan tersebut tidak membahas penggunaan CPU, tetapi menurut komentar penulis asli di HN, angkanya meningkat dari sekitar ~40% menjadi ~50%. (Artinya Zstd memang menggunakan CPU lebih banyak)