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

BFFとmicroservicesアーキテクチャ

8feecda0ab340ae974eea7f1d86b85ff?s=47 hirac
May 19, 2022

 BFFとmicroservicesアーキテクチャ

8feecda0ab340ae974eea7f1d86b85ff?s=128

hirac

May 19, 2022
Tweet

More Decks by hirac

Other Decks in Technology

Transcript

  1. hirac CTO@sweeep sweeep Boxにおける BFFとmicroservicesアーキテクチャ

  2. ©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point

  3. ©hirac 3 自己紹介 { "日立": "CTスキャナの制御ソフト開発リーダー ", "フィリップス": "医療IT製品のテクサポ・技術リーダー ",

    "シーメンス": "医療IT製品のPM", "オリンパス": "クラウドサービスの開発 PM", "CAPS": "電カル・AI問診など開発エンジニア ", "フリーランス": "SREやテックリード", "sweeep": "CTO" , "twitter": "@kimi_hira" }
  4. 本当に紙をやめたい人のための請求書管理ツール

  5. ©hirac 5

  6. ©hirac 6 新サービス:sweeep Box

  7. ©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point

  8. ©hirac 8 モノリスなアーキテクチャ Web mobile Backend DB Frontend Backend

  9. ©hirac 技術負債 ・モノリスなアーキテクチャを同時修正でコンフリ ・単一DBでデータの肥大化。マイグレーションなど大変 ・凝集度が低く修正箇所漏れ

  10. ©hirac Web mobile BFF ServiceX ServiceZ DB DB Frontend BFF

    Backend DB BFF & microservicesアーキテクチャ ServiceY
  11. ©hirac microservicesで技術負債の解消 ・モノリスなアーキテクチャを同時修正でコンフリ → microservicesで少人数で各service修正 ・単一DBでデータの肥大化。マイグレーションなど大変 → microservices毎にDBをもつ ・凝集度が低く修正箇所漏れ → 適切なドメインで凝集度上げる

  12. ©hirac microservicesの課題 ・複数DBにおける情報の集約化  ex. :支払情報とユーザ情報など別DB ・複数リソースにおけるFEの工数増・肥大化  ex. :上記支払情報にあるuser_idとユーザ情報を紐付け → BFFで情報の集約と紐付けを実施し、GraphQLで

     集約した情報を返す(複数同時更新のユースケースも)
  13. ©hirac 複数リソースにおける情報の集約化 type Payment { """ 支払情報 """ Id: Int!

    # 支払管理ID userId: Int! # 担当者ID userName: String! # 担当者名 ... } GraphQL BFF ユーザ DB 支払 DB XXX DB
  14. ©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point

  15. ©hirac GraphQLメリット ・スキーマ駆動 & mockで並行開発 ・クエリライクで複数リクエストなしに情報を取得できる

  16. ©hirac スキーマ駆動 & mockで並行開発 ・スキーマから生成したプログラムなので齟齬がない ・MockによりClient/Server並行開発      

  17. ©hirac GraphQLスキーマからClient/Server生成 $npm run graphql-codegen --config ./path/to/config.yml Client (TS) →

    client/model生成 config.yml /schema: http://localhost:3000/graphql documents: ./src/**/*.graphql generates: ./src/types.ts: plugins: - typescript - typescript-operations $go run github.com/99designs/gqlgen generate BFF (Go) → resolver/model生成 gqlgen.yml schema: "*.graphql" exec: filename: generated.go model: filename: models_gen.go resolver: type: Resolver layout: follow-schema dir: . models: ...
  18. ©hirac BFFメリット ・各microservicesリソースをFEの必要な情報に束ねて返す  ex.:BFFでUser情報 + 支払い情報を束ねる  → FEで情報の操作が必要ない ・EndpointがBFF一箇所で済む  →

    ない場合はBE (microservices)を意識する必要がある
  19. ©hirac → ユーザ情報と支払情報を束ねる BFF無とBFF有の比較 (情報の集約) BFFなし BFFあり

  20. ©hirac BFF無とBFF有の比較 (Endpointの集約化) ユーザ DB 支払 DB XXX DB BFF

    ユーザ DB 支払 DB XXX DB
  21. ©hirac GraphQLの課題 ・GraphQL ↔ Protobufの値の詰め替えが発生  Request:model.xxxInput → pb.xxxRequest  Response:model.xxx ←

    pb.xxxResponse ex. : GraphQLではintしかサポートしていない Protobufだとint32/64 → Protobuf -> GraphQL生成なども将来検討
  22. ©hirac GraphQL ↔ Protobufの値の詰め替え # ユーザ情報Input type UserInput { Id:

    Int # ユーザID ... } # ユーザ情報 type User { Id: Int! # ユーザID ... } GraphQL Protobuf // ユーザ情報Request message GetUserRequest { int32 id = 1; // ユーザID ... } // ユーザ情報Response message GetUserResponse { int32 id = 1; // ユーザID ... } toPb int → int32 toGraphQL int ← int32
  23. ©hirac BFF課題 ・BFF開発分の工数増・メンテ増 ・ただmicroservices → BFF → FEと透過的に情報を渡して  いるだけで冗長に感じることがある ・反面、BFFでいろいろやらせる(=やらせたくなる)と

     Fatになるので気をつける → GraphQL Gateway (Apollo Federation)なども将来検討
  24. ©hirac 1 BFFとmicroservicesアーキテクチャ採用の背景 GraphQL/BFF導入のメリットと課題 まとめと今後の課題 Point 2 Point 3 Point

  25. ©hirac まとめ:GraphQL & BFFメリット ・GraphQLはスキーマ駆動・情報の集約という点でメリット ・BFFはmicroservicesのEndpointの集約・仲介役でメリット → BFFを後から入れるのはインパクトが大きく  (BFFの新規開発/Web &

    Mobile側の工数/インフラ etc…)  最初に決断してよかった
  26. ©hirac 後からBFF新規/Endpoint入替/情報集約... ユーザ DB 支払 DB XXX DB BFF ユーザ

    DB 支払 DB XXX DB
  27. ©hirac 今後の課題 ・BFF開発分の工数増で冗長に感じることも多いが、  無いとFEで頑張らないといけなかったりする  次のサービスではGraphQL Gatewayなど検討したい ・GraphQL & BFFは現在はWeb &

    Mobile共通のため、同時  リリース。共通化やアジリティを下げない仕組みに課題 → アーキテクチャにも「銀の弾丸」はないので改善し続ける
  28. ©hirac 参考資料 ・sweeep Box - 書類保管AI ・sweeep Boxで使用している技術スタック ・スタートアップのCTOとして何を考え何を変えたか ・GraphQL

    Code Generator ・gqlgen ・みんなで育てる GraphQL スキーマ, それを支える Protobuf / GraphQL and Protobuf
  29. ©hirac フロントエンドエンジニア募集してます! ・ご興味のある方は下記リンクよりご応募お待ちしております!  sweeep株式会社の募集・採用・求人情報 - Wantedly      

  30. ©hirac まずはカジュアルに話したい方 ・下記リンクよりお申し込みください!  請求書クラウドAIの開発について共有とCTOとゆるーく雑談 ・会社の雰囲気  sweeep株式会社の働き方とストーリー - Wantedly      

  31. ©hirac Thank you!