マイクロサービスと
それを支える
アーキテクチャー
株式会社オルターブース 加藤 司
2018/09/06
#devsumi
#devsumiA
自己紹介
加藤 司
• 株式会社オルターブース所属
• テクニカルアーキテクト
• インフラ全般/Xamarin/C#/PHP/RoR
• Microsoft MVP for Microsoft Azure
• コミュニティ活動
• JAZUG熊本支部(くまあず)/ふくあず
• 熊本クラウド語ろう会(熊クラ会)
• Fukuoka.NET(ふくてん)
• JXUG福岡
注意事項
•お話する内容は2018年9月6日時点
での内容となります。
•今後アップデート等により仕様が変
わる可能性があります。
今日お話する内容
•Monolithic × Microsrvices
•Microservices Architecture
•Microservices Infurastructure
Monolithic × Microsrvices
Monolithic × Microservcies
Monolithic Microservices
アプリケーションを1つの塊として作成 機能毎に分けてアプリケーションを作成
特徴
Monolithic Microservices
• シンプルな作りのため、
開発期間は比較的短く、
デプロイも容易に行え
る
• 機能の一部の修正でも
全体に影響がある
• 性能が足りなくなった
場合、サーバーを増や
すかスケールアップす
る必要がある
• 変化に対応しやすい
• 部品で開発するため、
チームを細分化しやす
い
• サービスが分かれてい
るためそれぞれ異なる
言語の選択も可能
• サービス全体が煩雑に
なりがち
スケールアウト
全ての機能を一気に増や
すかスケールアップで対
応する
増やしたい機能のみ
スケールアウト可能
Monolithic Microservices
機能修正(デプロイ)
一部のモジュール修正で
もアプリケーション全体
をデプロイしないといけ
ない
一部の機能のみ更新する
ことが可能
Monolithic Microservices
Microservices Architecture
Architecture
Shared
Datastore
Application
Business Logic
Data Access
UI
Monolithic Microservices
Datastore
per Service
API
Function
Data
Access
UI
Datastore
per Service
Function
Data
Access
…
API
マイクロサービスを
導入するために
マイクロサービスで重要な事
•マイクロサービスを導入する上で必要な
のはサービスの分割である。
•まずはクラウドのPaaSを利用し、サー
ビス分割をしてみると良い。
•その上でコンテナ化等を進めていく。
マイクロサービスの問題点
マイクロサービスの問題点
•年々機能追加で巨大化・複雑化していく
•機能間の通信を把握できない
•全体像が把握しにくい
•障害時に問題の特定がしにくい
•認証情報、証明書などが管理しにくい
問題点を解決するためには
どうしたらいいの?
Kubernetes & Istio
その前に
Microservices Infrastructure
Microservices Infrastructure
•コンテナー技術
• Docker
• Kubernetes
•サーバーレスアーキテクチャ
• AWS Lambda
• Azure Functions
• Google Cloud Functions
•クラウドサービス
• Azure Service Fabric
Kubernetes Managed Service
•Azure Kubernetes Service (AKS)
•Amazon Elastic Container Service
for Kubernetes(Amazon EKS)
•Google Kubernetes Engine(GKE)
Kubernetesとは?
Kubernetes
•自動デプロイ、スケーリング、アプ
リ・コンテナーの運用自動化。
•Webコンソールが用意されており、
GUIでの管理が可能。
•Google が社内のオーケストレー
ションツール「Borg」を元に開発。
•CNCFに寄贈され管理されており
オープンソースで提供されている。
Kubernetesの主な構成要素
•Kubernetesの構成要素は大きく分
けて以下の2つになります。
• Kubernetes Master
• Kubernetes Node
Kubernetesのアーキテクチャ
Master
apiserver
controller-
manager
scheculer
etcd
Node
kubelet
proxy
Pod
cAdvisor Container
Container
Firewall/LoadBalancer
kubectl
Pod
Container
Node
kubelet
proxy
Pod
cAdvisor Container
Container
Pod
Container
Kubernetes Master
•クラスタの管理やPodを集中管理を
行う。
コンポーネント 役割
apiserver Kubernetesを操作するAPIを提供、kubectlはAPI
ServerをREST APIで実行するコマンドツール
etcd 設定情報の共有とサービス検出を行うKVSで、
クラスタの全データを格納するデータストア
controller-manager コンテナーの状態を監視し、定義された状態
と異なる場合、自動修復するバックグラウン
ドプロセス
scheduler Podをノードへの割り当てを行うスケジューラ
Addons WebUIやクラスタ内のDNSサービスを提供
Kubernetes Node
•コンテナーを配置・稼働させるホス
ト。
コンポーネント 役割
kubelet 各ノード上のコンテナー作成/削除、ボリュー
ム割り当てなど
proxy コンテナーのネットワークルーティング・負
荷分散
docker コンテナーの実行
rkt Dockerの代替で利用可能
supervisord kubelet,dockerの稼働状態を保つプロセスモ
ニタ・制御システム
fluentd クラスターレベルでのログ収集
Workload他
•kubectl
•Pod
•Services
•Deployment
Azure Kubernetes
Service(AKS)
Azure Kubernetes Service(AKS)
•ManagedなK8sサービス。
•Kubernetesクラスターの構築、管
理の負担を軽減。
•SLAは99.95%となっており、課金
対象はユーザーリソースのみ。
•ホストされているMasterの自己修復。
•自動的なアップグレードや修正プロ
グラム適用。
AKSのアーキテクチャ
リソースグループ (AKS)
リソースグループ (K8sノード関連)
仮想ネットワーク
サブネット
K8s Agent 可用性セット
動的割当
動的割当
K8s Master
Managed Service
ARM Deployment
ARM Deployment
Portal/CLI
AKS料金
•クラスター管理 (無償)
•ノードの価格
• ノードで使用した仮想マシンの利用料
を支払う
AKSデプロイ方法
•Azure Portal
•Azure CLI
AKSデプロイ(Azure Portal)
•基本、認証、ネットワーク、監視そ
れぞれ必要事項を入力して作成でき
ます。
AKSデプロイ(Azure CLI)
•サービスプリンシパルは自動生成さ
れるため、以下コマンドのみで作成
可。
## リソースグループ作成
az group create --name {RG_Name} --location japaneast
## AKSクラスター作成
az aks create --resource-group {RG_Name} --name {AKS_Name}
--node-count 1 --enable-addons monitoring --generate-ssh-keys
AKSへの接続
•Azure CLI からAKSへ接続した後に、
kubectlで操作します。
•Azure CLI 及び kubectlが利用でき
る Azure Cloud Shellより操作する
と便利です。
## AKSへ接続
az aks get-credentials -r {RG_Name} --name AKS_Name
## ノードの確認
kubectl get nodes
Istioとは?
Istio
•サービスメッシュの管理をするため
のもので、IBM、Google、Lyftに
よって開発されたOSSです。
•現状のバージョンは1.0.1で、活発
に開発されています。
Service Mesh Architecture
Load
Balancer
Radis
Cache
Cloud Platform / Baremetal
MySQL
Git Repository
Container Registry
Pipeline
開発(Dev)
User
Pod 1
ENVOY APP
Node
Pod 2
ENVOY APP
Pod 1
ENVOY APP
Node
Pod 2
ENVOY APP
Pod 1
ENVOY APP
Node
Pod 2
ENVOY APP
Istio
•サービス・ディスカバリ
•リトライ
•タイムアウト
•ロードバランサ
•バルクヘッド
•サーキットブレーカー
•流量制御
Istio
•ネットワーク制御
•Blue/Greenデプロイメント
•Feature Flag
•カナリアリリース
•障害検知
•ログ出力
•死活監視
Blue/Greenデプロイメント
•現行Verと次期Ver両方を用意し、次
期Verへ切替を行うことでダウンタ
イムなしにアプリケーションのリ
リースを行う手法。
Blue/Greenデプロイメント
App
開発メンバー
実行結果
Push
Polling
App
App
Kubernetes
Kubectl apply
docker build
LB
カナリアリリース
•新旧2つ(もしくは複数)のバー
ジョンを同時に稼働させて、徐々に
新しいバージョンをリリースする手
法。
カナリアリリース
App
開発メンバー
実行結果
Push
Polling
App v1
App v2
Kubernetes
Kubectl apply
docker build
LB
80%
20%
サーキットブレーカー
•コード側で処理するのではなくエ
ラーが続くアプリケーションへのリ
クエストをIstio側で遮断する。
•ブレーカーは失敗する可能性のある
操作に対するプロキシーの役割です。
サーキットブレーカー
実行結果
Envoy
Envoy
Kubernetes
CircuitBreaker
App
App
Client http Requests
Code 200 : 19
(95.0 %)
Code 503 : 1
(5.0 %)
便利な周辺パッケージ
Cloud Native Landscape
まとめ
•Microservices is Not Silver Bullet.
•開発するアプリケーションに合った
アーキテクチャでの実装を。
•アップデートが早いため、柔軟に対
応していくことが必要となる。
•でも新しい技術は試してみたいです
よね?是非これを機にお試し下さい。
Microservice Integration
ご静聴ありがとうございました!

マイクロサービスとそれを支えるアーキテクチャー