java - 使用 Zookeeper 和 Thrift 负载均衡服务

标签 java load-balancing distributed-computing thrift apache-zookeeper

我们有一个计算密集型服务,用于执行大量转换。它在很大程度上受计算限制(CPU 限制)过程。本质上,我们有一个消息代理,它通过 Thrift 将消息发送到处理服务。

现在我们有多个不同的处理服务,它们运行不同的算法来处理消息——这些消息被路由到一个或多个处理算法。我们的消息量是可变的,处理算法的需求也是如此(即我们可以获得许多包含 XYZ 的消息,然后发送到算法 1,否则发送到算法 2)。

我们想将其扩展为可水平扩展的东西。所以我们有多个节点正在运行处理算法。现在,根据消息负载,我们的 Thrift 请求应该发送到不同的服务器(假设所有服务都在运行每个处理 Algo1 到 3 的实例)。举例来说,我们收到大量消息,我们想在算法 1 上处理这些消息,然后我们有两台服务器运行算法 1,第三台服务器负责处理其他两个算法(算法 2 和 3)的请求。

所以系统看起来是这样的:

Client ----Request-------|
              -----------|--------------------
              | Coord & Load Balancer Service | ... like zookeeper
               --------------------------------
                      <--|-->
                         |    Route messages to servers...
   Server1:               Server2:          Server 3:
Algo1 instance        Algo1 instance      Algo2 instance
                                          Algo3 instance    

所有流程都是用 Java 编写的。

那么使用 Zookeeper 设置这样的东西是多么容易。我知道当我们添加或更改算法时,我们可以轻松地使用 Zookeeper 来处理配置方面的事情(即服务器监听算法更新或添加并按配置提供它们)但是我们如何管理负载平衡方面?

干杯!

最佳答案

你们可能想要来自 LinkedIn 的 Norbert 之类的东西:http://sna-projects.com/norbert/ 他们在客户端和服务器之间使用持久的点对点通信,并使用 zookeeper 进行服务注册和带外信令。 很酷的东西。 它使您能够启动另一个处理节点来帮助处理高负载期间的请求。

/乔纳斯

关于java - 使用 Zookeeper 和 Thrift 负载均衡服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702378/

相关文章:

distributed-computing - CAP 定理是转移注意力吗?

java - 如何加速分布式图算法的性能?

hadoop - 如何在单个 Hadoop 节点上写入多条记录

java - 什么是相当于 tcp-outbound-gateway 的 java 配置?

java - 在 Java 中使用 RSA 加密 SecretKey

Apache Tomcat 负载平衡文件副本

ssl - 如何为 AWS 负载均衡器生成证书链?

Java重复方法实现时

Java 允许在枚举类型中声明抽象方法,但它是最终类而不是抽象类

c# - 使用负载平衡时如何锁定对象