Springが、Netflixが公開している彼らのOSS群を説明している記事を読みました。ちょっと、記憶に止めておきたい内容を探っているのでそのメモがてら。
記事: http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html
これは、Netflixのmicroservicesを構成するツール群を説明していました。
- Service Discovery
- Eureka Clients
- Circuit Breaker
- Hystrix
- Intelligent Routing
- Zuul
- Client Side Load Balancing
- Ribbon
Service Discovery: Eureka Clients
- Service Discoveryはmicsoservicesベースのアーキテクチャとして大事な要素
Circuit Breaker
Hystrix Clients
- Netflixは、CircuitBreakerを実装したもの。Microservicesでは、複数のサービスコールのレイヤを持っている。
-
低レベルのサービス障害が発生すると、障害がユーザまで伝っていくので、障害のあったサービスをフォールバックすることで障害の伝搬を抑制することが目的
- ↑の状態になるサービスは、例えば
/healthの応答として “CIRCUIT_OPEN”というstatusを返す
Dashboard
- circuitがOpenかCloseかを知ったり、応答速度を監視するためのダッシュボードですね
Turbin
- すべての
/hystrix.streamエンドポイントを、Dashboardの/turbin.streadmエンドポイントに統合するアプリケーション。アプリのインスタンスはEurekaにある。
Declarative REST Client
Feign
- Feignは、Web serviceクライアント
この記事では、Spring frameworkとして使える方法も紹介してました。
Client Side Load Balancer
Ribbon
- クライアント側でのロードバランサ。HTTP、TCPベース。
- Feignは常にRibbonを使うようになっている。
External Configuration
Archaius
- クライアント側の設定ライブラリ
- NetflixのすべてのOSSコンポーネントの設定で使われているらしい
Router and Filter
Zuul
- microservice architectureにおけるサービスのルーティングを行う
- JVMベースの、ルーティング + サーバ側ロードバランサを備えたライブラリ
- 以下の機能を提供する
- Authentication
- Insights
- Stress Testing
- Canary Testing
- Dynamic Routing
- Service Migration
- Load Shedding
- Security
- Static Response handling
- Active/Active traffic management
以上。
Microservicesは基盤技術やツールや体制が充実していないと破綻することがよく言われるようになりました。今回のツール群をみるだけでも、保守や不具合解析以外にも、サービス間のつながりをどうするかとか、障害発生時もサービス全体として正しく振る舞うにはとか、そういう設計も重要な位置を占めていることが容易に想像できます。
事業に対するシステム構成上、Monolithicで十分であればそれに越したことは無いですね。。。