Go言語による分散サービス

―信頼性、拡張性、保守性の高いシステムの構築

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
280
ISBN
978-4-87311-997-7
原書
Distributed Services with Go
FORMAT
Print PDF EPUB
Ebook
3,520円
Ebookを購入する
Print
3,520円

本書は、Go言語で分散サービスを構築する方法を解説する書籍です。分散サービスの概要と基本を解説し、設計、開発、およびデプロイする方法をコードを使ってハンズオン形式で学びます。はじめに、ストレージレイヤの構築とデータ構造の定義を行い、gRPCを用いてAPIを定義したサービスをネットワーク上で動作させる方法を説明します。そしてサービスを分散させて、可用性、耐障害性、拡張性を実現する方法を解説し、本番環境のKubernetesへデプロイする方法を学びます。

[本書の正誤表]

目次

本書への推薦の言葉
はじめに

第I部 さあ始めましょう
 
1章 レッツGo
    1.1 HTTPベースのJSONサービスの分散システムへの適合性
    1.2 プロジェクトの準備
    1.3 コミットログのプロトタイプの作成
    1.4 HTTPベースのJSONサーバの構築
    1.5 サーバの実行
    1.6 APIのテスト
    1.7 学んだこと

2章 プロトコルバッファによる構造化データ
    2.1 プロトコルバッファを使う理由
    2.2 プロトコルバッファのコンパイラをインストール
    2.3 レコード型をプロトコルバッファとして定義
    2.4 プロトコルバッファのコンパイル
    2.5 生成されたコードの扱い
    2.6 学んだこと

3章 ログパッケージの作成
    3.1 ログは強力なツール 
    3.2 ログの仕組み
    3.3 ログの構築
        3.3.1 ストアのコーディング
        3.3.2 インデックスの作成
        3.3.3 セグメントの作成
        3.3.4 ログのコーディング
    3.4 学んだこと

第II部 ネットワーク 
 
4章 gRPCによるリクエスト処理
    4.1 gRPCとは何か
    4.2 サービス構築の目標
    4.3 gRPCサービスの定義
    4.4 gRPCプラグインでコンパイル
    4.5 gRPCサーバの実装
        4.5.1  gRPCでのエラー処理
        4.5.2 インタフェースによる依存性逆転
    4.6 サーバの登録
    4.7 gRPCサーバとクライアントのテスト
    4.8 学んだこと

5章 安全なサービスの構築
    5.1 安全なサービスのための3ステップ
        5.1.1 通信データの暗号化
        5.1.2 クライアントを特定するための認証
        5.1.3 クライアントの権限を決定するための認可
    5.2 TLSによるサーバの認証
        5.2.1  CFSSLで独自のCAとして運用
    5.3 相互TLS認証によるクライアントの認証
    5.4 アクセス・コントロール・リストによる認可
    5.5 学んだこと

6章 システムの観測
    6.1 3種類のテレメトリデータ 
        6.1.1 メトリクス
        6.1.2 構造化ログ
        6.1.3 トレース
    6.2 サービスを観測可能にする
    6.3 学んだこと

第III部 分散化 
 
7章 サーバ間のサービスディスカバリ
    7.1 サービスディスカバリを使う理由
    7.2 サービスディスカバリの組み込み
    7.3 Serfによるディスカバリサービス
    7.4 発見されたサービスにリクエストし、ログをレプリケーションする
    7.5 ディスカバリとサービス間のテスト
    7.6 学んだこと

8章 合意形成によるサービス連携
    8.1 Raftとその仕組み
        8.1.1 リーダー選出
        8.1.2 ログのレプリケーション
    8.2 サービスにRaftを実装
        8.2.1  Raftの設定
        8.2.2 ログAPI
        8.2.3 有限ステートマシーン
        8.2.4 ストリームレイヤ
        8.2.5 ディスカバリの統合
        8.2.6 分散ログのテスト
    8.3 一つのポートで複数のサービスを実行する多重化
    8.4 学んだこと

9章 サーバディスカバリとクライアント側ロードバランス
    9.1 三つのロードバランス戦略
    9.2 gRPCでのクライアント側ロードバランス
    9.3 サーバを発見可能にする
    9.4 サーバの解決 
    9.5 ピッカーでリクエストの送信先を決めて、バランスさせる
    9.6 エンド・ツー・エンドのディスカバリとバランスのテスト
    9.7 学んだこと

第IV部 デプロイ 
 
10章 Kubernetesでローカルにアプリケーションをデプロイ
    10.1 Kubernetesとは
    10.2 kubectlのインストール
    10.3 ローカル開発と継続的インテグレーションのためにKindを利用
    10.4 エージェントのコマンドラインインタフェースの作成
        10.4.1 フラグの公開
        10.4.2 設定の管理
    10.5 Dockerイメージのビルド
    10.6 Helmを使ったサービスの設定とデプロイ
        10.6.1 独自のHelmチャートの構築
    10.7 完全修飾ドメイン名でRaftを公開する
        10.7.1  Helmチャートのインストール
    10.8 学んだこと

11章 アプリケーションをKubernetesでクラウドにデプロイ
    11.1 GoogleKubernetesEngineクラスタの作成
        11.1.1  GoogleCloudにサインアップ
        11.1.2  Kubernetesクラスタの作成
        11.1.3  gcloudのインストールと認証
        11.1.4  Googleのコンテナレジストリにサービスのイメージをプッシュ
        11.1.5  kubectlの設定
    11.2 Metacontrollerでカスタムコントローラの作成
        11.2.1  Metacontrollerのインストール
        11.2.2 ポッド単位サービスのロード・バランサ・フックの追加
    11.3 インターネットへのデプロイ
    11.4 学んだこと

訳者あとがき
索引