2017-03-16 57 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