- Tulisan ini membahas pengalaman penulis dalam mengelola performa Postgres pada aplikasi SaaS, ketika database mengalami kesulitan menangani beban.
- Tim penulis melakukan penskalaan vertikal dengan mengganti ke instans yang lebih besar setiap kali database menjadi terlalu sibuk. Namun, mereka sudah menggunakan instans terbesar dan hampir mencapai kondisi kelebihan beban.
- Dua solusi yang mungkin diajukan adalah melakukan sharding penulisan ke klaster database yang independen, serta memecah monolit menjadi beberapa layanan yang saling terhubung (microservices).
- Kedua solusi tersebut memang dapat menambah kapasitas dan menawarkan opsi menarik untuk toleransi kegagalan serta ketahanan operasional, tetapi juga akan sangat meningkatkan kompleksitas.
- Penulis berpendapat bahwa biaya nyata dari peningkatan kompleksitas adalah perhatian, yang membuat setiap keputusan teknis berikutnya menjadi lebih rumit.
- Penulis menyarankan bahwa sebelum meningkatkan kompleksitas secara besar-besaran, biasanya ada peluang untuk "memeras" sedikit performa tambahan dari sistem yang sudah ada dengan menyesuaikan beban kerja, melakukan tuning performa, atau melengkapi sistem dengan cara tertentu.
- Dalam kasus mereka, dengan mengoptimalkan kueri berat, melakukan tuning konfigurasi Postgres, dan memindahkan sebagian kueri read-only yang mahal ke database replika, mereka menurunkan penggunaan CPU puncak mingguan database dari 90% menjadi 30%.
- Penulis menyimpulkan bahwa kompleksitas memang diperlukan dan tidak bisa dihindari, tetapi sebaiknya penambahan kompleksitas ditunda selama mungkin dan terlebih dahulu memeras performa sebanyak mungkin dari sistem yang ada.
1 komentar
Opini Hacker News