LoginSignup
12
19

More than 5 years have passed since last update.

マイクロサービスアーキテクチャの設計ポイント

Last updated at Posted at 2017-02-24
1 / 11

どうやってマイクロサービスアーキテクチャを稼動させるか興味を持ったので、調べたことをまとめました。
一番下に参考にしたURLがあります。

マイクロサービスアーキテクチャとは

マイクロサービスアーキテクチャはJames Lewis氏によって提案された言葉で、
ソフトウェアアプリケーションを独立して配置可能なサービスの組み合わせ(suite)として設計する特定の方法を指すもの。


特徴
サービスが分離しているため、サービスごとに異なるプログラミング言語やストレージが選択でき、それぞれが独立してデプロイが可能になる。

Railsのモノシリックアーキテクチャと比較される。
メリット
変更に強い柔軟なシステムを作ることができる。

デメリット
分離したことによるAPIとネットワークの管理とシステムの整合性管理が必要


分離したときにサービスが煩雑になるのを防ぐには

マイクロサービスのデザインパターンがあるのでそれぞれで対応する

- API Gateway:API群を一つにまとめる
- Service Registry / Service Discovery:API群を管理する
- Circuit Breaker:障害時に他のAPIを遮断し、波及を防ぐ
- Polyglot Persistence:異なるデータベースを扱える
- Command Query Responsibility Segregation (CQRS):読み込みと書き込みを分離する
- Tolerant Reader:送信を厳密に、受信を寛容に行う
- Chained Services:サービス同士を順列に接続する
- Asynchronous Messaging:メッセージを複数のサービスで共有する
- Service Instantiation:サービスをVM単位やホスト単位でインスタンス化する
- Consumer-Driven Contracts:消費者の期待するサービスを特化させ品質を上げる
- Domain Events...:サービス同士をつないで、分散型コレオグラフフィーを行うパターン


複数に分散したAPIをまとめるには

API GatewayとService Registry / Service Discoveryを使う
APIをまとめて管理するサービスを用意する
Kongソフトウェアが主流で、APIをまとめて管理できる
- Kong:オープンソースソフトウェア、nginxとcassandraに依存している


フロントエンドにAPIを合わせていくには

APIを時にはまとめてリクエスト回数を減らしたい場合などで、
BFF(Backends for Frontends)を用意し対応する。
- ユーザーとマイクロサービスの間に整形サービスを挟む


通信が失敗したときのリトライ方法

何回もリトライすると負荷となり問題になるかもしれない
- エクスポネンシャルバックオフ(exponential backoff)を検討する
- 再試行時のwait間隔を徐々に(指数関数的に)伸ばす処理


共通サービスをまとめるには

Kongのプラグインにてまとめることが可能
認証の追加(OAuth2.0)
セキュリティ(ACL,IP filtering, Bot Detection, CORS, DynamicSSL)
トラフィック制御(Rate Limiting)
ログ(TCP, HTTP, loggly)


障害時に他のAPIを遮断し、波及を防ぐには

Circuit Breakerを使う
サービスの利用状況を検知して、それ以降のAPIにアクセスしないようにする
Rubyであれば、circuit_breaker,Expeditorライブラリがある


まとめ
- マイクロサービスを導入すると、柔軟性が生まれる。
- 分離したことによる考慮は必要になる。
- マイクロサービスにもデザインパターンがあるので活用する。


参考

マイクロサービスアーキテクチャ/O'REILLY

12
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
19