マイクロサービスに⾄る歴史とこれから
2021/9/18
グロース・アーキテクチャ&チームス株式会社
鈴⽊雄介
XP祭り2021 @ Online
⾃⼰紹介
鈴⽊雄介
• Graat(グラーツ)
» グロース・アーキテクチャ&チームス株式会社
» 代表取締役 社⻑
• アイムデジタルラボ(三越伊勢丹グループ)
» 取締役
• ⽇本Javaユーザーグループ
» CCC運営委員⻑/サブリーダー
• その他
» @yusuke_arclamp
» http://arclamp.hatenablog.com/
1
アジェンダ
2
• 導⼊
• Agile
• Cloud
• DevOps
• Microservices
• これからのための技術
» Cloud Native
» Serverless
• これから
• まとめ
導⼊
3
導⼊
ITの改善サイクルを早く回す
• ユーザーから学び、その結果を提供するまで
»“開発”が早いだけでは意味がない
4
ユーザー
企画
開発
運⽤
導⼊
その時の課題を、新しい技術が解決する
• テクノロジーやテクニックが改善サイクルを早くする
»テクノロジー︓技術そのもの
»テクニック ︓⼈による技術の活かし⽅
5
2001年 Agile
202X年 これから
2009年 DevOps
2006年 Cloud
2015年 Serverless 2015年 Cloud Native
2014年 Microservices
テクノロジー
テクニック
導⼊
そろそろ、新しい⾔葉が出てきそう︖
• 新しいテクノロジーを⼟台にテクニックが成⻑する
• Cloud NativeやServerlessを⼟台にしたテクニックとは︖
6
2001年 Agile
2023年 これから
2009年 DevOps
2006年 Cloud
2015年 Serverless 2015年 Cloud Native
2014年 Microservices
8年
8年︖
8年
Agile
7
Agile
アジャイルとは
• 2001年︓アジャイルソフトウェア開発宣⾔
• ウォーターフォール的な⼿法への解決策
8
アジャイルソフトウェア開発宣⾔
https://agilemanifesto.org/iso/ja/manifesto.html
プロセスやツールよりも個⼈と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を
左記のことがらに価値があることを認めながらも、私たち
は右記のことがらにより価値をおく。
Agile
ウォーターフォール
• 初期に全体計画を⽴案し、それに沿って実⾏していく
»計画︓ゴールを定義し、それを実現する計画を⽴案
»実⾏︓その計画に従って実⾏
»計測︓フェーズごとに計画とのズレを把握
»調整︓計画通りになるように調整
▸調整要素︓リソース → スケジュール→スコープ
9
基本設計 実装 テスト
要件定義
計
画
受
⼊
成果物
⽂書 ⽂書 ⽂書 ⽂書
⽂書
要件
Agile
2000年ごろに増えつつあった状況
• インターネットの急速な普及により、B2CやB2B領域の
Webサービスが増えてきた
»ユーザーが社内にないから正しい機能定義が困難
»周囲環境の変化に強く影響を受けてしまう
»どんどん新しい技術が出てくる(未経験な技術)
• 計画の精度が上げにくいプロジェクトが増えてきた
»⽬標が正しいかもわからず、⾒積もり精度も低い
»しかも、リリース後も改修が続いていく
▸プロジェクトからプロダクトへ
10
Agile
ウォーターフォールの課題
• 計画精度が低い状況では破綻しやすい
»計画︓⽬標が完了までに変化し、かつ⾒積もりも正しくない
»計測︓⽂書では”動き”がわからず、確認できるのは最終段階
▸ユーザービリティは触ってみないと分からない
»調整︓計画も計測も曖昧だから、進捗率が信⽤できない
▸結果、PMの調整能⼒に依存しやすくなる
• リリースはゴールではなく、スタート
»ゴールしたらプロジェクトは解散してしまう
11
アジャイルの仕組み
• 短期の再計画&実⾏を通じて調整し続ける
»計画︓⼀定の期間1=作業量を定め、その範囲でゴールを計画
»実⾏︓その⼩さな計画に従って実⾏。実⾏中の調整は禁⽌
»計測︓ゴール後に完成品を⾒て判断する
»調整︓次の計画をもって調整とする
▸調整要素︓スコープのみ
成果物
成果物
要件 要件 要件
成果物
Agile
12
実装
計
画
受
⼊
設計
テスト
実装
計
画
受
⼊
設計
テスト
実装
計
画
受
⼊
設計
テスト
1 ⼀定の期間とは1週間〜3ヶ⽉程度、チームメンバーは安定させる
Agile
アジャイルは電⾞型
• 定期的に電⾞を運⾏する
»①その時点で並んでいる⼈
から定員まで乗⾞
»②電⾞が発⾞したら、到着
するまでは乗降禁⽌
»③次の電⾞が来るまで並び
順は⾃由に変えていい
»④到着した⼈と話して、成
果を確認する
13
b a
出発ホーム 到着ホーム
d c b a
出発ホーム 到着ホーム
d c b a
出発ホーム 到着ホーム
f e
出発ホーム 到着ホーム
d
c b a
d c
定員︓2名
定員︓2名
①
③
④
f
e
定員︓2名
②
Agile
⽐較
• ウォーターフォール:計画主導
»最初に⽬標を定め、リリース時に100点を出すことを重視する
»計画が正しいなら、効率的で⻑期間でも管理可能
• アジャイル:調整主導
»その時点の状況に合わせて⽬標を定めていく
»試⾏錯誤を前提にするなら、効率的で永続的に管理可能
14
アジャイル
まとめ
• 開発プロセスがITの在り⽅を変えた
»ビジネスとソフトウェア開発を地続きにした
▸ソフトウェア開発を継続的な営みとして位置付け
• 再計画で調整するのがコロンブスの卵
»試⾏錯誤にはタイムボックス型管理が向いている
▸ソフトウェア開発だけではない領域にも広がっていっている
15
ユーザー
企画
開発
運⽤
Cloud
16
Cloud
Cloudとは
• 2006年、Google社CEO エリック・シュミットが名付ける
»NISTによるクラウドコンピューティングの定義
▸必要な時にセルフサービスで利⽤できる
▸ネットワークを通じて利⽤できる
▸リソースは共有され、必要な分が割り当てられる
▸いつでも必要なだけの量を調達することができる
▸利⽤状況に応じて課⾦される
17
データやアプリケーションをインターネットの向こう側にあるサーバーに配置し、ユーザーの
持っているパソコンやスマートフォンなどのデバイスから利⽤可能にする。すべてが雲の中の
どこかにあればいい
参考
クラウド・コンピューティングの定義
18
オンデマンド・ セルフサービス
(On-demand self-service)
ユーザは、各サービスの提供者と直接やりとりすることなく、必要に応じ、⾃動的に、サーバーの稼
働時間やネットワークストレージのようなコンピューティング能⼒を⼀⽅的に設定できる。
幅広いネットワークアクセス
(Broad network access)
コンピューティング能⼒は、ネットワークを通じて利⽤可能で、標準的な仕組みで接続可能であり、
そのことにより、様々なシンおよびシッククライアントプラットフォーム(例えばモバイルフォン、
タブレット、ラップトップ コンピュータ、ワークステーション)からの利⽤を可能とする。
リソースの共⽤
(Resource pooling)
サービスの提供者のコンピューティングリソースは集積され、複数のユーザにマルチテナントモデル
を利⽤して提供される。様々な物理的・仮想的リソースは、ユーザの需要に応じてダイナミックに割
り当てられたり 再割り当てされたりする。物理的な所在場所に制約されないという考え⽅で、ユーザ
は⼀般的に、提供されるリソースの正確な所在地を知ったりコントロールしたりできないが、場合に
よってはより抽象的なレベル (例︓国、州、データセンタ)で特定可能である。リソースの例として
は、ストレージ、処理能⼒、メモリ、およびネットワーク帯域が挙げられる。
スピーディな拡張性
(Rapid elasticity)
コンピューティング能⼒は、伸縮⾃在に、場合によっては⾃動で割当ておよび提供が可能で、需要に
応じて即座にスケールアウト/スケールインできる。ユーザにとっては、多くの場合、割当てのため
に利⽤可能な能⼒は無尽蔵で、いつでもどんな量でも調達可能のように⾒える。
サービスが 計測可能であること
(Measured Service)
クラウドシステムは、計測能⼒1を利⽤して、サービスの種類(ストレージ、処理能⼒、帯域、実利⽤
中のユーザアカウント数)に適した管理レベルでリソースの利⽤をコントロールし最適化する。リ
ソースの利⽤状況はモニタされ、コントロールされ、報告される。それにより、サービスの利⽤結果
がユーザにもサービス提供者にも明⽰できる。
1. 通常、従量課⾦(pay-per-use)または従量請求
(charge-per-use)ベースで計算される。
The NIST Definition of Cloud Computing
https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-145.pdf
⽇本語訳 https://www.ipa.go.jp/files/000025366.pdf
Cloud
X as a Service(XaaS)
• 全てがサービスとして提供される
»仮想化技術によってシステム構成や運⽤作
業までサービス化できるようになった
»PaaSの進化として現れている
▸インスタンスの提供
▸ミドルウェア単体の提供︓データベースなど
▸Webアプリケーションの実⾏環境
ü コンテナランタイム
ü サーバレス
19
ハードウェア
ネットワーク
仮想化OS
OS
ミドルウェア
コード・設定
データ
IaaS
PaaS
SaaS
ユーザ⾃⾝の管理範囲
Cloud
Infrastructure as Code
• 仮想化されたインフラやプラットフォームがコードから操
作ができる
»つまり、「インフラを構成する」という作業が⾃動化できる
»Terraform、Ansible、AWS CloudFormation、Pulumi....
• ⾮機能要件がコーディングで表現できる
»これまでは機能要件しかコーディングできなかった
»サービス(機能+⾮機能)がコード化された世界
20
Cloud
クラウドがもたらした概念
• インフラを「所有」から「利⽤」へ
»発電機を所有するのではなく、発電所の電⼒を利⽤する
»仮想化技術によって「インフラ構成」がサービスとして提供でき
るようになった
• インフラ構築がソフトウェア化された
»「インフラ構成を構築する作業」がコードで表現できる
»インフラ構成のバージョン管理ができる
21
DevOps
22
DevOps
DevOpsのはじまり
• 2009年︓DevOps
»Agile 2008︓Agile Infrastructure & Operations
▸政府系データセンターの移⾏にスクラムを導⼊した事例発表
▸インフラ/運⽤系にアジャイル⽂化を導⼊しようとする機運
»Velocity 2009︓10+ Deploys Per Day
▸Flickrにおける開発と運⽤の協業について
»Devopsdays Ghent 2009
▸ここから「DevOps」が⽣まれる
23
参考︓「The (Short) History of DevOps」(Damon Edwards) https://www.youtube.com/watch?v=o7-IuYS0iSE
DevOps
“10+ Deploys Per Day”のテーマ
• そもそも開発と運⽤は仲が悪かった
»「新機能追加」と「安定稼働」は相反する
• でも、頻繁に機能追加することが前提になった
»リリース回数の圧倒的な増加
»システムの停⽌=価値の棄損
• ツールを活⽤し、⽂化を変えていく
»ツール︓IaC、CI/CD、メトリクス、ChatBot
»⽂化︓リスペクト、信頼、⼼理的安全性、
24
※2009年⽤語
ツール︓Automated Infrastructure, Shared version control, One step build and deploy, Feature flags, Shared Metrics, IRC and IM robots
⽂化︓Respect, Trust, Healthy attitude about failure, Avoiding Blame
DevOps
NoOpsの登場
• 2011年︓NoOps
»「I Donʼt Want DevOps. I Want NoOps.」
▸NoOps は、アプリケーション開発者がオペレーションプロフェッショナル
と話す必要がないことを意味します。
▸Ops は <略> 責任を持ってアプリケーションを迅速に展開するために必要
なツールを開発者に提供できます。
»「NoOps」という⾔葉が強かったため炎上
▸運⽤はいらない︖運⽤担当者はいらない︖
25
I Donʼt Want DevOps. I Want NoOps.
https://www.forrester.com/blogs/11-02-07-i_dont_want_devops_i_want_noops/
DevOps
あるいはPaaS
• 2012年︓Ops, DevOps and PaaS (NoOps) at Netflix
»Dev組織にいる数名のDevOpsエンジニアが⾃動化を推進
»NoOpsでデプロイされ、何かあれば数百名の開発者に直接通知
»開発者がやりたいことはツールを使ってセルフサービス
»Ops組織はなく、開発者が運⽤で何かしたいと思った時、Opsの
⼈と話す必要はない
▸運⽤センター(NOC)はないが、SREチームはいる
»これをDevOpsの進化版としてPaaS (NoOps)と呼んでいる
26
Ops, DevOps and PaaS (NoOps) at Netflix
http://perfcap.blogspot.com/2012/03/ops-devops-and-noops-at-netflix.html
DevOps
DevOps/NoOpsがもたらした概念
• システムを継続的に変更し、動かし続ける
»開発者は「作る」から「作って動かす」まで担当する
▸開発者がインフラ構築、リリース作業、障害通知、復旧作業をやる
ü セキュリティとか品質も
▸すべてツール化&⾃動化され、セルフサービス化される
27
成果物
アプリ
Dev Ops 成果物
Dev
SRE
Ops
ツール
インフラ
アプリ
インフラ
DevOpsエンジニア
Microservices
28
Microservices
マイクロサービスアーキテクチャ
• 2014年︓「Microservceis」 by James Lewis
»2011年︓先端的なウェブサービス企業が似たようなアーキテクチ
ャスタイルを取っていることが議論に
»Microservices - Java, the Unix Way
▸33rd Degree 2012
• 起きていた事象に名前を付けたもの
»コンセプトが先にあったわけではない
29
Microservceis
http://martinfowler.com/articles/microservices.html
Microservices - Java, the Unix Way
http://2012.33degree.org/talk/show/67
Microservices
マイクロサービスの特徴
• サービスによるコンポーネント化
• ビジネス視点でのチーム分割
• プロジェクトではなくプロダクト
• スマートなエンドポイントと単純なパイプ(API連携)
• 分散ガバナンス(脱標準化)
• 分散データ管理
• インフラの⾃動化
• 障害のための設計
• 進化的設計
30
https://martinfowler.com/articles/microservices.html
←DevOpsな部分
←アジャイルな部分
Microservices
モノリシックのデメリット
• 1つのシステム内に全ての機能
»影響調査とリグレッションテストに⼯数を消費
▸実⾏時の依存/影響範囲が⾒えにくい
• 巨⼤化すると実⾏難易度があがる
»個別変更でも全体スケジュール調整
▸部分変更でもシステム全体をリリース
»部分への性能劣化が全体に波及しやすい
31
Microservices
Microservicesのメリット
• 機能別にサービスを分割する
»APIにより実⾏時の依存/影響範囲が限定しやすい
»サービスが独⽴しており、他とは疎結合
• 巨⼤化してもサービス単位で管理
»サービス単位に好きなタイミングで仕様変更、リ
ソース変更ができる
▸「速さ」ではなく「独⽴性」が重要
32
Microservices
どうサービスを設計するか︖
33
どうサービスを設計するか︖
Domain-Driven Design(2003)
• サービス分割の設計指針として有効
»システム構造は、対象ドメインの概念と近づけなさい
▸そうすれは業務の変更についていきやすくなるから
»ドメインのことはビジネス側の有識者に聞きなさい
▸ビジネスの成⻑とともに継続的に進化させていきなさい
• ドメイン︖
»その業務を成り⽴たせるための作業、⼿順、規則、情報など
»ビジネスの仕組みというよりは、それを業務の仕組み
34
どうサービスを設計するか︖
サービスの分割は変化の予測
• 変化の⽅向やスピードが異なる部分を⾒つける
»変化の⽅向やスピードが同じなら、同じサービスにいれるべき
»それが異なるならサービスを分割しておいたほうが安全
»変化の発⽣はビジネス成⻑、展開、外部環境などに起因
»その予測はビジネス側の有識者のほうが精度が⾼い(はず)
▸捨てるかもしれない業務は切り離して作る、みたいなセンスが前提
▸性能やセキュリティで分割することもあるが、多くの場合、そこの起因も
ビジネス側で判断できる(はず)
35
Microservices
どうサービスを実装するか︖
36
どうサービスを実装するか︖
Twelve-Factor App(2011)
• 疎結合を実現するための実装
»コーディング時、ビルド&デプロイ時、実⾏時、運⽤時などにお
いて他者/環境に対する依存度を下げることで取り回しを良くして
いくための⼯夫
»Beyond The Twelve-Factor App(2016)
▸クラウド前提で変更と追加(3つ)
▸特に認証認可(シングルサインオン)は⾮常に重要
37
Twelve-Factor App(2011)
• I. コードベース
» バージョン管理されている1つのコードベ
ースと複数のデプロイ
• II. 依存関係
» 依存関係を明⽰的に宣⾔し分離する
• III. 設定
» 設定を環境変数に格納する
• IV. バックエンドサービス
» バックエンドサービスをアタッチされた
リソースとして扱う
• V. ビルド、リリース、実⾏
» ビルド、リリース、実⾏の3つのステージ
を厳密に分離する
• VI. プロセス
» アプリケーションを1つもしくは複数のス
テートレスなプロセスとして実⾏する
38
• VII. ポートバインディング
» ポートバインディングを通してサービス
を公開する
• VIII. 並⾏性
» プロセスモデルによってスケールアウト
する
• IX. 廃棄容易性
» ⾼速な起動とグレースフルシャットダウ
ンで堅牢性を最⼤化する
• X. 開発/本番⼀致
» 開発、ステージング、本番環境をできる
だけ⼀致させた状態を保つ
• XI. ログ
» ログをイベントストリームとして扱う
• XII. 管理プロセス
» 管理タスクを1回限りのプロセスとして実
⾏する
https://12factor.net/ja/
Beyond The Twelve-Factor App (2016)
• One codebase, one
application
• API first
• Dependency management
• Design, build, release,
and run
• Configuration, credentials,
and code
• Logs
• Disposability
• Backing services
39
• Environment parity
• Administrative
processes
• Port binding
• Stateless processes
• Concurrency
• Telemetry
• Authentication and
authorization
https://tanzu.vmware.com/content/blog/beyond-the-twelve-factor-app
どうサービスを実装するか︖
Beyond Beyond The Twelve-Factor App
• さらなる進化
»Monorepo(2017)
»Ahead-Of-Time (AOT) コンパイル
»オブザーバビリティ
»サービスメッシュ
• いずれにせよコンテナライズは重要
40
Microservices
Microservice化
41
Microservice化
Microserviceization?
• 既存システムのマイクロサービス化
»既存システムは改修せず、同⼀機能を
切り出して作成し、段階的にすり替え
ていくことが望ましい
»ストラングラーパターン
• ⼀括再構築はうまくいかない
»⼤規模開発はリスクが⾼い
»無駄なものまで移植する
42
https://www.flickr.com/photos/paulafunnell/3871868188/
Microservice化
ストラングラーパターン
• 既存システムを使わないようにしていく
»最終的に廃棄するか、⼀部だけを残していく
43
サービス
A
システムA
機能A
機能B
機能C
クライアント
システムA
機能A
機能B
機能C
クライアント
機能A
サービス
A
機能A
サービス
B
機能B
サービス
C
機能C
クライアント
システムA
機能A
機能B
機能C
Microservices
まとめ
44
Microservices
まとめ
• 巨⼤サービスを継続的に改善させる仕組み
»巨⼤サービスであってもアジャイルを機能させる
»チームごとにサービスを分割し、独⽴性を担保する
»DevOpsがシステムの分割を推進した
»疎結合にはAPI連携とデータ管理の分割が必要になってくる
▸この部分の進化は次章以降で
• どのようにマイクロサービス化していくのか︖が重要
45
ユーザー
企画
開発
運⽤
これからのための技術
46
これからのための技術
Cloud Native
47
Cloud Native
Cloud Nativeとは
• CNCF(2015)による定義(2018)
48
CNCF Cloud Native Definition v1.0
https://github.com/cncf/toc/blob/main/DEFINITION.md
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドな
どの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実⾏する
ための能⼒を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイ
クロサービス、イミュータブルインフラストラクチャ、および宣⾔型APIがあります。
これらの⼿法により、回復性、管理⼒、および可観測性のある疎結合システムが実現します。 これら
を堅牢な⾃動化と組み合わせることで、エンジニアはインパクトのある変更を最⼩限の労⼒で頻繁か
つ予測どおりに⾏うことができます。
Cloud Native Computing Foundationは、オープンソースでベンダー中⽴プロジェクトのエコシステ
ムを育成・維持して、このパラダイムの採⽤を促進したいと考えてます。 私たちは最先端のパターン
を⺠主化し、これらのイノベーションを誰もが利⽤できるようにします。
Cloud Native Computing Foundation
https://www.cncf.io/
Cloud Native
Cloud Native Trail Map
• Cloud Nativeへの道のり
1. コンテナ化
2. CI/CD
3. オーケストレーション
4. オブザーバビリティ
5. サービスメッシュ
6. セキュリティ
7. 分散データベース&ストレージ
8. ストリーミング
9. コンテナレジストリ&ランタイム
10.ソフトウェアディストリビューション
49
Cloud Native Trail Map
https://raw.githubusercontent.com/cncf/trailmap/master/CNCF_TrailMap_latest.pdf
Cloud Native
オーケストレーション
50
オーケストレーション
Kubernetes
• 2014年にGoogleがOSS化
»Google社内での15年以上の運⽤ノウハウを形にしたもの
• コンテナ群のための実⾏プラットフォーム
»コンテナ
▸アプリケーションと、その実⾏環境ミドルウェアをパッケージにしたもの
▸その中であらゆる種類の⾔語、実⾏環境を動かして良い
»コンテナオーケストレーションツール
▸コンテナという形になっていれば、同⼀のものとして扱える
51
オーケストレーション
Kubernetesがやること
• コンテナワークロードに対する
»CPU、メモリ、ストレージ、IPの割り当て
»スケーリング
»状態監視と⾃動復旧
»環境変数の管理
• コンテナの実⾏に関わる様々なことをやってくれる
»必要リソースはノード側で指定=分散管理型
»宣⾔型設定
52
オーケストレーション
Kubernetesの仕組み
53
Cloud Controller Manager
https://kubernetes.io/docs/concepts/architecture/cloud-controller/
エコシステムの発展
• KubernetesだけではPaaSとしては機能不⾜
»k8sは「コンテナを動かす」だけ
• 周辺プロダクト群が増えて続けている
オーケストレーション
54
The cloud native landscape Serverless landscape
Continuous Delivery landscape
Kubernetes
55
アプリ設定および開発
データベース、ストリーミング&メッセージング
アプリケーション定義&イメージビルド、CI/CD
オーケストレーション&管理
スケジューリング&オーケストレーション、コーディ
ネーション&サービスディスカバリー、RPC、サービス
プロキシ、APIゲートウェイ、サービスメッシュ
ランタイム
クラウドネイティブストレージ、コンテナランタイム、
クラウドネイティグネットワーク、
プロビジョニング
⾃動化&設定、コンテナレジストリ、セキュリティ&コ
ンプライアンス、キーマネジメント
スペシャル
Kubernetes認定サービスプロバイダ
Kubernetesトレーニングパートナー
プラットフォーム
Kubernetesディストリビューター
Kubernetesホスティング
Kubernetesインストーラー
PaaS /コンテナサービス
オブザーバビリティ&分析
モニタリング、ロギング、トレーシング、
カオスエンジニアリング
継続的デプロイ
The Continuous
Delivery Foundation
会員
サーバレス
Cloud Native
サービスメッシュ
56
サービスメッシュ
サービス間連携の管理
• サービス間連携に関する横断的関⼼事の分離
»連携先サービスの検出とルーティング
»通信制御(認証認可、暗号化、流量制限など)
▸障害対応(サーキットブレーカー、リトライ、障害注⼊など)
»通信状況のロギング
• 分割されたサービスを統合するためのレイヤー
»サービスのリソースは分散管理するが、サービス間の連携は集中
管理する必要性がある
57
サービスメッシュ
Istio
• 現時点でのデファクトスタンダード
»2017年にGoogle、IBM、LyftがOSS化
• Istioの仕組み
»データプレーン
▸サイドカーとしてデプロイし、全ての通信
をインターセプトして制御
▸Envy Proxyを利⽤
»コントロールプレーン
▸設定の配布とログの収集
58
Cloud Native
ストリーミング
59
ストリーミング
Event-Driven Architecture
• サービス同⼠の連携をイベントで⾏う
»同期API連携は密結合だった
▸呼び出し元の責務が多すぎる
▸相⼿を知らないといけない
»イベント駆動のメリット
▸元は流すだけ
▸先は好きな時に好きな部分だけ受け取る
▸Pub-Subにすれば、イベントが共有できる
▸API-FirstからEvent-Firstへ
60
元 先
元 先 先
ストリーミング
CQRSとEvent-Sourcing
• データを疎結合に共有する
»CQRS(Command Query Responsibility Segregation)
▸更新と表⽰のモデルを分離する
▸=元システムと先システムは異なるモデルでよい
»Event-Sourcing
▸データに対する操作をイベントとして記録
▸=欲しい操作だけ、任意のタイミングで反映
61
元 先
変更
①
変更
①
最新の
データ
ストリーミング
Apache Kafka
• 現時点でのデファクトスタンダード
»2011年、LinkedInによってOSS化
▸現在はConfluent社が主に開発している
»分散処理に優れ、スケールさせやすい
▸順序の維持と永続性が特徴
»k8s上で動かすことも可能
▸3.0でZooKeeperも不要になる予定
62
これからのための技術
Serverless
63
Serverless
Serverlessのはじまり
• Serverless FaaS
»2015年のAWS API Gateway+Lambda(2014)
▸REST API経由でLambdaを起動することができる
»Serverless FaaSとは何か︖
▸イベントで起動する
▸短時間実⾏される、コードから起動し
▸スケーリングするまではフルマネージ
»代表的なサービス
▸AWS Lambda、Azure Functions、GCP Cloud Functions
64
Serverless Architectures
https://martinfowler.com/articles/serverless.html
Serverless
コンテナを前提としたServerless
• Container Serverless
»コンテナを前提としたサーバレス環境
▸⻑時間稼働、複雑な業務ロジックなど広いユースケースに対応可能
▸ただし、スケーラビリティはFaaSに劣る
• Kubernetes Serverless
»k8sを前提としたContainer Serverless
▸仕様︓Knative、KEDA
▸製品︓GCP Cloud Run、AWS App Runner
»ビルドが統合され、Gitから起動まで含む
65
Serverless Architectures
https://martinfowler.com/articles/serverless.html
Serverless
CI/CD+イベント起動+オートスケール
• コードを書くことだけに集中していける
»アプリの柔軟性からするとコンテナベースのものが主流に
▸業務アプリなら常駐もバッチも⾮常に簡単に扱えるようになる
▸FaaSも特定のユースケースでは重要
»NoOpsの1つのパターンとしてテクノロジー化されたもの
▸コードを書いたら動く、という感覚
66
これから
67
これから
2023年ごろに必要なこと
• Cloud NativeやServerlessが基礎技術
• その上で、どんなテクニックが重要になるか︖
68
2001年 Agile
2023年 これから
2009年 DevOps
2006年 Cloud
2015年 Serverless 2015年 Cloud Native
2014年 Microservices
8年
8年︖
8年
これから
Kubernetesの状況整理
• Cloud Native、K8s Serverlessは未成熟な段階
»巨⼤サービスには魅⼒的だが、中規模にはオーバーキル
»標準化を重視しているため、進化はちょっと遅め
▸AWS対抗の雰囲気は強い。中⼼はGoogle、Microsoft、Red Hat(IBM)
»⼗分に実⽤的になるには数年かかるはず
• 現時点ではコンテナライズやCI/CDに取り組んでおく
»⾮k8sなコンテナサーバレスは実⽤性が⾼い
69
これから
単語はEvent-Driven︖Event-First︖
• イベント駆動はテクニックとして注⽬されつつある
»API連携からイベント連携へ
▸もちろん、使い分けは重要。同期APIのユースケースは必ずある
»分散データ管理に対する現実的な解決策
▸初期移⾏やリカバリ、不整合の解消など周辺テクニックは未成熟
• 現時点では部分的にイベント駆動を試してみてよい
»同期APIは密結合という癖はつけておいたほうがいい
»イベントストリーミングのマネージドサービスは利⽤しやすい
70
これから
イベント管理の技術は未成熟な状態
• Istioとの統合
»試⾏錯誤はされている状態
• データは共有しないが、スキーマは共有すべき
»受け取る側はスキーマのバージョンに関する情報が重要
»1つの⽅向性︓Confluent Schema Registry
▸Kafka向けのスキーマ管理ツール
ü スキーマ定義、およびシリアライズ・デシリアライズ処理
71
Schema Registry Overview
https://docs.confluent.io/platform/current/schema-registry/
The benefits of integrating Apache Kafka with Istio on Kubernetes – Istio Con 2021
https://events.istio.io/istiocon-2021/sessions/the-benefits-of-integrating-apache-kafka-with-istio-on-kubernetes/
まとめ
72
まとめ
ともかく改善サイクルを早くすることが重要
• そのためにテクノロジーもテクニックも進化している
73
ユーザー
企画
開発
運⽤
まとめ
そろそろ、新しい⾔葉が出てきそう︖
• イベント駆動あたりな気がする
»コンテナのよる分割とサービスメッシュによる統合
»k8sサーバレスによるNoOpsの実現
74
2001年 Agile
2023年 これから
2009年 DevOps
2006年 Cloud
2015年 Serverless 2015年 Cloud Native
2014年 Microservices
8年
8年︖
8年
マイクロサービスに⾄る歴史とこれから
2021/9/18
グロース・アーキテクチャ&チームス株式会社
鈴⽊雄介
XP祭り2021 @ Online

マイクロサービスに至る歴史とこれから - XP祭り2021