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

BFFとmicroservicesアーキテクチャ

hirac
May 19, 2022

 BFFとmicroservicesアーキテクチャ

hirac

May 19, 2022
Tweet

More Decks by hirac

Other Decks in Technology

Transcript

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

    "シーメンス": "医療IT製品のPM", "オリンパス": "クラウドサービスの開発 PM", "CAPS": "電カル・AI問診など開発エンジニア ", "フリーランス": "SREやテックリード", "sweeep": "CTO" , "twitter": "@kimi_hira" }
  2. ©hirac Web mobile BFF ServiceX ServiceZ DB DB Frontend BFF

    Backend DB BFF & microservicesアーキテクチャ ServiceY
  3. ©hirac 複数リソースにおける情報の集約化 type Payment { """ 支払情報 """ Id: Int!

    # 支払管理ID userId: Int! # 担当者ID userName: String! # 担当者名 ... } GraphQL BFF ユーザ DB 支払 DB XXX DB
  4. ©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: ...
  5. ©hirac GraphQLの課題 ・GraphQL ↔ Protobufの値の詰め替えが発生  Request:model.xxxInput → pb.xxxRequest  Response:model.xxx ←

    pb.xxxResponse ex. : GraphQLではintしかサポートしていない Protobufだとint32/64 → Protobuf -> GraphQL生成なども将来検討
  6. ©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
  7. ©hirac 今後の課題 ・BFF開発分の工数増で冗長に感じることも多いが、  無いとFEで頑張らないといけなかったりする  次のサービスではGraphQL Gatewayなど検討したい ・GraphQL & BFFは現在はWeb &

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

    Code Generator ・gqlgen ・みんなで育てる GraphQL スキーマ, それを支える Protobuf / GraphQL and Protobuf