通过Microsoft Azure服务设计网络架构的经验分享(转)
原文:http://www.infoq.com/cn/articles/azure-networking-tips
本文从产品设计和架构角度分享了 Microsoft Azure 网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构。
Microsoft Azure 的网络架构特别针对企业私有云和混合云进行了设计,其中包含三个常用的服务:
- 虚拟网络(Virtual Network):连接本地网络与云端基础设施
- 流量管理器(Traffic Manager):将用户流量分配到不同的数据中心
- 名称解析服务(DNS):使用内部主机名作为云服务的解析
下面,我将着重介绍使用这三个服务时需要注意的地方,以及使用 Microsoft Azure 网络服务时需要注意的一些其他方面,比如站点对站点 VPN 的安全设置,私有 IP 地址和共有 IP 地址的使用,BGP 网络的使用,网络延迟问题如何处理等。
阅前须知
Microsoft Azure 使用了一些特有的术语,其中有两个需要特别注意:
VIP(虚拟 IP 地址):Azure 网络上的一个公有 IP 地址,用来从外网连接 Azure 虚拟网络中的虚拟机。此 VIP 并非网络负载平衡 NLB 解决方案中的虚拟 IP 地址。
DIP(直接 IP):DHCP 分配的实际 IP 地址,用来给虚拟网络中的虚拟机使用。此 DIP 并非 NLB DIP。
虚拟网络(Virtual Network)
虚拟网络可用于创建和管理 IPv4 地址空间。你可以在本地内网和虚拟网络之间建立 VPN 安全连接,也可以通过网络对接的方式将云端应用连接到本地。
虚拟网络可用于在虚拟机(Virtual Machine)之间建立连接。需要注意的是,你需要先创建好虚拟网络,然后在创建虚拟机的时候将其关联至已经创建好的虚拟网络。同理,虚拟网络也可以在云服务(Cloud Service)之间建立连接,这样做的好处是可以让不同云服务下的虚拟机之间通过私有 IPv4 地址互相通信。
还有一点需要注意的是,你在首次创建虚拟网络之前必须先创建地缘组(Affinity Group),因为没有关联地缘组的虚拟网络是未经过优化的。地缘组是 Microsoft Azure 用于定位服务的逻辑分组,比如“中国东部区域”。如果我们未来在同一地缘组内创建存储服务,那么分组内其他云服务使用该存储服务的性能更优化。
当你创建一个 Azure 虚拟网络时,你需要使用私有 IP 寻址方案,而不能使用共有 IP 地址。另外,你需要确认你的私有网络中没有占用这些 IP,也不能有重叠的 IP 地址。
Azure 在数据中心的出口是使用 BGP 网路,虚拟网络目前不支持内部使用网关 NLB。如果你想实现高可用,只能依赖于其它方法或硬件,例如硬件备份的方式,当主 VPN 网关失效之后启用备份服务器(如 Windows Server 2012 路由与远程访问服务 RRAS 于集群之上)。
当你创建一个 Azure 虚拟网络时,请求 IP 地址的集合代表所有汇总的子网络。虽然你可以汇总网络,但这些子网之间没有路由,也没有办法在这些子网中间执行访问控制。
在 Azure 虚拟网络中,虚拟机默认使用 DHCP 获取 IP 地址。你可以给虚拟机配置静态 IP,但必须使用 PowerShell 创建 VM。如果不使用 DHCP 的话,Azure 虚拟网络系统会认为设备处于未知的状态,从而导致你无法连接虚拟机。不过,尽管虚拟机的 IP 地址是使用 DHCP 获取的,但他们在运行过程中的 IP 地址是不变的——除非你停止(已取消分配)或重新创建。如果你是用 Management Portal 来"关闭"虚拟机,那计费会停止并会显示"已取消分配"(见下图),使用中的 IP 会释放。但如果你通过连接虚拟机的操作系统上来关机,则不会停止计费也不会释放 IP。
在 Azure 虚拟网络中有多种方式连接虚拟机。默认,每个虚拟机都有一个 RDP 端口,并且开启了进入端口。注意,Azure 不使用默认的 RDP 端口 3389。如果你不想让你的虚拟机暴露在外面,你也可以选择禁用端口或更改到其它的端口。另外一种连接虚拟机的方式是通过站点到站点 VPN 从企业内部网络连接到 Azure 虚拟网络,这种方式和在分支机构和总公司使用站点到站点 VPN 下来进行 RDP 连接是一样的,后面会介绍这种方式的用法。
如果你不在办公网络,或者你不想通过 VPN 连接到办公网络,你可以使用“点到站点”的方式连接虚拟机,这种连接相当于是 SSTP 远程访问 VPN,比直接用 RDP 连接 Azure 虚拟网络更安全。
流量管理器(Traffic Manager)
流量管理器为 Microsoft Azure 的另一个重要网络服务。通过使用流量管理器,你可以将用户分配到 Azure 数据中心的“最优”位置,确保云应用程序的性能、可用性及弹性。
流量管理器使用智能策略引擎处理 DNS 域名请求。你需要在 Management Portal 创建配置以使用流量管理器,需要配置的项包括:
- 属性:包括你所创建的域名前缀,该前缀在 Management Portal 中可见。
- 定义:包括策略设置和属性的检测设置。
- 策略:用来指定负载均衡方法和终端。
- 监视器:用来规定超时、协议、端口和相关路径。
流量管理器提供了三个负载均衡方法:性能、容错、或循环:
- 性能:根据网络延时,该方法将流量引向最近的数据中心。
- 循环:该方法将流量均等地分配到各个数据中心。
- 容错:如果主服务出错,该方法将流量引向备份服务或数据中心。
目前流量管理器可支持 IPv6,但不支持 sticky sessions,在变更策略配置时不会有服务中断。在服务和应用上的使用也必须多注意后端存储配置的一致性。流量管理器适合在网站和不会常变动静态内容的服务等场景下使用。
DNS域名解析
Microsoft Azure 提供域名解析服务,但该服务仅可解析同一云服务下的实例名。如,Service C 下的 Virtual Machine A 和 Virtual Machine B 之间可以直接通过各自的完全域名(FQDN)互相访问而无需在外部配置 DNS 服务器。如果你的虚拟机实例运行在不同的云服务下,那么你需要使用外部的 DNS 解决方案,如公用 DNS 服务器、ISP 的 DNS 服务器、或者公司网络的 DNS 服务器。
如果你想解析其它虚拟机器的名字,如互连网或者办公网络里的机器,你可以向 Azure 虚拟网络中添加 DNS 服务器。就像在 DHCP 选项中添加 DNS 服务器地址一样。给虚拟机分配的 DNS 服务器地址可以是 Azure 虚拟网络中 DNS 服务器 IP 地址,也可以是互连网上的 DNS 服务器地址。如果在 Azure 虚拟网络中放置了一个域控制器,也必须确保让控制器也配置了 Azure 上的 DNS 服务器。
站点对站点VPN
该方案可以让企业快速安全地在 Microsoft Azure 上部署虚拟机,其应用前景广阔,可用于开发和测试:你可以设置从本地工作站访问虚拟机来验证和测试程序,资源快速实例化可帮迅速验证待上线的程序以及其它需要在企业内部和公有云上作安全信息传递的服务。
内部网络和 Azure 虚拟网络之间的站点到站点 VPN 使用 IPSec 隧道模式。注意,Azure 只支持特定的本地 VPN 网关设备。如果没有支持的硬件设备,你也可以使用 Windows Server 2012 路由与远程访问服务(RRAS)去创建一个站点到站点 VPN 连接。另外, Azure 支持用配置脚本去配置你的内部 VPN 网关。
如果你希望使用 Microsoft Azure 网关建立站点对站点 VPN,则本地 VPN 设备必须支持 IKE v1 或者 IKE v2。需要注意的是,Microsoft Azure 在使用 IKE v1 时只支持静态路由功能,要使用动态路由功能必须使用 IKE v2。
网络延迟对混合型应用的影响
建立混合型应用程序时,无论是现有应用的移植还是创建全新应用服务,了解网络延迟对其潜在的影响十分必要。当 Azure 开始探索将应用移植到混合型模式时,我们很快便会意识到应用程序或许不能在混合模式下做出完美响应。
以经典的双层应用程序为例,其原始结构,包括用户、网页服务器和数据库服务器之间的响应时间均为几毫秒。如果我们将网页服务器转移到 Microsoft Azure,但数据库服务还在本地,则会给拓扑结构带来超过 30 毫秒的延迟,而此前的延迟为 3 毫秒!这个延迟在进行众多操作的同时传输大量数据的情况下尤其严重。我们实施过的一些应用在单独页面点击会发出数百个冗余调用,像这种情况就必须要重新设计。
延迟有时还可能是“最后一公里”的影响。比如我们的程序在数据中心里测试的结果是延迟 1 毫秒,但当将网络前台移植到 Microsoft Azure 时,该延迟就变为 30 毫秒。所以,广泛的测试是必要的。
如果需要新的混合云应用服务,我们在设计时就要考虑到延迟。我们也可以使用 Microsoft Azure Cache 以及 CDN 服务,尽量使数据更加接近用户或本地服务器。如果需要移植软件,我们可以通过使用软件网络模拟器来提前了解延迟。虽然很难准确判断延迟影响应用程序的方式,但我们应该对此类问题在设计架构之初就要多加留意。
总结
很多企业已经意识到云计算所能带来的潜力。然而,有些企业倾向于投资内部私有云基础架构。许多企业这样做主要出于安全考虑,认为将公司所有数据转移到公有云服务提供商的行为存在隐患。私有云确实能够充分利用云计算主要功能,但对于要求敏捷性、灵活性的企业来说,所要求的功能远不止这些。在这种环境下,混合型云计算将迎来巨大的投资价值。如今,企业可以决定哪些数据可以发布到公有云服务提供商,哪些数据留在本地。混合型云计算让企业从两个方面均得到最大收益:“云计算”和“本地资源”。
在过去传统的数据中心,企业如要处理日益增加的需求,就必须在数据中心添加更多的服务器,购买硬件后还要在上面部署新的操作系统和应用程序,当中需要经过预算、硬件采购、等待供应商交货的漫长周期。而在 Microsoft Azure 平台,企业现在可以轻松地扩展内部部署的数据中心到云端,而 Microsoft Azure 虚拟网络就是其中的关键所在。
感谢马国耀对本文的审校。
通过Microsoft Azure服务设计网络架构的经验分享(转)的更多相关文章
- 通过Microsoft Azure服务设计网络架构的经验分享
作者 王枫 发布于 2014年4月8日 本文从产品设计和架构角度分享了Microsoft Azure网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构. Mic ...
- Microsoft Azure开发体验 – 网络报名系统
去年底RP好抢到了中国版Azure的使用机会,最近社团里讨论到9月份招新的问题,就用Azure Website和Azure Table Storage打造了这个报名系统. 网站放在 http://jo ...
- 一次“不负责任”的 K8s 网络故障排查经验分享
作者 | 骆冰利 来源 | Erda 公众号 某天晚上,客户碰到了这样的问题:K8s 集群一直扩容失败,所有节点都无法正常加入集群.在经过多番折腾无解后,客户将问题反馈到我们这里,希望得到技术支持 ...
- C# 消息队列-Microsoft Azure service bus 服务总线
先决条件 Visual Studio 2015或更高版本.本教程中的示例使用Visual Studio 2015. Azure订阅. 注意 要完成本教程,您需要一个Azure帐户.您可以激活MSDN订 ...
- 中国区 Azure 服务和定价模式概述
由世纪互联运营的 Microsoft Azure 是第一个在中国正式商用,符合中国政府相关法规要求的国际化公有云服务.本文剖析了由世纪互联运营的 Microsoft Azure 的运营模式.采购模式. ...
- 图解 Kafka 超高并发网络架构演进过程
阅读本文大约需要 30 分钟. 大家好,我是 华仔, 又跟大家见面了. 上一篇作为专题系列的第一篇,我们深度剖析了关于 Kafka 存储架构设计的实现细节,今天开启第二篇,我们来深度剖析下「Kafka ...
- Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)
Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android or IOS) 1. 数据库表设计. 说明:无论是支付宝还 ...
- SDN前瞻 传统网络架构的危机:危机“四”起
本文基于SDN导论的视频而成:SDN导论 在网络发展速度如此之快的今天,传统网络的架构充满了危机,主要有这四个问题(3+1). 1)传统网络的部署和管理 非常困难 2)分布式网络架构凸显瓶颈 3)流量 ...
- Microsoft Azure存储架构设计
SQL Azure简介 SQL Azure是Azure存储平台的逻辑数据库,物理数据库仍然是SQL Server.一个物理的SQL Server被分成多个逻辑分片(partition),每一个分片成为 ...
随机推荐
- 利用XPath读取Xml文件
之所以要引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素.可以把XPath比作文件管理路径:通过文件管理路 径,可以按照一定的规则查找到所需要的文件:同样,依据X ...
- 微信朋友圈如何同时分享(图片+文字) Android版
以下是:微信朋友圈SDK 分享图片的代码,但只能分享图片,不能分享文字,如何才能图片和文字同时分享?求各位大神指教! public class MainActivity extends Activit ...
- jstl的forEach使用和jstl变量实现自增
<c:forEach items="${reallyChooseSubjectList}" var="reallyChooseSubject"> & ...
- hdu 1044(bfs+状压)
非常经典的一类题型 没有多个出口.这里题目没有说清楚 Collect More Jewels Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- jsp之EL表达式
1.null值 null值会用""进行显示 2.隐式对象 1).pageScope.requestScope(相当于request).sessionScope(相当于session ...
- IOS中导航控制器的代理及隐藏控制器刚出现时的滚动条
一.导航控制器的代理 1.UINavigationController的delegate属性 2.代理方法 1> 即将显示新控制器时调用 /* navigationController : 导航 ...
- 韦东山驱动视频笔记——3.字符设备驱动程序之poll机制
linux内核版本:linux-2.6.30.4 目的:我们在中断方式的按键应用程序中,如果没有按键按下,read就会永远在那等待,所以如果在这个程序里还想做其他事就不可能了.因此我们这次改进它,让它 ...
- Mysql使用大全
#登录数据库 mysql -hlocalhost -uroot -p; #修改密码 mysqladmin -uroot -pold password new; #显示数据库 show database ...
- scala学习笔记(6):闭包
到本章这里,所有函数文本的例子仅参考了传入的参数.例如,(x: Int) => x > 0里,函数体用到的唯一变量,x > 0,是x,被定义为函数参数.然而也可以参考定义在其它地方的 ...
- (六)6.4 Neurons Networks Autoencoders and Sparsity
BP算法是适合监督学习的,因为要计算损失函数,计算时y值又是必不可少的,现在假设有一系列的无标签train data: ,其中 ,autoencoders是一种无监督学习算法,它使用了本身作为标签以 ...