21. Japan Java User Group
Microservices Architecture (MSA)
• サービスによるコンポーネント化
• ビジネスケイパビリティに基づく組織化
• プロジェクトではなくプロダクト
• スマートなエンドポイントと単純なパイプ処理
• 分散ガバナンス
• 分散データマネジメント
• インフラの自動化
• フェイルを前提とした設計
• 進化的な設計
20
22. Japan Java User Group
MSAの2つの側面
• 技術面:分散配置と統合
– サービスによるコンポーネント化
– スマートなエンドポイントと単純なパイプ処理
– 分散データマネジメント
– インフラの自動化
– フェイルを前提とした設計
• 組織面:持続性と分権
– ビジネスケイパビリティに基づく組織化
– プロジェクトではなくプロダクト
– 分散ガバナンス
– 進化的な設計
21
23. Japan Java User Group
MSAの技術面:分散配置と統合
• サービスをサービスで構成する
–静的要素の組み合わせから動的要素の組み合わせへ
• メッセージによる統合
–個々の動的要素は標準プロトコルで協調動作する
• サービスをマネージする
–稼働監視、依存性管理、障害検知と復旧、ver管理
22
24. Japan Java User Group
MSAの組織面:持続性と分権
• サービス全体を持続的に動作させる
–ソフトウェア開発からITサービス運営へ
• ドメイン固有の技術と運営
–ドメインごとの自主性を認め、標準化を否定する
• ドメイン個別のライフサイクル
–個別再構築の許容、あるいは犠牲的アーキテクチャ
23
25. Japan Java User Group
MSAへの理解
• 広義には、粒度ではなく関係性に注目を
• どの粒度でもよい(マイクロに惑わされない)
–アプリとコンポーネント
–システムとサブシステム
–システム全体と個別システム
• 重要なのはサービス相互の関係性のあり方
–複雑なものを、いかに管理するのか
24
26. Japan Java User Group
MSAへの理解
• 技術論と組織論の両輪が重要
–技術面:分散配置と統合
–組織面:持続性と分権
• 巨大なサービスはトップダウンに管理できない
–サービスとチームを分割していく
–それをDevOpsが保証していく
25
27. Japan Java User Group
サービスの分割
• モジュール分割の基本は「時間軸の中で変化す
るスピードの違いの境目」で切る
–経年劣化するものは交換可能にする
–消費するものは充填可能にする
–可能な限りは標準化して交換や充填を容易にする
–外部要因と内部要因に注意
–機能だけではなく非機能にも気を遣う
26
36. Japan Java User Group
アーキテクチャの変遷
• どこに処理能力があるのか?
–メインフレーム>クラサバ>ウェブ
» PCやインターネットが大きく変えた
–現在はクラウドという超巨大サーバ
• その処理能力をどう管理するか?
–サーバとクライアントという時代から、超巨大なサ
ービスを管理する時代に
35
37. Japan Java User Group
サービス管理のトレンド
• 全てを自動化する
–カナリアリリース
–ダークカナリアリリース
–Chaos Monkey
• 全体的にサービス品質を高めるために、部分的
な品質劣化を許容する
• 機能の分割が許容できるようになってきた
36
38. Japan Java User Group
マイクロサービス
• 技術面:分散配置と統合
• 組織面:持続性と分権
• 巨大なサービスはトップダウンに管理できない
–でも、ボトムアップだけではうまくいかない
–適切に全体を管理しつつ、ボトムアップを許容する
–「あるルールの元で多様性を保証する」
37
39. Japan Java User Group
プラットフォーム
• 巨大なサービスを管理するための基盤
–あるルールを定義し、それに則る限りにおいては、
多様性を保証する
• まだまだ技術的にも設計的にも未成熟な状況
–先端的な事例がでてきて、OSSなどを通じて広まり
つつある
–成熟すればプライベートなPaaSは増えていく
38
40. Japan Java User Group
最後に
• プラットフォームをデザインする、プラットフ
ォームを利用するという視点を持とう
–「アプリを作って、それを動かすサーバを作る」と
いう考え方は終わる
–プラットフォームに従うかぎりは柔軟性を保証する
–今後、プラットフォームの標準化が進めば、より柔
軟性が高まっていくと思われる
39