Mule ESB上的负载平衡

Mule ESB上的负载平衡,mule,load-balancing,biztalk,soa,esb,Mule,Load Balancing,Biztalk,Soa,Esb,我有一个任务,我应该在其中测试所选ESB的负载平衡功能。有人建议使用BizTalk女士,但我更喜欢跨平台的产品,比如MuleESB 我面临以下问题:我有4个服务(让我们称它们为S1、S2、S3、S4)和3个主机(H1、H2、H3)。我希望在以下主机上运行服务: H1: S1, S2 H2: S2, S3 H3: S3, S4 <flow name="22878770_load-balancing-on-esbFlow1" doc:name="22878770_load-balancing

我有一个任务,我应该在其中测试所选ESB的负载平衡功能。有人建议使用BizTalk女士,但我更喜欢跨平台的产品,比如MuleESB

我面临以下问题:我有4个服务(让我们称它们为S1、S2、S3、S4)和3个主机(H1、H2、H3)。我希望在以下主机上运行服务:

H1: S1, S2
H2: S2, S3
H3: S3, S4
<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&lt;=3]">
        <http:outbound-endpoint exchange-pattern="request-response" host="yandex.com" port="80" method="GET" followRedirects="true" doc:name="HTTP1"/>
    </when>
    <when expression="#[payload&lt;=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>
并将它们连接到ESB

我想做的是让ESB提供一些公开的虚拟服务S2,这将平衡H1和H2上的负载,类似于H2和H3上的S3


从ESB的角度来看,它们的强大负载平衡能力并不为人所知,人们应该使用外部NLB解决方案,无论是硬件还是软件。ESB(无论是BizTalk还是开源的)是否能够在这种情况下处理负载平衡?如果是,我将如何继续创建该特定案例?

可以肯定,BizTalk可以处理该场景,负载平衡发生在它可以发挥重要作用的两个点上

为清楚起见,“服务”在这里有两个含义

  • 服务接口(比如网络端点,无论是真正的Web服务、HTTP侦听器、自定义API等等……都不重要)
  • 对传入数据进行实际处理的服务(如转换、验证、业务逻辑等)
  • 1由各种Windows组件处理,如NLB(网络负载平衡),其中传入的请求分布在多个IP上


    BizTalk通过在不同的计算机上创建多个BizTalk实例来处理。这些实例随后会自动在它们之间共享工作。

    可以肯定的是,BizTalk可以处理这种情况,负载平衡发生在它可以发挥重要作用的两个位置

    为清楚起见,“服务”在这里有两个含义

  • 服务接口(比如网络端点,无论是真正的Web服务、HTTP侦听器、自定义API等等……都不重要)
  • 对传入数据进行实际处理的服务(如转换、验证、业务逻辑等)
  • 1由各种Windows组件处理,如NLB(网络负载平衡),其中传入的请求分布在多个IP上


    BizTalk通过在不同的计算机上创建多个BizTalk实例来处理。然后,这些实例会自动在它们之间共享工作。

    我想您可以在这里总结一下“ESB并不完全以其强大的负载平衡功能而闻名”。NLB具有用于负载分配(包括实例健康检查)的健壮算法


    Mule没有这样的OOTB特性,因此您将不得不自己编写代码,如果您想构建一个成熟的平衡器,这可能会很乏味。如果您减少了这些功能(无健康检查、随机负载分布),那么,当然,您可以使用一个非常简单的HTTP网桥。

    我想您可以总结一下这里的帮助“ESB并不完全以其强大的负载平衡功能而闻名”。NLB具有用于负载分配(包括实例健康检查)的健壮算法


    Mule没有这样的OOTB特性,因此您将不得不自己编写代码,如果您想构建一个成熟的平衡器,这可能会很乏味。如果您减少功能(无健康检查、随机负载分布),那么当然,您可以使用一个非常简单的HTTP网桥。

    我同意David的观点,用于负载平衡HTTP/https服务的全功能企业解决方案将使用任一硬件(即cisco ace或f5)平衡器或更便宜的软件解决方案,如带有mod_proxy_平衡器的apache httpd

    使用Mule ESB,您可以实现简单的循环负载平衡(无粘性会话等),如下所示:

    H1: S1, S2
    H2: S2, S3
    H3: S3, S4
    
    <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&lt;=3]">
            <http:outbound-endpoint exchange-pattern="request-response" host="yandex.com" port="80" method="GET" followRedirects="true" doc:name="HTTP1"/>
        </when>
        <when expression="#[payload&lt;=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>
    
    
    def rand=new java.util.Random()
    int max=10
    返回下一次随机数(最大值+1)
    
    我同意David的观点,用于负载平衡http/https服务的全功能企业解决方案将是使用硬件(即cisco ace或f5)平衡器或更便宜的软件解决方案,如带有mod_proxy_平衡器的apache httpd

    使用Mule ESB,您可以实现简单的循环负载平衡(无粘性会话等),如下所示:

    H1: S1, S2
    H2: S2, S3
    H3: S3, S4
    
    <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&lt;=3]">
            <http:outbound-endpoint exchange-pattern="request-response" host="yandex.com" port="80" method="GET" followRedirects="true" doc:name="HTTP1"/>
        </when>
        <when expression="#[payload&lt;=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>
    
    
    def rand=new java.util.Random()
    int max=10
    返回下一次随机数(最大值+1)
    
    您能否提供有关“如何”的信息来源?我甚至不知道该怎么问Google了,因为我已经尝试过“负载平衡esb”、“负载平衡biztalk”等方法——所有这些都很明显……在2)biztalk社区通常使用横向扩展,这也提供了高可用性。“负载平衡”实际上是这些配置附带的,因为BizTalk只会自动完成。从这里开始:到目前为止,负载平衡网络连接是一项相当简单的任务。Windows NLB在许多情况下都是完全可用的。许多环境已经有具有此功能的网络设备,因此决策通常是管理或策略。在BizTalk中,NLB可用于直接/同步协议,如web服务(NLB具有循环和粘性路由功能)。对于传入的异步流量(如队列),接收位置使用(批处理的)竞争消费者模型来替代负载。但正如BoatSeller所暗示的,消息的接收和处理或路由应该通过messagebox分离,然后允许负载分散在所有订阅服务器和进程上。你能提供关于“如何”的任何来源吗?我甚至不知道该怎么问Google了,因为我已经尝试过“负载平衡esb”、“负载平衡biztalk”等方法——所有这些都很明显……在2)biztalk社区通常使用横向扩展,这也提供了高可用性。作为BizTal,这些配置实际上附带了“负载平衡”