NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

通过 Microsoft Azure 服务设计网络架构的经验分享

  • 2014-04-08
  • 本文字数:3810 字

    阅读完需:约 13 分钟

本文从产品设计和架构角度分享了 Microsoft Azure 网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构。

Microsoft Azure 的网络架构特别针对企业私有云和混合云进行了设计,其中包含三个常用的服务:

  1. 虚拟网络(Virtual Network):连接本地网络与云端基础设施
  2. 流量管理器(Traffic Manager):将用户流量分配到不同的数据中心
  3. 名称解析服务(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 中可见。
  • 定义:包括策略设置和属性的检测设置。
  • 策略:用来指定负载均衡方法和终端。
  • 监视器:用来规定超时、协议、端口和相关路径。

流量管理器提供了三个负载均衡方法:性能、容错、或循环:

  1. 性能:根据网络延时,该方法将流量引向最近的数据中心。
  2. 循环:该方法将流量均等地分配到各个数据中心。
  3. 容错:如果主服务出错,该方法将流量引向备份服务或数据中心。

目前流量管理器可支持 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 虚拟网络就是其中的关键所在。


感谢马国耀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-04-08 04:534636

评论

发布
暂无评论
发现更多内容

【Promise 源码学习】第二篇 - Promise 功能介绍与特性分析

Brave

源码 Promise 11月日更

Elasticsearch中URI Search和RequestBody Search分析(1)

Java 程序员 后端

讲分布式唯一id,这篇文章很实在

秦怀杂货店

Java 分布式 分布式ID

Flink SQL Client综合实战,深入理解java虚拟机百度云

Java 程序员 后端

flume基本概念与操作实例(常用source),kalilinux视频教程

Java 程序员 后端

进击的Java(一)

ES_her0

11月日更

ElasticSearch集群的概念及搭建过程,Java程序员晋升路线

Java 程序员 后端

Flink的sink实战之四:自定义,Java开发笔试题目

Java 程序员 后端

git(3)Git 分支,mysql语句优化面试题

Java 程序员 后端

【死磕Java并发】-----Java内存模型之happens-before

chenssy

11月日更 死磕 Java 死磕 Java 并发

Elasticsearch 如何做到快速检索 - 倒排索引的秘密,springboot项目实战

Java 程序员 后端

Elasticsearch聚合的嵌套桶如何排序(1),java大学基础教程

Java 程序员 后端

Windows11 搭建openvino_tensorflow环境

IT蜗壳-Tango

IT蜗壳 OpenVINO 11月日更 openvino_tensorflow

Flink处理函数实战之一:深入了解ProcessFunction的状态(Flink-1

Java 程序员 后端

Dubbo服务治理之灰度发布方案(版本发布控制影响范围)

Java 程序员 后端

各地力推“链长制”,区块链让产业链更加安全可靠

CECBC

Geospatial-地理空间,java面试基本知识

Java 程序员 后端

Dubbo如何支持本地调用?InJvm方式解析,农民工看完都会了

Java 程序员 后端

Elasticsearch聚合的嵌套桶如何排序,java架构和框架

Java 程序员 后端

ELK + Filebeat + Kafka 分布式日志管理平台搭建,最新java面试题及答案

Java 程序员 后端

ELK太重?试试KFC日志采集,2021大厂Java面试经验

Java 程序员 后端

Git 常用命令,使用Docker部署Spring-Boot项目

Java 程序员 后端

Docker系列(1)--Docker原理及安装,java线程池回收原理

Java 程序员 后端

Redis 实现附近的人,全靠 GEO 数据结构让我邂逅女神

码哥字节

redis BitMap geohash NoSQL 数据库 11月日更

Elasticsearch中的Term查询和全文查询,重磅

Java 程序员 后端

WEB本地存储:localStorage、Web SQL Database、IndexedDB

devpoint

Cookie indexedDB LocalStorage sessionStorage 11月日更

Redis Pipeline

new life

【高并发】两种异步模型与深度解析Future接口

冰河

Java 并发编程 多线程 高并发 异步编程

所谓的新型“数字人民币”诈骗,这里有几个疑点

CECBC

Dubbo服务消费者调用过程,35岁老年程序员的绝地翻身之路

Java 程序员 后端

外包学生管理系统详细架构设计

天天向上

架构实战营

通过Microsoft Azure服务设计网络架构的经验分享_服务革新_王枫_InfoQ精选文章