クラウドネイティブとは
何か
構成要素
{OSS コンテナー サーバーレス PaaS 分散処理
マイクロサービスアーキテク
王道
マイクロサービス移行ステップ
1.クラウドへシステムを移行する
2.ミドルウェアをフルマネージド化す
る
3.プラットフォームをコンテナ化する
4.開発からリリースまでを自動化する
5.運用の自動化
まずクラウド化出来なければ何も進まない。
既存データセンター
仮想マシン
仮想環境
・VMware
・Hyper-V
パブリッククラウド
移行
クラウドシフト
オンプレミスからクラウドへの移行
現状のシステム構成を崩さずにそのままクラウドへ移
行する“リフトアンドシフト”が一般的。しかし移行に
は様々トラブルが有る。
 OSやミドルウェアのバージョンが上がったためアプリが動かない
 ネットワーク構成の移行が出来ない
 システムへのアクセス制御がうまくいかない
これらは既存システムの設計とクラウド側要件のミス
マッチである可能性が高くそれぞれの内容を精査する
必要がある。
ミドルウェアレベルで横に分割す
る
フロントエンド部分
データベース部分
ストレージ部分
PaaS構成例
Web Apps
DNS
DB
Queue Functions
Traffic Manager
Users
Blob
Application Insights
VSTSWeb Apps
フロントエンド
バックエンド
ストレージ
外部SaaS
マイクロサービスへの挑戦
Web Apps
DB
Web Apps
モノリスであることは変わらな
い
インスタンスを増やして分割す
る?
マイクロサービスアーキテクチャスタ
イル
クライアント
Idp
APIゲー
トウェイ
CDN 静的コンテンツ
マイクロサービス
Service
Service
Service
Service
管理
サービス
検索
リモート
サービス
https://docs.microsoft.com/ja-jp/azure/architecture/guide/architecture-styles/microservices
マイクロサービスアーキテク
チャー
• マイクロサービス アーキテクチャでは、サービスは小さく、独立的で、疎結合して
います。
• 各サービスは個別のコードベースであり、小規模な開発チームで管理できます。
• サービスは個別にデプロイできます。 チームは、アプリケーション全体を再構築し
たり再デプロイしたりすることなく、既存のサービスを更新できます。
• サービスはサービスのデータや外部の状態を保持する役割を担います。これは、個
別のデータ層でデータを保持する従来のモデルと異なる点です。
• サービスは、明確に定義された API を使用して、互いに通信します。 各サービス
内部の実装の詳細は、他のサービスに開示されません。
• サービスは、同じテクノロジ スタック、ライブラリ、またはフレームワークを共有
する必要はありません。
ドメイン駆動設計を応用する
ガチDDDはちょっと心折れかけるという人がいると思いますが、こ
こでは設計そのものにDDDを適用するというよりも、基本設計レベ
ルでの分析に活用する。
Presentation
Application
Domain
Infrastructure
依存関係
は上の層
から下の
層のみ許
可する
レイヤードアーキテクチャー
Presentation
Application
Domain Service
Domain Model
Infrastructure Tests
依存関係
は上の層
から下の
層のみ許
可する
オニオンアーキテクチャー
(依存関係逆転の法則)
Clean Architecture
ドメイン駆動設計とユースケース駆動設計に適したアーキテクチャー。
「関心の分離」や「依存関係逆転の法則」を守りやすくなる。サーバーサイト
にもクライアントサイドにも実装できる。
• ビジネスロジックを明確にする
• フレームワークから独立する
• ストアから独立する
• UIから独立する
• 外部との仲介者から独立する
• テストしやすくする
ドメイン分析
トークン
チェック
デバイス
判定
データ
チェック
ログイン
処理
受注データ
カート登録
お客様紹介
カード アフィリエイ
ト処理
楽天決済
申込完了メー
ル送信
LINE連携
(メール送信) 処理が終了
した時点で
どのような
相関になっ
ているかを
図に表す。
Modelを分割する(Domain Model)
Service (≒Beans)RepositoryModel
テーブル定義・状態
(テーブル単位)
CRUD操作
(テーブル単位)
ビジネスロジック
アクション(Beans)に定義されているデータアクセス処理を
Repositoryに切り出すことでコード分解を行う。
三層アーキテクチャー
一般的なアプリケーションはほぼ全て3つの要素に分割できます。
フロントエンド バックエンド データストア
3層アーキテクチャー
フロントエンド バックエンド データストアステートレス
フロントエンド バックエンド データストアステートフル
フロントエンド バックエンド データストアSPA
基本的なSPA構成
Database
フロントエンド
API
バックエンド
JS/HTML マイクロサービスはAPI化する
マイクロサービス分割のまとめ
Service
MS MS MS
Microservice
ミドルウェア PaaSを使ってミドルウェアを切り出す
DDDを活用したサービス分割
Domain Model
まず目指すべきアーキテクチャー
Load
Balancer
Radis
Cache
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
オルターブースが提供するディープテックメ
ディア。
クラウドネイティブを中心に様々なアーキテ
クチャーの概念、設計、実装をオルタナティ
ブな切り口で提供します。
是非入門を!!!
自己紹介
株式会社オルターブース
代表取締役
小島 淳(Atsushi Kojima)
Microsoft MVP for Azure

Alternative Architecture DOJO