3章ログパッケージの作成
この本では、Goで分散サービスを作る方法を学ぶために、分散サービスを作ります。しかし、ログを構築することは、分散サービスを作るという目標を達成するためにどのように役立つのでしょうか。私は、ログは分散サービスを構築する上で最も重要なツールキットだと考えています。ログは、時には、先行書き込みログ(write-ahead log)、トランザクションログ(transaction log)、あるいはコミットログ(commit log)とも呼ばれます。ログは、ストレージエンジン、メッセージキュー、バージョンコントロール、レプリケーションや合意形成アルゴリズムなどの中核をなすものです。分散サービスを構築していると、ログを使って解決できる問題に直面することがあります。自分でログを構築することで、次のことを学べます。
- ログを使って問題を解決し、難しい問題を簡単にする仕組みを発見する方法。
- ログに基づく既存のシステムを必要に応じて変更したり、独自のログに基づくシステムを構築したりする方法。
- ストレージエンジンを構築する際に、データを効率的に読み書きする方法。
- システム障害によるデータ損失を防止する方法。
- データをエンコードしてディスクに保存したり、独自のワイヤプロトコルを構築してアプリケーション間でデータを送信したりする方法。
もしかしたら、次の大きな分散ログサービスを構築するのはあなたかもしれません。
3.1 ログは強力なツール
ファイルシステムやデータベースのストレージエンジンを開発している人たちは、システムのデータ整合性を改善するためにログを使っています。たとえば、extファイルシステム†1では、ディスクのデータファイルを直接変更するのではなく、変更内容をジャーナルに記録します。ファイルシステムは、変更内容をジャーナルに安全に書き込んだ後、その変更内容をデータファイルに適用します。ジャーナルへのログは単純で高速なので、データを失う可能性はほとんどありません。仮にextがディスクファイルの更新を終える前にコンピュータがクラッシュしたとしても、次の起動時にファイルシステムはジャーナルのデータを処理して更新を完了させます。PostgreSQLのようなデータベース開発者は、システムの耐久性を高めるために同じ技術を使っています。変更内容をWAL( ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access