我有一个任务,我应该测试所选ESB的负载平衡功能。建议使用MS BizTalk,但我更喜欢跨平台的东西,比如MuleESB。
我面临以下问题:我有4个服务(让我们称之为S1,S2,S3,S4)和3个主机(H1,H2,H3)。我想在这样的主机上运行服务:
H1: S1, S2
H2: S2, S3
H3: S3, S4
并将它们连接到ESB。
我想做的是拥有ESB提供的一些公开的虚拟服务S2,它可以平衡H1和H2上的负载,以及H2和H3上S3的类似内容。
判断THIS ESB并不完全以其强大的负载平衡功能而着称,而且应该使用外部NLB解决方案,硬件或软件。 ESB(无论是BizTalk还是开放源代码)能否在这种情况下处理负载均衡?如果是,我将如何继续创建该特定案例?
答案 0 :(得分:2)
当然,BizTalk可以处理这种情况,负载均衡发生在可以发挥有意义作用的两点。
为清楚起见,'服务'在这里确实有两个含义。
1由各种Windows组件处理,如NLB(网络负载平衡),其中传入请求分布在多个IP上。
通过在不同的计算机上创建多个BizTalk实例,使用BizTalk处理2。然后,这些实例会自动在它们之间共享工作。
答案 1 :(得分:1)
我认为你总结一下这里的帮助“ESB并不完全以其强大的负载平衡能力而着称”。 NLB具有强大的负载分配算法(包括实例健康检查)。
Mule没有这样的功能OOTB所以你最终必须编写自己的代码,如果你想建立一个完整的平衡器,这可能是乏味的。如果你减少功能(没有健康检查,随机负载分配),那么,当然,你可以使用一个非常简单的HTTP桥。
答案 2 :(得分:1)
我同意David,负载均衡的全功能企业解决方案http / https服务将使用硬件(即cisco ace或f5)平衡器或更便宜的软件解决方案,如apache httpd和mod_proxy_balancer。
使用Mule ESB,您可以像这样进行循环负载平衡的简单实现(没有粘性会话等):
<flow name="22878770_load-balancing-on-esbFlow1" doc:name="22878770_load-balancing-on-esbFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" method="GET"/>
<scripting:component doc:name="Script">
<scripting:script engine="Groovy">
def rand = new java.util.Random()
int max = 10
return rand.nextInt(max+1)
</scripting:script>
</scripting:component>
<choice doc:name="Choice">
<when expression="#[payload<=3]">
<http:outbound-endpoint exchange-pattern="request-response" host="yandex.com" port="80" method="GET" followRedirects="true" doc:name="HTTP1"/>
</when>
<when expression="#[payload<=6]">
<http:outbound-endpoint exchange-pattern="request-response" host="google.com" port="80" method="GET" followRedirects="true" doc:name="HTTP2"/>
</when>
<otherwise>
<http:outbound-endpoint exchange-pattern="request-response" host="baidu.com" port="80" method="GET" followRedirects="true" doc:name="HTTP3"/>
</otherwise>
</choice>
</flow>