AWS RDSのスケーリング
https://gyazo.com/e6fe3617d62bbafd3c7465396ac2e901
単純に1つの RDS を立てただけ (①) では、可用性が著しく低い。
そのため、RDS の機能として Multi-AZ 構成を有効にすると良い。この場合、AZ をまたいで Master/Standby 構成が自動的に構築される (②)。
その後のスケーリングについては、RDS の機能だけでは、Write 性能は垂直スケーリングのみ。Read 性能は、リードレプリカやキャッシュでオフロードできる。
垂直スケーリング (③)
インスタンスタイプ/ストレージは、API 経由で簡単にスケールアップできる
インスタンスは一時停止する必要があるので注意
ストレージのスケールダウンはできないので注意
多くの場合ダウンタイムは発生しない
Read only の水平スケーリング (④)
リードレプリカ を利用する
リードレプリカは削除されたらされっぱなしで、手動で起動し直す必要がある
どのリードレプリカを利用するかどうかの判断はアプリケーション側で制御する必要がある
書き込み/読み込みの場合に、リードレプリカ/マスターのどちらにアクセスするかもアプリケーション側で制御する必要がある
ConnectJ みたいなサードパーティ製のライブラリを利用するのが楽
キャッシュによるパフォーマンス向上
Amazon ElastiCache を利用する
Master から Read した内容をキャッシュに保持する、といった使い方
Write 性能の水平スケーリングのためには、データベースシャーディング を利用するのが良い (⑤)。ただし、シャーディングのための RDS の振り分けはアプリケーション側で制御する必要があり、やはりサードパーティ製のライブラリを利用することが必要となる。
https://gyazo.com/2943c437ffe2b2777daac7adaae30bac
また、RDS の種別によって使える機能が異なる。
table:RDS
OSS/商用 DB Master/Standby構成 Master/Read Replica構成
amazon 独自 Amazon Aurora × ◯
OSS MySQL ◯ ◯
OSS MariaDB ◯ ◯
OSS PostgreSQL ◯ ◯
商用 Oracle Database ◯ ×
商用 SQLServer ◯ ×