Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
Uploaded by
Shin Ohno
PDF, PPTX
3,287 views
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
メルカリ社の創業時以来から存在しているモノリスサービスの Kubernetes 移行に関する話
Engineering
◦
Read more
0
Save
Share
Embed
Save to Drive
Download now
Download as PDF, PPTX
1
/ 33
2
/ 33
3
/ 33
4
/ 33
5
/ 33
6
/ 33
7
/ 33
8
/ 33
9
/ 33
10
/ 33
11
/ 33
12
/ 33
13
/ 33
14
/ 33
15
/ 33
16
/ 33
17
/ 33
18
/ 33
19
/ 33
20
/ 33
More Related Content
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
89 slides
146.5K views
PDF
DockerとPodmanの比較
by
Akihiro Suda
37 slides
64.8K views
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
83 slides
31.1K views
PPTX
DockerコンテナでGitを使う
by
Kazuhiro Suga
8 slides
21.3K views
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
35 slides
68.8K views
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
119 slides
68.5K views
PDF
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
51 slides
90.6K views
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
89 slides
146.5K views
DockerとPodmanの比較
by
Akihiro Suda
37 slides
64.8K views
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
83 slides
31.1K views
DockerコンテナでGitを使う
by
Kazuhiro Suga
8 slides
21.3K views
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
35 slides
68.8K views
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
33 slides
129.9K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
119 slides
68.5K views
Dockerfile を書くためのベストプラクティス解説編
by
Masahito Zembutsu
51 slides
90.6K views
What's hot
PDF
日本語テストメソッドについて
by
kumake
64 slides
21.6K views
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
96 slides
37.4K views
PDF
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
26 slides
22.1K views
PDF
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
85 slides
60.9K views
PDF
Paxos
by
Preferred Networks
64 slides
38.4K views
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
140.9K views
PPTX
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
by
Unity Technologies Japan K.K.
89 slides
17.6K views
PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
33 slides
18K views
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
65 slides
51.4K views
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
by
日本マイクロソフト株式会社
148 slides
15K views
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
23 slides
9.9K views
PDF
Docker Compose 徹底解説
by
Masahito Zembutsu
123 slides
63.5K views
PDF
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
83 slides
66.1K views
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
by
AdvancedTechNight
37 slides
16.8K views
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
91 slides
49.3K views
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
46 slides
2.3K views
PDF
Pythonによる黒魔術入門
by
大樹 小倉
35 slides
47.1K views
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
16 slides
287.7K views
PDF
例外設計における大罪
by
Takuto Wada
37 slides
76.8K views
PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
by
Yahoo!デベロッパーネットワーク
49 slides
25.4K views
日本語テストメソッドについて
by
kumake
64 slides
21.6K views
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
96 slides
37.4K views
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
26 slides
22.1K views
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
85 slides
60.9K views
Paxos
by
Preferred Networks
64 slides
38.4K views
マイクロにしすぎた結果がこれだよ!
by
mosa siru
32 slides
140.9K views
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
by
Unity Technologies Japan K.K.
89 slides
17.6K views
Python におけるドメイン駆動設計(戦術面)の勘どころ
by
Junya Hayashi
33 slides
18K views
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
by
Koichiro Matsuoka
65 slides
51.4K views
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
by
日本マイクロソフト株式会社
148 slides
15K views
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
23 slides
9.9K views
Docker Compose 徹底解説
by
Masahito Zembutsu
123 slides
63.5K views
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
83 slides
66.1K views
単なるキャッシュじゃないよ!?infinispanの紹介
by
AdvancedTechNight
37 slides
16.8K views
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
91 slides
49.3K views
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
46 slides
2.3K views
Pythonによる黒魔術入門
by
大樹 小倉
35 slides
47.1K views
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
16 slides
287.7K views
例外設計における大罪
by
Takuto Wada
37 slides
76.8K views
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
by
Yahoo!デベロッパーネットワーク
49 slides
25.4K views
Similar to Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
PDF
2019-Nov-23 Pivotalのプロセスとプラットフォーム@DellTechnologies FORUM
by
Shinya Yanagihara
50 slides
168 views
PDF
Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...
by
Tomohiro Tsuchida
36 slides
242 views
PDF
【日本語版】Styler: Our Journey to GCP
by
MichaelFindlater
42 slides
81 views
PDF
ハイブリットクラウド環境におけるモダンアプリケーション開発
by
政雄 金森
60 slides
487 views
PDF
VMware が考えるコンテナと Kubernetes の世界
by
Yuichi Tamagawa
30 slides
564 views
PDF
20200708サーバーレスでのAPI管理の考え方
by
Amazon Web Services Japan
93 slides
2K views
PDF
Kubernetes 導入から始める DevOps について
by
Shigeru Tatsuta
27 slides
832 views
PDF
[Cloud OnAir] Talks by DevRel Vol.5 アプリケーションのモダナイゼーション 2020年9月3日 放送
by
Google Cloud Platform - Japan
47 slides
628 views
PDF
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
by
Amazon Web Services Japan
37 slides
1.8K views
PDF
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
by
Michitaka Terada
30 slides
553 views
PDF
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
by
Google Cloud Platform - Japan
57 slides
1.3K views
PDF
NGINX & OpenShift webinar for Energy Sector
by
NGINX, Inc.
46 slides
313 views
PDF
GCPで実現するクラウドネイティブアプリケーション
by
Kiyoshi Fukuda
50 slides
928 views
PDF
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
by
whywaita
66 slides
803 views
PDF
Cloud Nativeを見据えたアプリケーションアーキテクチャとレガシーモダナイゼーション
by
Erina Matsuda
30 slides
125 views
PDF
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
by
Masaya Aoyama
63 slides
494 views
PDF
Kubernetes超入門
by
Takashi Suzuki
31 slides
223 views
PPTX
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
by
Takahiro Fujii
36 slides
990 views
PPTX
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
by
Yoichi Kawasaki
65 slides
14.1K views
PDF
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
by
Koto Shigeru
52 slides
221 views
2019-Nov-23 Pivotalのプロセスとプラットフォーム@DellTechnologies FORUM
by
Shinya Yanagihara
50 slides
168 views
Kubecon NA 2019 Recap: Your Path to Production Ready Kubernetes hosted by Wea...
by
Tomohiro Tsuchida
36 slides
242 views
【日本語版】Styler: Our Journey to GCP
by
MichaelFindlater
42 slides
81 views
ハイブリットクラウド環境におけるモダンアプリケーション開発
by
政雄 金森
60 slides
487 views
VMware が考えるコンテナと Kubernetes の世界
by
Yuichi Tamagawa
30 slides
564 views
20200708サーバーレスでのAPI管理の考え方
by
Amazon Web Services Japan
93 slides
2K views
Kubernetes 導入から始める DevOps について
by
Shigeru Tatsuta
27 slides
832 views
[Cloud OnAir] Talks by DevRel Vol.5 アプリケーションのモダナイゼーション 2020年9月3日 放送
by
Google Cloud Platform - Japan
47 slides
628 views
[CTO Night & Day 2019] CTO のための一歩進んだコンテナ入門 #ctonight
by
Amazon Web Services Japan
37 slides
1.8K views
Rancher/k8sを利用した運用改善の取り組み(Rancher Day 2019)
by
Michitaka Terada
30 slides
553 views
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
by
Google Cloud Platform - Japan
57 slides
1.3K views
NGINX & OpenShift webinar for Energy Sector
by
NGINX, Inc.
46 slides
313 views
GCPで実現するクラウドネイティブアプリケーション
by
Kiyoshi Fukuda
50 slides
928 views
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
by
whywaita
66 slides
803 views
Cloud Nativeを見据えたアプリケーションアーキテクチャとレガシーモダナイゼーション
by
Erina Matsuda
30 slides
125 views
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
by
Masaya Aoyama
63 slides
494 views
Kubernetes超入門
by
Takashi Suzuki
31 slides
223 views
JSUG SpringOnePlatform 2016報告会 Case study2 - feed back - springoneplatform
by
Takahiro Fujii
36 slides
990 views
コンテナ&サーバーレス:トレンドの考察と少し先の未来の展望
by
Yoichi Kawasaki
65 slides
14.1K views
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
by
Koto Shigeru
52 slides
221 views
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
1.
1 Mercari JPのモノリスサービスをKubernetes に移行した話 PHP Conference
2022 Shin Ohno(@ganchiku)
2.
2 Engineering Manager Mercari API
Team, Mercari JP Shin Ohno
3.
3 Mercari-api チーム ストリームドアラインド &
イネイブリングを兼ねているようなチーム チームとその領域
4.
4 なぜ Kubernetes 環境に移行をしたか トピック なにを
Kubernetes 環境に移行したか どうやって Kubernetes 環境に移行したか チームトポロジー的な視点 02 03 04 01 既存アプリケーションの問題にどう対処したか 05 今後、どうなっていくか 06
5.
5 なぜ Kubernetes 環境に移行をしたか WHY
6.
6 なぜ Kubernetes 環境に移行をしたか Cloud
ならではの利点の享受 ● Reliability を向上させる ● インフラのコスト最適化させる 開発者体験を改善し、エンジニアの満足度の向上 ● Kubernetes, Terraform などの Platform 基盤の上に乗る ● 開発環境と本番環境の差を最小にする Platform チームが提供するMercari のマイクロサービスと同じ開発体験とするた め
7.
7 なぜ Kubernetes 環境に移行をしたか 移行前の開発環境
移行後の開発環境 開発環境の主なオーナー CI/CDチーム Mercari API チーム 本番環境と開発環境の差異 開発環境は、VM の Docker 環境で他のサービスと相乗り していた 本番と同じくコンテナイメージ を使用するようになった 開発環境のセットアップ Web UI から手動で VM を起 動していた GitHub PR が作られると、自 動的に開発クラスターに Deploy され、起動していた ログの確認 開発環境のコンテナ内のログ を参照 DataDog に流れるようになっ た 開発環境と本番環境の差を最小にする
8.
8 サービスの概念図(簡略版)
9.
9 実際のインフラ構成図(簡略版)移行前
10.
10 実際のインフラ構成図(簡略版)
11.
11 なにを Kubernetes 環境に移行したか WHAT
12.
12 モノリスサービスの構成 見出し APIサーバー Nginx+Apache キューを処理するWorker Q4M with
PHP ● メール送信 ● SMS送信 ● プッシュ通知送信 ● 会計処理 など ● マイクロサービス化されてい ないエンドポイント群 ● 購入、配送処理の一部 ● ユーザー管理の一部 など ● 配送処理のバッチ ● リマインド通知のバッチ ● 会計の月次処理のバッチ ● 一部ログ掃除などのバッチ など Cron Job
13.
13 どうやって Kubernetes 環境に移行したか HOW
14.
14 どうやって Kubernetes 環境に移行したか ●
Lift ○ 既存のシステムをそのままクラウド環境へ移行する ● Shift ○ クラウドへ移行したシステムを徐々にクラウド環境に最適化する Lift & Shift アプローチ
15.
15 どうやって Kubernetes 環境に移行したか ●
PHPの Base Container を予め用意する ● アプリケーションを含んだContainer を Build & Release ● 1つずつ影響度の小さいものから移行していく。Kustomize 使用 影響の小さいものから少しずつ(Worker から) キューのDB は 同じなので、取 り合いに注意
16.
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.
17 どうやって Kubernetes 環境に移行したか Mercari
API チームが先行事例を作り、ドキュメント作成後、各チームに委譲 ● ノウハウをドキュメント化し、各ドメインオーナーに伝え、支援する CronJob の数: 約40 CronJob に関しては、先行事例を最初に作って、各ドメインオーナーが実施 検索 取引 物流 クーポン 通知 ユーザー 価格 出品 ログイン コメント
18.
18 チームトポロジー的な視点 Team Topologies Perspective
19.
19 チームトポロジー的な視点 ● 初期(構想を練って、プロトタイプ化) ○ タスクフォース的に、モノリスサービスの知見を持ったメンバーがリード
○ 先行して移行をしていたMercari USの知見を参考 ● 中期(Kubernetes 環境にリリース) ○ マイクロサービスの知見を持ったメンバーがKubernetes の設定をリード ○ ミドルウェアの運用の知見を持ったSREにヒアリング ● 後期(運用改善) ○ CronJobに関しては、各チームに委譲していく ○ オブザーバビリティ改善のため、Embedded SRE と共にサービス改善を行う ■ DataDog によるモニタリング、ログ等の組み込み ■ 最適なCPU, Memory の設定 フェーズによってチームメンバーが入れ替わり、チームのインタラクションモードも合 わせていった。
20.
20 チームトポロジー的な視点 移行タスクフォース: ストリームアラインドチーム ● 移行そののものをリード SRE:
イネイブリングチーム ● 移行で困難なことやノウハウを伝授、教育 Platform: プラットフォームチーム ● マイクロサービス共通基盤などを提供 チームのタイプ
21.
21 チームトポロジー的な視点 ● タスクフォース的に、モノリスサービスの知見を 持ったメンバーがリード ●
US の移行の知見のヒアリング ブロッカーになりそうな場所の整理 ● Log の集約をどうするか ● Credentials の管理をどうするか 大まかなマイルストーンとスケジュール ● Base となるコンテナイメージ の作成 ● Worker, APIServer, CronJob それぞれい つまでの移行完了を目指すか 初期(構想を練って、プロトタイプ化)(3ヶ月) 参考: 巨大モノリスをKubernetesに移行してシングルクラスタ 運用にするためにどうしたか
22.
22 チームトポロジー的な視点 ● マイクロサービスの知見を持ったメンバーが Kubernetes の設定をリード
● ミドルウェアの運用の知見を持ったSREにヒア リング 開発期(yamlがほとんど) ● Worker の Deployment 用意 ● GitHub PR merge でアプリケーションイ メージの作成 ● PubSub -> Spinnaker でデプロイ 中期(Kubernetes 環境にリリース)(5ヶ月)
23.
23 チームトポロジー的な視点 運用改善 ● オブザーバビリティ改善のため、SRE と共に サービス改善を行う
● DataDog によるモニタリング、ログ等の組み 込み CronJob 移行 ● 移行ドキュメントやスケジュールを管理し、各 チームに委譲、レビューや相談に乗る 後期(運用改善)(5ヶ月) 運用改善 CronJob 移行
24.
24 既存アプリケーションの問題にどう対処したか Application Specific issues
25.
25 既存アプリケーションの問題にどう対処したか 時間の経過と共に Worker のメモリが溜まっていく ●
24時間に一度 Rollout して、Pod を入れ替える メモリリーク問題(Worker) メモリが上がってくるタイミングを想定して、 CronJob のスケジューラーで RollOut
26.
26 既存アプリケーションの問題にどう対処したか 処理中に落ちたりしてしまわないように、pcntl_signal 関数でシグナルを確認 OnPremiss環境 ● 複数の
Worker を Supervisord で管理 Kubernetes 環境 ● 各Worker 毎に Deployment で管理 ● スケールインする際に、正しくジョブの実行が終わっていることをチェック グレースフルシャットダウン(Worker)
27.
27 既存アプリケーションの問題にどう対処したか GKE特有の問題、concurrencyPolicy: Replace でも並列稼働する可能性あり ●
重複実行をしても良い設計に(冪等性) ● それでも重複実行を許容できない処理においては、アプリケーションレベルで、 ロック機構を用いて対応 参考: https://engineering.mercari.com/blog/entry/k8s-cronjob-20200908/ CronJob 重複実行問題
28.
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.
29 ホストの指定改善前と改善後 DNSサーバーの RPS Host指定が多かったエンド ポイントの Latency 改善前
改善後 改善前 改善後
30.
30 今後、どうなっていくか Next?
31.
31 今後どうなっていくか ● Log 基盤の最適化 ○
今までログの一部に td-agent を使用していたが、Cloud Logging へ ● Traffic のルートの最適化 ○ 今まで Gateway からの Traffic を GCE の Proxy を経由していたが、直接 GKE のアプリケー ションへ ● Cloud Resource の最適化 ○ CPU, Monitor などを適宜ウォッチし、改善の余地がある場所を見つけ、改善 ● 柔軟なリリース ○ Canary Release を採用し、より安全なリリースへの改善 まだまだLift & Shift の Shift の最中
32.
32 まとめ メルカリ最古のモノリスサービスをKubernetes 環境に移行 ● なぜ、なにを、どうやって ●
フェーズによってMercari-api チームだけでは解決できない問題 ○ SREチームとファシリテーションモード 、コラボレーションモード で関わりながら遂行 ○ ドメインオーナーが持つべき CronJob の移行は、Mercari-api チームがファシリテートして移 行 他のマイクロサービスと同じ Platform の上に乗ることができた ● チームが開発し、運用し、改善をすることがしやすくなった ● CPU, Memory の最適化の改善を考えた運用ができるようになった
33.
33 We are hiring Robust
Foundation for Speed, Mercari