Slide 1

Slide 1 text

©Kineca & Co.,Inc. All rights reserved.

Slide 2

Slide 2 text

©Kineca & Co.,Inc. All rights reserved. 今日お話すること ● Firebase Realtime Databaseからの移行理由と課題 ● Action Cableの選定と導入プロセス ● 移行後の成果と学び

Slide 3

Slide 3 text

©Kineca & Co.,Inc. All rights reserved. 前提の共有 このプロジェクトを進めた背景に、メッセージの一斉送信が ユーザー数増加に伴い遅延してしまう問題がありました。 今回は、どのようにその問題に立ち向かったかという点も 触れてお話します。

Slide 4

Slide 4 text

©Kineca & Co.,Inc. All rights reserved. 自己紹介 @ryosk7 Ryosuke Uchida 株式会社KINECA エンタメマッチングアプリ「pato」で開発しています 普段はOmotesando.rbでLTしています 技術書典で本を出しています Roppongi.rbのオーガナイザーをしています ✌

Slide 5

Slide 5 text

©Kineca & Co.,Inc. All rights reserved. 2024/11/14 19:30~

Slide 6

Slide 6 text

©Kineca & Co.,Inc. All rights reserved. 6

Slide 7

Slide 7 text

©Kineca & Co.,Inc. All rights reserved. 1 2 3 4 5 アジェンダ ボトルネックと技術選定 patoのチャット機能について リリースまでのロードマップ 残された課題 まとめ

Slide 8

Slide 8 text

©Kineca & Co.,Inc. All rights reserved. ©Kineca & Co.,Inc. All rights reserved. patoのチャット機能について 8 01

Slide 9

Slide 9 text

©Kineca & Co.,Inc. All rights reserved. patoのチャット機能について 創業当時(2017年〜)からFirebaseを利用していた 選定理由 ● 簡単にチャット機能が実装できる ● 低コストで運用可能

Slide 10

Slide 10 text

©Kineca & Co.,Inc. All rights reserved. patoのチャット機能について このエリアは自由に図や画像などを貼ってください 10 Datastream GKE Nodes Cloud Load Balancing Cloud DNS Master Cloud SQL BigQuery Rails アプリケー ションログ Redis Master Memorystore MySQL チャットデータの読 み込み GCP application server GKE/Kubernetes ※ 米国(us-central1)

Slide 11

Slide 11 text

©Kineca & Co.,Inc. All rights reserved. patoのチャット機能について

Slide 12

Slide 12 text

©Kineca & Co.,Inc. All rights reserved. patoのチャット機能について

Slide 13

Slide 13 text

©Kineca & Co.,Inc. All rights reserved. patoのチャット機能について ※ 2017年当時は、us-centralしか選択できませんでした。

Slide 14

Slide 14 text

©Kineca & Co.,Inc. All rights reserved. ©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 14 02

Slide 15

Slide 15 text

©Kineca & Co.,Inc. All rights reserved. ● リージョンが『us-central』 ● 1,000リクエスト/秒という制約が存在 ボトルネックと技術選定 抱えていた問題

Slide 16

Slide 16 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 リージョンが『us-central』

Slide 17

Slide 17 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 1,000リクエスト/秒という制約が存在

Slide 18

Slide 18 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定

Slide 19

Slide 19 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定

Slide 20

Slide 20 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックとは関係ないが... ボトルネックと技術選定

Slide 21

Slide 21 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定

Slide 22

Slide 22 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 メンテナンスがされておらず、 PRも投げてみたが反応がなかった。

Slide 23

Slide 23 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 よし、のりかえよう!!!

Slide 24

Slide 24 text

©Kineca & Co.,Inc. All rights reserved. ● Firestore ● Cloud Pub/Sub ● Action Cable ボトルネックと技術選定 代替案

Slide 25

Slide 25 text

©Kineca & Co.,Inc. All rights reserved. 書き込みスケーラビリティが良い 料金が高い ボトルネックと技術選定 Firestore

Slide 26

Slide 26 text

©Kineca & Co.,Inc. All rights reserved. フルマネージドでメンテナンスが不要 Pub/Subによるスループット、 ストレージ料金がかかる ボトルネックと技術選定 Cloud Pub/Sub

Slide 27

Slide 27 text

©Kineca & Co.,Inc. All rights reserved. npmパッケージがあり、 フロントエンド側の実装も楽 インフラレイヤーのメンテナンスが必要 ボトルネックと技術選定 Action Cable

Slide 28

Slide 28 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 Firebase Realtime Databaseより コスト高いのはチョット ...󰢃

Slide 29

Slide 29 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 そもそもベンダーロックやだ。 もう振り回されたくない ...󰢃

Slide 30

Slide 30 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 Action Cableよさそう ● 複数DBからの開放 ● ベンダーロックからの開放 ● I/O面でのボトルネックからの開放

Slide 31

Slide 31 text

©Kineca & Co.,Inc. All rights reserved. ボトルネックと技術選定 Action Cableよさそう? 個人で試した記事はよく見るが、大規模なチャットサービスでの事例は国内であ まり聞かない。 👉 事例作っちゃうかぁ

Slide 32

Slide 32 text

©Kineca & Co.,Inc. All rights reserved. ©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 32 03

Slide 33

Slide 33 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ データ移行 本番環境下で検証 Action Cableに載せ替え シン・一斉送信

Slide 34

Slide 34 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ データ移行

Slide 35

Slide 35 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ データ移行

Slide 36

Slide 36 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ データ移行 Firebase Realtime Databaseの全データを 一度Bigqueryに吐き出して、どんなKeyがある のか調査した

Slide 37

Slide 37 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 38

Slide 38 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 39

Slide 39 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ Firebase 👉 Bigquery よくわからないKeyがめちゃくちゃ生えてる🌱

Slide 40

Slide 40 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 41

Slide 41 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 42

Slide 42 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 43

Slide 43 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 44

Slide 44 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 45

Slide 45 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 46

Slide 46 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 本番環境下で検証

Slide 47

Slide 47 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ flipperを利用

Slide 48

Slide 48 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 本番環境で起こった事象

Slide 49

Slide 49 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 本番環境で起こった事案 GKEを利用していたので、 コネクションが30秒で切れてしまう

Slide 50

Slide 50 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 本番環境で起こった事案 連続でメッセージを送ると、 データがロストしてしまう

Slide 51

Slide 51 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 本番環境で起こった事案 タイムアウトの時間を伸ばす?

Slide 52

Slide 52 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 本番環境で起こった事案 タイムアウトの時間を伸ばすと、コストがかかる ピーク時のユーザー増加に伴い占有率が上がる

Slide 53

Slide 53 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 再接続時に足りないデータを再送するようにした

Slide 54

Slide 54 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ ギフト機能

Slide 55

Slide 55 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ ギフト機能も、 チャットとして送信される

Slide 56

Slide 56 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 即時決済が走るギフト機能 メッセージ送信側は、 コネクションのことを気にしたくない

Slide 57

Slide 57 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 送信者はAction Cable経由ではなく Postリクエストで対応 即時決済が走るギフト機能 success

Slide 58

Slide 58 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ 同時接続の安定化

Slide 59

Slide 59 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ Thread Web Concurrency Pumaのプロセスが処理できる並列リクエストの数。 Pumaのプロセス数(ワーカー数)。各プロセスは独立しており、 それぞれがスレッドプールを持っている。

Slide 60

Slide 60 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ Threadの方がメモリ効率がいい

Slide 61

Slide 61 text

©Kineca & Co.,Inc. All rights reserved. ビジネスメンバーの声 リリースまでのロードマップ

Slide 62

Slide 62 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 63

Slide 63 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 64

Slide 64 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 65

Slide 65 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 66

Slide 66 text

©Kineca & Co.,Inc. All rights reserved. リリースまでのロードマップ

Slide 67

Slide 67 text

©Kineca & Co.,Inc. All rights reserved. ©Kineca & Co.,Inc. All rights reserved. 残された課題 67 05

Slide 68

Slide 68 text

©Kineca & Co.,Inc. All rights reserved. 残された課題 MySQLの制約

Slide 69

Slide 69 text

©Kineca & Co.,Inc. All rights reserved. 残された課題 INSERT時にRETURNINGが使えないため、 関連テーブルの一括作成が難しかった

Slide 70

Slide 70 text

©Kineca & Co.,Inc. All rights reserved. 残された課題 LAST_INSERT_ID()というものがあるが、 Transactionを貼った状態じゃないと、 関連したレコードであることを担保できない。 👉 リアルタイムのメッセージングに影響する。

Slide 71

Slide 71 text

©Kineca & Co.,Inc. All rights reserved. 残された課題 ● talksテーブルに関連するカラムを追加 ● MariaDBに乗り換え (GCPはサポートしてないので、AWSに乗り換え?)

Slide 72

Slide 72 text

©Kineca & Co.,Inc. All rights reserved. 残された課題 運用コスト

Slide 73

Slide 73 text

©Kineca & Co.,Inc. All rights reserved. 残された課題 スケール時のインフラコストがまだ課題 Action Cableをスタンドアロンで動かしたい

Slide 74

Slide 74 text

©Kineca & Co.,Inc. All rights reserved. 残された課題 コネクションのタイムアウトや、 占有率も改善できそう スタンドアロンにすると...

Slide 75

Slide 75 text

©Kineca & Co.,Inc. All rights reserved. ©Kineca & Co.,Inc. All rights reserved. まとめ 75 06

Slide 76

Slide 76 text

©Kineca & Co.,Inc. All rights reserved. FirebaseからAction Cableへの移行プロセス コスト削減、パフォーマンス改善、スケーラビリティ向上 将来的な運用改善案 まとめ

Slide 77

Slide 77 text

©Kineca & Co.,Inc. All rights reserved. インフラチーム・分析チームのみなさん 相談に乗っていただいた@igaiga555さん CfPの提出に協力してくれた Shinjuku.rb と @onigra_ さん
 
 ありがとうございました! 謝辞

Slide 78

Slide 78 text

©Kineca & Co.,Inc. All rights reserved. ©Kineca & Co.,Inc. All rights reserved. ご清聴ありがとうございました 78