- この記事では、著者がSaaSアプリケーションでPostgresの性能を管理した経験について述べており、データベースが負荷をさばくのに苦労していた。
- 著者のチームは、データベースが忙しくなりすぎるたびに、より大きなインスタンスへ置き換えることで垂直スケールしていた。しかし、すでに最大のインスタンスを使っており、過負荷状態に陥る寸前まで来ていた。
- 可能な解決策として、書き込みを独立したデータベースクラスターへシャーディングすることと、モノリスを複数の連携したサービス(マイクロサービス)に分割することの2つが提案された。
- どちらの解決策も容量を増やし、耐障害性や運用レジリエンスに関する興味深い選択肢を提供するが、複雑さを大幅に増やしてしまう。
- 著者は、複雑さの増加に伴う本当のコストは注意力であり、それが以後のあらゆる技術的意思決定を複雑にすると主張する。
- 著者は、複雑さを大きく増やす前に、一般にはワークロードを調整したり、性能をチューニングしたり、何らかの形でシステムを補強したりすることで、既存システムからわずかな追加性能を「絞り出せる」余地があると提案する。
- 彼らのケースでは、重いクエリの最適化、Postgres設定のチューニング、そして一部の高コストな読み取り専用クエリをレプリカDBへオフロードすることによって、データベースの週次CPU使用率の最大値を90%から30%に下げた。
- 著者は、複雑さは必要であり避けられない場合もあると結論づけつつも、できる限り長く複雑さの増加を先送りし、まずは既存のシステムから最大限の性能を絞り出すのが望ましいと締めくくっている。
1件のコメント
Hacker Newsの意見