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

hacomono Platform Engineering Showcase #2

hacomono Platform Engineering Showcase #2

hacomono Inc.

July 27, 2023
Tweet

More Decks by hacomono Inc.

Other Decks in Technology

Transcript

  1. 4 Copyright hacomono Inc. All Rights Reserved. 中村 竜甫 職種:EM 経歴:広告系Sier→事業会社(JMDC)→hacomono(2023/05)

    好き:電子書籍、海沿いへの旅行、見る将 ハマっていること:ソーダ味のスイカバーを食べる 聞き手
  2. 5 Copyright hacomono Inc. All Rights Reserved. 志賀 誠(まこたす) Makoto

    Shiga / twitter: @macotasu 株式会社hacomono Engineer, プラットフォーム所属 古くから動いているシステムを事業の成長に合わせて見直 すことが好き 普段はバイク(GB350)に乗ってツーリング 本日のパネラー
  3. 6 Copyright hacomono Inc. All Rights Reserved. 経歴紹介など 2013.4 株式会社カヤックに新卒で入社

    ソシャゲのバックエンド開発 /運用 2015.12 株式会社アニメイトラボ アニメ配信サービス オウンドメディアのECS化 2017.8 freee株式会社 マイクロサービス共通モジュール作成 認証認可リプレース担当 2022.8 株式会社hacomono 開発 /基盤/プラットフォーム
  4. 8 Copyright hacomono Inc. All Rights Reserved. これまでの基盤チームの体制 開発組織および基盤の 体制について

    開発基盤 QA SRE IoT 機能開発チーム2 (エンプラ) 機能開発チーム1 (スクール) 機能開発チーム3 (POS) PdM/PMM UI/UX デザイナー CTO 工藤 VPoE VPoPE 矢嶋
  5. 9 Copyright hacomono Inc. All Rights Reserved. 今期から基盤チームの体制 開発組織および基盤の 体制について

    プラットフォーム QA SRE IoT 機能開発チーム2 (エンプラ) 機能開発チーム1 (スクール) 機能開発チーム3 (POS) PdM/PMM UI/UX デザイナー CTO 工藤 VPoE VPoPE 矢嶋 イネーブリング
  6. 12 Copyright hacomono Inc. All Rights Reserved. これまでのhacomono モジュラーモノリス導入に至るまで hacomono

    app 予約 入退館 レジ メール 各マスタ … ➔ 内部的にはCleanArchitectureで、一定のルール がある ➔ 各機能同士が好きなメソッド自由に呼び出せる ➔ 機能間で結合度が高い状態 Engineers
  7. 14 Copyright hacomono Inc. All Rights Reserved. これまでのhacomono モジュラーモノリス導入に至るまで 開発人数

    20xx年 2018年 リリース 自由予約 スクール SSO xx制限 予約キャンセル待ち 年会費 ロールレベルカスタマイズ 口座振替 POS OIDC ライセンス編集 etc…
  8. 15 Copyright hacomono Inc. All Rights Reserved. hacomono appに起こりうる課題 モジュラーモノリス導入に至るまで

    hacomono app 予約 入退館 レジ メール 各マスタ … ➔ チーム間のコンフリクト ◆ e.g. xx機能を修正した場合の影響は?正しい 仕様はなにか? ➔ 特定ドメインが成長 ◆ 専用チーム誕生 ◆ hacomono本体からの分離 ➔ 新サービス誕生 ◆ hacomonoから共通機能を分離 ➔ etc…
  9. 16 Copyright hacomono Inc. All Rights Reserved. 達成したいこと モジュラーモノリス導入に至るまで •

    人が増えてチームが分割されても生産性を維持したい • 将来的に起こる(かもしれない)物理的な分離に備えた い
  10. 18 Copyright hacomono Inc. All Rights Reserved. モジュラーモノリス モジュラーモノリス導入に至るまで hacomono

    サービス 論理イメージ レジ メール 各マスタ 予約 入退館 … team1 team2 team4 team3 ※黒線は、各領域毎の API
  11. 19 Copyright hacomono Inc. All Rights Reserved. モジュラーモノリス or マイクロサービス

    モジュラーモノリス導入に至るまで hacomono app モジュラーモノリス 物理イメージ … … モジュールA モジュールC … モジュールB … モジュールD hacomono app マイクロサービス 物理イメージ サービスA サービスB サービスC
  12. 20 Copyright hacomono Inc. All Rights Reserved. モジュラーモノリス or マイクロサービス

    モジュラーモノリス導入に至るまで モジュラーモノリス マイクロサービス コミュニケーション △ △ 開発生産性 ◯ △ 事業成長に対する柔軟性 ◯ x 価値提供速度 △ ※◯ 安定性 △ ◯ 導入コスト △ x 運用コスト ◯ x
  13. 22 Copyright hacomono Inc. All Rights Reserved. Railsでモジュラーモノリスに向けた境界をどうやってわけるか モジュラーモノリス x

    Rails • 各モジュール間でコード上の境界を持つ方法 ◦ Rubyなので越境が簡単 • 各モジュールが扱う永続仮想化層の境界分け ◦ ActiveRecordが強力
  14. 24 Copyright hacomono Inc. All Rights Reserved. 取り組み1: packwerkとは モジュラーモノリス

    x Rails hacomono app packages 予約 … メール配信 入退館 顧客管理 … pkg pkg pkg ➔ 機能を論理的分離(pkg = package) ➔ pkgと外部で意図せぬ依存がないかを、 package内のnamespaceをもとに静的 解析できる ➔ pkg毎にcodeowner設定 概要
  15. 25 Copyright hacomono Inc. All Rights Reserved. 取り組み1: package毎にルールをymlで定義できる モジュラーモノリス

    x Rails • pkgが外部APIとして許可するEntryPoint • pkgが依存できるpkgの定義 • pkgが一時的に依存するnamespace • pkgのステータス(開発中か公開済みか) • etc… bundle exec packwerk check
  16. 26 Copyright hacomono Inc. All Rights Reserved. 取り組み2: 外部APIはprotoを活用 モジュラーモノリス

    x Rails hacomono app packages 予約 … メール配信 入退館 顧客管理 … proto proto proto ➔ pkgのEntryPointは、proto定義から生 成されたRubyコードを用いる ➔ 将来的にpkgがマイクロサービスとなっ た際を考慮
  17. 27 Copyright hacomono Inc. All Rights Reserved. # .protoファイル service

    Mailer { rpc GetMail(GetMailRequest) return (GetMailResponse) {} } 取り組み2: 外部APIはprotoを活用 モジュラーモノリス x Rails • rpc_desc ◦ RPCに紐づく、input, outputの型の情報が取れる # packages/mailer/public/get_mail.rbへのリクエスト rpc_desc[:GetMail] # GetMail rpcの説明が取れる rpc_desc[:GetMail][:input] # GetMailが扱うRequest -> GetMailRequest
  18. 28 Copyright hacomono Inc. All Rights Reserved. 取り組み3: 永続化層への制限 モジュラーモノリス

    x Rails • ActiveRecord, Arelと自由な書き方ができるため、そ の層で弾くのは厳しい • ARProxyでクエリ実行手前で検知(prod以外) ◦ https://github.com/cookpad/arproxy
  19. 29 Copyright hacomono Inc. All Rights Reserved. 取り組み3: 永続化層への制限 モジュラーモノリス

    x Rails hacomono app packages 予約 … メール配信 入退館 顧客管理 … proto proto proto pkgアクセスするタイミングで、 RequestContextに許可テーブルを設定 DB ARProxyのpluginとしてQueryTracerを 実行 RequestContextの許可テーブルとSQL を比較して、チェック
  20. 31 Copyright hacomono Inc. All Rights Reserved. 共に戦う戦士たちを募集中 お客様に 「WOW!」を届ける基盤づくり

    hacomono カルチャーを支えるエンジニア組織 圧倒的な成長を私達と共に成し遂げましょう!