我们有一些Wildfly服务器以独立模式运行。 每个实例都提供了一堆无状态服务,可以通过某些Web应用程序的ejb远程调用(http-remoting)进行访问。
Web应用程序的出站连接使用循环法指向http负载均衡器,没有粘性。此平衡器在连接之前检查服务应用程序的可用性。
到目前为止,这项工作也是故障转移。
问题:
独立服务器的数量可能会有所不同。一旦从其中一个Web应用程序建立了出站连接,它就永远不会被关闭。所以总是会遇到相同的独立服务器,直到它死掉。
在负载很重的情况下,我们只启动运行独立服务器的另一个VM,该服务器也将由负载均衡器使用,因为没有从webapps建立新的连接。
问题:
这是一个可行的方案,是否可以配置webapps在一段时间后开始新连接,请求计数或其他什么?
我没有尝试在forow中保留tcp或http标头并请求空闲时间,但到目前为止没有成功。
亲切的问候
马库斯
答案 0 :(得分:0)
由于二进制特性,没有简单的方法动态负载均衡ejb远程调用。 JBoss EJB客户端支持以循环方式调用的多个远程连接的规范,但该列表仍在客户端配置中进行硬编码。
示例jboss客户端配置jboss-ejb-client.properties
:
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=node1,node2
remote.connection.node1.host=192.168.1.105
remote.connection.node1.port = 4447
remote.connection.node1.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.node1.username=appuser
remote.connection.node1.password=apppassword
remote.connection.node2.host=192.168.1.106
remote.connection.node2.port = 4447
remote.connection.node2.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.node2.username=appuser
remote.connection.node2.password=apppassword
据我所知,您的Web应用程序也是基于Java的。是否有任何理由不在单个.ear
部署中在同一服务器上运行EJB层和Web?这样您就可以使用本地访问,甚至可以将@EJB
bean直接注入到Web控制器中,而无需将所有调用序列化为二进制形式的远程EJB,从而使配置更简单,性能更高。
如果您的应用程序实际上是一个单独的部署,那么首选方法是通过REST API(JAX-RS)公开您的后端功能。这样它就可以通过HTTP访问,您只需从您的Web应用程序访问它就可以像对待您的Web UI一样对其进行负载均衡(您可以选择将您的API http上下文保密 - 仅在本地可见的服务在同一网络上,或将其公之于众,例如移动应用程序) 希望有所帮助