2 ポイント 投稿者 GN⁺ 2024-10-21 | 1件のコメント | WhatsAppで共有
  • 分散システムを学ぶ核心は、特定の技術よりも考え方の転換にあり、このリストはインターネット規模のシステムを設計するときに直面する問題をテーマ別にたどれるようにしている
  • 資料は、設計思想、レイテンシ、AmazonとGoogleの大規模システム事例、一貫性モデル、理論、ツール、インフラ、ストレージ、合意アルゴリズム、ゴシッププロトコル、P2Pに分かれている
  • CAP、2PC回避、eventual consistency、楽観的レプリケーションは、一貫性と可用性を同時に最大化するのが難しいという運用上のトレードオフを示している
  • Google論文群は、MapReduce、Chubby、GFS、BigTable、Dremel、Spanner、Photon、Mesaのような大規模分散システムの実装事例を提供し、Amazonの資料はサービスベースアーキテクチャへの移行と組織文化をあわせて扱っている
  • Paxos、Raft、FLP、Lamport Clock、Byzantine Generals、Chord、Kademlia、Pastryまで続けて読むと、合意・時間・レプリケーション・ルーティングの問題を一つの流れとして整理できる

考え方と設計の視点

レイテンシとインターネット規模サービス

Googleのシステム論文と一貫性モデル

  • Googleのまとまりは、MapReduceからMesaまで、分散システムの「rocket science」と見なせる大規模システム論文を一か所に集めている
    • MapReduce
    • Chubby Lock Manager
    • Google File System
    • BigTable
    • Dremel: Web規模データセットの対話的分析
    • Megastore: データセンター間で低レイテンシのPaxos実装を実現するための設計
    • Spanner: スケーラブルで、マルチバージョン、グローバル分散、同期レプリケーションされるGoogleのデータベース
    • Photon: 連続データストリームのフォールトトレラントでスケーラブルなjoin
    • Mesa: Googleのインターネット広告事業に関する中核的な測定データを保存する、地理的にレプリケーションされた準リアルタイムのスケーラブルなデータウェアハウス
  • 「Consistency Models」は、システム環境に合わせて一貫性と可用性の間の妥協点を探る資料で構成されている

理論、言語、インフラ、ストレージ

合意、ゴシップ、P2P

1件のコメント

 
GN⁺ 2024-10-21
Hacker News のコメント
  • このリストは少し古く見えるので、Heidi Howard の分散合意リーディングリストをおすすめします
    https://github.com/heidihoward/distributed-consensus-reading...

  • この分野の「ロケットサイエンス」として Google の MapReduce が挙げられているのを見て、何か変だと思いました
    確認してみると、このリストは 2014 年の資料なので [1]、今では状況がかなり変わっている点に注意が必要です
    [1] https://news.ycombinator.com/from?site=dancres.github.io

    • それが分かると、文脈がはっきりしました。このリストが出てから10年が経っていて、当時ですら MapReduce 論文の発表からすでに 10 年が経っていたわけです
  • 約 10 年前に作った、分散システムのリーディングリストのメタリストがあります
    このリストも 10 年ほど遅れて追加しましたが、私が集めておいた項目のうち今も生きているものがどれだけあるかは、神のみぞ知るという感じです
    https://gist.github.com/macintux/6227368

  • 元記事のリストに触れている https://ferd.ca/a-distributed-systems-reading-list.html もあわせて読む価値があります

    • こうしたリストが実際に誰のためのものなのかを明確にする必要があります。単に「分散システムを学びたい」人向けのリストではないと思います
      限界を押し広げたり新しいアプローチを探したりする人には役立つかもしれませんが、それ以外の人にとっては、二次方程式の解き方を尋ねたら圏論の論文を 100 本渡されるようなものです
      Fred Herbert のリストは元記事より新しいものの、本人も完全ではないと言っています。彼は「Designing Data-Intensive Applications」を必読に挙げつつも、本当に理解するにはまず多くの論文を読む必要がある、というような言い方をしています
      こうしたリストが理解の前提条件のように提示されると、参入障壁を上げることのように感じられます
      何十年にもわたって積み重ねられてきた他人の成果のおかげで、効果的な Linux ユーザーになるためにナノカーネルの論文を 100 本読む必要はありません。優れた OS をゼロから作るのは今でも難しいですが、99% の人はそれをする必要はなく、既存のツールをうまく使いこなせばよいのです
      分散システムも同じで、最前線を押し広げるのでなければ、そこまで難しくある必要はありません
      研究を深掘りするより実践経験を求めるソフトウェアエンジニアなら、NATS [1] や YugaByte [2] で何かを作ってみるか、[3] のような実践チュートリアルをやってみるのがよいでしょう
      「Designing Data-Intensive Applications」も読む価値があります。読み返すほど良くなる本の一つなので、論文を 100 本読んでいなくてもそのまま読んで構いません。分からない部分が出てきたら質問して助けを求めればよく、巨大なリーディングリストは飛ばしても大丈夫です
      1: https://nats.io/
      2: https://www.yugabyte.com/
      3: https://pragprog.com/titles/tjgo/distributed-services-with-g...
  • それでも CRDT 技術 への言及がないのか?

    • 10 年前の資料だからです