自己紹介
日本マイクロソフト(株)
Java エバンジェリスト
寺田 佳央
ハッシュタグ #てらだよしおがんばれ
マイクロサービス
は必要 ?
モノリシック?マイクロ?
一般的な企業システムの実装例
顧客管理 受注管理 物流管理 売り上げ管理
商品管理 レコメンド 顧客分析 経営分析
企業システム DB
どんどんマイクロ・サービス化
受注管理
サービス
顧客管理 DB
物流管理
サービス
顧客管理 DB
マイクロサービス
いち早くサービスを
提供したい
柔軟にスケール
させたい
独立したサービス作りを
おこないたい
耐障害性を高めたい
変更に強いシステムを
作りたい
とりあえず
MSA 化が必要
Docker を導入したい
何のためのマイクロ・サービス?
マイクロサービス
一番だめなパターン
とりあえず
MSA 化が必要
Docker を導入したい
マイクロサービス
いち早くサービスを
提供したい
柔軟にスケール
させたい
独立したサービス作りを
おこないたい
MSA でなくてもできません?
マイクロサービス
耐障害性を高めたい
(回復性を高める)
変更に強いシステムを
作りたい
MSA が有効
( 寺田の所感 )
https://jaxenter.com/microservices-trends-2017-survey-133265.html
既存サービスを
マイグレーション
する
新規サービスで
導入
導入済み
予定なし
MSAでなければ
ならないか
今一度考えましょう
Martin Fowler
Componentization via Services
Organized around Business Capabilities
Products not Projects
Smart endpoints and dumb pipes
Decentralized Governance
Decentralized Data Management
Infrastructure Automation
Design for failure
Evolutionary Design
MSA
or
https://jaxenter.com/microservices-trends-2017-survey-
Java EE でも!!
ここからはじめる
マイクロ・サービス
(初級編)
はじめに
Java SE の現在と将来
Java EE の現在と将来
はじめの一歩
新機能追加 … どうする?
UI ロジック DB
war, ear ファイル
UI DBロジック
UI ロジック DB
既存のモノリシック構成に
新機能を追加しない
UI ロジック DB
UI ロジック DB
UI DBロジック
モノリシック
リクエストの
ルーティング
はじめに
Java SE の現在と将来
Java EE の現在と将来
MSA に向けた
ソースコード管理
ソースコード管理
どのようなソースコード管理 してます?
複数のモジュールを
1レポジトリで管理
サービス毎にレポジトリを作成しましょう
サービス毎の履歴管理や
把握が容易に !!
はじめに
Java SE の現在と将来
Java EE の現在と将来
アプリケーション
サーバ
Java EE アプリケーション・サーバ
アプリケーション・サーバを依存を脱却しましょう
Java EE 対応の実行可能 jar フレームワーク
はじめに
Java SE の現在と将来
Java EE の現在と将来
共有ライブラリ
共有ライブラリ呪縛
から解放されません?
顧客管理 受注管理 物流管理 売り上げ管理
商品管理 レコメンド 顧客分析 経営分析
共有ライブラリ
共有ライブラリ
顧客管理 受注管理 物流管理 売り上げ管理
商品管理 レコメンド 顧客分析 経営分析
共有ライブラリにバグがみつかった!!
えっ?!全部再テスト?
追加機能に影響が!!
リリース・スケジュール延期!!
顧客管理
受注管理
商品管理
レコメンド
共有ライブ
ラリ
ライブラリ
顧客管理
ライブラリ
商品管理
ライブラリ
受注管理
ライブラリ
レコメンド
バグがみつかった!!
v1
顧客管理
v1
受注管理
v2
顧客管理
ビルド
プライベート
レポジトリ
建てましょう
$ mvn deploy:deploy-file 
-DgroupId=com.yoshio3 ¥
-DartifactId=Yoshio3CommonLibraries ¥
-Dversion=1.0 ¥
-Dpackaging=jar ¥
-Dfile=Yoshio3CommonLibraries-1.0-SNAPSHOT.jar ¥
-DgeneratePom=true ¥
-DrepositoryId=nexus3-repository ¥
-Durl=http://nexus3.**/repository/yoshio3-maven-
repo/
<dependency>
<groupId>com.yoshio3</groupId>
<artifactId>Yoshio3CommonLibraries</artifactId>
<version>1.0</version>
</dependency>
ライブラリ v1
商品管理
ライブラリ v2
レコメンド
ライブラリ v1
物流管理
ライブラリ v2
売り上げ管理
共有ライブラリ
依存から脱却し
ましょう
はじめに
Java SE の現在と将来
Java EE の現在と将来
どうやって実装?
今までの Java EE アプリケーション
ビジネス・ロジック (CDI, EJB)
ビューとロジックを分離
ビジネス・ロジック
Front End For
Back End
Java API for
RESTful
Web Services
ここからはじめる
マイクロ・サービス
(中級編)
はじめに
Java SE の現在と将来
Java EE の現在と将来
非同期処理
同期?非同期?
Service C
Service C
Java EE 8 JAX-RS 2.1 で追加・改良
Service C
Load
Balancer
API
Gateway
待ちによる
スレッドの滞留を防ぐ
はじめに
Java SE の現在と将来
Java EE の現在と将来
リソース設定を
柔軟に !!
どこでも動くアプリを
心掛けましょう
外部リソース
の設定
サービス
JDBC メッセージ
プログラム?XML?
外部リソース
の設定
環境変数 or 設定サーバ
$ export JDBC_USER=root
$ export JDBC_PASSWORD=password
$ export DB_HOST=localhost
$ export DB_PORT=3306
$ export JDBC_URL=
“jdbc:mysql://dbhost:3306/artist
”
環境変数”
はじめに
Java SE の現在と将来
Java EE の現在と将来
セッション管理
アプリケーション・サーバ依存の排除
サーバ HTTP セッション共有 → Inmemory Grid
アプリケーション・サーバ依存の排除
Payara + hazelcast の場合
はじめに
Java SE の現在と将来
Java EE の現在と将来
運用・監視は重要
はじめに
Java SE の現在と将来
Java EE の現在と将来
データベース連携
顧客管理 受注管理 物流管理 売り上げ管理
商品管理 レコメンド 顧客分析 経営分析
企業システム DB
顧客管理
サービス
顧客管理 DB
受注管理
サービス
受注管理 DB
物流管理
サービス
物流管理 DB
売上管理
サービス
売上管理 DB
JDBC 接続
プール
JDBC 接続
プール
JDBC 接続
プール
JDBC 接続
プール
受注管理
サービス
顧客管理 DB
物流管理
サービス
物流管理 DB
JDBC 接続
プール
JDBC 接続
プール
顧客管理 DB 物流管理 DB
受注管理
サービス
物流管理
サービス
JDBC 接続
プール
JDBC 接続
プール
受注
完了
メ
ッ
セ
ー
ジ
ン
グ
・シ
ス
テ
ム
メッセージ連携
受注
発生
イベント処理
はじめに
Java SE の現在と将来
Java EE の現在と将来
サービス導入
ホット・デプロイから継続的デプロイ
すべての変更を自動的に本番での検証
• Feature Flag
• Blue/Green Deploy
• A/B Test
• Canary Test
• Red/Black
Feature Flag
はじめに
Java SE の現在と将来
Java EE の現在と将来
さいごに
おきないように
頑張る ?
起きても大丈夫な
ように作る?
障害はおきる!!
分散コンピューティングの落とし穴
誤った考えかた
https://blogs.oracle.com/jag/resource/Fallacies.html
分散コンピューティングを
意識したシステム開発
どこで障害が発生する?
仮想 IP
LB
App Server
ハートビート
HA-Cluster
ハートビート
仮想 IP
MSA 化はもっと
障害に対する
考慮が必要
今だから再び !!
オススメの一冊
今しっかりと
できていなければ
Microservices でも
できない
12 Factor App
Reactor Manifest
組織作り
TDD
Agile
継続的インテグレーション
Infrastructure as Code
継続的デリバリ
Microsoft Java
© 2017 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

Preparation to Start the Microservice for Java EE developers