Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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サービス部業務推進グループ 菅原勝也