Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

問題 1. 問い合わせ回数の増加 2. クライアント側のコードの増加 3. 保守性、拡張性が悪くなる 4. 改修時の影響範囲が拡大する 原因 1. サービスの成長により、機能が増えた 2. マイクロサービス化によって、問い合わせ先が 複数になった 3. モバイル/Web などクライアントが複数種類に増 えた

Slide 4

Slide 4 text

BFF (Backend for Frontend)で解決

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

デモやります

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

デモのシステムデザイン BFF ● 研修で習った Golang+gorilla/muxとFlutterを マイクロサービスとクライアント で使用 ● BFFにはKotlin+Ktorを使用

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

ディスカッション

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

インターフェースをどうするか BFF <-> バックエンド ● gRPCを使う ● Apache Thriftを使う --- サービス定義ファイルからクライ アント/サーバーのコードを生成 できる✨ Example Type_go lang Example Type_ko tlin 共通の型を定義できないか ?

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

BFFを検討した方がいいかもリスト 1. バックエンドがマイクロサービス化されている 2. 複数のクライアントがある。クライアントごとに欲しいデータが異なる 3. 1つの画面を作るのに大量の APIを叩いている 4. サードパーティー向けの APIを提供したい 5. セキュリティを強化したい

Slide 19

Slide 19 text

BFFの欠点 ● 単一障害点が増える可能性が増す ● スケールアウトしないと BFFがボトルネックとなる ● BFFのメンテナンス工数がかかる ● マイクロサービス側の負荷を無視できない ○ BFFは原則クライアントチームが開発するが、バックエンドチームにも レビューしてもらうこと

Slide 20

Slide 20 text

コア バックエンドとクライアントの溝を埋めるものは何か ?

Slide 21

Slide 21 text

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