通过Microsoft Azure服务设计网络架构的经验分享
作者 王枫 发布于 2014年4月8日
本文从产品设计和架构角度分享了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虚拟网络就是其中的关键所在。
感谢马国耀对本文的审校。
本文转载自:http://www.infoq.com/cn/articles/azure-networking-tips
通过Microsoft Azure服务设计网络架构的经验分享的更多相关文章
- 通过Microsoft Azure服务设计网络架构的经验分享(转)
原文:http://www.infoq.com/cn/articles/azure-networking-tips 本文从产品设计和架构角度分享了 Microsoft Azure 网络服务方面的使用经 ...
- 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),每一个分片成为 ...
随机推荐
- ios-异步消息同步问题-典型使用场景: 微信私信界面
前言 在ios开发中常常会有聊天功能,一般简单聊天功能只传输文字,但是稍微复杂点儿会有图片发送功能了.最全而且可支持扩展的例如微信,qq 聊天功能了.传输方式各有千秋,如get,post,websoc ...
- CSS常见选择器
一.元素选择器 p,html,h1, h2 1.多个元素一起设置同一种风格, 则用逗号“,”隔开(选择器分组) 2.通配符选择, *{Color:red} 表示文档中所有元素都为红色 二.类选择器 ...
- 八卦某 G 的前端开发方式及流程
他山之石,可以攻玉. 话说本人从毕业到现在一直在某 B 公司工作,前些年折腾过不少开发方式和工具,但总觉得或许有更好的方案,所以很好奇其它公司内部是如何工作的,我曾经浏览过某 Y 公司内部无所不包 ...
- Spring Mvc 笔记二之异常和文件上传
spring mvc的异常与文件上传 1.异常: spring注解版的异常有局部异常和全局异常 1.局部异常对单个controller有效;(在controller类写一 ...
- Quartz2.2.1操作手册
一.初识quartz JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1") ...
- 【Android】Sqlite3命令详解
Sqlite3常用命令 Sqlite3命令有"."符合作为前缀. 基本操作 1.创建或者打开数据库 sqlite3 xxx.db 如果xxx.db存在则打开如果没有则新建此时执行创 ...
- 【原创】Android开发使用华为手机调试logcat没有应用输出信息
输入 *#*#2846579#*#* 点击project Menu点击后台 1.设置logcat 2. Dump & Log",打开开关"打开Dump & Log& ...
- 如何实现.so共享库文件
.so共享库相当于window中的.DLL文件 两个进程同时调用了.so文件,进程就会加载的.so文件到各自的内存空间,而不能实现进程间通讯. .so文件编译的方法: -so文件不需要main文件,即 ...
- 收藏一个匹配html内容的文章
http://blog.csdn.net/donglynn/article/details/35788879
- 修改win8系统中启动管理器的系统引导信息
最近用某软件做了个启动U盘,软件安装在电脑上,启动盘很快做完了,结果重启电脑的时候发现悲剧,windows启动后会显示出一个系统引导菜单,显示有3秒倒计时但是倒计时结束依然不能自动进入系统.. 然后. ...