読書メモ:システム設計の面接試験②

この記事の続き

目次

6章:キーバリューストアの設計

正直かなり微妙な章でした。RedisやCassandraなどの内部設計が頭に入ってれば読みとばして良い気がしました。

  • 日本語訳が微妙
  • CAP定理などの微妙な定理をいまだに利用して分散システムを考える

前者は内容というより訳者の問題でしょうか。和訳だと「結果整合性」と訳すべきであろうところを「最終的な一貫性」と訳してる部分があって、一般的に利用されている訳語があるならそっちを使うべきかなと…

後半は内容的な話です。この本は分散システムに関しての書籍ではないので分散システムの解説に多くの書面を割く必要はないのだとは思いますが、やっぱこの紙面だと微妙な内容にならざるを得ないのかなと感じました。

出てくるトピック

  • CAP定理
  • クオラムの話
  • ハートビートの話
  • SSTable(ほぼ単語が出てくるだけ)

この辺の話は分散システムの非常に奥深い話が入ってくる部分で、真面目に勉強するならデータ指向アプリケーションデザインを読むのがよさそうだと感じました。

7章:分散システムにおけるユニークIDジェネレータの設計

DatabaseのPrimary Keyをどう作るのか?と読み替えてよさそうな章です。短い章。紹介されてるアプローチは以下の4つ。

  • マルチマスター
  • UUID
  • チケットサーバ
  • twittersnowflakeアプローチ

マルチマスタ

1点目に関して、なんかこれマルチマスターっていって紹介していいんだっけ?となりました…(実装によって違うという認識を自分は持っているので)この書籍の中で紹介されていたのは、offsetを利用するアプローチです。

  • nodeは2つ
  • node1が奇数番、node2が偶数番を採番する
    • 1, 3, 5, 7….
    • 2, 4, 6, 8…
  • (ここは書かれてないが)ラウンドロビンでリクエストがバランスされるので、ええ感じにrecordが生成されまっせ、というものかと

このアプローチ以外にも1 - 10000, 2 - 20000…といった具合にsegmentを分割してあげる、みたいなこともマルチマスターでは採用されてたりします。自分が調べた限りだと、PostgreSQL-BDRではこのアプローチを使ってマルチマスタでシーケンスを生成しています。

PostgreSQL BDR (Bi-Directional Replication) を使ってみた - Qiita

uuid

よくあるやつ。割愛。

チケットサーバ

中央サーバとして連番を返すやつを用意する。単一障害点になるのがneck。

twittersnowflakeアプローチ

初めて聞きました。timestampとノードのID、シーケンス番号を組み合わせて番号を生成するというものらしいです。

Snowflake ID

感想

平日で仕事があったのであんま読む時間を確保できず。今週中には読み終えたいです。