JSUG SpringOne Platform 2016 報告会 Case Study 1
-
Upload
yusuke-ikeda -
Category
Technology
-
view
482 -
download
2
Transcript of JSUG SpringOne Platform 2016 報告会 Case Study 1
CyberAgent, Inc. All Rights Reserved
JSUG 勉強会SpringOne Platform 2016 報告会!
CaseStudy その 1
Yusuke Ikeda / @yukungCyberAgent, Inc.
CyberAgent, Inc. All Rights Reserved
事例紹介
私が聴講した 2 社を紹介します
事例紹介
● Lessons Learned from Migrating Legacy Enterprise Applications to
Microservices
○ Ontario Teachers’ Pension Plan(オンタリオ州教職員年金基金)
● Gap Inc.’s Cloud Migration: Lessons Learned
○ Gap Inc.
CyberAgent, Inc. All Rights ReservedLessons Learned from Migrating Legacy
Enterprise Applications to Microservices
20 年の歩み
元々のアーキテクチャ
それぞれの痛み
● 開発
● デプロイ
● 運用
開発の痛み
● 開発環境のセットアップに時間がかかる
● Jar Hell
● フレームワークの設定
デプロイの痛み
● 遅い
● 不安定
● ダウンタイムがある
● アプリケーションのヘルスチェックがない
● ログの集約や分析
運用の痛み
CyberAgent, Inc. All Rights Reserved
マイクロサービスへの移行パズル
マイクロサービス移行パズル #0
● 開発環境のセットアップ問題
○ アプリケーションサーバ
■ 試したもの
● Vagrant, Docker
● Standalone Tomcat
○ ソリューション
■ Embedded Tomcat
○ 結果
■ ローカルセットアップが 5 時間 -> 0 秒に
■ デプロイが 5 分 -> 1分に
マイクロサービス移行パズル #1
● フレームワークの設定のボイラープレートが多すぎ問題
○ ソリューション
■ Spring Boot
マイクロサービス移行パズル #2
● Jar Hell、依存性地獄問題
○ アプリケーションサーバが持つ依存関係
■ JNDI, MQ, Logging, Cache…
■ SOAP
■ AS/400 への接続ドライバなど
■ Spring 自体が持つ依存関係
○ ソリューション
■ Spring IO Platform
● BOM でまとめた
● アプリケーションのヘルスチェックと監視問題
○ 起きていた問題
■ アプリケーションの突然死、強制再起動
■ 本番のアプリケーションが dev 環境に依存していた
○ ソリューション
■ Spring Boot Actuator + extension endpoint
● /health を Sensu と組み合わせてすぐ反応できるように
● /info と CI ビルドパイプラインのデプロイ成果物をリン
ク
● /dependencies で依存関係を見れるように
マイクロサービス移行パズル #3
マイクロサービス移行パズル #3
マイクロサービス移行パズル #3
● これはおそらく現状抱えてる課題の話
○ 設定を隔離したい
○ リクエストとレスポンスをトレースするのが難しい
● Spring Cloud を試しているそう
マイクロサービス移行パズル #4
マイクロサービス移行パズル #5
● デプロイの流れ
○ 2013 年時
■ 変更 -> master へチェックイン -> CI で Unit Test,
Integreation Test -> Staging へデプロイ -> インタラクティブ
テスト -> 独自スクリプトで本番へデプロイ
○ 2015 年時
■ 上記で CI の次に Chef でインフラの自動テストを実施する
ように
■ 独自スクリプトをやめてワンクリックで本番にデプロイでき
るように
マイクロサービス移行パズル #5
● デプロイの流れ
○ 2016 年から先
■ Chef で行っていたインフラの自動テストを Pivotal Cloud
Foundry 上に移行し、インフラを PaaS へ
■ 本番デプロイも PCF でワンクリックデプロイに
● 新しいサービスを作る際に、サービスごとに以下を作る必要があった
○ 3 つ以上の Git リポジトリ
○ 1 つの CI ビルドプラン
○ 2 つの CI デプロイプラン( dev, production)
○ 多くのコード、設定、テスト、ドキュメント
■ README、 CHANGELOG、 YML、 POM、 RAML( RESTf
ul API Modeling Language)
● これらをどうにかしたかった
○ そこで Spring Bloomr というツールを作った
マイクロサービス移行パズル #6
CyberAgent, Inc. All Rights Reserved
Spring Bloomr
● プロジェクトのひな形生成ツール
○ Spring Initializr みたいなやつ?
Spring Bloomr
Spring Bloomr
Spring Bloomr
Spring Bloomr
Spring Bloomr
Spring Bloomr
Spring Bloomr
組織構造の変化
● マイクロサービス化を進めていった結果、部門と職種で縦割りだった組
織が、プロジェクトごとに様々な職種の人間で構成されるようになっ
た
今後の課題
● ログ集約
● サービスディスカバリとクライアントサイドのロードバランシング
● A/B テスト
CyberAgent, Inc. All Rights Reserved Gap Inc.’s Cloud Migration: Lessons
Learned
Gap の取り組み紹介
● 使っているパターン、ツール、テクニックの紹介
● チャレンジしていること
● 次のステップ
パターン、ツール、テクニック
● Rabbit MQ
○ Pivotal Cloud Foundry 上に展開
○ ユースケース
■ 店舗内在庫の変更をできるだけリアルタイムに更新するため
● Data の可視化
○ Gap Inc. は 10 年を経たレガシーシステムやデータセンターを
持っている
○ サービスやデータの局所化が激しい
○ そのためにデータを可視化するツールを利用している
■ 自作?
パターン、ツール、テクニック
● Auto Scaling
○ Rabbit MQ は水平スケーリングを可能にしてくれた
○ CPU がスパイクするような状況が発生すると、 PCF が自動的に
worker をオンデマンドで追加してくれる
● アプリケーションパフォーマンスモニタリング
○ APM Tools (おそらく NewReric)を使ってモニタリングしてい
る
○ 開発者がパフォーマンス問題を素早く診断し、解決できるように
チャレンジしていること
● Spring Cloud Config の導入
○ 現状は手動で暗号化、キーのローテーションは無し、 Git に
secrets を入れている
○ Git が SPOF になっている
○ Blue/Green Deploy の間の Web Hook が複雑
○ Git における監査証跡は、リポジトリにコミットされた時のみで、
本番での変更を示すものではない
チャレンジしていること
● Spring Cloud Config と Vault + Consul
○ Gap と Pivotal が協力して開発している
○ Consul の変更を Spring Cloud Config が取り込んでいる
チャレンジしていること
● Data Services として Tesora (OpenStack の DBaaS) をテストしてい
る
● PCF 1.8 でサポート内容が改善される
● パブリッククラウドに移ることになった時に今の経験をシームレスに
活かせるようにしたい
チャレンジしていること
● IPSec
○ Gap Inc. は個人情報を守るために強固なセキュリティを必要とし
ている
○ PCF 内でセキュアにデータを送るために IPSec add-on を使って
いる
● パブリッククラウドへの移行
○ パブリッククラウドはスピードとスケーラビリティをもたらして
くれる
○ 新しい技術への挑戦
○ しかし、いささか懸念も持っている
次のステップ
● Learn more
○ Ontario Teachers’ Pension Plan
○ Gapが、衣類価格の最適化のためにクラウドを採用
○ The Gap on Cloud Optimization & Cloud Foundry
Thank you for your attention!