Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20230214_モノレポから抜け出した方法~マイクロサービス検討から導入までの道のり~

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 20230214_モノレポから抜け出した方法~マイクロサービス検討から導入までの道のり~

2023/02/14 ギークス株式会社様主催のウェビナーに登壇した際の資料です。

Avatar for Fumiaki Kurihara

Fumiaki Kurihara

February 14, 2023
Tweet

More Decks by Fumiaki Kurihara

Other Decks in Programming

Transcript

  1. Copyright © 2023 ULURU inc. All Rights Reserved. ギークス社登壇用 モノレポから抜け出した方法

    ~マイクロサービス検討から導入までの道のり~ 2023.2.14 株式会社うるる AI活用推進課 課長 栗原 史明
  2. Copyright © 2023 ULURU inc. All Rights Reserved. 株式会社うるる 栗原史明

    株式会社うるる NJSS事業本部 開発部 情報収集推進課 栗原 史明 ▼ プロフィール • 2014年に株式会社パソナテックに新卒入社 ◦ 金融系、小売系など様々な企業のBIツールの開 発 • 2018年に株式会社うるるに転職 ◦ 「入札情報速報サービスNJSS」担当のサーバー サイドエンジニアとして参画 ◦ 保守運用、リプレイスプロジェクト、AI研究開 発等、様々な社内開発Prjを横断 ◦ 現在はクローラー開発・文書データ解析業務を 中心に従事
  3. Copyright © 2023 ULURU inc. All Rights Reserved. 本日会話すること 1.

    株式会社うるるとは / NJSSとは 2. NJSSリニューアルを選択した意思決定の背景 3. マイクロサービスとは / メリットとデメリット 4. 私たちが採択したマイクロサービスの粒度とその背景 5. リニューアル後の効果と課題 6. まとめ
  4. Copyright © 2023 ULURU inc. All Rights Reserved. 入札情報速報サービス NJSS

    とは NJSSはSaaSモデル型の入札業務ワンストップサービス 入札市場は年間20兆円を超える安定性を誇る 全国8,300以上の官公庁・自治体などから公示される入札情報 を一括検索・管理・分析ができ、入札参加プロセスの効率化・ 販路拡大を支援 クローラー(自動収集プログラム)で拾いきれない情報は、ク ラウドワーカーが目視で情報収集しており、精度の高い情報を 網羅的に掲載していることが特徴
  5. Copyright © 2023 ULURU inc. All Rights Reserved. 入札情報速報サービス NJSS

    とは • 数百名規模のワーカーとクローラーを活用し入札・落札情報を収集 • 構築した独自のデータベースの検索サービスとして提供するビジネスモデル
  6. Copyright © 2023 ULURU inc. All Rights Reserved. • うるるは会社の更なる成長を目指し、5ヵ年の中期経営計画に突入しようと

    しているフェーズ • うるるの大黒柱であるNJSSも、よりお客様に満足いただく為の様々な機能の 提案がビジネスサイドから入ってくる うるるは5ヵ年の中期経営計画への突入を控える ところが…
  7. Copyright © 2023 ULURU inc. All Rights Reserved. 当時のNJSSの状況 とっくにEOLを迎えていた

    CakePHP1.3での運用... テストコードの概念は 殆どない... 巨大なモノリポ設計により 1箇所の変更による影響範囲大... 循環的複雑度30超えの class は当たり前の Fat Model , Fat Controller... 機能追加どころの騒ぎではない…
  8. Copyright © 2023 ULURU inc. All Rights Reserved. • 2008年のローンチ移行、とにかく売ることを優先していた過去

    • お客様に満足していただく為、新規機能開発が優先され、リファクタリング が進まなかった • 2017年までに2回ほどリニューアルを試みているが、SEOの下落や社内合意 形成に至らず、いずれも未完に終わる • 過去の失敗から改善に踏み切れず、NJSSの成長も鈍化 なぜ、ここまで悪化してしまったのか この状況を打破するため中期経営計画にて次の成長を見据えた システム改善の投資が盛り込まれた
  9. Copyright © 2023 ULURU inc. All Rights Reserved. なぜ、フルリニューアルの決断をしたのか? 端的に言うと時間が掛かりすぎる為

    コード、FW、インフラと あらゆる面がレガシー。 故に、段階的な改善が 困難であった。 納期 コスト 品質 静的解析の結果、 負債の解消までに16年。 しかし期限は2年。 負債解消期間に比例して 膨れ上がる人件費
  10. Copyright © 2023 ULURU inc. All Rights Reserved. フルリニューアルで取り組んだ技術的取り組み •

    設計を中心にインフラなど様々な取り組みを実施 ◦ マイクロサービスアーキテクチャの導入 ◦ フロントエンド/サーバーサイド分離 ◦ オニオンアーキテクチャの導入 ◦ コンテナベースのアプリケーション設計 ◦ 自動テストを記述する文化の醸成 ◦ CI/CDの導入によるデプロイ・テスト実行の自動化 ◦ Infrastructure as Code の導入 ◦ Solr on EC2だった検索エンジンをAmazon Elasticsearchに移行 ◦ 他にもいろいろ… 本日はマイクロサービスアーキテクチャを中心にご紹介します
  11. Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービスアーキテクチャとは •

    ビジネス機能に合わせて小さなサービスに分割するアプローチ • 2011年頃から提唱されたと言われており、近年ではよく聞く手法の1つ サービス 機能A 機能B 機能C サービス マイクロサービスA マイクロサービスB マイクロサービスC モノリシックアーキテクチャ(モノリス) 全ての機能群が1つのサービスに集結 マイクロサービスアーキテクチャ ビジネスに合わせて独立してサービスが動く
  12. Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービスアーキテクチャのメリット •

    ソースコードの影響範囲を限定できる ◦ 個々のシステムが独立している為、ソースコードも独立してデプロイが出来る ◦ 言語やフレームワークもそれぞれで選定が出来る • システムの稼働影響を限定できる ◦ 別サービスがダウンしても一方のサービスは影響無し、または影響を限定的に出来る ◦ 負荷がスパイクしてもマイクロサービス内でスケールがしやすい 影響範囲を限定するメリットを享受できる
  13. Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービスアーキテクチャのデメリット •

    データ整合性担保の難易度が上がる ◦ 別のマイクロサービスの永続化層へのアクセスはAPI経由が原則 ◦ 特にサービスを跨ったトランザクション処理の実装難易度は非常に高い • 運用コストが上がりやすい ◦ システムが増える為、運用コストが上がる可能性がある ◦ 同様に監視対象も増える為、死活監視やログの管理が煩雑化しやすい データ管理を中心に複雑化する
  14. Copyright © 2023 ULURU inc. All Rights Reserved. 大半のシステムではマイクロサービスは必要ない? •

    マーティン・ファウラー氏は安易な適用を戒めている ◦ システムの複雑度が小さい段階で導入すると、却って生産性を下げることに繋がる ◦ これはマイクロサービス特有の複雑性が混入してしまうことによるもの ◦ モノリスでシンプルに保つことが出来るのであれば、それが一番ベストな選択である 出典・引用: MicroservicePremium https://martinfowler.com/bliki/MicroservicePremium.html
  15. Copyright © 2023 ULURU inc. All Rights Reserved. サービス特性から考える •

    マイクロサービスはビジネスに合わせたサービスの分割である ◦ 「誰」が「何」をするためのサービスなのか ◦ サービスは人と目的(やりたいこと/やるべきこと)が合致することで成り立つ ◦ モノリシックサービスは上記が混在しているので紐解いてあげることが必要 ◦ 社内組織とマイクロサービスが連動しているとより効果が高い 顧客管理 契約管理 入札情報登録 入札情報検索 ワーカー管理 報酬管理
  16. Copyright © 2023 ULURU inc. All Rights Reserved. データ特性から考える •

    マイクロサービスは永続化層の分割でもある ◦ サービスを分割した際にどういう情報のやり取りが出るのかを整理する ◦ サービス間のトランザクション処理はしんどいので慎重に判断 ▪ 結果整合性の担保までにどの程度の時間が許容されるのかの整理も必要 ▪ 厳密なリアルタイムデータ同期を求める場合は分割は避けたほうが良い マイクロサービスA マイクロサービスB API経由でアクセス サービスを跨ぐ 永続化アクセスは アンチパターン
  17. Copyright © 2023 ULURU inc. All Rights Reserved. 採用するべきか、しないべきか •

    NJSSでは「導入した方が良さそう」という温度感からスタート ◦ 案件登録と閲覧のシステムは独立していても動きそうという漠然としたイメージはあった ◦ 同じクラスにワーカー向けとユーザー向けで分岐するような処理が入り乱れており「責務を 分割できれば楽なのに」という思いは常々あった • この肌感は本当に正しいのか?当時のエンジニアメンバーと意見を交わしな がら設計を描いていった
  18. Copyright © 2023 ULURU inc. All Rights Reserved. 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供

    【ワーカー向けドメイン】 入札情報の収集・入力を提供 マイクロサービス化するに当たり考えたポイント • サービス特性 ◦ NJSSは ▪ 入札情報を「クラウドワーカー」が「収集」し、 ▪ 入札情報を「ユーザー」が「閲覧・検索」出来るサービスである ◦ つまり収集と閲覧で明確にサービス特性が異なる => 「ワーカー向け」「ユーザー向け」ドメインを定義
  19. Copyright © 2023 ULURU inc. All Rights Reserved. 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供

    【ワーカー向けドメイン】 入札情報の収集・入力を提供 マイクロサービス化するに当たり考えたポイント • データ特性(1/3) ◦ 「ワーカー向け」と「ユーザー向け」は案件情報のみ依存関係にある ◦ データ連携時の結果整合性の担保は必要だが、即時性は要件はそこまで高くなかった => データ特性上の障壁は低め(綺麗に分割できそう)
  20. Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービス化するに当たり考えたポイント •

    データ特性(2/3) ◦ 2つのドメイン間は案件情報のやり取りのみを実施し他に依存性は無かった ◦ 一方で、どちらも1,800万件(※当時)の案件情報のフリーワード検索を高速にさばく必要が あったことから、検索のための中央集権的なサービスを構築することとした => 「検索」ドメインを定義 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供 【ワーカー向けドメイン】 入札情報の収集・入力を提供 【検索ドメイン】 入札情報の高速な検索を提供
  21. Copyright © 2023 ULURU inc. All Rights Reserved. マイクロサービス化するに当たり考えたポイント •

    データ特性(3/3) ◦ 別Prjで動いていたセールス部隊向けの「契約管理」が後から合流 ◦ 契約や売上金額の管理機能を「ユーザー向けサービス」から「契約管理」に役割を移譲 =>「契約管理」ドメインを定義 【ユーザー向けドメイン】 入札情報の閲覧・検索サービスを提供 【ワーカー向けドメイン】 入札情報の収集・入力を提供 【検索ドメイン】 入札情報の高速な検索を提供 【契約管理ドメイン】 契約情報やセールス情報管理を提供
  22. Copyright © 2023 ULURU inc. All Rights Reserved. こうして… •

    モノリスだったNJSSは4つのマイクロサービスへ ◦ 契約管理、ユーザー向け、ワーカー向け、検索の4つのサービスドメインに分割 【契約管理ドメイン】 「セールス部門の為の契約情報管理サービス」 契約情報・セールス情報管理 【ユーザー向けドメイン】 「ユーザーの為の入札情報検索サービス」 入札情報の閲覧・検索 【ワーカー向けドメイン】 「ワーカーの為の入札情報登録サービス」 入札情報の収集・入力 【検索ドメイン】 「サービスの為の高速検索サービス」 入札情報の高速な検索 収集した案件情報を 参照 案件情報を参照 顧客の行動データを連携 品質管理部門担当 セールス部門担当 セールス部門担当 担当なし
  23. Copyright © 2023 ULURU inc. All Rights Reserved. リニューアル後、どうなったのか •

    16年分の技術的負債を86%削減 (44,456 hr -> 6,206 hr ※CodeClimate計測) ◦ 複雑化しているロジックは一部残ったものの、大幅な削減を達成 • 積極的な改善・バージョンアップが加速 ◦ 一方で実施した改善ノウハウを後続サービスに活かすという動きも • サービスの稼働継続性が上がった ◦ ユーザー向けサービスが一時的に不安定になっても、ワーカーは安定して案件登録を継続出 来る環境を作ることができた(逆も然り) • 運用面では新たな課題も ◦ システムが増えたためインフラコストが増えた(頑張ってコストダイエット中) ◦ マイクロサービス間で属人化が進んでいる(サービス間のコンテキストスイッチ)
  24. Copyright © 2023 ULURU inc. All Rights Reserved. まとめ •

    マイクロサービスアーキテクチャは銀の弾丸ではない • 採用粒度を誤ると却って複雑化するため導入は慎重に • NJSSでは最小限のデータ連携の範囲でマイクロサービス化を実現 • サービス改善の容易性や対障害性のメリットを享受できた • コストや運用面に課題があるため継続的に改善中