42
CyberAgent, Inc. All Rights Reserved JSUG 勉勉勉 SpringOne Platform 2016 勉勉勉CaseStudy 勉勉 1 Yusuke Ikeda / @yukung CyberAgent, Inc.

JSUG SpringOne Platform 2016 報告会 Case Study 1

Embed Size (px)

Citation preview

Page 1: JSUG SpringOne Platform 2016 報告会 Case Study 1

CyberAgent, Inc. All Rights Reserved

JSUG 勉強会SpringOne Platform 2016 報告会!

CaseStudy その 1

Yusuke Ikeda / @yukungCyberAgent, Inc.

Page 2: JSUG SpringOne Platform 2016 報告会 Case Study 1

CyberAgent, Inc. All Rights Reserved

事例紹介

Page 3: JSUG SpringOne Platform 2016 報告会 Case Study 1

私が聴講した 2 社を紹介します

Page 4: JSUG SpringOne Platform 2016 報告会 Case Study 1

事例紹介

● Lessons Learned from Migrating Legacy Enterprise Applications to

Microservices

○ Ontario Teachers’ Pension Plan(オンタリオ州教職員年金基金)

● Gap Inc.’s Cloud Migration: Lessons Learned

○ Gap Inc.

Page 5: JSUG SpringOne Platform 2016 報告会 Case Study 1

CyberAgent, Inc. All Rights ReservedLessons Learned from Migrating Legacy

Enterprise Applications to Microservices

Page 6: JSUG SpringOne Platform 2016 報告会 Case Study 1

20 年の歩み

Page 7: JSUG SpringOne Platform 2016 報告会 Case Study 1

元々のアーキテクチャ

Page 8: JSUG SpringOne Platform 2016 報告会 Case Study 1

それぞれの痛み

● 開発

● デプロイ

● 運用

Page 9: JSUG SpringOne Platform 2016 報告会 Case Study 1

開発の痛み

● 開発環境のセットアップに時間がかかる

● Jar Hell

● フレームワークの設定

Page 10: JSUG SpringOne Platform 2016 報告会 Case Study 1

デプロイの痛み

● 遅い

● 不安定

● ダウンタイムがある

Page 11: JSUG SpringOne Platform 2016 報告会 Case Study 1

● アプリケーションのヘルスチェックがない

● ログの集約や分析

運用の痛み

Page 12: JSUG SpringOne Platform 2016 報告会 Case Study 1

CyberAgent, Inc. All Rights Reserved

マイクロサービスへの移行パズル

Page 13: JSUG SpringOne Platform 2016 報告会 Case Study 1

マイクロサービス移行パズル #0

● 開発環境のセットアップ問題

○ アプリケーションサーバ

■ 試したもの

● Vagrant, Docker

● Standalone Tomcat

○ ソリューション

■ Embedded Tomcat

○ 結果

■ ローカルセットアップが 5 時間 -> 0 秒に

■ デプロイが 5 分 -> 1分に

Page 14: JSUG SpringOne Platform 2016 報告会 Case Study 1

マイクロサービス移行パズル #1

● フレームワークの設定のボイラープレートが多すぎ問題

○ ソリューション

■ Spring Boot

Page 15: JSUG SpringOne Platform 2016 報告会 Case Study 1

マイクロサービス移行パズル #2

● Jar Hell、依存性地獄問題

○ アプリケーションサーバが持つ依存関係

■ JNDI, MQ, Logging, Cache…

■ SOAP

■ AS/400 への接続ドライバなど

■ Spring 自体が持つ依存関係

○ ソリューション

■ Spring IO Platform

● BOM でまとめた

Page 16: JSUG SpringOne Platform 2016 報告会 Case Study 1

● アプリケーションのヘルスチェックと監視問題

○ 起きていた問題

■ アプリケーションの突然死、強制再起動

■ 本番のアプリケーションが dev 環境に依存していた

○ ソリューション

■ Spring Boot Actuator + extension endpoint

● /health を Sensu と組み合わせてすぐ反応できるように

● /info と CI ビルドパイプラインのデプロイ成果物をリン

● /dependencies で依存関係を見れるように

マイクロサービス移行パズル #3

Page 17: JSUG SpringOne Platform 2016 報告会 Case Study 1

マイクロサービス移行パズル #3

Page 18: JSUG SpringOne Platform 2016 報告会 Case Study 1

マイクロサービス移行パズル #3

Page 19: JSUG SpringOne Platform 2016 報告会 Case Study 1

● これはおそらく現状抱えてる課題の話

○ 設定を隔離したい

○ リクエストとレスポンスをトレースするのが難しい

● Spring Cloud を試しているそう

マイクロサービス移行パズル #4

Page 20: JSUG SpringOne Platform 2016 報告会 Case Study 1

マイクロサービス移行パズル #5

● デプロイの流れ

○ 2013 年時

■ 変更 -> master へチェックイン -> CI で Unit Test,

Integreation Test -> Staging へデプロイ -> インタラクティブ

テスト -> 独自スクリプトで本番へデプロイ

○ 2015 年時

■ 上記で CI の次に Chef でインフラの自動テストを実施する

ように

■ 独自スクリプトをやめてワンクリックで本番にデプロイでき

るように

Page 21: JSUG SpringOne Platform 2016 報告会 Case Study 1

マイクロサービス移行パズル #5

● デプロイの流れ

○ 2016 年から先

■ Chef で行っていたインフラの自動テストを Pivotal Cloud

Foundry 上に移行し、インフラを PaaS へ

■ 本番デプロイも PCF でワンクリックデプロイに

Page 22: JSUG SpringOne Platform 2016 報告会 Case Study 1

● 新しいサービスを作る際に、サービスごとに以下を作る必要があった

○ 3 つ以上の Git リポジトリ

○ 1 つの CI ビルドプラン

○ 2 つの CI デプロイプラン( dev, production)

○ 多くのコード、設定、テスト、ドキュメント

■ README、 CHANGELOG、 YML、 POM、 RAML( RESTf

ul API Modeling Language)

● これらをどうにかしたかった

○ そこで Spring Bloomr というツールを作った

マイクロサービス移行パズル #6

Page 23: JSUG SpringOne Platform 2016 報告会 Case Study 1

CyberAgent, Inc. All Rights Reserved

Spring Bloomr

Page 24: JSUG SpringOne Platform 2016 報告会 Case Study 1

● プロジェクトのひな形生成ツール

○ Spring Initializr みたいなやつ?

Spring Bloomr

Page 25: JSUG SpringOne Platform 2016 報告会 Case Study 1

Spring Bloomr

Page 26: JSUG SpringOne Platform 2016 報告会 Case Study 1

Spring Bloomr

Page 27: JSUG SpringOne Platform 2016 報告会 Case Study 1

Spring Bloomr

Page 28: JSUG SpringOne Platform 2016 報告会 Case Study 1

Spring Bloomr

Page 29: JSUG SpringOne Platform 2016 報告会 Case Study 1

Spring Bloomr

Page 30: JSUG SpringOne Platform 2016 報告会 Case Study 1

Spring Bloomr

Page 31: JSUG SpringOne Platform 2016 報告会 Case Study 1

組織構造の変化

● マイクロサービス化を進めていった結果、部門と職種で縦割りだった組

織が、プロジェクトごとに様々な職種の人間で構成されるようになっ

Page 32: JSUG SpringOne Platform 2016 報告会 Case Study 1

今後の課題

● ログ集約

● サービスディスカバリとクライアントサイドのロードバランシング

● A/B テスト

Page 33: JSUG SpringOne Platform 2016 報告会 Case Study 1

CyberAgent, Inc. All Rights Reserved Gap Inc.’s Cloud Migration: Lessons

Learned

Page 34: JSUG SpringOne Platform 2016 報告会 Case Study 1

Gap の取り組み紹介

● 使っているパターン、ツール、テクニックの紹介

● チャレンジしていること

● 次のステップ

Page 35: JSUG SpringOne Platform 2016 報告会 Case Study 1

パターン、ツール、テクニック

● Rabbit MQ

○ Pivotal Cloud Foundry 上に展開

○ ユースケース

■ 店舗内在庫の変更をできるだけリアルタイムに更新するため

● Data の可視化

○ Gap Inc. は 10 年を経たレガシーシステムやデータセンターを

持っている

○ サービスやデータの局所化が激しい

○ そのためにデータを可視化するツールを利用している

■ 自作?

Page 36: JSUG SpringOne Platform 2016 報告会 Case Study 1

パターン、ツール、テクニック

● Auto Scaling

○ Rabbit MQ は水平スケーリングを可能にしてくれた

○ CPU がスパイクするような状況が発生すると、 PCF が自動的に

worker をオンデマンドで追加してくれる

● アプリケーションパフォーマンスモニタリング

○ APM Tools (おそらく NewReric)を使ってモニタリングしてい

○ 開発者がパフォーマンス問題を素早く診断し、解決できるように

Page 37: JSUG SpringOne Platform 2016 報告会 Case Study 1

チャレンジしていること

● Spring Cloud Config の導入

○ 現状は手動で暗号化、キーのローテーションは無し、 Git に

secrets を入れている

○ Git が SPOF になっている

○ Blue/Green Deploy の間の Web Hook が複雑

○ Git における監査証跡は、リポジトリにコミットされた時のみで、

本番での変更を示すものではない

Page 38: JSUG SpringOne Platform 2016 報告会 Case Study 1

チャレンジしていること

● Spring Cloud Config と Vault + Consul

○ Gap と Pivotal が協力して開発している

○ Consul の変更を Spring Cloud Config が取り込んでいる

Page 39: JSUG SpringOne Platform 2016 報告会 Case Study 1

チャレンジしていること

● Data Services として Tesora (OpenStack の DBaaS) をテストしてい

● PCF 1.8 でサポート内容が改善される

● パブリッククラウドに移ることになった時に今の経験をシームレスに

活かせるようにしたい

Page 40: JSUG SpringOne Platform 2016 報告会 Case Study 1

チャレンジしていること

● IPSec

○ Gap Inc. は個人情報を守るために強固なセキュリティを必要とし

ている

○ PCF 内でセキュアにデータを送るために IPSec add-on を使って

いる

Page 41: JSUG SpringOne Platform 2016 報告会 Case Study 1

● パブリッククラウドへの移行

○ パブリッククラウドはスピードとスケーラビリティをもたらして

くれる

○ 新しい技術への挑戦

○ しかし、いささか懸念も持っている

次のステップ

Page 42: JSUG SpringOne Platform 2016 報告会 Case Study 1

● Learn more

○ Ontario Teachers’ Pension Plan

○ Gapが、衣類価格の最適化のためにクラウドを採用

○ The Gap on Cloud Optimization & Cloud Foundry

Thank you for your attention!