高トラフィックに耐える構成を考える
高トラフィックに耐える構成についてざっくり書いてみる。
インフラエンジニアでもないので間違いあるかも。
アプリケーションサーバー
ステートレスに作っておいて、稼働台数を増やしてLBで振り分ける。
LBに対してはDNSラウンドロビンで負荷分散させる。
DBサーバー
やっぱりDBへの負荷をどう下げるかがキモ。
参照と更新で分けて考える。
参照:
キャッシュサーバーを用意してキャッシュし、DBへのアクセス自体をできる限り減らす。
レプリケーションでセカンダリを複数用意し、参照リクエストを分散させる。(ここにもLB使える?)
更新:
更新はプライマリに対して行わなければならず、単純に数を増やして対応することができない。
出来る限りスケールアップによって性能を上げる。
特にメモリは多く確保し、DBのデータをすべてメモリに乗せられるようにしてIOの発生を出来る限り避ける。
更新が極端に多い特性のデータはKVSへ保持させることを検討する。
redisはクラスタ構成を組むことで更新に対してもスケールアウトによる負荷分散が可能。
最終手段としてテーブルの水平分割や垂直分割を行って、プライマリDB自体を分割し、アクセスを分散させる。
そのうち検証とかしたい。raspberry piとか複数買って小さい環境作って限界目指してみるとか。