2016-06-21 20 views
0

我有一些代碼,其基本上沒有這個psudocode()什麼是使用比單Redis的信道Redis的信道的成本

registerCamera(id) { 
     createRedisPubChannel("Camera_"+id) 
} 

cameraDisconnect() { 
     removeRedisSubChannel("Camera_"+id) 
} 

我則與該照相機通過該信道進行通信,並且這允許我有多個引擎。

我也可以構造代碼,以便代替每個相機創建一個通道。我可以創建一個名爲「cameraComms」的通道,並確保每條消息都包含相機ID。

我想知道這兩種設計模式都有哪些性能優勢/劣勢?

如果有幫助,我可以爲每個進程註冊多達200多個攝像頭,並且通過3個不同的盒子運行3個Redis實例。

非常感謝幫助/建議。

回答

1

先決條件:

在性能的角度來看,沒有。的頻道,沒有。的出版商和沒有。的訂戶並不重要,但是您處理的郵件的頻率和數量確實很重要。

例如,

1出版商在時刻發佈1000條消息會導致更多的開銷比1000個出版商一次發送1個消息。

類似地,1個接收1000條消息的用戶將導致比1000個用戶每次接收1條消息更多的開銷。

訂閱同一頻道的訂閱者越多,發佈的消息的副本越多,這是開銷。

So the thumb Rule here is : 

1. Publisher do not flood messages at once. 
2. Subscriber must not be in a position to receive flooded messages at once. 

要回答你的問題:

如果出版商重則可以使用n個信道的N個照像機。 1發佈者將在頻道中發佈,1位訂閱者將收到這些消息。通過這種方式,您最終將獲得n個頻道,n個發佈商和n個訂閱者。

如果您的發佈者不重,您可以使用發佈商發送相機ID的單個頻道,並且您的單個訂閱者將使用該消息並進行處理。