客户端拦截器和外部负载均衡架构

Client side interceptor and external load balancing architecture

我正在我们公司实施一个新应用程序,我正在寻找进行集群的方法。根据 jboss 文档 here.

,有两种可用的架构
  1. 客户端拦截器
  2. 外部负载平衡

问题 1:在客户端拦截器架构中。客户端有代理对象,它知道将消息路由到哪个服务器。这里的客户是谁?我知道 java script/HTML 不能保存代理对象。节点前面是spring/servlet层吗?

问题2:外部负载均衡器是否知道节点可以包含的代码和服务,或者它只是使用算法将请求委托给?

对于1-客户端,是Remote EJB dynamic proxies and/or application client containers (desktop apps)

对于 2 - 外部负载均衡器对代码一无所知。 (我看到这个解决方案的使用远远超过问题1的场景)

配置集群的方法有很多种,具体取决于您的负载平衡和容错目标。例如,您可以在未集群的应用程序服务器之间进行负载平衡。更少的容错,更快的性能,因为没有会话复制。

这里有关于数字 1 的更多细节。

假设问题 1 我有一个分布式应用程序。说一个应用服务器上的 Web 应用程序和 EJB 运行,我想调用另一个应用服务器的一些 EJB。

当您调用远程 EJB 时,应用程序服务器会生成一个 class,它会被传输到调用服务器。这是动态代理,它包含所有网络通信的东西。

在整个应用服务器市场上,我们通常会看到两种配置形式,(1) 动态代理 class 可以识别集群并将调用其他节点,(2) CORBA URL 与节点列表即 corbaloc::nodeA.host.com,nodeB.host.com/...

这里有关于数字 2 的更多细节。

第二种情况通常是我们向 'outside' 世界中的调用者提供基于 HTTP 的服务、WebUI、REST、SOAP 等。

带有 mod_jk 插件的 Apache HTTPD 是 JBoss 文档中的示例 here

可以将请求发送到不同的服务器以解决负载或故障。 HTTP 会话对象在节点之间复制。 (JBoss 中的 JGroups 库处理这个,IP 多播也是一种常用技术)

因此负载平衡器/反向代理不需要知道它只知道 URL 将请求转发到的代码,集群中的应用程序服务器协作获取会话信息。