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

send-push-notification-with-knative.pdf

Bank, Inc
October 30, 2018
2k

 send-push-notification-with-knative.pdf

Bank, Inc

October 30, 2018
Tweet

Transcript

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

    View Slide

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

    View Slide

  3. 実験
    #banknight

    View Slide

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

    View Slide

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

    View Slide

  6. #banknight
    実験

    View Slide

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

    View Slide

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

    View Slide

  9. Push通知を大量に送る
    #banknight

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. ある
    #banknight

    View Slide

  17. Knative
    #banknight

    View Slide

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

    View Slide

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

    View Slide

  20. 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

    View Slide

  21. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide