分散システムデザインパターン読書メモ2
シャーディングされたサービス
レプリカされたサービスではリクエストはどのレプリカでも処理することができた、
それに対してシャーディングされたサービスでは一部のリクエストを特定のレプリカのみが処理できる。
代表的な例として、データサイズが一台で処理するには大きすぎる場合に使われる。
シャーディングされたキャッシュ
- シャーディングされたキャッシュは、完全なレプリカではできなかった数のキャッシュを行い、シャードを増やした分だけキャッシュヒット率をあげることができる
シャーディングされたキャッシュのレプリカ
- シャーディングのレプリカはキャッシュサーバーの更新時のデプロイ時にも負荷の増大を防ぐことができる
- シャーディングされた各ノードのレプリカを作ることは、耐障害性だけでなく、特定のノードに負荷が集中する「ホットシャーディング」に効果がある
- ホットシャーディング時に、特定のノードのみレプリカを増やして負荷を分散させることができる
シャーディング関数をためしてみる
- 一番シンプルな例はmod関数
- 決定性: 同じ入力に対して常に同じ結果を返す
- 均一性: 出力に対する出力の分散具合は均一
- シャードのキーを決めるには、どのようなリクエストが来るのかの理解が必要
- シャードへのルーティングについて次の2つが紹介されていた
- コンシステントハッシュでは、キー数/スケール後のキャッシュノード数のみキーの移動が発生する
スキャッタ・ギャザー
処理時間をスケールさせるためのデザインパターン 複数台で1つのリクエストを分割処理してマージすることによって処理を高速化させる
ルートによる分散とスキャッタ・ギャザー
リーフをシャーディングしたスキャッタギャザー
シャーディングされたデータを各リーフが自分の持つデータ範囲から検索を行いルートノードでマージする仕組み
適切なリーフの決め方
信頼性とスケーラビリティのためのスキャッタギャザーのスケール
ほとんどの処理を99%高速に返していても、残り1%で詰まっている場合は、遅い方に足を引っ張られる。 各リーフノードの対象外性をあげるために、過去の章でも登場したシャーディングのレプリカの作成は有効である。
9. オーナーシップの選出
- etcd
- 分散ロックでは、あらゆる処理時間がロックのTTLよりも短くなるようにすることが重要