0

これらのN個のプロデューサにサブスクライブするN個のプロデューサとMユーザがいるとします。ここでNプロデューサはN種類のメッセージを生成する。例えば、複数のプロデューサと複数のコンシューマのためのRedis pubサブ

 
producer1 produces messageType1, 
producer2 produces messageType2, 
producer3 produces messageType3, 
. 
. 
. 
producerN produces messageTypeN. 

Mこれらのメッセージを購読することができる。 1人のユーザーが複数の種類のメッセージを購読できます。例えば。

 
user1 consumes (messageType1, messageType2, messageType10) 
user2 consumes (messageType14, messageType5) 
. 
. 
userM consumes (messageType21, messageType22, messageType23, .... messageTypeN) 

ユーザは同じメッセージタイプまたは異なるメッセージタイプを消費することがあります。私の質問は、このシナリオをどのように設計するかです。それはパブのサブパターンのように見えます。このシナリオでは、ユーザーごとにチャネルを作成する必要がありますか? 「はい」の場合は、作成できるチャネルの数に制限があります(10K)。その場合、何百万人ものユーザーを処理する方法は?どんな助けもありがとう。

答えて

1

パブ/サブシナリオでは、プロデューサにチャネルを作成する必要があります。各ユーザは、対応するプロデューサのチャネルに加入する。

ユーザ側

// user1 
subscribe producer1 producer2 
// user2 
subscribe producer2 

プロデューサーサイド

// producer1 
publish producer1 message1 
// producer2 
publish producer2 message2 

制限が作成できるチャンネル数が、クライアントの数ではありません接続。何百万人ものユーザーが同時に1つのRedisインスタンスに接続することはできません。

可能な解決策

それを達成するために、あなたはshardingsに複数のRedisのインスタンス、およびシャードのユーザーを作成する必要があります。各Redisインスタンスは、プロデューサの完全なリストを作成し、ユーザーのシャーディングからの接続のみを処理します。

メッセージを生成するときに、チャネルを購読したユーザーがメッセージを受信できるように、各Redisインスタンスの対応するチャネルにメッセージをパブリッシュできます。

+0

完璧なソリューションをありがとう:) – big

関連する問題