DESIGN PATTERN

MICROSERVICES ARCHITECTURE
Lei Xu 2016.06
何故MicroServices?
「開発⽣産性の向上」が⽬的
• “ ” “DevOps” “ ”
• DevOps
継続的デリバリ
アジャイル開発
DevOps
マイクロサービス
開発⽣産性の向上
開発効率の向上+開発期間の短縮
テクニカルレイヤーに分かれるロール
Presentation
Data Access
Business Logic
Application
UIスペシャリスト
ミドルウェア
スペシャリスト
DBA
PMO
Dev
QA
Ops
Biz Owner
Product A
Product B
Product C
組織的、カルチャー的な進化
伝統的な組織から業務機能中⼼の組織へ
アプリケーション・アーキテクチャの変遷
http://www.pwc.com/en_US/us/technology-forecast/2014/cloud-computing/features/assets/feature02-figure02.jpg
アーキテクチャの進化
Presentation
DAO
Business Logic
JavaEE (.war)
Presentation
DAO
Business Logic
EJB (.ear)
Presentation
Data Access Layer
Business Logic
Rails (Ruby)
EJS Template
Data Access Services
Server Side Script
EJS(Node.js)
密結合アーキテクチャ・アプリケーションの例
1.⼀⽬で分かること
• テクノロジーの新旧とそれほど関係なく、アーキテクチャを決めたのはデザイン
新しいテクノロジーで「焼き直し」のやり⽅でシステム開発し、失敗する事例も少なくない
• エンドユーザーが使うプレゼンテーション層を含め、すべてが該当システムソースの中にある
2.次は、アプリケーションのライフサイクルの観点で考える
• 開発
• デプロイメント
• スケーリング
密結合アーキテクチャの課題 Quality Cost Delivery
開発
アーキテクチャの複雑なMonolithicアプリを理解するのが困難であるため、
単体開発の段階でも生産性が低下
◎
設計によるMonolithicアプリ中のモジュール境界線が不明確で、
着実なモジュール化ができず、品質が低下
◎
巨大化のアプリに対し、開発環境IDEの操作性が低くなり、開発生産性低下 ◎
巨大Web Containerの起動が遅いため、開発・テストの生産性低下 ◎
トラブルシューティング時、不具合のコンポーネントの特定・修正の周期が長い ◎
コンポーネント間の密結合のため、
(新機能のための)新たなテクノロジー採用困難による新アプリリリースの長い周期
◎
Monolithicアプリの場合、新たなフレームワークへ移行するときの品質リスクと長い周期 ◎ ◎
密結合のアプリのため、チーム間のコラボレーション頻度が高くなり、開発生産性低下 ◎ ◎
開発メンバー増員のコストパフォーマンスが低い ◎ ◎
デプロイメント
巨大Monolithicアプリ(war、ear)のデプロイが時間かかる ◎
巨大化のアプリのリリース周期に合わせるため、
頻繁なデリバリー需要のあるコンポーネントのタイムリーなリリースできない
◎
コンポーネント間の密結合のため、変更のないコンポーネントでも不具合発生→
アプリのデプロイが負担の高い作業になり、頻繁なデプロイ需要が抑えられる
◎ ◎
スケーリング 環境ごとの冗長化のため、スケーリングのコストパフォーマンスが低い*Scale Cube ◎
環境ごとの冗長化のため、スケーリングのスピードが低い*Scale Cube ◎
密結合アプリの課題
MicroServicesの優位性
MICROSERVICESのコンセプト
MicroServicesの特徴:
• Loose Coupling ー 個々のサービスが独⾃でプロセスできる
• High Cohesion ー 業務上の機能に沿って構築され、該当業務機能に集中する
• Technology Agnostic ー 特定の⾔語、ランタイムに拘らない
MicroServicesのコンセプト・定義:
• Autonomy ー 独⾃で動作し、ビジネスバリューを提供できる
Scale Cube:スケーリング⽅式でMicroServicesを理解する
Z軸:データのパーティションニングによるス
ケーリング
• Data Sharding
X軸:環境の冗⻑化によるスケーリング
・Load Balancingによる冗⻑化
Y軸:機能分解によるスケーリング
• MicroServicesアーキテクチャ
• ライブラリ化
SOA MicroServices
Architecture Service Oriented
SOAと同じですが、新しいアーキテクチャと⾔うより、デ
ザインパターン
Design Focus Reuse(サービスの再利⽤すること) Autonomy(業務的なバリューを表すこと)
Cohesion Logical Cohesion(ロジカル的な粘着度、集約度) Functional Cohesion(業務機能的な粘着度、集約度)
Coupling Tight Coupling(密結合化と依存性)
Loose Coupling(疎結合化と独⽴性、他のサービスに依
存せず、独⾃で該当の業務機能を処理できる)
Implementation
Examples
UI Layer
Messaging Service
Data Access Service
Order Service
Shipment Service
MICROSERVICES VS SOA
MICROSERVICESアーキテクチャの粒度
粒度の荒すぎる場合
• 密結合のアーキテクチャと変わらない
粒度が細かすぎる場合
• ランタイムのオーバーヘッド
• 過剰なネットワーク・ホップ
• システムの複雑度が⾼くなり、理解が
• 各サービスの管理(Service DiscoveryやAPI Managementの需要)
• オペレーションのオーバーヘッド
MicroServicesアーキテクチャ粒度のデザインはスキルというよりアートかも?
MicroServicesの優位性 密結合アーキテクチャの課題
アプリの複雑度を下げる必要性
アーキテクチャの複雑なMonolithicアプリを理解するのが困難であるため、単体開発の段階でも⽣産性が低下
トラブルシューティング時、不具合のコンポーネントの特定・修正の周期が⻑い
設計によるMonolithicアプリ中のモジュール境界線が不明確で、着実なモジュール化ができず、品質が低下
快適な開発環境IDE 巨⼤化のアプリに対し、開発環境IDEの操作性が低くなり、開発⽣産性低下
Web Containerの軽量化
巨⼤Monolithicアプリ(war、ear)のデプロイが時間かかる
巨⼤Web Containerの起動が遅いため、開発・テストの⽣産性低下
継続的デリバリー(CD)
巨⼤化のアプリのリリース周期に合わせるため、頻繁なデリバリー需要のあるコンポーネントのタイムリーなリリースができない
コンポーネント間の密結合のため、変更のないコンポーネントでも不具合発⽣→
アプリのデプロイが負担の⾼い作業になり、頻繁なデプロイ需要が抑えられる
テクノロジー・ロックインから解放
Monolithicアプリの場合、新たなフレームワークへ移⾏するときの品質リスクと⻑い周期
コンポーネント間の密結合のため、(新機能のための)新たなテクノロジー採⽤困難による新アプリリリースの⻑い周期
アプリのスケーリング
環境ごとの冗⻑化のため、スケーリングのコストパフォーマンスが低い*Scale Cube
環境ごとの冗⻑化のため、スケーリングのスピードが低い*Scale Cube
開発体制の柔軟性
密結合のアプリのため、チーム間のコラボレーション頻度が⾼くなり、開発⽣産性低下
開発メンバー増員のコストパフォーマンスが低い
既存課題を解決するため、MicroServices
仮説アプリのMicroServices化
All-In-One UI
Recommendation Service
Product Info Service
密結合Java WAR
Review Service
Order Service
全体密結合
密結合アプリケーションの疎結合化①
密結合アプリケーションの疎結合化②
All-In-One UI
Presentation Layer
Web ServicesのMicroServices化
Product Info Service
Recommendation Service
Review Service
Order Service
Browse Products UI
Presentation Layerも疎結合化
Product Info Service
Recommendation Service
Review Service
Order Service
Checkout UI
Order Management UI
Account Management UI
密結合アプリケーションの疎結合化③
サービスとデータをスーケル・アウト(X,Z軸)
Browse Products UIBrowse Products UI
Checkout UICheckout UI
Order Management UIOrder Management UI
Account Management UIAccount Management UI
Review ServiceReview Service
Recommendation ServiceRecommendation Service
Product Info ServiceProduct Info Service
Order ServiceOrder Service
密結合アプリケーションの疎結合化④
シングル・エントリポイントAPI Gateway
API GATEWAY
複数のMicroServicesエントリポイントへのアクセス
Review ServiceReview Service
Recommendation ServiceRecommendation Service
Product Info ServiceProduct Info Service
Order ServiceOrder Service
View Controller
Model
PC / ブラウザ
ネイティブアプリ
View Controller
Model
複数のMicroServicesエンドポイントへのアクセス
View Controller
Model
PC / ブラウザ
View Controller
Model
Product Info Service
REST
API
Recommendation
Service
REST
API
Order Service
REST
API
Review Service
AMQP
API
ネイティブアプリ
API GATEWAY
シングル・エンドポイントへのアクセス
View Controller
Model
View Controller
Model
Product Info Service
REST
API
Recommendation
Service
REST
API
Order Service
REST
API
Review Service
AMQP
API
API Gateway
REST
Proxy
Event
Pub/Sub
REST
API
WS
API
ブラウザ
ネイティブアプリ
API GATEWAY
NETFLIX API
NETFLIX API
API GatewayとService-side Discovery
API GATEWAY
Server-side Discovery
Client
Webアプリ
モバイルアプリ
Recommendation
Service
Load
Balancer
API
Gateway
Service
Registry
Order
Service
Product Info
Service
10.11.2.34:8000 ->
entry/product
10.11.4.31:8080 ->
entry/recommendation
10.12.88.52:88 ->
entry/order
②
④
①
③ ⑤
①Services Registry
②Recommendation Service Request
③Load Balancing
④Service Discovery(Optional Caching)
⑤Request Forwarding
疎結合化のPresentation層のDiscovery
CONTENT ROUTERによるDISCOVERY
複数のUIエントリポイントからどのように特定する(Discovery)
Browser Checkout UI
Load
Balancer
Content
Router
Order
Management UI
Browse Products UI
/products
/checkout
/orders
②① ③
①Checkout UI Request
②Load Balancing
③UI Entry Point Discovery & Request Forwarding
仮説アプリのMicroServices化完成姿
MICROSERVICES化された仮説アプリの姿
Webアプリ
モバイルアプリ
Load
Balancer
Service Registry
Content
Router
API
Gateway
Checkout UI
Order
Management UI
Browse Products
UI
Account
Management UI
Recommendation
Service
Review Service
Product Info
Service
Order Service
Load
Balancer
Bimodal ITアーキテクチャ
MicroServicesアプリ
Data Access
Layer DA MS
REST API
SESSION
REST API
IMDG MS
REST API
MSG MS
AMQP API
Presentation
Layer
Web App Web App Mobile App
Business Logic
Layer BL MS
REST API
BL MS
REST API
BL MS
REST API
密結合アプリ
Presentation
DAO
Business Logic
JavaEE /EJB
データ / メッセージ
IMDG
REST API JAVA API .Net API C++ API
AMQP Message Service Bus
JSON-RPC JAVA/JMS API AMQP
MSG Broker
API
SQL/NoSQL/Hadoop
REST API Native API
BIMODAL IT:⼆種類DESIGN PATTERNの共存
PaaS
IaaS・IaaS++
Presentation
DAO
Business Logic
JavaEE/.NET
2nd Platform
データ
レイク
開発チームと運⽤チームとのコラボレーションに
より継続的なデリバリの実現。開発の作業に集中
できる、運⽤に必要なサーバのセットアップの⼿
間が掛からないDevOpsプラットフォーム。
IoTやビッグデータからもたらされるノウハウや
新しいアイデアを⽣み出すための基盤として⼤量
データを低価格で短時間で効率のよいデータ処理
を実現。新しいアイデアはアプリケーション進化
としてフィードバックされることを想定
DevOpsの実現
2
1
3
オンデマンドなH/Wリソース提供を実現。キャ
パシティ分析や性能劣化検知など基盤管理を容易
にする。サービスカタログ化によりインフラ提供
のプロセスを標準化。
2
1
3
MS
API
MS
API
MS
API
3rd
Platform
MobileWeb
BIMODAL ITのFULL STACK
• Martin Fowler(2016) Microservices Resource Guide
http://martinfowler.com/microservices/
• Martin L. Abbott & Michael T. Fisher(2015) The Art of Scalability(Book)
http://theartofscalability.com/
• Sam NewMan(2015) Building Microservices(Book)
http://samnewman.io/books/building_microservices/
REFERENCES
THANKYOU

Design Pattern MicroServices Architecture in Japanese