BFF(Backend for Frontend)

BFF(Backend for Frontend)

近年バックエンドのマイクロサービス化とクライアントの種類の増加によって、クライアント↔️サーバー間のやり取りが複雑化する傾向があり、その溝を埋めるためにBFF(Backend for Frontend)という特定のクライアントに特化したサーバーを間に置くというパターンが現れました。発表ではBFFの概要、デモ、BFFについてのディスカッションなどを紹介します。

8a84268593355816432ceaf78777d585?s=128

DeNA_Tech

July 21, 2020
Tweet

Transcript

  1. 2020.06.15 石田 直人 テックトーク: BFF (Backend for Frontend)

  2. Q. こんなことはありませんか? アプリのトップページを組み立てるために 何個ものAPIを呼び出している

  3. 問題 1. 問い合わせ回数の増加 2. クライアント側のコードの増加 3. 保守性、拡張性が悪くなる 4. 改修時の影響範囲が拡大する 原因

    1. サービスの成長により、機能が増えた 2. マイクロサービス化によって、問い合わせ先が 複数になった 3. モバイル/Web などクライアントが複数種類に増 えた
  4. BFF (Backend for Frontend)で解決

  5. どう解決されるか before Backend-For-Frontend using GraphQL under Microservices Multiple API call

  6. どう解決されるか after Backend-For-Frontend using GraphQL under Microservices Single API call

    Single API call
  7. BFF   BFFとは複数のバックエンドサービスから必要な情報を取得し、特定のクライア ント向けに加工して返すサーバー である。 ✍ クライアントはBFFへの1回のAPI呼び出しで必要なデータを 必要な形式で取得することができる リクエスト数を削減することで、待機時間を減らせる ✍ BFFはクライアントごとに作る

    クライアントとマイクロサービスが疎結合になる ✍ BFFはクライアントのエンジニアが開発する
  8. デモやります

  9. デモの設定 Googleニュース風サービス • ニュースとおまけで天気が見られるサービス • Web版とモバイル版で内容が異なる (このデモではニュースと天気が独立したマイクロサービスに相当する とお考えください) Googleニュース Web版

    Googleニュース モバイル版 天気 天気 ニュース ニュース
  10. デモのシステムデザイン BFF • 研修で習った Golang+gorilla/muxとFlutterを マイクロサービスとクライアント で使用 • BFFにはKotlin+Ktorを使用

  11. Web版 モバイル版 BFFに対する1回のAPI呼び出しで必要なすべてのデータを取得 出来上がったもの

  12. ディスカッション

  13. ヘルスケアサービス開発の裏側 〜品質と開発効率の両立〜 [DeNA TechCon 2019] DeNAの事例より ヘルスケア事業部ではサービス拡 大に合わせてマイクロサービス化と BFFの導入を行った。

  14. セキュリティ面をどうするか ヘルスケア領域では センシティ ブな情報を扱うので セキュリティ周りを特に意識する 必要がある。

  15. インターフェースをどうするか マイクロサービス、BFF、クライ アント間で複数の型が存在す ることになる。開発言語が異な るためそれぞれ手動で型を定 義すると大変なので ... Example Type_go lang

    Example Type_ko tlin bff_Exa mpleTyp e_kotlin bff_Exa mpleTyp e_flutter 共通の型を定義できないか ?
  16. インターフェースをどうするか BFF <-> バックエンド • gRPCを使う • Apache Thriftを使う ---

    サービス定義ファイルからクライ アント/サーバーのコードを生成 できる✨ Example Type_go lang Example Type_ko tlin 共通の型を定義できないか ?
  17. インターフェースをどうするか アプリ/ブラウザ <-> BFF • OpenAPI/Swaggerを使う • gRPCを使う (クライアントが サポートしている場合)

    --- サービス定義ファイルからクライ アント/サーバーのコードを生成 できる✨ bff_Exa mpleTyp e_kotlin bff_Exa mpleTyp e_flutter 共通の型を定義できないか ?
  18. BFFを検討した方がいいかもリスト 1. バックエンドがマイクロサービス化されている 2. 複数のクライアントがある。クライアントごとに欲しいデータが異なる 3. 1つの画面を作るのに大量の APIを叩いている 4. サードパーティー向けの

    APIを提供したい 5. セキュリティを強化したい
  19. BFFの欠点 • 単一障害点が増える可能性が増す • スケールアウトしないと BFFがボトルネックとなる • BFFのメンテナンス工数がかかる • マイクロサービス側の負荷を無視できない

    ◦ BFFは原則クライアントチームが開発するが、バックエンドチームにも レビューしてもらうこと
  20. コア バックエンドとクライアントの溝を埋めるものは何か ?

  21. Thank you ❤ DeNAライフサイエンスMYCODEサービス部業務推進グループ 菅原勝也