3

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

  1. 能够通过安全的 TCP/IP 通道(在指定端口打开)说出自定义应用层协议
  2. 客户端-服务器连接/通道需要保持持久性。
  3. 如果服务器端应用程序的多个实例正在运行,则能够将客户端连接分派到服务器端应用程序的特定实例(基于服务器端唯一 ID)。

设计目标之一是使应用程序可扩展,因此负载平衡尤为重要。我一直在研究 EC2 和 Windows Azure 的负载平衡功能。我相信当今大多数产品都支持要求 1。但是我不太确定要求 2 和 3。特别是:

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

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

任何帮助,将不胜感激。

4

1 回答 1

3

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

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

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

注意:公共到私有端口的映射不允许您进行任何负载平衡。这对您来说更方便:有时您运行的软件绝对必须侦听特定端口,而不管您希望客户访问哪个端口。

于 2012-10-04T11:49:05.753 回答