makotan _at_ gmail dot com

DynamoDB相当の物を・・・

ある日ぼんやり考えてたDynamoDB相当の物をAWS環境で1から作るとしたら。
前提条件は
AWSインスタンスを使うこと
ひたすらスピードを追求すること
可用性は半端なく高い事
お金の制約は無し
単一endpoint



サーバの構成としては
endpointサーバ、c3.8xlargeをroute53でN台を振り分ける
storageサーバ、i2.8xlargeをたくさん(最低でも6台くらい)、RAID-10にする
管理系サーバ、c3.8xlargeは複数台同時稼働(それほど多くない)
の3種類で全サーバEBSなしで全てインスタンスストアのみ使用


処理としては・・・
endpointサーバは、接続ユーザの認証を実施、OKならデータをそのままstorageサーバへ複数台に同時転送、更新の場合は最低2台からOKの返事が返ってきた段階でAPIに返答。読み込みの場合も複数台に同時転送、複数からの値のうち最も新しくて数が多いものを正として返す
storageサーバは、更新の場合はキー毎にSequentialに更新処理を実施して応答を返す。読み込みの場合は書き込みの状況を無視してデータを取得して返す
管理系サーバは各サーバの応答速度と生死を常時監視して問題有りを発見したら即座に全endpointサーバに該当サーバへの転送停止を出しつつ、各storageサーバに対して予備のstorageサーバにデータのコピー実行を伝達、完了通知を待ってendpointサーバに登録を実施
スペックアップの時はstorageサーバの追加とキーハッシュの対応の変更を動的に実施(サーバ間のキー・値のコピー)
storageサーバはendpointリクエストの処理のみでは3割程度(可能なら半分)は余力を残した状況にすること



って事まで考えて気がついた
自作するよりDynamoDB使った方が安い気がする