Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Road to migrate JP Web as a microservice
Sota Sugiura
August 06, 2018
Technology
4
1.3k
Road to migrate JP Web as a microservice
Mercari Tech Meetup #1 〜 Microservices 始めました! 〜 にて発表しました
https://techplay.jp/event/687031
Sota Sugiura
August 06, 2018
Tweet
Share
More Decks by Sota Sugiura
See All by Sota Sugiura
20220926_セキュリティチームの今_for_Drs._Prime_公開用.pdf
sota1235
0
15
再発防止策を考える技術 / #phpconsen
sota1235
10
3.2k
How to choose the best npm module for your team?
sota1235
9
340
Realtime Database for high traffic production application
sota1235
7
3.5k
インターフェース再入門 / Think Interface again
sota1235
6
9.7k
再発防止策を考える技術 #phpconfuk_rej
sota1235
1
880
Update around Firebase #io18
sota1235
3
3.9k
Introduction for sonarwhal
sota1235
0
380
JavaScriptユニットテストの理想と現実
sota1235
13
6.8k
Other Decks in Technology
See All in Technology
初めてのデータ移行プロジェクトから得た学び
tjmtmmnk
0
340
ChatGPT for Hacking
anugrahsr
0
4.4k
Logbii(ログビー) 会社紹介
logbii
0
140
地方自治体業務あるある ーアナログ最適化編-
y150saya
1
270
Raspberry Pi Camera 3 介紹
piepie_tw
PRO
0
150
Periodic Multi-Agent Path Planning
hziwara
0
110
WebLogic Server for OCI 概要
oracle4engineer
PRO
3
880
Oracle Cloud Infrastructure:2023年1月度サービス・アップデート
oracle4engineer
PRO
0
160
Airdrop for Open Source Projects
epicsdao
0
700
re:Invent2022 前後の Amazon EventBridge のアップデートを踏まえつつ、情シスの仕事をより楽しくしたい話。 / EventBridge for Information Systems Department
_kensh
2
740
証明書って何だっけ? 〜AWSの中間CA移行に備える〜
minorun365
3
2.1k
re:Inventで発表があったIoT事例の紹介と考察
kizawa2020
0
190
Featured
See All Featured
What's new in Ruby 2.0
geeforr
336
30k
How to Ace a Technical Interview
jacobian
270
21k
Intergalactic Javascript Robots from Outer Space
tanoku
261
26k
Designing the Hi-DPI Web
ddemaree
273
32k
Put a Button on it: Removing Barriers to Going Fast.
kastner
56
2.5k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
175
9.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
32
6.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
Practical Orchestrator
shlominoach
178
8.9k
5 minutes of I Can Smell Your CMS
philhawksworth
198
18k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
101
6.2k
Transcript
Road to migrate JP web as microservices @sota1235 2018/8/6 Mercari
Tech Meetup #1
console.log(me); • Sota Sugiura(きりん) • @sota1235 • Web Rearchitect, Tech
Lead • 将来の夢はJavaScript になることです
Webの話をします
Agenda • メルカリWebについて • JP Web Rearchitectについて • Rearchitectの道のり
メルカリWebについて
おかげさまで5周年 https://about.mercari.com/press/news/article/20180702_mercarinumbers/
⼀⽅のWeb https://speakerdeck.com/yuisakamoto/apurihuasutofalseying-dewan-zhang-ruwebfalsehua
これまでのメルカリの事業 • ⾮連続な成⻑のための開発スピード • スマートフォンで売る/買うという体験 • 選択と集中による開発リソースの配分
これまでのメルカリWeb • 新たな顧客層へのサービス提供 • SNSシェアやSEO等、Webへの展開 • ⼀部、WebViewとブラウザで両⽴するページ の展開
現状のメルカリWebの課題
アプリとの機能差分 アーキテクチャ
アプリとの機能差分 アーキテクチャ アプリとの機能差分
アプリとの機能差 • Webは必要最低限の機能のみ実装されている • 購⼊/出品/検索 • いくつかの機能はアプリへ誘導している • 配送機能(⼀部)、オファー、フォロー etc…
全部コピー、が正解ではない • アプリ、Webそれぞれ良さがある • Webで活きるものは実装したい • 逆にWebだけの機能があってもいい
アプリとの機能差分 アーキテクチャ アーキテクチャ
アーキテクチャ • Monolithicな構成になっている • フロントエンドエンジニアが触りづらい • BackendのMicroservices化についていくのが 難しい
アーキテクチャ • dietcube(hosted by PHP 7.1) • jQuery • React
• ⼤抵のviewはTwigでrenderingされる
このままでよいのか
よくない • Webもメルカリの重要なファクター • ブラウザ上でのお客さまの体験の最適化 • AMP化によるアクセスの爆増や細かい改修に よる売上の向上等、まだまだポテンシャルを 秘めている
JP Web Rearchitect team
JP Web Rearchitectについて
Goal
新アーキテクチャの構築
新アーキテクチャの⽬的 • 今後のメルカリWebの進化を促進する • 数多くのチーム、エンジニアの協調
進化の促進 • やりたいことは⼭程ある • 新しい技術的チャレンジをする⼟壌を整える • PWA化や新ライブラリの積極的な導⼊ • 新しいWebサービスの展開
エンジニアの協調 • フロントエンドとバックエンドの関⼼事を分 離する • 100⼈のフロントエンドエンジニア、10個の Webチームがあっても成り⽴つアーキテクチャ
Rearchitectの道のり
テーマ Monolithic to Microservices
なぜか • フロントエンドとバックエンドを分離する • 多サービスが協調して1ドメイン下のサービス 開発をできる基盤を整える
今 ϝϧΧϦ ϝϧΧϦ ϘοΫε ϝϧΧϦ ΨΠυ Ωϟϯϖʔϯ ϖʔδ #BDLFOE 'SPOUFOE
#BDLFOE 'SPOUFOE #BDLFOE 'SPOUFOE #BDLFOE 'SPOUFOE single repository
今 • Webのすべての機能が1リポジトリに • 担当チームという概念が無く、Ownershipを 持ちづらい構造 • BackendとFrontendも同じリポジトリにあり、 責務分離がきれいにされていない
未来 (SBQI2- 443 ϝϧΧϦ 3&45"1* 'SPOUFOE ϝϧΧϦϘοΫε #BDLFOE4FSWFS ϝϧΧϦΨΠυ
未来 • 1つのサービスに1つのチームが責任を持つ • それぞれが技術選定を⾃由にできるように • デプロイ、開発すべてを⾃治する
今と未来のギャップを埋める
[WIP]初期フェーズの計画
[WIP]初期フェーズの計画 • BFF + Frontend • Web Gateway • Session
Consistency
BFF + Frontend
なぜBFFを選択するか • 新アーキテクチャの⽬標の1つとして「フロン トエンドエンジニアの⽣産性を極限まで上げ る」 • これから複雑化していくBackendを隠蔽する ⼿段としてBFFという考え⽅を取り⼊れた
BFF + Frontend • Next.jsでSSR + SPA 構成に • Data
resourceは GraphQLサーバ • SSR Serverより先を BFFと定義
責務の分離 • Frontendエンジニア はSSR Server • Backendエンジニア はGraphQL Server
Web Gateway
Web Microservices • 同⼀ドメイン下に複数のServiceを展開したい • その際RoutingやBalancingが必要になる • また、初期は新しいWebへのMigrationが必要
Migration • 新アーキテクチャへのMigrationはページ単位 で⾏う • Web Gatewayを⽴てて、Migrationをシーム レスに⾏えるようにする
None
特定のパスは新しい⽅方へ
移⾏行行前のものは すべてそのままパスする
Session Consistency
Session Consistency • Microservices間でStorageやデータの共有は ⾏わない • SessionをそれぞれのServiceで扱うことにな る
Spec • ログイン/アウト状態の同期 • 強制ログアウトの同期 • Be secure • 現在のWebとのセッション同期
Session Service • Webのセッションを管理するMicroserviceを ⽴てる • 各WebのMicroserviceはここと通信する
初期フェーズ
新しいServiceも ここを使う
実際にどう 設計を進めているのか
現場の進め⽅ • チーム内で設計、壁打ち • Microservices Platformチームに相談 • Tech lead間で相談
まとめ
メルカリWebは進化します • まずはMonolithic to Microservicesを達成す るべく既に動き出しています • また、その先の未来を⾒据えたアーキテクチャ を設計し実装しています
乞うご期待 • 直近は⼤規模なリプレースでなく部分的な Migrationを⾏う • ⼩さい成功を積み重ね、理想の世界とのギャッ プを少しずつ埋めていく
https://twitter.com/sota1235/status/934336948885381121
Thank you