site_review: 2021-12-10 03:34:57.360390 【技術本】分散システムデザインパターン

【技術本】分散システムデザインパターン

https://amzn.to/3UeWvqX


【技術本】分散システムデザインパターン


x postへポスト
シンプルなシングルノードから、マルチノード(リアルタイム処理、バッチ処理)のパターンまで順を追って最適なデザインパターンを紹介してくれている。どれも、シンプルな構造まで落とし込んだもので纏められている。
Dockerを利用してミドルウェアを水平分散クラスタ構成などにして簡易的な環境をつくるまでコマンド、コードで示している。
マルチノードのリアルタイム処理システムにおいては、システムのどの部分をマイクロサービスとしての部品に分割し、それらをスケール可能な構成にするため、どの技術を採用すべきか等の俯瞰的な思考を学ぶことができる。
近年のコンシューマ向け大規模Web開発に携わっていればお馴染みのパターンが多く、前提知識として必須の内容を網羅している、逆に言えば真新しい解釈のものはなかったのが少し残念。
具体的なコードレベルでスケール可能な分散システム開発を知りたければ、一例のみの記載になるが、同オライリーより出版されている「スケーラブルリアルタイムデータ分析入門:ラムダアーキテクチャによるビッグデータ処理」もおすすめ。

以下、内容メモ。
--------------------------
シングルノードパターン

・サイドカー
一台のマシンで動く2つのコンテナから構成
 アプリケーションコンテナ:コアロジック含む
 サイドカーコンテナ:拡張改善用
例:レガシーなHTTPウェブサービスをHTTPSに対応させる
 レガシーWebをローカルホスト接続のみに対応させ、HTTPSに対応したnginxをサイドカーコンテナとして配置。ローカルホストで動くサービスに接続できるようにする。すると、nginxが外部からのHTTPSトラフィックを終端できる。
nginx=SSLプロキシ→レガシーHTTPSサーバ

・アンバサダ
色々なアプリケーションコンテナと組み合わせ可能。
シャーディングアンバサダプロキシ:アプリを複数のサーバにデプロイするための仕組み
twemproxy(redis, memcache 向けプロキシ)を使ったdocker環境での実践。
アプリケーションコンテナと、サービスブローカアンバサダのロジックを分離できる。

・アダプタ
外部利用者→外部インタフェース→アダプタコンテナ→アプリケーションコンテナ
Prometheusを使ったコンテナの監視例、redisのスロークエリを監視できるようにする。
アダプタでログをイベントの標準セットに正規化する。

--------------------------
マルチノードパターン

・マイクロサービス;マルチノードの分散ソフトウェアアーキテクチャ。別々のプロセスとして動作し、定義済みのAPIを通じて通信する多くのコンポーネントからなる。
モノリシックの対極がマイクロサービス

・レプリカがロードバランスされたサービス
各サーバは全く同じ構成、処理。
接続先のサーバを固定する方法:IPアドレスなどをコンシステントハッシュ関数をとって接続先を決定する。
Varnishのキャッシュサーバ、SSL終端にしたい場合は、nginxを追加する。
ステートレスなサービス向け。

・シャーディングされたサービス
シャーディングされたサーバごとに扱えるリクエスト、データが異なる。
ステートフルなサービス向け。
保存すべき状態データが大きくなった時にスケールする。

・スキャッタ・ギャザー
処理時間をスケールさせる:リクエスト処理の並列化(上述までは、リクエスト数をスケールする方法であった)
リクエストを受け持つリーフ構造で各リーフは処理の一部を行いルートに返す。
シャーディング配置されたデータの検索など。
レスポンスが一番遅いノードに性能が引きずられる問題がある。

・ファンクションイベントとイベント駆動処理
負荷が大きく、巨大なデータをメモリに保持していたり、なんらかのバックグラウンド処理を行うアプリに適している。

・オーナシップの選出
役割の割り当てをスケールさせる方法。

--------------------------
バッチ処理パターン

・MapReduceパターン
・ワークキューシステム
・イベント駆動バッチ処理
 バッチの分割、連結、統合
・協調的バッチ処理

以上。


x postへポスト

SITE_REVIEW オススメ類似レビュー記事

   

【技術本】Docker実践ガイド第2版 のレビュー

書かれている内容は、Dockerを使用した複数コンテナを連携させた環境構築を繰り返して、各種機能(Dockerのコンテナ... 続きを読む

   

【技術本】さわって学ぶクラウドインフラdocker基礎からのコンテナ構築 のレビュー

以下のことを学べる・dockerコンテナの作成、開始、停止、破棄、ログ確認、状態確認・コンテナに入ってシェルを実行、アタ... 続きを読む

   

【技術本】リーダブルコード のレビュー

コードを複数メンバーで共有し理解しやすく管理して生産性を上げるための珠玉の指針が書かれた著作。表面的な見た目の問題から、... 続きを読む

   

【技術本】推薦システム実践入門 のレビュー

「推薦システム」により、従来の人気度ランキングなどの画一的なおすすめでなく、一人一人の興味関心にパーソナライズしたおすす... 続きを読む

   

【技術本】ソフトウェアアーキテクチャの基礎 のレビュー

ソフトウェアアーキテクトとはどういう役割か、どうあるべきかを記した著作。ソフトウェアアーキテクトは、ソフトウェアーキテク... 続きを読む

   

【技術本】並行プログラミング入門 のレビュー

前提知識で以下の言語の基本知識、実装力が求められる。・C言語・RUST言語・アセンブラ:少々本の導入部は、並行処理の必要... 続きを読む

   

【技術本】詳説データベース のレビュー

データベースの内部実装の詳細を解説してくれている一冊。前半は、従来のHDDを利用したデータベースにおける、ストレージのフ... 続きを読む

   

【技術本】データベースリライアビリティエンジニアリング のレビュー

本書はDBA(データベース 管理者)が、DBRE(データベース リライアビリティ(信頼性)エンジニア)に進化するためのフ... 続きを読む

   

【技術本】データ指向アプリケーションデザイン のレビュー

今日の多くのアプリケーションは、演算指向でなく、データ指向になっている。つまり、CPU能力がボトルネックになることはなく... 続きを読む

   

【技術本】Node.jsデザインパターン のレビュー

Node.jsのシングルスレッド、ノンブロッキングI/Oによる独自のアーキテクチャを踏まえた実装における細かなコーディン... 続きを読む


  Copyright 2021-2026 REVIEW_SITE ALL RIGHTS RESERVED.
  このサイトについて/お問い合わせ
  プライバシーポリシー
  総合トップページへ