atori74 / streamsync-server

websocket server for StreamSync
1 stars 0 forks source link

Pub/Subの実装におけるデータ効率が悪い #16

Open atori74 opened 3 years ago

atori74 commented 3 years ago

同じサーバー上で複数のクライアントが同じチャンネルに対して別々にSubscribeするのは非効率

同じメッセージを受け取るわけなので、実質的にサーバーごとに1チャンネルあたりせいぜい1個のSubscribeで十分

atori74 commented 3 years ago

やっぱり サーバーごとに[]Roomを持っておいて Roomに1つPubsubListenerをもたせるのがいいかもしれない

実装は少し複雑になるかもしれないが

atori74 commented 3 years ago

一つのRoomについて ServerA (100クライアント)とServerB(100クライアント)に分散しているとしたら サーバーとPubsubブローカーとの間でかわされるメッセージ数は (1Publishあたり)

atori74 commented 3 years ago

RedisでなくGCPのPubsubなどを使う場合、送受信のメッセージ数に応じて課金される これが接続しているユーザー数になるか、サーバー数*Room数になるかではぜんぜん違う

atori74 commented 3 years ago

concurrencyブランチで、cloud pubsubを使って実装し、publisherをサーバーにつき一個で共有する形にした だが、よく考えたらメッセージ数が多いのはsubscribeの方だからこっちをRoomごとに共有するべきだった