2017-03-16 83 views
0

情況: Load Balancer在其後面說2臺機器A和B.假設機器A通過負載平衡器接收來自客戶端的請求,並將消息傳遞給消費者是微服務的隊列。微服務完成其工作,併發出json消息。這個json消息將被髮送回客戶端。響應來自另一臺機器節點的http請求js

當前實現: 微服務將它創建的json消息發送回機器A和微服務之間的隊列。服務器標識符在消息中傳遞給微型服務,通過它可以知道將消息發佈到哪個隊列。所以基本上,微服務和負載均衡器後面的每臺機器之間都有隊列。

問題: 隨着流量的增加,機器數量不斷增加,微服務和機器之間的隊列數量也在增加,這令人頭疼。有沒有辦法響應機器A收到的機器B的請求?我不知道如何保持上下文。有人建議Redis,但有可能嗎?

回答

0

看起來你關心的是服務A和服務B之間的上下文,但是你已經決定使用某種類型的分佈式隊列,你能否詳細說明你正在使用哪個隊列實現? (RabbitMQ也許?)

是否需要保持上下文?如果您可以重構應用程序,以便不需要保留上下文,或者您可以來回傳遞來自服務A和服務B的「上下文ID」,則不需要強烈耦合,根據定義爲什麼你想要微服務。

你可以水平縮放它們,而不是以分離的方式。

如果您仍然需要以同步方式進行通信,那麼排隊可能不是最簡單的方法。

我會建議某種服務A和服務B之間的RPC實現,看看gRPC,https://github.com/grpc/grpc.github.io/blob/master/docs/tutorials/basic/node.md,或者如果它太複雜,你可以有一個私人的基於HTTP的API沒有這兩臺機器和內部進行內部通信你的羣集。

祝你好運。

+0

是的酒吧是RabbitMQ。根據我的意思,在Nodejs中有一個對應於請求的響應對象。所以基本上,服務器B如何響應服務器A的請求。 這麼多機器上的內部API看起來有些雜亂。 –

+0

你有什麼建議@gmaliar –

+0

取決於你的需求:)首先HTTP更容易... – gmaliar