Livepocket 書泉と、10冊

分散システムのためのデザインパターン

特典
ISBN/JAN
9784621311523
著者
Unmesh Joshi 翻訳:藤井 章博
出版社
丸善出版
レーベル
出版日
2025/08/04
商品説明
第1部 Narratives
Chapter 1 分散システムの可能性とその課題
単一サーバーでの限界 / ビジネスのロジックとデータの階層を分離する / データの分割 / 障害の様相/ レプリケーション(多重化):隠ぺい時の障害≪ プロセスクラッシュ / ネットワークの遅延 / プロセスの停止 / 非同期クロック≫ / “分散システム”の定義 / “パターン”によるアプローチ
Chapter 2 パターンの概要
単一サーバーにおけるデータの保全 / 更新の競合 / リーダー障害への対処 / 複数の障害に対しては‘世代クロック’による対処が必要 / ログエントリーは‘多数決クォーラム’において承認されるまでコミットされない / ‘ハイウォーターマーク’に基づくフォロワーのコミット / リーダーが複数のクライアントに対応するために一連の待ち行列を利用する / フォロアーが‘読出しリクエスト’を扱うことでリーダーにおける負荷を軽減できる / 大容量データは複数ノードに分割することができる / 耐性を得るためにパーティションの複製を行う / 分割された領域の整合性を保つためには少なくとも2相ロックは不可欠 / 分散システムにおいて順序関係はシステムのタイムスタンプには依存しない / ‘一貫性コア’はデータクラスタにおけるメンバーシップの管理を実施できる / 非中心型のクラスタ管理における‘ゴシップ伝播’

第2部 データレプリケーションのパターン
Chapter 3 書込み先行ログ(Write-Ahead Log)
解決すべき課題 / 解決策≪実装に際しての検討事項 / トランザクショナル記憶での使用 / イベントの源泉を比較する≫ / 実装例
Chapter 4 セグメント化ログ(Segmented Log)
解決すべき課題 / 解決策 / 実装例
Chapter 5 低位ウォーターマーク(Low-Water Mark)
解決すべき課題 / 解決策≪スナップショットベースの‘低位ウォーターマーク’/ 時刻ベースの‘低位ウォーターマーク’≫ / 実装例
Chapter 6 リーダーとフォロワー(Leader and Followers)
解決すべき課題 / 解決策≪リーダーの選出[選挙アルゴリズム /‘一貫性コア’を使用したリーダー選挙]/ なぜクォーラムリード/ライトだけでは強力な一貫性保証に不十分なのか;並行性,ロック,状態更新;ZabとRaft≫/ 実装例
Chapter 7 ハートビート(HeartBeat)
解決すべき課題 / 解決策 ≪小規模クラスタ:同意ベースのシステム / 技術上の検討事項 / 大規模クラスタ:ゴシップベースプロトコル≫/ 実装例
Chapter 8 多数決クォーラム(Majority Quorum)
解決すべき課題≪安全性と活性≫ / 解決策≪クラスタ内のサーバー数の決定 / 柔軟なクォーラム≫/ 実装例
Chapter 9 世代クロック(Generation Clock)
解決すべき課題 / 解決策 / 実装例
Chapter 10 ハイウォーターマーク(High-Water Mark)
  解決すべき課題 / 解決策≪ログの切り捨て≫/ 実装例
Chapter 11 Paxos
解決すべき課題 / 解決策≪プロトコルの流れ[リクエストは拒否される必要はない / 競合する提案者は選択に失敗する可能性がある]/ キーバリューストアの例[複数のバリューの処理 / バリューの読取り]/ 柔軟な‘Paxos’≫/ 実装例
Chapter 12 複製ログ(Replicated Log)
解決すべき課題 / 解決策≪Multi-PaxosとRaft / クライアントリクエストの複製[完全レプリケーション / ログエントリーはログの順序で実行される]/ リーダー選出[前世代からのログエントリー / リーダー選出の例]/ 技術的な考慮事項 / プッシュとプル / 何をログに記載すべきか?[読取りリクエストのためにログをバイパスする];障害の想定≫/ 実装例
Chapter 13 単一更新待ち行列(Singular Update Queue)
解決すべき課題 / 解決策≪待ち行列の選択 / チャネルと軽量スレッドの使用 / バックプレッシャー / その他の考慮事項; Java での実装≫/ 実装例
Chapter 14 リクエスト待機リスト(Request Waiting List)
解決すべき課題 / 解決策≪長時間保留中のリクエストの期限切れ≫/ 実装例
Chapter 15 べき等レシーバー(Idempotent Receiver)
解決すべき課題 / 解決策≪保存されたクライアントリクエストの有効期限 / 登録済みクライアントの削除 / 多くとも1回,少なくとも1回,明確に1回の処理;べき等なリクエストとべき等でないリクエスト≫ / 実装例
Chapter 16 フォロワーによる読出し(Follower Reads)
解決すべき課題 / 解決策≪最近傍レプリカの発見 / 切断されているか,または低速のフォロワー / 自分の書込みを読む / 直列実行可能な読込み; 因果整合性≫/ 実装例
Chapter 17 バージョン管理された値(Versioned Value)
解決すべき課題 / 解決策≪バージョン管理されたキーの順序 / 複数のバージョンの読取り / MVCC とトランザクション分離 / RocksDB のようなストレージエンジンの使用≫ / 実装例
Chapter 18 バージョンベクトル(Version Vector)
解決すべき課題 / 解決策≪‘バージョンベクトル’の比較 / キーバリューストアでの‘バージョンベクトル’の使用[競合の解決〈‘最終書込み勝利’による競合解決〉/ 読取り修復 / 同じクラスタノードでの並行更新の許可〈サーバーIDの代わりにクライアントIDを使用する / ドットつき‘バージョンベクトル’〉];ベクトルクロックとの違い;Cassandra と‘最終書込み勝利’≫/ 実装例

第3部 データ分割と複製のためのパターン
Chapter 19 固定パーティション(Fixed Partitions)
解決すべき課題 / 解決策≪ハッシュ関数の選択 / パーティションのクラスタノードへのマッピング[クラスタメンバーシップの追跡 / クラスタノードへのパーティションの割り当て〈クライアントインターフェース〉/ 新規に追加されたメンバーに対するパーティションの移動 / 実施例]/ 代わりの解決策:ノード数に比例するパーティション[クラスタへ新たなノードを追加する]≫/ 実装例
Chapter 20 キーレンジの分割(Key-Range Partitions)
解決すべき課題 / 解決策≪事前定義されたキーレンジ[クライアントインターフェース / バリューの保存]/ 使用例 / レンジの自動分割[パーティションサイズを計算し,中間キーをみつける〈実施例のシナリオ / 負荷ベースの分割〉]≫/ 実施例
Chapter 21 2相コミット(Two-Phase Commit)
解決すべき課題 / 解決策≪ロックとトランザクションの分離[デッドロック防止〈競合時のエラー / Wound-Wait / Wait-Die〉]/ コミットとロールバック[べき等処理]/ シナリオの例[原子的(アトミック)な書込み / 競合するトランザクション]・‘バージョン管理された値’の使用[スナップショット分離〈タイムスタンプオラクル〉/‘ハイブリッドクロック’の使用]/‘複製ログ’の使用 / 障害処理[トランザクション・インテント]/ 異種システム間のトランザクション; ‘Paxos’と‘複製ログ’の比較;非直列実行性の分離についての問題点≫/ 実装例

第4部 分散時刻に関するパターン
Chapter 22 Lamport クロック(Lamport Clock)
解決すべき課題 / 解決策≪因果関係,時間,および事象生起関係 / キーバリューストアの例 / 部分順序関係 / 値を更新する単一のリーダーサーバー≫/ 実装例
Chapter 23 ハイブリッドクロック(Hybrid Clock)
解決すべき課題 / 解決策≪‘ハイブリッドクロック’によるマルチバージョンストレージ / タイムスタンプを使用したバリューの読込み / 分散トランザクションへのタイムスタンプの割り当て≫/ 実装例
Chapter 24 クロックバウンド待機(Clock-Bound Wait)
解決すべき課題 / 解決策≪読取り再起動 / クロックバウンドAPI の使用[読取り待機]≫/ 実装例

第5部 クラスタ管理のためのパターン
Chapter 25 一貫性コア(Consistent Core)
解決すべき課題 / 解決策≪メタデータストレージ[階層型ストレージのサポート]/ クライアントインタラクションの処理[リーダーをみつける / 重複するリクエストの処理];シリアライズ保障と線形性保証(Linearizability:直列実行性)≫/ 実装例
Chapter 26 リース(Lease)
解決すべき課題 / 解決策≪キーバリューストレージ内のキーへの‘リース’の添付 / リーダー障害への対処;ウォールクロックは単調ではない≫/ 実装例
Chapter 27 状態時計(State Watch)
解決すべき課題 / 解決策≪クライアント側の実装 / サーバー側の実装[階層型ストレージでの監視]/ 接続障害に対する処理[キーバリューストアからのイベントの派生 / イベント履歴の保存 / マルチバージョンストレージの使用];リアクティブストリームの使用;Kafka におけるプルベース設計≫/ 実装例
Chapter 28 ゴシップ伝播(Gossip Dissemination)
解決すべき課題 / 解決策≪不要な状態交換の回避 / ゴシップを送るノードの選択基準 / グループメンバーシップと障害検出 / ノード再起動の処理;疫病,ゴシップとコンピュータ通信;UDPまたはTCP の使用;結果的一貫性≫/ 実装例
Chapter 29 緊急時リーダー(Emergent Leader)
解決すべき課題 / 解決策≪既存の全メンバーへのメンバーシップ更新の送信 / シナリオの例 / メンバーシップ更新の欠落への対処 / 障害検出[全員対全員‘ハートビート’の回避 / スプリットブレイン〈スプリットブレインへの対処 / スプリットブレインからの回避〉]/‘リーダーとフォロワー’との比較≫/ 実装例

第VI部 ノード間の通信に関するパターン
Chapter 30 単一ソケットチャネル(Single-Socket Channel)
解決すべき課題 / 解決策 / 実装例
Chapter 31 リクエストバッチ(Request Batch)
解決すべき課題 / 解決策≪技術的考慮事項≫/ 実装例
Chapter 32 リクエストパイプライン(Request Pipeline)
解決すべき課題 / 解決策 / 実装例
備考
型番 9784621311523-011
販売価格 5,280円(税480円)
購入数

  

ピックアップ

Calendar

2025年8月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
2025年9月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Top