0

我想将相同内容的所有请求发送到同一个后端服务器。我怎么能做到这一点。有没有像 HaProxy 这样的开源版本可以做到这一点。

例如。客户端 1 已请求内容 A,并且我的负载均衡器将该请求定向到后端服务器之一,例如循环方式的 X。现在,如果我收到来自不同客户端 2 对相同内容 A 的请求,该请求应该被定向到同一个后端服务器 X。是否有任何开源解决方案可以做到这一点。

任何帮助/指针将不胜感激。

谢谢,尼基尔

4

2 回答 2

2

Ha proxy可以做你想做的,还有更多。它有许多acl options可满足大多数要求。Varnish是另一个具有健壮 acl 语言的选项。

于 2012-11-15T04:35:10.573 回答
0

有趣的问题!我担心它可能取决于技术。只要您在 HTTP 域中,也许您可​​以以某种方式配置您的负载均衡器。

我是一个 Java 人,所以,在 Java 中你可以拥有,比如 EJB。这些是安装在服务器上的分布式组件,可以远程运行。他们的通信协议是二进制的,我怀疑负载均衡器可以读取它。

因此,例如,在 JBoss 中,您可以创建一个服务器集群,并在不同的服务器上部署不同的 EJB。例如,假设系统中有两个 EJB。一个可以买牛奶,一个可以买披萨。

因此,您将牛奶 ejb 部署在服务器 1 上,将披萨 ejb 部署在服务器 2 上。

现在您有了一个命名解析服务(在 java/jboss 中称为 HA-JNDI)。它的基本思想是提供一个基于名称的远程存根:

PizzaEJB pizzaEjb = NamingService.getMyStub(PizzaEJB.class);

它当然不是真正的工作代码,但它展示了一个想法。

诀窍是这个命名服务器知道每个 EJB 的部署位置,所以如果你只有在服务器 2 上拥有比萨 ejb,它总是会返回一个存根,该存根将转到服务器 2 并购买比萨饼 :)

因此,Java 程序员并不真正关心它是如何在后台实现的。只是给出一个想法 - 命名服务在每台服务器上部署了某种形式的代理,它们相互交谈......

这就是java可以在这里工作的方式。

现在我想,也许你可以将你的 api 建立在 Restful web 服务上,在这种情况下它很容易解析 http 请求,所以实现可以相对容易(同样,如果你的负载均衡器支持这种处理)。

希望这会有所帮助

于 2012-10-26T06:10:32.767 回答