Microsoft Azure 负载平衡服务
Microsoft Azure
为在其中托管的虚拟机(IaaS)
和云服务(PaaS)
提供负载平衡服务。负载平衡支持应用程序伸缩,并且提供应用程序故障恢复以及其他优势。
可以通过以下方式访问负载平衡服务:通过Microsoft Azure
门户或应用程序的服务模型指定服务上的输入端点。当在Microsoft
Azure 上部署一个具有一个或多个输入端点的托管服务后,它会自动配置Microsoft Azure
平台提供的负载平衡服务。要充分利用服务的弹性/冗余性优势,您需要让至少两个虚拟机服务于同一端点。
下图是一个托管在Microsoft Azure
中的应用程序示例,该应用程序使用负载平衡服务将传入流量(地址/端口
1.2.3.4:80)引导到三个虚拟机,这些虚拟机均侦听端口 80。
下面介绍了Microsoft Azure
负载平衡服务的主要功能:
PaaS/IaaS支持
Microsoft Azure
负载平衡服务适用于所有租户类型(IaaS或PaaS)和所有操作系统类型(支持Windows
或任何基于Linux
的操作系统)。
PaaS
租户通过服务模型进行配置。IaaS
租户通过管理门户或PowerShell
进行配置。
Layer-4负载平衡器,基于哈希算法分配
MicrosoftAzure
负载平衡器是一种 Layer-4负载平衡器。Microsoft
Azure 负载平衡器通过针对给定输入端点上接收到的流量计算哈希函数,在一组可用的服务器(虚拟机)之间分配负载。计算哈希函数是为了使来自同一连接(TCP
或 UDP)的所有数据包最终位于同一台服务器上。Microsoft
Azure 负载平衡器采用 5个信息(源
IP、源端口、目标 IP、目标端口、协议类型)计算用于将流量映射到可用服务器的哈希函数。我们选择的哈希函数使到服务器的连接的分布非常随机。但是,根据流量模式,不同的连接可能映射到同一台服务器。(请注意,到服务器的连接的分布不是轮询的,也不像其他文章或博客中误称的那样具有请求队列)。哈希函数的基本前提是获得了大量来自不同客户端的请求,这样请求就可以跨服务器完美分配。
多协议支持
MicrosoftAzure
中的负载平衡服务支持 TCP
和 UDP
协议。客户可以在其服务模型的输入端点规范中通过 PowerShell
或管理门户指定协议。
多端点支持
托管服务可以指定多个输入端点,这些端点将自动在负载平衡服务上完成配置。
目前,不支持具有相同端口和协议的多个端点。托管服务可以拥有的最大端口数也存在限制,目前设置为
150。
内部端点支持
每个服务最多可以指定 25
个内部端口,这些端口未暴露给负载平衡器,且用于服务角色之间的通信。
直接端口端点支持(实例输入端点)
托管服务可以指定给定端点不应实现负载平衡,
而是直接访问托管此服务的虚拟机。这样应用程序就可以控制客户端直接重定向到给定应用程序实例
(VM) ,而不必让每个请求都实现负载平衡(负载平衡有可能造成重定向到不同的实例)。
自动重新配置扩展/缩小、服务修复和更新
负载平衡服务与Microsoft Azure
计算服务一起协作,以确保在为输入端点指定的服务器实例数扩大或缩小(由于 webrole/worker role
实例数的增加或在相同负载平衡组下放置了额外的持久 VM)时,负载平衡服务会自动重新配置以针对增加或减少的实例实现负载平衡。
负载平衡服务也会以透明的方式重新配置,以响应Microsoft
Azure Fabric Controller 执行的服务修复操作或客户执行的服务更新。
服务监控
负载平衡服务提供了一项功能,可探测各种服务器实例的运行状况并让运行不佳的服务器实例不再被轮询。支持以下三种类型的探测器:来宾代理探测器(在
PaaS VM 上)、HTTP
自定义探测器和 TCP
自定义探测器。对于来宾代理,负载平衡服务会查询
VM 中的来宾代理以了解服务的状态。对于 HTTP,负载平衡服务通过获取指定的
URL 来确定实例的运行状况。对于 TCP,则依赖于成功建立与已定义探测端口的
TCP 会话。
源NAT
(SNAT)
所有来自服务的出站流量均使用与入站流量相同的VIP
地址进行源NAT (SNAT)
处理。我们将在以后的文章中深入介绍SNAT
的工作原理。
数据中心内部的流量优化
Microsoft Azure
负载平衡器会优化同一区域中Microsoft Azure
数据中心之间的流量,使通过VIP
通信且位于同一区域中的Azure
租户之间的流量可在TCP/IP
连接启动后完全绕过Microsoft Azure
负载平衡器。
VIP
交换
MicrosoftAzure
负载平衡器支持交换两个租户的 VIP,让处于“暂存”环境的租户移动到“生产”环境,反之亦然。VIP
交换操作允许客户端在部署服务的新版本时使用相同的 VIP
与服务通信。可以在 staging
环境中部署和测试服务的新版本,而不会干扰生产流量。当新版本通过所有必要的测试后,可以通过与现有的生产服务交换将其提送到生产环境。与“旧”生产环境建立的现有连接将保持不变。新连接将被定向到“新”的生产环境。
示例:负载平衡服务
接下来我们将了解如何在示例云服务中使用上文中负载平衡服务提供的大多数功能。我们要建模的
PaaS 租户如下图所示:
租户有两个前端 (FE)
角色和一个后端 (BE)
角色。FE
角色暴露了四个使用 http、tcp
和 udp
协议的负载平衡端点。其中一个端点也用于通知负载平衡器该角色的运行状况。BE
角色暴露了三个使用 http、tcp
和 udp
协议的端点。FE
和 BE
角色将一个直接端口端点暴露给相应的服务实例。
使用 Azure
服务模型表示上述服务,如下所示(一些架构细节已被删除,以使其更清晰):
<ServiceDefinition name="ProbeTenant">
<LoadBalancerProbes>
"
/>
</LoadBalancerProbes>
<WorkerRole name="BERole" vmsize="Small">
<Endpoints>
<InternalEndpoint name="BE_InternalEP_Tcp" protocol="tcp"
/>
<InternalEndpoint name="BE_InternalEP_Udp" protocol="udp"
/>
"
/>
">
<AllocatePublicPortFrom>
" />
</AllocatePublicPortFrom>
</InstanceInputEndpoint>
</Endpoints>
</WorkerRole>
<WorkerRole name="FERole" vmsize="Small">
<Endpoints>
"
/>
"
/>
"
/>
" loadBalancerProbe="MyProbe"
/>
">
<AllocatePublicPortFrom>
" />
</AllocatePublicPortFrom>
</InstanceInputEndpoint>
<InternalEndpoint name="FE_InternalEP_Tcp" protocol="tcp"
/>
</Endpoints>
</WorkerRole>
</ServiceDefinition>
分析服务模型时,我们先从定义正常运行的探头开始,负载平衡器应使用此探头来查询服务的运行状况:
<LoadBalancerProbes>
"
/>
</LoadBalancerProbes>
这表示,我们有一个 http
自定义探头,它使用 URL
相对路径“Probe.aspx”。此探头稍后将附加到一个完全指定的端点。
接下来我们将 FE
角色定义为 WorkerRole。该角色具有多个使用
http、tcp
和 udp
的负载平衡端点,如下所示:
"
/>
"
/>
"
/>
由于我们没有为这些端点分配自定义探头,因此上述端点的运行状况将由
VM 上的来宾代理控制,并且可以由服务使用
StatusCheck
事件进行更改。
接下来我们在端口 80
上定义一个额外的 http
端点,该端点使用我们之前定义的自定义探头 (MyProbe):
" loadBalancerProbe="MyProbe"
/>
负载平衡器结合端点信息和探测器信息以创建以下形式的 URL:http://{VM
的 DIP}:80/Probe.aspx,将其用于查询服务的运行状况。此服务将(在日志中?)发现相同的
IP 会定期访问它。这是来自运行 VM
的节点主机的运行状况探测请求。
该服务必须通过 HTTP 200状态代码对负载平衡器做出响应,以假定该服务正常运行。任何其他
HTTP 状态代码(如 503)会直接导致负载平衡器停止向
VM 发送轮询。
探头定义还会控制探测频率。在上述情况下,负载平衡器每 15
秒探测一次端点。如果 30
秒(两次探测间隔)内没有收到肯定回应,将假设探头关闭,VM
终止轮询。同样,如果服务已终止轮询,当收到肯定回应时,服务将立即恢复轮询。如果服务在运行正常/不正常之间波动,负载平衡器可以决定推迟重新轮询服务,直到它可以让大量探头正常运行。
FE
服务暴露了一组直接端口,每个实例(实例输入端点)一个,这些端口直接连接到以下指定端口上的 FE
实例:
">
<AllocatePublicPortFrom>
" />
</AllocatePublicPortFrom>
</InstanceInputEndpoint>
上述定义使用 tcp
端口 10110、10111…连接到每个
FE 角色 VM
实例的端口 80。可以通过多种方式使用此功能:
a) 直接访问给定实例,仅对该实例执行操作
b) 在用户应用程序通过负载平衡端点后,将其重定向到特定实例。这可以用于到给定实例的“粘性”会话。需要注意的是,这可能会导致实例过载并删除任何冗余。
最后,FE角色暴露了一个内部端点,其可用于FE/BE
角色之间的通信:
<InternalEndpoint name="FE_InternalEP_Tcp" protocol="tcp"
/>
每个角色可以使用
RoleEnvironment类发现它暴露的端点,以及其他每个角色暴露的端点。
BE
角色也可作为 WorkerRole
进行建模。
BE
角色不会暴露任何负载平衡端点,只会暴露使用 http、tcp
和 udp
的内部端点:
<InternalEndpoint name="BE_InternalEP_Tcp" protocol="tcp"
/>
<InternalEndpoint name="BE_InternalEP_Udp" protocol="udp"
/>
"
/>
BE
角色还会暴露直接连接到 BE
实例的实例输入端点:
">
<AllocatePublicPortFrom>
" />
</AllocatePublicPortFrom>
</InstanceInputEndpoint>
上述定义使用 tcp
端口 10210…连接到每个
BE 角色 VM
实例的端口 80。
我们希望上述示例充分演示了如何使用所有负载平衡功能对服务进行建模。
在以后的文章中,我们将看到此租户的实际应用,并提供代码示例。此外,我们将更加详细地介绍以下内容:
a) SNAT
的工作原理
b) 自定义探头
c) 虚拟网络
您也可以向我们发送您希望详细了解的内容。
Microsoft Azure
网络团队
Marios Zikos
本文翻译自:
http://blogs.msdn.com/b/windowsazure/archive/2014/04/08/microsoft-azure-load-balancing-services.aspx
Microsoft Azure 负载平衡服务的更多相关文章
- Microsoft Azure 云存储服务概念
本文包括了以下几点内容: 什么是Azure云存储服务? 云存储服务分类 云存储服务的优势 什么是Azure云存储服务? Azure 云存储服务可以说是Azure 上最重要的SAAS服务了. 在Azur ...
- C# 消息队列-Microsoft Azure service bus 服务总线
先决条件 Visual Studio 2015或更高版本.本教程中的示例使用Visual Studio 2015. Azure订阅. 注意 要完成本教程,您需要一个Azure帐户.您可以激活MSDN订 ...
- 通过Microsoft Azure服务设计网络架构的经验分享(转)
原文:http://www.infoq.com/cn/articles/azure-networking-tips 本文从产品设计和架构角度分享了 Microsoft Azure 网络服务方面的使用经 ...
- 通过Microsoft Azure服务设计网络架构的经验分享
作者 王枫 发布于 2014年4月8日 本文从产品设计和架构角度分享了Microsoft Azure网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构. Mic ...
- Microsoft Azure 的负载平衡器的Session Sticky
Microsoft Azure 的负载平衡器是一种 Layer-4负载平衡器.Microsoft Azure 负载平衡器通过针对给定输入端点上接收到的流量计算哈希函数,在一组可用的服务器(虚拟机)之间 ...
- Microsoft Azure File 服务简介
我们非常高兴地宣布在微软Azure中国区推出 Microsoft Azure File 服务预览版.Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现 ...
- Windows Server 2008 R2 负载平衡入门篇
一.简单介绍负载均衡 负载均衡也称负载共享,它是指负载均衡是指通过对系统负载情况进行动态调整,把负荷分摊到多个操作节点上执行,以减少系统中因各个节点负载不均衡所造成的影响,从而提高系统的工作效率.在常 ...
- 第7章 性能和可靠性模式 Load-Balanced Cluster(负载平衡群集)
上下文 您已经决定在设计或修改基础结构层时使用群集,以便在能够适应不断变化的要求的同时保持良好的性能. 问题 在保持可接受的性能级别的同时,如何设计一个可适应负载变化的.可伸缩的基础结构层? 影响因素 ...
- Microsoft Azure Web Sites应用与实践【1】—— 打造你的第一个Microsoft Azure Website
Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...
随机推荐
- leetcode Binary Tree Paths python
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = ...
- 关于表格动态添加行并处理相关表单元素的一些修改----优化for重用(2)
功能介绍: 1.处理了动态行与表单的设值问题 2.添加了行的向上或向下排序 3.添加了可以在当前行的下边或上边增加新行的功能 4.添加了可以单选或勾选多项删除不需要的行的功能 5.添加了新增的行的高亮 ...
- 提取 ECharts 中的svg地图信息
地图的需求还是蛮大的,全国都要自己画的话,还是需要投入比较大的人力. ECharts中有地图,那我们能不能把里面的地图文件提取出来呢,主要逻辑在map.js中. 看源代码发现,ECharts中地图信息 ...
- 你的阅读造就了你 You are what you read
在豆瓣上看到的一篇很有思想和正能量的文章,在这里请允许我用原创的方式来呈现给大家.如果你是在校的大学生或者研究生博士生,这篇文章会让你有很多的共鸣.如果你已真正的踏入这个社会,也将受益匪浅. 电脑 ...
- poj 1769 Minimizing maximizer 线段树维护dp
题目链接 给出m个区间, 按区间给出的顺序, 求出覆盖$ [1, n] $ 至少需要多少个区间. 如果先给出[10, 20], 在给出[1, 10], 那么相当于[10, 20]这一段没有被覆盖. 令 ...
- python之字符串格式化(format)
用法: 它通过{}和:来代替传统%方式 1.使用位置参数 要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表 ...
- 源码学习之ASP.NET MVC Application Using Entity Framework
源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...
- asp.net的Master-Content结构简介
在一个网站中,页面应该具有统一的布局方式,这些统一的布局内同将显示到所有的页面中,它提供了用户最基本的功能.Asp.Net2.0通过Master-Content结构提供了这样统一页面管理的机制. Ma ...
- WPF:构建应用程序
原文 http://www.cnblogs.com/free722/archive/2011/11/13/2247455.html WPF相关的项目内容包含在App.Xaml和Window1.xaml ...
- Android手势源码浅析-----手势绘制(GestureOverlayView)
Android手势源码浅析-----手势绘制(GestureOverlayView)