分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計
- オライリージャパン (2019年4月20日発売)
- Amazon.co.jp ・本 (200ページ)
- / ISBN・EAN: 9784873118758
作品紹介・あらすじ
コンテナを使った分散システムの設計と実装について解説 !
コンテナを使った分散システムの設計と実装について解説し、デザインパターンを示す本です。分散型のアーキテクチャのメリットとして、信頼性やスケーラビリティの高いシステムを実現できることが挙げられますが、これらのメリットを享受するためには、単一のマシンで動作するアプリケーションと比較して複雑な設計と設定が必要となります。そこでコンテナやコンテナオーケストレータを使うことで、分散システムの構築や運用を簡易化するとともに、コンポーネントの再利用性を高めようというものです。
感想・レビュー・書評
-
複雑になっていきながらも冗長性、耐障害性、高可用性が求められるようになってきたオンラインシステムをどのように構築していけばよいかパターン化を試みたもの。
デザインパターンは「シングルノード」「マルチノード」「バッチ処理」の3構成に分類されている。
本書の前提としてKubernetesがあるので、パターンの記述もKubernetesを意識したものになっている。
また、サンプルコードが各所に出てくるが、Go言語、Node.js、Pythonなどさまざまな言語で記述されている。
「シングルノード」に出てくる「サイドカー」は「関心の分離("アプリが開発したもの"と"運用が入れたい仕組み")」という意味で確かにと思う点があった。
また、マルチノードにある「ロック」で気を付けなければならない点が多数あることは大変勉強になった。
出てくるサンプルコードがKubernetesをベースに多種多様な言語が出てくるのでかなりの知識がないと読みづらい。
また、内容も「まぁそうだよね」といったことが多かった。
使える何かを学習したい、と思って読むと残念な気分になる。
時間に余裕があっていろんな人の意見を参考にしてみたい、くらいの気持ちで読むといいと思う。詳細をみるコメント0件をすべて表示 -
・P3: 1.2 ソフトウェア開発におけるパターンの歴史概観
1.2.1 アルゴリズムによるプログラミングの形式化
1.2.2 オブジェクト指向プログラミングのパターン
1.2.3 オープンソースソフトウェアの隆盛
・P5: 1.3 パターン、慣習、コンポーネントの価値
1.3.1 巨人の肩の上に立つ
1.3.2 1 つのやり方を議論するための共通言語
1.3.3 簡単に再利用できる共有コンポーネント
・P26:3章 アンバサダ
3.1 サービスのシャーディングへのアンバサダの利用
3.1.1 ハンズオン:シャーディングされたRedis の実装
・P31:3.2 サービスブローカとしての利用
・P38:4章 アダプタ
4.1 監視
4.1.1 ハンズオン:監視へのPrometheus の利用
・P89:7章 スキャッタ・ギャザー
7.1 ルートによる分散とスキャッタ・ギャザー
7.1.1 ハンズオン:分散ドキュメント検索
7.2 リーフをシャーディングしたスキャッタ・ギャザー
7.2.1 ハンズオン:シャーディングされたドキュメント検索
7.2.2 適切なリーフ数の決め方
7.3 信頼性とスケーラビリティのためのスキャッタ・ギャザーのスケール
・P99:8章 ファンクションとイベント駆動処理
8.1 FaaS を使うべき時の判断
8.1.1 FaaS の利点
8.1.2 FaaS の課題
・P103: 8.2 FaaS のパターン
8.2.1 デコレータパターン:リクエストまたはレスポンスの変換
8.2.2 ハンズオン:リクエスト処理前のデフォルト値設定
8.2.3 イベントの扱い
8.2.4 ハンズオン:2 要素認証の実装
8.2.5 イベントベースのパイプライン
8.2.6 ハンズオン:新規ユーザ登録のパイプライン実装
・P147:11章 イベント駆動バッチ処理
11.1 イベント駆動処理のパターン
11.1.1 コピア
11.1.2 フィルタ
11.1.3 スプリッタ
11.1.4 シャーダ
11.1.5 マージャ
11.2 ハンズオン:イベント駆動な新規ユーザ登録フローの構築
11.3 パブリッシャ・サブスクライバ(pub/sub)基盤
11.4 ハンズオン:Kafka のデプロイ -
タイトルは分散システムと謳っているが、実際にはコンテナを使った責任分離パターン + バッチパターン集。パターンはどれも一般的なもので、とりたててどうということはないが、コンテナとコンテナ・オーケストレーションの最大のメリットは責任分離であるとした知見は納得感があった。
-
分散システムの概念や、抽象化されたデザインパターンが紹介されています。
マイクロサービスや FaaS を視野に入れた書籍なので、それらのアーキテクチャ設計にも十分参考になります。 -
コンテナのパターンとしてはサイドカーパターンくらいしか知らなかったので購入。
分散システムというタイトルだが、特定の課題を分割して、対処していくアプローチは、シンプルな構成のアプリケーションを作成するときも役立つ考え方だと思った。
シンプルな責務のコンテナを組み合わせて問題解決をするというアプローチは、UNIX哲学にも通じるところがあるなと思った。
各章のサンプルコードはKubernetesで書かれているので、ある程度Kubernetesの用語の教養やYAMLが読めるほうが理解が進むと思う。
個別のパターンを実際に導入するにはこの本以外の知識が必要になるが、コンテナパターンやその考え方のベースを理解するにはちょうどよいボリュームの入門書だと思う。 -
この分量でこの内容なら十分では
-
k8s基盤構築を進める上でのデザインパターンを知識として習得する為に読んだ
サイドカーやサービスディスカバリなど用語レベルでしか知らなかった部分の実例が書かれていたことで、実務においてもより具体的な事例をイメージしながら設計を進めることができそう
ちょっとむずかしい部分もあったので読み飛ばした部分もある -
pdf版をオライリーで購入した。(2019/5/15)