分散システム:API・データ・信頼性・デプロイ

API、キャッシュ、レプリケーション、メッセージング、ストレージ、可観測性、デプロイ、分散サービスのパターンを扱う、上級システム設計の復習カード32枚。プログラミングとデータベースの実践知識、およびネットワークの基礎知識を前提とします。

Level
advanced
Languages
ja → ja
Cards
32
Markdown
分散システム:API・データ・信頼性・デプロイ (.md)

Flashcards (32)

#Front (Term / Question)Back (Definition / Answer)ExampleMultiple-Choice Options
1CDNのエッジキャッシュとAnycastはそれぞれ何を担うか?エッジキャッシュは対象コンテンツを利用者の近くから提供し、オリジン負荷や多くの場合遅延を減らす。Anycastは同じアドレスを複数地点から広告し、経路方針とトポロジーで宛先を選ぶため、地理的最短とは限らない。Anycast DNSは名前サーバーへDNS問い合わせを導き、コンテンツ選択やキャッシュとは別。
2挿入のみを行う標準的なブルームフィルターは、要素の有無について何が分かるか?ハッシュ処理が一貫し状態が壊れていなければ、挿入済み要素を不在とは答えないが、不在の要素を存在するかもしれないと答えることはある。メモリ、ハッシュ関数数、挿入要素数が偽陽性に影響する。不在の結果でSSTable検索を省けるが、存在の可能性は確認が必要。
3Kafkaのどの設計がスループットと並列消費を支えるか?分割された追記型ログ、バッチ処理、順次I/O、OSのページキャッシュ。パーティションで並列化でき、パーティション全体を割り当てる方式では、各グループ内の各パーティションを同時に担当するアクティブなコンシューマーは最大1つ。ゼロコピーは利用可能な場合の最適化で、特にTLS時を含め常に使う経路ではない。
4p99レイテンシーとは何で、なぜ平均と併せて見るか?測定した要求集団で、約99%の観測値がその値以下になる遅延の閾値。最大値でも最も遅い1%の平均でもない。特にファンアウト要求では、裾のパーセンタイルが平均に隠れる遅延を示す。測定期間と対象集団を明示する。
5APIの方式としてGraphQL、gRPC、RESTはどう違うか?GraphQLは型付きスキーマからクライアントがフィールドを選ぶ。gRPCはリモートサービスのメソッドを定義し、単項呼び出しとストリーミングを提供し、通常HTTP/2と既定のProtocol Buffersを使う。RESTはリソースと統一インターフェースを中心にする。エンドポイント数や常に低い遅延は定義ではない。
6代表的な可観測性の3つの信号は何で、それだけで十分か?メトリクスは数値測定を要約し、ログはイベントを記録し、分散トレースはコンポーネント間の処理区間をつなぐ。相互に関連付けると挙動を理解しやすい。これは代表例であり網羅的な定義ではなく、プロファイルなど他のテレメトリーも重要になり得る。
7自分の書き込みを読める整合性とは何か?一定時間だけリーダーを読む方法ではなぜ不十分か?同じクライアントセッションの後続読み取りは、確認済みの自分の書き込みか、その後の更新を反映する必要がある。十分新しいリーダーを読むか、記録したバージョンやログ位置に達したレプリカを使う。複製遅延に上限がなければ、固定の時間窓だけでは保証できない。
8カオスエンジニアリングが無作為な故障注入ではなく制御された実験であるためには何が必要か?定常状態の仮説を立て、現実的な障害を加え、結果を観測し、安全策で損害を限定する。例はインスタンス喪失やネットワーク遅延。テスト環境でも本番でも行えるが、本番では意図的に狭めた影響範囲と停止条件が必要。
9トランザクショナルアウトボックスは何を解決し、どんな制約が残るか?業務変更と送信予定イベントを同じローカルDBトランザクションで書く。リレーが後から確定レコードを送信し、DBとメッセージシステムへの危険な独立二重書き込みを避ける。再送で重複し得るため、消費側や後続の効果には適切な重複排除または冪等性が必要。
1012-Factor Appの12要素とは何か?単一コードベース、明示的依存関係、環境設定、接続されたバックエンドサービス、ビルド・リリース・実行の分離、ステートレスプロセス、ポートバインディング、プロセス単位の並行性、廃棄容易性、開発・本番の一致、イベントストリームとしてのログ、単発の管理作業。設計指針であり拡張性や信頼性の保証ではない。
11レイヤー4とレイヤー7の負荷分散はどう違うか?L4はアドレスやポートなどネットワーク・トランスポート情報で接続やデータグラムを分散する。L7はHTTPパス、ヘッダー、Cookieなどを使える。暗号化HTTP内容の検査には経路上のどこかでTLS復号が必要だが、すべてのL7構成が自らTLSを終端するわけではない。
12B木系とLSM系ストレージはどう違い、なぜ絶対的な性能順位を避けるか?B木は更新・分割・平衡化で整列ページを維持する。LSMは通常メモリに書き込みを蓄え、回復用ログに記録し、整列テーブルへ書き出して圧縮統合する。読み書きと容量の増幅は負荷・実装次第で、常に速い方式はなく、すべてのB木が同じ場所でページを更新するわけでもない。
13イベントソーシングとCQRSはどう違い、必ず組み合わせる必要があるか?イベントソーシングは変更をイベント列として保存し、そこから状態を再構築する。CQRSはコマンド・書き込みモデルとクエリ・読み取りモデルを分離する。組み合わせても別々でも使え、CQRS自体は別々のDBやイベントソーシングを必須としない。
14サーキットブレーカーはサービス障害の波及をどう抑えるか?閉状態では呼び出しを通して失敗を監視し、開状態では故障した依存先に接続せず拒否または転送する。半開状態では少数の試行で回復を確認する。閾値と回復方針が遷移を決める。連鎖的過負荷を減らすが依存先そのものを修復はしない。
15一般的なLinuxコンテナーとハードウェア仮想マシンはどう違うか?VMはハイパーバイザー上で独自のゲストOSカーネルを動かす。Linuxコンテナーは通常名前空間とcgroupsでプロセスを隔離し、カーネルを共有する。非Linuxデスクトップでは、そのLinuxカーネル自体がVM内で動く場合がある。コンテナーは定義上、独立カーネルや完全なセキュリティ境界と同義ではない。
16サービス間の調整で、2相コミットとSagaはどう違うか?2PCは参加者に準備を求め、続いてコミットか中止を伝える。準備済み参加者は決定が得られない間ブロックし得る。Sagaはローカルトランザクションを確定し、必要なら補償操作を行う。補償は業務上の回復で、自動的な全体ロールバックや隔離ではない。常に優れる方式はない。
17バックプレッシャーとは何で、無制限バッファーが過負荷を解決しないのはなぜか?下流の処理能力や需要で上流の生成・送出を制限する仕組み。Reactive Streamsは需要通知により有界な非同期処理を支える。無制限の蓄積は過負荷をメモリ増加に変えるだけで、減速できない入力源には有限バッファー、破棄または失敗の明示的方針が必要。
18垂直スケーリングと水平スケーリングはどう違うか?垂直は1台のマシンやインスタンスの資源を増やす。水平はインスタンスやノードを増やし、処理やデータを分散する。ステートレスなワーカーは扱いやすいが、状態を持つシステムも分割・複製・調整で水平拡張できる。いずれも単独では可用性や線形高速化を保証しない。
19トークンバケット、リーキーバケットのキュー、2カウンター型スライディングウィンドウはどう違うか?トークンバケットは設定速度で補充され、容量までのバーストを許す。リーキーバケットのキューは制御した速度で仕事を流し、あふれを制限する。2カウンター方式は前区間を重み付けして現区間を加え、移動窓を近似する。正確な時刻ログではない。
20リソースURLやHTTPメソッド名以外に、RESTを定義する制約は何か?クライアントとサーバーの分離、ステートレスな要求、キャッシュの制約、統一インターフェース、階層化であり、コードオンデマンドは任意。統一インターフェースにはリソース識別、表現を介した操作、自己記述的メッセージ、ハイパーメディアによるアプリ状態の制御が含まれる。RESTは単なるHTTP上のCRUDではない。
21標準HTTPメソッドのうち冪等なのはどれで、何を保証するか?GET、HEAD、OPTIONS、TRACE、PUT、DELETEは定義上冪等で、要求を繰り返したときの意図されたサーバー効果が1回実行した場合と同じになる。応答や付随ログは異なってよい。POSTとPATCHは本来冪等とは限らないが、個別操作を安全に再試行できるよう設計できる。
22キャッシュアサイド、ライトスルー、ライトバックはどう違うか?キャッシュアサイドはミス時に背後のストアから読み、アプリが更新や無効化を管理する。ライトスルーはキャッシュ書き込みと同期してストアを更新する。ライトバックはキャッシュへの書き込みを確認してから非同期に永続化するため、未反映データには障害対策が必要。
23ドメイン駆動設計の境界づけられたコンテキストとは何か?DDDは業務ドメインを中心にモデルと共通語彙を作る。境界づけられたコンテキストは、特定のモデルと用語が一貫して通用する範囲。同じ語が別の範囲で異なる意味を持ち得るので、コンテキスト間の関係と翻訳を明確にする必要がある。
24KubernetesのPod、Deployment、Serviceは何を担うか?Podは共に配置される1つ以上のコンテナーをまとめ、ネットワークと指定された共有資源を持つ。DeploymentはReplicaSetと更新処理で複製Podを管理する。Serviceは通常選択されたPodなどのエンドポイントへのネットワークアクセスを提供する。ヘッドレスServiceには仮想クラスターIPを割り当てない。
25単一リーダーと複数リーダーのレプリケーションはどう違うか?複製対象データについて、単一リーダーは書き込みを1か所で受けてフォロワーへ伝える。複数リーダーは複数ノードで書き込みを受け、競合や異なる順序の更新に対処する必要がある。複製は同期にも非同期にもでき、非同期フォロワーは古いデータを返すことがある。
26ブルーグリーンとカナリアのデプロイはどう違うか?ブルーグリーンは独立した候補環境を準備し、現環境からトラフィックを切り替える。カナリアは少数の利用者やトラフィックに新版を公開し、結果を見て拡大する。DBや状態の互換性には計画が必要で、どちらも容易なロールバックを保証しない。
27キャッシュスタンピードはなぜ起こり、どんな対策が役立つか?多数の要求が同じ人気項目や期限切れ項目群で同時にミスし、背後のサービスを過負荷にする。要求の集約や制御されたバックグラウンド更新は重複作業を減らす。有効期限のばらつきは項目間の同時失効を減らすが、単一の人気キーをそれだけで必ず保護できるわけではない。
28最大1回、少なくとも1回、正確に1回という処理保証はどう違うか?最大1回は重複処理を避けるが処理が失われ得る。少なくとも1回は再試行で処理が重複し得る。正確に1回の効果には、出力と消費済みオフセットの原子的確定など、明確な範囲での調整や重複排除が必要。生産側のトランザクションだけで任意の外部副作用まで保証できない。
29SLI、SLO、SLAはどう違うか?SLIは200ミリ秒以内に完了した要求の割合など、サービス挙動の指標。SLOはその目標値と測定期間を定める。SLAはサービス上の約束と未達時の結果を定める合意で、単なる別の指標でも、必ず内部SLOと同一でもない。
30WebSocket、Server-Sent Events、ロングポーリングはどう更新を届けるか?WebSocketは長く維持する接続で双方向メッセージを提供する。SSEはHTTPでサーバーからクライアントへイベントを流す。ロングポーリングはデータ到着かタイムアウトまで要求を待たせ、その後クライアントが新しい要求を送る。方向と接続・要求の動作が異なる。
31データベースのシャーディングとは何で、どんな設計課題があるか?通常シャードキーでデータを水平分割し、複数サーバーにも配置できる独立管理の区画に分ける。キーはホットスポット、クエリの局所性、再分配に影響する。シャード間クエリ・結合・トランザクションには追加調整が必要で、シャードと物理サーバーは一対一でなくてよい。
32リング型コンシステントハッシュは、ノード変更時の再割り当てをどう減らすか?キーをリング上の後続位置に割り当てるため、ノード追加・削除で変わるのは関連区間だけ。K個のキーがNノードに均等に分散されていれば、1ノードの変更で通常K/N程度が移動するが、無条件の最悪時保証ではない。仮想ノードで偏りを改善できる。