Edited at

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

More than 1 year has passed since last update.

どうやってマイクロサービスアーキテクチャを稼動させるか興味を持ったので、調べたことをまとめました。

一番下に参考にしたURLがあります。


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

マイクロサービスアーキテクチャはJames Lewis氏によって提案された言葉で、

ソフトウェアアプリケーションを独立して配置可能なサービスの組み合わせ(suite)として設計する特定の方法を指すもの。

http://kimitok.hateblo.jp/entry/2014/11/09/211820


特徴

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

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

https://getkong.org/

https://www.webapi.tokyo/kong%E3%81%A8%E3%81%AF/

https://uramoto.wordpress.com/2015/09/21/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3/

http://qiita.com/yamasaki-masahide/items/68b5a4fe6998222b9e3f