Slide 1

Slide 1 text

Knativeで限界突破 〜Push通知をバラ撒くために〜 Bank,Inc うなすけ

Slide 2

Slide 2 text

誰? 名前 : うなすけ 肩書 : エンジニア やってること ● CASH の API サーバー開発・運用 ○ Rails をがんばる ○ Kubernetes をがんばる アカウント ● https://twitter.com/yu_suke1994 ● https://mstdn.unasuke.com/@unasuke #banknight

Slide 3

Slide 3 text

実験 #banknight

Slide 4

Slide 4 text

「すべては実験」 光本 勇介

Slide 5

Slide 5 text

https://bank.co.jp/recruit/ #banknight

Slide 6

Slide 6 text

#banknight 実験

Slide 7

Slide 7 text

Push通知を大量に送る ● 突然 「こういう属性のユーザーに通知を送りたい」 ○ データ解析班から渡される大量の User ID ■ ある施策では 42 万件の通知を送った ○ 愚直に 1 件ずつ Firebase の API を叩く ■ 「送信完了は今晩 23 時頃になりますね」 ● ギャー ○ 存在しない Device Token でエラーになる #banknight

Slide 8

Slide 8 text

Push通知を大量に送る ● FCM の Topic を用いた大量通知配信 ○ Topic を作成 → Topic に配信 ○ ひとまずこの方式で通知を送ることに ● Topic は作成にある程度時間がかかる ○ 「今、すぐ!」に応えられない #banknight

Slide 9

Slide 9 text

Push通知を大量に送る #banknight

Slide 10

Slide 10 text

Push通知を大量に送る ● Cloud Functions によって FCM に Request を送信 ○ Promise を使用して並列化 ● 急な大量通知の要望に応えられるように ○ https://github.com/bank/baramaki ここまでほぼGoogle Cloud NEXT’18 #banknight

Slide 11

Slide 11 text

テックブログ書いた https://tech.bank.co.jp/entry/2018/09/18/150000 #banknight

Slide 12

Slide 12 text

Push通知を大量に送る ここからが今日の本題 #banknight

Slide 13

Slide 13 text

Push通知を大量に送れなかった #banknight

Slide 14

Slide 14 text

Push通知を大量に送れなかった ● 検証で数万件の Push 通知を送ろうとした ○ Quota Limit に引っ掛る ● 1 秒あたりの関数呼び出し数に上限 ○ 初期値 「100 秒あたり 1,000,000」 ○ 「大量」に送れないじゃん! #banknight

Slide 15

Slide 15 text

Push通知を大量に送りたい ● Quota Limit は緩和申請できる ○ もちろん申請して上限を上げている ● 呼び出し毎にジッタを挿入して凌ぐ ○ 秒あたりの呼び出し回数を抑える ■ 送信完了までの時間が伸びる…… 呼び出し回数に制限のない FaaS ってないのかな〜〜〜??? #banknight

Slide 16

Slide 16 text

ある #banknight

Slide 17

Slide 17 text

Knative #banknight

Slide 18

Slide 18 text

Knative とは ● Kubernetes 上に構築できる serverless platform ○ FaaS のようなものを自前で持てる ○ GKE にも Serverless Add-on として登場予定 ■ 登場「予定」 ● early access に申し込み済 ○ 待てない ■ 今ほしい #banknight

Slide 19

Slide 19 text

Knative ● ならもう構築するしかない ○ https://github.com/knative/docs ■ 全てがここにある ● やっていきましょう #banknight

Slide 20

Slide 20 text

Knative install step 1 (cleate cluster) ● クラスタを作成する ○ k8s v1.10 以上 ○ 4 vCPU (n1-standard-4) ○ 10 nodes までの autoscale ○ とかの recommended な要件がある https://github.com/knative/docs/blob/master/install/Knative-with-GKE.md #banknight

Slide 21

Slide 21 text

Knative install step 2 (install istio) ● Istio を入れる ○ サービスメッシュを実現させるもの ○ 導入は 1 command でできる ○ 現在は istio-statsd-prom-bridge が起動できない ■ deployment を手動で編集 https://github.com/knative/docs/blob/master/install/Knative-with-GKE.md #banknight

Slide 22

Slide 22 text

Knative install step 3 (install knative) ● Knative 自体のインストール ○ これもほぼ 1 command https://github.com/knative/docs/blob/master/install/Knative-with-GKE.md #banknight

Slide 23

Slide 23 text

Knative demo ● 導入の解説よりデモが見たい、そうでしょう? #banknight

Slide 24

Slide 24 text

Knative まとめ ● Cloud Functions の Quota 回避のための Knative ○ 導入はそんなに難しくない ○ API Limit がなくなった ■ 限界突破 ○ 様々な言語を使用できる ● Serverless Add-on が待ち遠しい ● 大量の Push 通知が今すぐできる!!! ● Any question? #banknight