cloud native application on deis by using 12 factor
TRANSCRIPT
自己紹介
日本マイクロソフト(株)Java エバンジェリスト寺田 佳央
ハッシュタグ #てらだよしおがんばれ
クラウドを有効活用できすアプリケーションを実装されてますか?
今のアプリケーションをそのままクラウドに移行する?
ところで昨今話題ですが
マイクロサービスは必要 ?
モノリシック?マイクロ?
一般的な企業システムの実装例
顧客管理 受注管理 物流管理 売り上げ管理
商品管理 レコメンド 顧客分析 経営分析
企業システム DB
どんどんマイクロ・サービス化
受注管理サービス
顧客管理 DB
物流管理サービス
顧客管理 DB
マイクロサービス
いち早くサービスを提供したい
柔軟にスケールさせたい
独立したサービス作りをおこないたい
耐障害性を高めたい変更に強いシステムを
作りたいとりあえず
MSA 化が必要
Docker を導入したい
何のためのマイクロ・サービス?
マイクロサービス
一番だめなパターン
とりあえずMSA 化が必要
Docker を導入したい
マイクロサービス
いち早くサービスを提供したい
柔軟にスケールさせたい
独立したサービス作りをおこないたい
MSA でなくてもできません?
マイクロサービス
耐障害性を高めたい(回復性を高める)
変更に強いシステムを作りたい
MSA が有効( 寺田の所感 )
https://jaxenter.com/microservices-trends-2017-survey-133265.html
既存サービスを
マイグレーションする
新規サービスで
導入導入済み
予定なし
12 Factor App
Reactor Manifest
組織作り
TDD
Agile
継続的インテグレーション
Infrastructure as Code
継続的デリバリ
https://12factor.net/ja/
© 2017 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
ちょっと宣伝させてください
Azure Container Service
クラウド・ネイティブなスケーラブル・アプリ開発のために
https://12factor.net/ja/
はじめに
Java SE の現在と将来
Java EE の現在と将来
ソースコード管理
ソースコード管理
どのようなソースコード管理 してます?
複数のモジュールを
1レポジトリで管理
サービス毎にレポジトリを作成しましょう
サービス毎の履歴管理や
把握が容易に !!
はじめに
Java SE の現在と将来
Java EE の現在と将来
どうやって実装?
今までの Web アプリケーション
ビジネス・ロジック
ビューとロジックを分離
ビジネス・ロジック
Front End For Back End
RESTful Web Services
JSON
Stateless
UI とバックエンド・サービスの分割
UI
Face Detect
warファイル
Emotional
UI サービス
Face Detect
Emotional
はじめに
Java SE の現在と将来
Java EE の現在と将来
並列処理非同期ノンブロッキング
同期?非同期?
Service C
Service C
Service C
Load Balancer
APIGateway
待ちによるスレッドの滞留を防ぐ
はじめに
Java SE の現在と将来
Java EE の現在と将来
共有ライブラリ
共有ライブラリ呪縛から解放されません?
顧客管理 受注管理 物流管理 売り上げ管理
商品管理 レコメンド 顧客分析 経営分析
共有ライブラリ
共有ライブラリ
顧客管理 受注管理 物流管理 売り上げ管理
商品管理 レコメンド 顧客分析 経営分析
共有ライブラリにバグがみつかった!!
えっ?!全部再テスト?
追加機能に影響が!!
リリース・スケジュール延期!!
顧客管理
受注管理
商品管理
レコメンド
共有ライブラリ
ライブラリ
顧客管理
ライブラリ
商品管理
ライブラリ
受注管理
ライブラリ
レコメンド
バグがみつかった!!
v1
顧客管理
v1
受注管理
v2
顧客管理
ビルド
プライベートレポジトリ建てましょう
https://youtu.be/Wj4yQpDxe_k
ライブラリ v1
商品管理
ライブラリ v2
レコメンド
ライブラリ v1
物流管理
ライブラリ v2
売り上げ管理
共有ライブラリ依存から脱却しましょう
はじめに
Java SE の現在と将来
Java EE の現在と将来
リソース設定を柔軟に !!
どこでも動くアプリを心掛けましょう
外部リソースの設定
サービス
JDBC メッセージ
プログラム?XML?
https://youtu.be/LVo_6AdC4wQ
はじめに
Java SE の現在と将来
Java EE の現在と将来
ビルドリリース実行
Build Release Run
$ mvn clean package
$ docker build .
$ mvn deploy
$ docker push
$ java –jar App.jar
$ docker run
https://youtu.be/e7hIwW9c4Es
https://youtu.be/N52zkq4hsFg
$ deis releases -a lonely-jokester=== lonely-jokester Releases
v6 2017-04-26T14:41:41Z yoterada added DATABASE_URL
v5 2017-04-26T14:27:08Z yoterada rolled back to v2
v4 2017-04-26T14:09:56Z yoterada changed healthcheck
info for proc type cmd
v3 2017-04-26T14:09:03Z yoterada added healthcheck
info for proc type cmd
v2 2017-04-26T12:29:44Z yoterada deployed 545623c
v1 2017-04-26T12:26:01Z yoterada created initial
release
$ deis rollback v2 -a lonely-jokester
Rolling back to v2... done, v5
$ deis releases -a lonely-jokester
=== lonely-jokester Releasesv5
2017-04-26T14:27:08Z yoterada rolled back to v2
V4 2017-04-26T14:09:56Z yoterada changed healthcheck
info for proc type cmd
V3 2017-04-26T14:09:03Z yoterada added healthcheck
info for proc type cmd
V2 2017-04-26T12:29:44Z yoterada deployed 545623c
V1 2017-04-26T12:26:01Z yoterada created initial
release
はじめに
Java SE の現在と将来
Java EE の現在と将来
廃棄容易性
起動時間の最小化
不意な停止に対応
素早い起動・停止
https://youtu.be/oXk4-LkQOfA
$ deis autoscale:set cmd
--min=3 --max=8 --cpu-percent=75 -a
lonely-jokesterApplying
autoscale settings for process type cmd
on lonely-jokester... Done
$ deis autoscale:list -a lonely-jokester
=== lonely-jokester Autoscale
--- cmd:
Min Replicas: 3 Max Replicas: 8 CPU: 75%
はじめに
Java SE の現在と将来
Java EE の現在と将来
自己完結型アプリケーション
自己完結で軽量に動くアプリにポートバインディングを通してサービスを公開
https://youtu.be/ag4edz5ff-Q
はじめに
Java SE の現在と将来
Java EE の現在と将来
開発・本番一致
開発と本番環境の環境は統一しましょう
開発環境 テスト環境 本番環境
Java JDK 8 u121 JDK 8 u72 JDK 8 u20
Ruby 2.3.0 2.2.4 2.2.4
MySQL 5.6 5.5 5.5
OS Win/Ubuntu RedHat RedHat
開発と本番環境の環境は統一しましょう
開発環境 テスト環境 本番環境
Java JDK 8 u121 JDK 8 u121 JDK 8 u121
Ruby 2.4.1 2.4.1 2.4.1
MySQL 5.7 5.7 5.7
OS Ubuntu Ubuntu Ubuntu
ホット・デプロイから継続的デプロイ
すべての変更を自動的に本番での検証
• Feature Flag
• Blue/Green Deploy
• A/B Test
• Canary Test
• Red/Black
Feature Flag
はじめに
Java SE の現在と将来
Java EE の現在と将来
運用・監視ログ
はじめに
Java SE の現在と将来
Java EE の現在と将来
さいごに
おきないように頑張る ?
起きても大丈夫なように作る?
障害はおきる!!
分散コンピューティングの落とし穴
誤った考えかた
https://blogs.oracle.com/jag/resource/Fallacies.html
分散コンピューティングを意識したシステム開発
どこで障害が発生する?仮想 IP
LB
App Server
ハートビート
HA-Cluster
ハートビート
仮想 IP
今だから再び !!オススメの一冊
マイクロ・サービス
Face API
Emotion API
Bot Framework
Azure Managed MySQL
VSTS
DEIS
Kubernetes
Azure Container Services
12 Factor App
Git Maven
Nexus 3
Payara Micro
Docker
Java
https://aka.ms/deis-k8s-acs
Microsoft OSS
セッションアンケートにご協力ください
専用アプリからご回答いただけます。
decode 2017
スケジュールビルダーで受講セッションを登録後、アンケート画面からご回答ください。
アンケートの回答時間はたったの 15 秒です!
Ask the Speaker のご案内
本セッションの詳細は『Ask the Speaker Room』各コーナーカウンタにて
ご説明させていただきます。是非、お立ち寄りください。
© 2017 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
はじめに
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 の現在と将来
その他
メッセージ駆動 (Message Driven)Consumer-Driven Contracts
https://github.com/DiUS/pact-jvm