云中的自定义客户端服务器应用程序的负载平衡

时间:2012-10-04 08:03:58

标签: azure amazon-ec2 client-server load-balancing

我正在设计一个自定义客户端服务器tcp / ip app。该应用程序的网络要求是:

  1. 能够通过安全的TCP / IP通道(在指定端口打开)讲自定义应用层协议
  2. 客户端 - 服务器连接/通道需要保持持久性。
  3. 如果服务器端应用程序的多个实例正在运行,则能够将客户端连接分派到服务器端应用程序的特定实例(基于服务器端唯一ID)。
  4. 设计目标之一是使应用程序扩展,因此负载平衡尤为重要。我一直在研究EC2和Windows Azure的负载平衡功能。我认为今天大多数产品都支持要求1。但是我对要求2和3不太确定。特别是:

    1. 这些服务(EC2,Azure)是否允许应用程序通过指定其他应用程序层要求来影响负载平衡策略?例如,Azure使用循环作业分配用于云服务,但上面的要求3显然需要作为负载平衡决策的一部分考虑在内,即基于唯一ID转发,但如果唯一ID则使用循环分配在任何服务器端实例中都找不到。

    2. 根据要求2,负载均衡器是否可以使用持久连接?我对Azure的理解是你可以指定一个公共和私有端口对作为端点,因此负载均衡器监视公共端口并将连接请求转发到某个正在运行的实例的私有端口,所以基本上你可以做随后你想要的任何东西。这是正确的理解吗?

    3. 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

Windows Azure在托管服务上具有输入端点,这些端口是面向公众的端口。如果您有一个或多个VM实例(Web或辅助角色),则流量将在实例之间分配;您无法选择要路由到的实例(例如,您必须支持无状态应用模型)。

如果要强制执行粘性会话模型,则需要运行自己的前端负载均衡器(在Web / Worker角色中)。例如:您可以使用IIS + ARR(应用程序请求路由),也可以使用nginx或支持此功能的其他服务器。

我上面所说的内容也适用于Windows Azure IaaS(虚拟机)。在这种情况下,您可以创建负载平衡端点。但您也可以选择非负载均衡端点:可能是3台服务器,每台服务器都有一个唯一的端口号。这会绕过任何类型的负载平衡,但可以直接访问每个虚拟机。您还可以运行一个运行服务器的虚拟机(同样,nginx,IIS + ARR等),然后将流量路由到多个应用服务器虚拟机之一(通过负载均衡器虚拟机和应用程序之间的直接通信访问)服务器虚拟机)。

注意:public-private-port映射不允许您进行任何负载平衡。这对您来说更方便:有时您将运行绝对必须在特定端口上侦听的软件,无论您希望客户访问哪个端口。