Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
20230214_モノレポから抜け出した方法~マイクロサービス検討から導入までの道のり~
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Fumiaki Kurihara
February 14, 2023
Programming
20
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20230214_モノレポから抜け出した方法~マイクロサービス検討から導入までの道のり~
2023/02/14 ギークス株式会社様主催のウェビナーに登壇した際の資料です。
Fumiaki Kurihara
February 14, 2023
More Decks by Fumiaki Kurihara
See All by Fumiaki Kurihara
20240917_BigQueryを用いたデータ分析基盤の作り方
kurifumi
0
39
20200708_循環的複雑度 30 超えのシステムに Laravel × Onion Architecture で 立ち向かっ(た)ている話
kurifumi
0
19
Other Decks in Programming
See All in Programming
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
320
R8 の設定見直しでアプリサイズ削減
andpad
0
220
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
0
520
Next.js: The final boss of Web Performance
guaca
0
280
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
840
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
400
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
690
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
300
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
We Have a Design System, Now What?
morganepeng
55
8.4k
Accessibility Awareness
sabderemane
1
250
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Crafting Experiences
bethany
1
380
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Optimizing for Happiness
mojombo
378
71k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Transcript
Copyright © 2023 ULURU inc. All Rights Reserved. ギークス社登壇用 モノレポから抜け出した方法
~マイクロサービス検討から導入までの道のり~ 2023.2.14 株式会社うるる AI活用推進課 課長 栗原 史明
Copyright © 2023 ULURU inc. All Rights Reserved. 株式会社うるる 栗原史明
株式会社うるる NJSS事業本部 開発部 情報収集推進課 栗原 史明 ▼ プロフィール • 2014年に株式会社パソナテックに新卒入社 ◦ 金融系、小売系など様々な企業のBIツールの開 発 • 2018年に株式会社うるるに転職 ◦ 「入札情報速報サービスNJSS」担当のサーバー サイドエンジニアとして参画 ◦ 保守運用、リプレイスプロジェクト、AI研究開 発等、様々な社内開発Prjを横断 ◦ 現在はクローラー開発・文書データ解析業務を 中心に従事
Copyright © 2023 ULURU inc. All Rights Reserved. 本日会話すること 1.
株式会社うるるとは / NJSSとは 2. NJSSリニューアルを選択した意思決定の背景 3. マイクロサービスとは / メリットとデメリット 4. 私たちが採択したマイクロサービスの粒度とその背景 5. リニューアル後の効果と課題 6. まとめ
Copyright © 2023 ULURU inc. All Rights Reserved. 01: 株式会社うるるとは
/ NJSSとは
Copyright © 2023 ULURU inc. All Rights Reserved. 株式会社うるるのご紹介
Copyright © 2023 ULURU inc. All Rights Reserved. 株式会社うるるのご紹介
Copyright © 2023 ULURU inc. All Rights Reserved. 入札情報速報サービス NJSS
とは NJSSはSaaSモデル型の入札業務ワンストップサービス 入札市場は年間20兆円を超える安定性を誇る 全国8,300以上の官公庁・自治体などから公示される入札情報 を一括検索・管理・分析ができ、入札参加プロセスの効率化・ 販路拡大を支援 クローラー(自動収集プログラム)で拾いきれない情報は、ク ラウドワーカーが目視で情報収集しており、精度の高い情報を 網羅的に掲載していることが特徴
Copyright © 2023 ULURU inc. All Rights Reserved. 入札情報速報サービス NJSS
とは • 数百名規模のワーカーとクローラーを活用し入札・落札情報を収集 • 構築した独自のデータベースの検索サービスとして提供するビジネスモデル
Copyright © 2023 ULURU inc. All Rights Reserved. 02: NJSSリニューアルを選択した意思決定の背景
Copyright © 2023 ULURU inc. All Rights Reserved. • うるるは会社の更なる成長を目指し、5ヵ年の中期経営計画に突入しようと
しているフェーズ • うるるの大黒柱であるNJSSも、よりお客様に満足いただく為の様々な機能の 提案がビジネスサイドから入ってくる うるるは5ヵ年の中期経営計画への突入を控える ところが…
Copyright © 2023 ULURU inc. All Rights Reserved. 当時のNJSSの状況 とっくにEOLを迎えていた
CakePHP1.3での運用... テストコードの概念は 殆どない... 巨大なモノリポ設計により 1箇所の変更による影響範囲大... 循環的複雑度30超えの class は当たり前の Fat Model , Fat Controller... 機能追加どころの騒ぎではない…
Copyright © 2023 ULURU inc. All Rights Reserved. • 2008年のローンチ移行、とにかく売ることを優先していた過去
• お客様に満足していただく為、新規機能開発が優先され、リファクタリング が進まなかった • 2017年までに2回ほどリニューアルを試みているが、SEOの下落や社内合意 形成に至らず、いずれも未完に終わる • 過去の失敗から改善に踏み切れず、NJSSの成長も鈍化 なぜ、ここまで悪化してしまったのか この状況を打破するため中期経営計画にて次の成長を見据えた システム改善の投資が盛り込まれた
Copyright © 2023 ULURU inc. All Rights Reserved. なぜ、フルリニューアルの決断をしたのか? 端的に言うと時間が掛かりすぎる為
コード、FW、インフラと あらゆる面がレガシー。 故に、段階的な改善が 困難であった。 納期 コスト 品質 静的解析の結果、 負債の解消までに16年。 しかし期限は2年。 負債解消期間に比例して 膨れ上がる人件費
Copyright © 2023 ULURU inc. All Rights Reserved. フルリニューアルで取り組んだ技術的取り組み •
設計を中心にインフラなど様々な取り組みを実施 ◦ マイクロサービスアーキテクチャの導入 ◦ フロントエンド/サーバーサイド分離 ◦ オニオンアーキテクチャの導入 ◦ コンテナベースのアプリケーション設計 ◦ 自動テストを記述する文化の醸成 ◦ CI/CDの導入によるデプロイ・テスト実行の自動化 ◦ Infrastructure as Code の導入 ◦ Solr on EC2だった検索エンジンをAmazon Elasticsearchに移行 ◦ 他にもいろいろ… 本日はマイクロサービスアーキテクチャを中心にご紹介します
Copyright © 2023 ULURU inc. All Rights Reserved. 03: マイクロサービスとは
/ メリットとデメリット
Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービスアーキテクチャとは •
ビジネス機能に合わせて小さなサービスに分割するアプローチ • 2011年頃から提唱されたと言われており、近年ではよく聞く手法の1つ サービス 機能A 機能B 機能C サービス マイクロサービスA マイクロサービスB マイクロサービスC モノリシックアーキテクチャ(モノリス) 全ての機能群が1つのサービスに集結 マイクロサービスアーキテクチャ ビジネスに合わせて独立してサービスが動く
Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービスアーキテクチャのメリット •
ソースコードの影響範囲を限定できる ◦ 個々のシステムが独立している為、ソースコードも独立してデプロイが出来る ◦ 言語やフレームワークもそれぞれで選定が出来る • システムの稼働影響を限定できる ◦ 別サービスがダウンしても一方のサービスは影響無し、または影響を限定的に出来る ◦ 負荷がスパイクしてもマイクロサービス内でスケールがしやすい 影響範囲を限定するメリットを享受できる
Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービスアーキテクチャのデメリット •
データ整合性担保の難易度が上がる ◦ 別のマイクロサービスの永続化層へのアクセスはAPI経由が原則 ◦ 特にサービスを跨ったトランザクション処理の実装難易度は非常に高い • 運用コストが上がりやすい ◦ システムが増える為、運用コストが上がる可能性がある ◦ 同様に監視対象も増える為、死活監視やログの管理が煩雑化しやすい データ管理を中心に複雑化する
Copyright © 2023 ULURU inc. All Rights Reserved. 大半のシステムではマイクロサービスは必要ない? •
マーティン・ファウラー氏は安易な適用を戒めている ◦ システムの複雑度が小さい段階で導入すると、却って生産性を下げることに繋がる ◦ これはマイクロサービス特有の複雑性が混入してしまうことによるもの ◦ モノリスでシンプルに保つことが出来るのであれば、それが一番ベストな選択である 出典・引用: MicroservicePremium https://martinfowler.com/bliki/MicroservicePremium.html
Copyright © 2023 ULURU inc. All Rights Reserved. どう考えるのが良いのか?
Copyright © 2023 ULURU inc. All Rights Reserved. 2つの軸で考える サービス特性とデータ特性から考えると良い
Copyright © 2023 ULURU inc. All Rights Reserved. サービス特性から考える •
マイクロサービスはビジネスに合わせたサービスの分割である ◦ 「誰」が「何」をするためのサービスなのか ◦ サービスは人と目的(やりたいこと/やるべきこと)が合致することで成り立つ ◦ モノリシックサービスは上記が混在しているので紐解いてあげることが必要 ◦ 社内組織とマイクロサービスが連動しているとより効果が高い 顧客管理 契約管理 入札情報登録 入札情報検索 ワーカー管理 報酬管理
Copyright © 2023 ULURU inc. All Rights Reserved. データ特性から考える •
マイクロサービスは永続化層の分割でもある ◦ サービスを分割した際にどういう情報のやり取りが出るのかを整理する ◦ サービス間のトランザクション処理はしんどいので慎重に判断 ▪ 結果整合性の担保までにどの程度の時間が許容されるのかの整理も必要 ▪ 厳密なリアルタイムデータ同期を求める場合は分割は避けたほうが良い マイクロサービスA マイクロサービスB API経由でアクセス サービスを跨ぐ 永続化アクセスは アンチパターン
Copyright © 2023 ULURU inc. All Rights Reserved. 04: 私たちが採択したマイクロサービスの粒度とその背景
Copyright © 2023 ULURU inc. All Rights Reserved. 採用するべきか、しないべきか •
NJSSでは「導入した方が良さそう」という温度感からスタート ◦ 案件登録と閲覧のシステムは独立していても動きそうという漠然としたイメージはあった ◦ 同じクラスにワーカー向けとユーザー向けで分岐するような処理が入り乱れており「責務を 分割できれば楽なのに」という思いは常々あった • この肌感は本当に正しいのか?当時のエンジニアメンバーと意見を交わしな がら設計を描いていった
Copyright © 2023 ULURU inc. All Rights Reserved. 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供
【ワーカー向けドメイン】 入札情報の収集・入力を提供 マイクロサービス化するに当たり考えたポイント • サービス特性 ◦ NJSSは ▪ 入札情報を「クラウドワーカー」が「収集」し、 ▪ 入札情報を「ユーザー」が「閲覧・検索」出来るサービスである ◦ つまり収集と閲覧で明確にサービス特性が異なる => 「ワーカー向け」「ユーザー向け」ドメインを定義
Copyright © 2023 ULURU inc. All Rights Reserved. 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供
【ワーカー向けドメイン】 入札情報の収集・入力を提供 マイクロサービス化するに当たり考えたポイント • データ特性(1/3) ◦ 「ワーカー向け」と「ユーザー向け」は案件情報のみ依存関係にある ◦ データ連携時の結果整合性の担保は必要だが、即時性は要件はそこまで高くなかった => データ特性上の障壁は低め(綺麗に分割できそう)
Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービス化するに当たり考えたポイント •
データ特性(2/3) ◦ 2つのドメイン間は案件情報のやり取りのみを実施し他に依存性は無かった ◦ 一方で、どちらも1,800万件(※当時)の案件情報のフリーワード検索を高速にさばく必要が あったことから、検索のための中央集権的なサービスを構築することとした => 「検索」ドメインを定義 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供 【ワーカー向けドメイン】 入札情報の収集・入力を提供 【検索ドメイン】 入札情報の高速な検索を提供
Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービス化するに当たり考えたポイント •
データ特性(3/3) ◦ 別Prjで動いていたセールス部隊向けの「契約管理」が後から合流 ◦ 契約や売上金額の管理機能を「ユーザー向けサービス」から「契約管理」に役割を移譲 =>「契約管理」ドメインを定義 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供 【ワーカー向けドメイン】 入札情報の収集・入力を提供 【検索ドメイン】 入札情報の高速な検索を提供 【契約管理ドメイン】 契約情報やセールス情報管理を提供
Copyright © 2023 ULURU inc. All Rights Reserved. こうして… •
モノリスだったNJSSは4つのマイクロサービスへ ◦ 契約管理、ユーザー向け、ワーカー向け、検索の4つのサービスドメインに分割 【契約管理ドメイン】 「セールス部門の為の契約情報管理サービス」 契約情報・セールス情報管理 【ユーザー向けドメイン】 「ユーザーの為の入札情報検索サービス」 入札情報の閲覧・検索 【ワーカー向けドメイン】 「ワーカーの為の入札情報登録サービス」 入札情報の収集・入力 【検索ドメイン】 「サービスの為の高速検索サービス」 入札情報の高速な検索 収集した案件情報を 参照 案件情報を参照 顧客の行動データを連携 品質管理部門担当 セールス部門担当 セールス部門担当 担当なし
Copyright © 2023 ULURU inc. All Rights Reserved. 05: リニューアル後の効果と課題
Copyright © 2023 ULURU inc. All Rights Reserved. リニューアル後、どうなったのか •
16年分の技術的負債を86%削減 (44,456 hr -> 6,206 hr ※CodeClimate計測) ◦ 複雑化しているロジックは一部残ったものの、大幅な削減を達成 • 積極的な改善・バージョンアップが加速 ◦ 一方で実施した改善ノウハウを後続サービスに活かすという動きも • サービスの稼働継続性が上がった ◦ ユーザー向けサービスが一時的に不安定になっても、ワーカーは安定して案件登録を継続出 来る環境を作ることができた(逆も然り) • 運用面では新たな課題も ◦ システムが増えたためインフラコストが増えた(頑張ってコストダイエット中) ◦ マイクロサービス間で属人化が進んでいる(サービス間のコンテキストスイッチ)
Copyright © 2023 ULURU inc. All Rights Reserved. 06: まとめ
Copyright © 2023 ULURU inc. All Rights Reserved. まとめ •
マイクロサービスアーキテクチャは銀の弾丸ではない • 採用粒度を誤ると却って複雑化するため導入は慎重に • NJSSでは最小限のデータ連携の範囲でマイクロサービス化を実現 • サービス改善の容易性や対障害性のメリットを享受できた • コストや運用面に課題があるため継続的に改善中