Movatterモバイル変換


[0]ホーム

URL:


Shin Ohno, profile picture
Uploaded byShin Ohno
PDF, PPTX3,237 views

Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24

メルカリ社の創業時以来から存在しているモノリスサービスの Kubernetes 移行に関する話

Embed presentation

Download as PDF, PPTX
1Mercari JPのモノリスサービスをKubernetesに移行した話PHP Conference 2022Shin Ohno(@ganchiku)
2Engineering Manager
Mercari API Team, Mercari JP


Shin Ohno

3Mercari-api チームストリームドアラインド & イネイブリングを兼ねているようなチームチームとその領域
4なぜ Kubernetes 環境に移行をしたかトピックなにを Kubernetes 環境に移行したかどうやって Kubernetes 環境に移行したかチームトポロジー的な視点02030401既存アプリケーションの問題にどう対処したか05今後、どうなっていくか06
5なぜ Kubernetes 環境に移行をしたかWHY
6なぜ Kubernetes 環境に移行をしたかCloud ならではの利点の享受● Reliability を向上させる● インフラのコスト最適化させる開発者体験を改善し、エンジニアの満足度の向上● Kubernetes, Terraform などの Platform 基盤の上に乗る● 開発環境と本番環境の差を最小にするPlatform チームが提供するMercari のマイクロサービスと同じ開発体験とするため
7なぜ Kubernetes 環境に移行をしたか移行前の開発環境 移行後の開発環境開発環境の主なオーナー CI/CDチーム Mercari API チーム本番環境と開発環境の差異 開発環境は、VM の Docker環境で他のサービスと相乗りしていた本番と同じくコンテナイメージを使用するようになった開発環境のセットアップ Web UI から手動で VM を起動していたGitHub PR が作られると、自動的に開発クラスターにDeploy され、起動していたログの確認 開発環境のコンテナ内のログを参照DataDog に流れるようになった開発環境と本番環境の差を最小にする
8サービスの概念図(簡略版)
9実際のインフラ構成図(簡略版)移行前
10実際のインフラ構成図(簡略版)
11なにを Kubernetes 環境に移行したかWHAT
12モノリスサービスの構成見出しAPIサーバー
Nginx+Apache
キューを処理するWorker 
Q4M with PHP
● メール送信
● SMS送信
● プッシュ通知送信
● 会計処理
など
● マイクロサービス化されていないエンドポイント群 
● 購入、配送処理の一部 
● ユーザー管理の一部 
など
● 配送処理のバッチ
● リマインド通知のバッチ 
● 会計の月次処理のバッチ 
● 一部ログ掃除などのバッチ 
など


Cron Job

13どうやって Kubernetes 環境に移行したかHOW
14どうやって Kubernetes 環境に移行したか● Lift○ 既存のシステムをそのままクラウド環境へ移行する● Shift○ クラウドへ移行したシステムを徐々にクラウド環境に最適化するLift & Shift アプローチ
15どうやって Kubernetes 環境に移行したか● PHPの Base Container を予め用意する● アプリケーションを含んだContainer を Build & Release● 1つずつ影響度の小さいものから移行していく。Kustomize 使用影響の小さいものから少しずつ(Worker から)キューのDB は同じなので、取り合いに注意
16どうやって Kubernetes 環境に移行したかWorker の移行後、API サーバーも準備し、少しずつ Traffic を移行していく0%-0.01% -> 0.01%-1%-5% -> 5%-25%-42%-0% -> 0%-5% -> 5%-25%-50% -> 50%-0% -> 0%-50%-0% ->0%-10% -> 10%-25% -> 25%-0%-50% -> 50%-100%参考: What it’s like to work as an embedded microservices SRE
17どうやって Kubernetes 環境に移行したかMercari API チームが先行事例を作り、ドキュメント作成後、各チームに委譲● ノウハウをドキュメント化し、各ドメインオーナーに伝え、支援するCronJob の数: 約40CronJob に関しては、先行事例を最初に作って、各ドメインオーナーが実施検索 取引物流クーポン通知ユーザー価格出品ログインコメント
18チームトポロジー的な視点Team Topologies Perspective
19チームトポロジー的な視点● 初期(構想を練って、プロトタイプ化)
○ タスクフォース的に、モノリスサービスの知見を持ったメンバーがリード 
○ 先行して移行をしていたMercari USの知見を参考 
● 中期(Kubernetes 環境にリリース)
○ マイクロサービスの知見を持ったメンバーがKubernetes の設定をリード 
○ ミドルウェアの運用の知見を持ったSREにヒアリング 
● 後期(運用改善)
○ CronJobに関しては、各チームに委譲していく 
○ オブザーバビリティ改善のため、Embedded SRE と共にサービス改善を行う 
■ DataDog によるモニタリング、ログ等の組み込み 
■ 最適なCPU, Memory の設定 
フェーズによってチームメンバーが入れ替わり、チームのインタラクションモードも合わせていった。
20チームトポロジー的な視点移行タスクフォース: ストリームアラインドチーム● 移行そののものをリードSRE: イネイブリングチーム● 移行で困難なことやノウハウを伝授、教育Platform: プラットフォームチーム● マイクロサービス共通基盤などを提供チームのタイプ
21チームトポロジー的な視点● タスクフォース的に、モノリスサービスの知見を持ったメンバーがリード 
● US の移行の知見のヒアリングブロッカーになりそうな場所の整理● Log の集約をどうするか● Credentials の管理をどうするか大まかなマイルストーンとスケジュール● Base となるコンテナイメージ の作成● Worker, APIServer, CronJob それぞれいつまでの移行完了を目指すか初期(構想を練って、プロトタイプ化)(3ヶ月)参考: 巨大モノリスをKubernetesに移行してシングルクラスタ運用にするためにどうしたか
22チームトポロジー的な視点● マイクロサービスの知見を持ったメンバーがKubernetes の設定をリード 
● ミドルウェアの運用の知見を持ったSREにヒアリング開発期(yamlがほとんど)● Worker の Deployment 用意● GitHub PR merge でアプリケーションイメージの作成● PubSub -> Spinnaker でデプロイ中期(Kubernetes 環境にリリース)(5ヶ月)
23チームトポロジー的な視点運用改善
● オブザーバビリティ改善のため、SRE と共にサービス改善を行う 
● DataDog によるモニタリング、ログ等の組み込みCronJob 移行
● 移行ドキュメントやスケジュールを管理し、各チームに委譲、レビューや相談に乗る後期(運用改善)(5ヶ月)運用改善CronJob移行
24既存アプリケーションの問題にどう対処したかApplication Specific issues
25既存アプリケーションの問題にどう対処したか時間の経過と共に Worker のメモリが溜まっていく● 24時間に一度 Rollout して、Pod を入れ替える
メモリリーク問題(Worker)メモリが上がってくるタイミングを想定して、CronJob のスケジューラーで RollOut
26既存アプリケーションの問題にどう対処したか処理中に落ちたりしてしまわないように、pcntl_signal 関数でシグナルを確認OnPremiss環境● 複数の Worker を Supervisord で管理Kubernetes 環境● 各Worker 毎に Deployment で管理● スケールインする際に、正しくジョブの実行が終わっていることをチェック
グレースフルシャットダウン(Worker)
27既存アプリケーションの問題にどう対処したかGKE特有の問題、concurrencyPolicy: Replace でも並列稼働する可能性あり● 重複実行をしても良い設計に(冪等性)● それでも重複実行を許容できない処理においては、アプリケーションレベルで、ロック機構を用いて対応参考: https://engineering.mercari.com/blog/entry/k8s-cronjob-20200908/
CronJob 重複実行問題
28既存アプリケーションの問題にどう対処したかKubernetes での接続先の Host の解決での DNS の問い合わせの数が増えてしまっていた● Trailing dotがないとき○ ドメインの解決候補の数(5回)+ フルドメイン(1回)○ IPv4 + IPv6 の両方で問い合わせ■ 6回x2回の問い合わせ -> 12回● Trailing dotがあるとき○ Hostに trailing dot を付けて、厳密な問い合わせをするようにした○ 1回x2回の問い合わせ -> 2回PHP に限った話ではないが、PHP だと顕著にパフォーマンスに影響のあったDNS解決問題
29ホストの指定改善前と改善後DNSサーバーの RPSHost指定が多かったエンドポイントの Latency改善前 改善後改善前改善後
30今後、どうなっていくかNext?
31今後どうなっていくか● Log 基盤の最適化○ 今までログの一部に td-agent を使用していたが、Cloud Logging へ● Traffic のルートの最適化○ 今まで Gateway からの Traffic を GCE の Proxy を経由していたが、直接 GKE のアプリケーションへ● Cloud Resource の最適化○ CPU, Monitor などを適宜ウォッチし、改善の余地がある場所を見つけ、改善● 柔軟なリリース○ Canary Release を採用し、より安全なリリースへの改善まだまだLift & Shift の Shift の最中
32まとめメルカリ最古のモノリスサービスをKubernetes 環境に移行● なぜ、なにを、どうやって● フェーズによってMercari-api チームだけでは解決できない問題○ SREチームとファシリテーションモード 、コラボレーションモード で関わりながら遂行○ ドメインオーナーが持つべき CronJob の移行は、Mercari-api チームがファシリテートして移行他のマイクロサービスと同じ Platform の上に乗ることができた● チームが開発し、運用し、改善をすることがしやすくなった● CPU, Memory の最適化の改善を考えた運用ができるようになった
33We are hiringRobust Foundation for Speed, Mercari

Recommended

PDF
マイクロサービス 4つの分割アプローチ
PDF
Serverless時代のJavaについて
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PPTX
世界一わかりやすいClean Architecture
PPTX
本当は恐ろしい分散システムの話
PDF
Google Cloud で実践する SRE
PDF
PostgreSQLアンチパターン
PDF
マイクロにしすぎた結果がこれだよ!
PDF
Tackling Complexity
PDF
例外設計における大罪
PDF
ソーシャルゲームのためのデータベース設計
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
3分でわかるAzureでのService Principal
PDF
ドメイン駆動設計 本格入門
PDF
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PPTX
ぱぱっと理解するSpring Cloudの基本
PDF
それはYAGNIか? それとも思考停止か?
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PDF
AWSのログ管理ベストプラクティス
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PDF
イミュータブルデータモデル(世代編)
PDF
マルチテナントのアプリケーション実装〜実践編〜
PDF
2019-Nov-23 Pivotalのプロセスとプラットフォーム@DellTechnologies FORUM
PDF
Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...

More Related Content

PDF
マイクロサービス 4つの分割アプローチ
PDF
Serverless時代のJavaについて
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PPTX
世界一わかりやすいClean Architecture
PPTX
本当は恐ろしい分散システムの話
PDF
Google Cloud で実践する SRE
PDF
PostgreSQLアンチパターン
PDF
マイクロにしすぎた結果がこれだよ!
マイクロサービス 4つの分割アプローチ
Serverless時代のJavaについて
ドメイン駆動設計に15年取り組んでわかったこと
世界一わかりやすいClean Architecture
本当は恐ろしい分散システムの話
Google Cloud で実践する SRE
PostgreSQLアンチパターン
マイクロにしすぎた結果がこれだよ!

What's hot

PDF
Tackling Complexity
PDF
例外設計における大罪
PDF
ソーシャルゲームのためのデータベース設計
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
3分でわかるAzureでのService Principal
PDF
ドメイン駆動設計 本格入門
PDF
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PPTX
ぱぱっと理解するSpring Cloudの基本
PDF
それはYAGNIか? それとも思考停止か?
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PDF
AWSのログ管理ベストプラクティス
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PDF
イミュータブルデータモデル(世代編)
PDF
マルチテナントのアプリケーション実装〜実践編〜
Tackling Complexity
例外設計における大罪
ソーシャルゲームのためのデータベース設計
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
3分でわかるAzureでのService Principal
ドメイン駆動設計 本格入門
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
ぱぱっと理解するSpring Cloudの基本
それはYAGNIか? それとも思考停止か?
SPAセキュリティ入門~PHP Conference Japan 2021
AWSのログ管理ベストプラクティス
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
ヤフー社内でやってるMySQLチューニングセミナー大公開
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
ドメイン駆動設計 ( DDD ) をやってみよう
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
イミュータブルデータモデル(世代編)
マルチテナントのアプリケーション実装〜実践編〜

Similar to Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24

PDF
2019-Nov-23 Pivotalのプロセスとプラットフォーム@DellTechnologies FORUM
PDF
Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...
PDF
【日本語版】Styler: Our Journey to GCP
PDF
ハイブリットクラウド環境におけるモダンアプリケーション開発
PDF
VMware が考えるコンテナと Kubernetes の世界
PDF
20200708サーバーレスでのAPI管理の考え方
PDF
Kubernetes 導入から始める DevOps について
PDF
[Cloud OnAir] Talks by DevRel Vol.5 アプリケーションのモダナイゼーション 2020年9月3日 放送
PDF
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
PDF
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
PDF
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
PDF
NGINX & OpenShift webinar for Energy Sector
PDF
GCPで実現するクラウドネイティブアプリケーション
PDF
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
PDF
Cloud Nativeを見据えたアプリケーションアーキテクチャとレガシーモダナイゼーション
PDF
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
PDF
Kubernetes超入門
PPTX
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
PPTX
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
PDF
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
2019-Nov-23 Pivotalのプロセスとプラットフォーム@DellTechnologies FORUM
Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...
【日本語版】Styler: Our Journey to GCP
ハイブリットクラウド環境におけるモダンアプリケーション開発
VMware が考えるコンテナと Kubernetes の世界
20200708サーバーレスでのAPI管理の考え方
Kubernetes 導入から始める DevOps について
[Cloud OnAir] Talks by DevRel Vol.5 アプリケーションのモダナイゼーション 2020年9月3日 放送
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
NGINX & OpenShift webinar for Energy Sector
GCPで実現するクラウドネイティブアプリケーション
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Cloud Nativeを見据えたアプリケーションアーキテクチャとレガシーモダナイゼーション
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
Kubernetes超入門
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは

Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24


[8]ページ先頭

©2009-2025 Movatter.jp