为了减少 web 服务器的宕机时间,同时也提高服务器的响应性能,我们往往部署多个站点并通过负载均衡来对外提供服务。Azure 提供的 Traffic Manager 服务属于负载均衡的一种,特点是工作在 DNS 层,因此具有配置简单的优势。本文将通过一个 demo 演示如何通过 Traffic Manager 实现根据用户的地理位置来分流用户的请求。

Traffic Manager 简介

本质上讲 Traffic Manager 是 Azure 提供的 DNS 解析服务。它提供的核心能力有:

  • 提升响应能力(把请求路由到低延迟的节点)
  • 减少宕机时间(把请求路由到健康的节点)

Traffic Manager 会通过我们配置的规则把请求解析到响应延迟最低的节点上去,并同时监控节点的健康状况,如果发现某个节点出现健康问题就会把请求解析到其它健康的节点上。我们还可以通过更加灵活的配置来决定不同的节点可以响应不同数量的请求。或者是随时添加新的节点提升服务的响应能力。通过 Traffic Manager 这些功能都够轻松实现并且配置起来却很简单。
有了这样的能力我们不仅可以轻松的提示服务的响应性能还可以逐个的断开节点进行维护或升级,从而实现无宕机的 web 服务。

Traffic Manager 工作原理

Traffic Manager 工作在 DNS 级别,这一点非常重要!
在整个工作过程中,Traffic Manager 只负责告诉用户的 web 客户端:你访问的服务器在哪里。所以它没有代理的功能,也不参与用户与服务器的通信过程:

从上图中我们可以清晰的看到,用户的 web 客户端只是在进行 DNS 解析的时候通过 DNS 的 CNAME 找到 Traffic Manager,并由 Traffic Manager 根据你的配置完成最终的解析并返回 web 服务的 IP 地址。在这之后,用户的 web 客户端都是直接访问 web 服务器的,直到你设置的 TTL 超时,  web 客户端才会重新进行一次 DNS 解析。所以 Traffic Manager 不是代理或网关,它也看不到 web 客户端与服务器之间的数据传递。

Traffic Manager 支持的路由策略

当我们部署了多个 web 服务器时,如何设置策略让不同的用户访问到不同的 web 服务器上呢?当前 Traffic Manger 内置了四种路由策略:

  • Priority (主节点处理所有请求,次节点作为随时可用的备份存在)
  • Weighted (按照指定的权重分配流量)
  • Performance (按照最小延迟分配流量)
  • Geographic (按照地理位置分配流量)

Priority(基于优先级的路由策略) 可按照优先级设置多个从节点(web 服务器),当其中的某个或多个节点失效时,活着的节点中具有最高优先级者对外提供服务。这个策略主要用来提高服务的可用性。

Weighted(基于权重的路由策略) 可以为不同的节点(web 服务器)设置不同的权重。比如服务器1配置高、性能好,就可以设置比较高的权重,这样分配给它的请求就会多些(具体的多少是按照服务器的权重计算出来的)。当然如果其中有服务器离线了,Traffic Manager 就会把负载分配到其它的节点。因此我们也可以使用这种路由策略让服务器逐个的离线并进行升级从而实现渐进式的发布。

Performance(基于性能的路由策略) 提升服务器的响应时间可谓是重中之重,这种策略会根据最小的网络延迟来路由用户的请求。

Geographic(基于地理位置的路由策略) 对于全球化的服务,最好是在不同的地理位置上部署服务器以就近响应用户的请求。Traffic Manager 也支持这样的策略。本文中接下来的 demo 就将演示如何创建一个基于地理位置进行路由的 Traffic Manager 设置。

配置基于地理位置进行路由的 Traffic Manager

假设我们有两台主机,一台在香港,另一台在新加坡。我们希望新加坡的用户访问的是放在新加坡的主机,香港的用户和全世界其它地方的用户访问的都是放在香港的主机。

创建 Traffic Manager 配置文件

使用 Traffic Manager 服务需要从创建 Traffic Manager 配置文件开始。在 Azure 的门户网站上新建一个 "Traffic Manager profile"(不太熟悉 Azure 的朋友可以先去申请创建一个免费的 Azure 账户):

除了填写合适的名称还要选择正确的路由策略,这里我们选择的 "Geographic" 表示基于地理位置的路由策略。

添加 endpoint

所谓的 endpont 这里就是需要进行域名解析的主机或者是服务。本文的 demo 使用的是两台放在 Azure 上的虚拟主机。我们先添加放在新加坡的主机(请保证你已经创建了该主机,并且区域选的是 Southeast Asia,同时设置了主机的 DNS 名称):

上图中 webvm2-ip 其实是虚拟主机的 IP。另外在选择 Regional grouping 为 "Asia",然后选择 Contry/Region 为 "Sinqapore"。此时 Regional grouping 中的 "Asia" 被清空了,看来是个 bug。但是这种情况并不影响保存。这个问题存在挺长时间了,难道是个 feature ??

按照相同的方式我们再添加一个位于香港的节点,由于香港的主机会被除了新加坡之外的其它所有地区的用户访问,所以在 Geo-mapping 中设置为 "All(World)" 就可以了(Azure 的 Traffic Manager 服务会保证用户的请求会被解析到正确的节点):

监控节点健康状况

当我们完成节点的添加后,Traffic Manager 会监控节点的健康状况:

"Degraded" 说明当前监控到的节点有问题,所以我们需要调整一下相关的配置。
打开 Traffic Manager 中的 "Configuration" 界面,把 "Endpoint monitor settings" 中的 Protocol 改为 TCP,端口改成 22,并清空 Path 中的内容:

原因是默认的配置中通过 http 协议和 80 端口监控服务器的健康状况,但是笔者并没有在两个节点上运行 web 服务。改成 TCP 协议和 22 号端口(demo 中的两台虚拟主机运行的是 linux,并且都监听了 22 号端口)就可以了。修改配置后,节点的状态马上就变成 "Online" 了:

"Online" 说明节点处于健康的,可以稳定提供服务的状态。
对节点监控是非常重要的,Traffic Manager 就是依靠健康监控来实现自动故障转移的。

配置 DNS 的 CNAME

完成 Traffic Manager 配置的最后一步是在 DNS 解析中配置域名的 CNAME。笔者在 GoDaddy 购买了域名 filterinto.com,现在我们就给它添加一个 CNAME 并指向前面创建的 Traffic Manager 服务:demox.traffimanager.net:

保存上面的配置就可以了。

测试

接下来该测试我们的配置是否达到了目的。重新说明一下我们预定的目标:

  • 新加坡的用户访问的是放在新加坡的主机
  • 香港的用户和全世界其它地方的用户访问的都是放在香港的主机

先登录到一台放置在新加坡的虚拟机(使用云服务的好处是你可以在全世界的任何区域随意的创建虚拟主机!),然后执行 dig 命令:

$ dig demo.filterinto.com +noall +answer

这就是我们希望新加坡的用户访问到的主机,它的 IP 地址为:52.230.11.28。

接下来直接在本地(哥们儿是天朝子民)执行相同的 dig 命令:

$ dig demo.filterinto.com +noall +answer

其实你只要在新加坡之外的其它地方执行这个命令,解析到的主机 IP 地址都是:52.229.175.83。到这里我们可以证明 Traffic Manager 已经能够正常工作了。
注意,IP 地址与国家和区域的关系是由专门的机构管理的,我们基本不需要怀疑其正确性。

从 dig 命令的输出中我们也可以看到 DNS 的解析过程为:

demo.filterinto.com
demox.trafficmanager.net // 我们创建的 Traffic Manager 服务
eagle.eastasia.cloudapp.azure.com // Azure 提供的主机域名
52.229.175.83

其中第二三两行的解析都是由 Azure 完成的。

总结

负载均衡可以在不同的层级以不同的技术实现,本文介绍的 Traffic Manager 就是在 DNS 层的一种实现。本文选择尽可能简单的 demo 只是为了说明 Traffic Manager 是什么、能够做什么。如果要把它应用到生产中则需要考察并测试更多的细节,具体请参考 Azure 的官方文档。

Azure 基础:使用 Traffic Manager 分流用户请求的更多相关文章

  1. Azure Traffic Manager(二) 基于权重与基于优先级的路由策略为我们的Web项目提供负载均衡

    一,引言 上一片文章我们使用 Azure Traffic Manager 分发用户请求,同时演示了两种路由策略,“Performance”,“Geographic”的两种方式,今天我们继续讲解 Tra ...

  2. Windows Azure Traffic Manager (6) 使用Traffic Manager,实现本地应用+云端应用的高可用

    <Windows Azure Platform 系列文章目录> 注意:本文介绍的是使用国内由世纪互联运维的Azure China服务. 以前的Traffic Manager,背后的Serv ...

  3. Windows Azure功能更新: SDK 2.1发布,Traffic Manager集成

    最近,Windows Azure又进行了更新 Windows Azure SDK 2.0发布没多久,2.1版(for .NET)就在今天发布了.2.1版本在管理功能上进行了重大改进,包括Visual ...

  4. Traffic Manager:Azure中国版 正式发布

     我们很高兴地宣布Azure Traffic Manager 现已面向中国版Azure正式发布.此版本现已投入生产,由企业 SLA支持,随时可用于生产场景中. 借助Azure Traffic Ma ...

  5. Windows Azure Traffic Manager (5) Traffic Manager Overview

    <Windows Azure Platform 系列文章目录> 笔者默默地看了一下之前写的Traffic Manager内容,已经差不多是3年前的文章了.现在Azure Traffic M ...

  6. 新功能:Azure Traffic Manager 嵌套配置文件

    Jonathan Tuliani  Azure 网络 - DNS 和 Traffic Manager 项目经理 我们很高兴地宣布,Azure Traffic Manager 支持 Traffic Ma ...

  7. 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览

    除经济优势之外,云计算还在可转化为竞争优势的应用程序开发方面提供了更大的灵活性.我们很高兴看到每天创建的新 Windows Azure 订阅超过 1000 个,更令人兴奋的是,有一半客户使用价值更高的 ...

  8. Azure 提供负载均衡(一)Azure Traffic Manager 为我们的Web项目提供负载均衡

    一,引言 上一篇讲到我们将自己的Net Core Web 项目部署到 Azure 的 Web App 的一项 pass 服务,假如随着项目的日益增长的访问量,之前部署到单节点的应用可能无法保证其稳定性 ...

  9. 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制

    Jonathan TulianiAzure网络 - DNS和 Traffic Manager高级项目经理 在北美 TechEd 大会上,我们宣布了 Azure Traffic Manager将支持 ...

随机推荐

  1. Ardupilot设备驱动 IIC、SPI、USART

    设备代码层次结构 ​ Ardupilot设备驱动代码的层次结构采用 前端实现 和 后端实现 分割,前端库主要供机器代码层调用,后端库主要供前端调用.这里前端可以理解为应用层,后端理解为驱动层,前端调用 ...

  2. 微信公众号支付|微信H5支付|微信扫码支付|小程序支付|APP微信支付解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付.APP微信支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存. 先说注意 ...

  3. python 使用标准库连接linux实现scp和执行命令

    import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...

  4. 为什么使用 Bootstrap

    移动设备优先:自 Bootstrap 3 起,框架包含了贯穿于整个库的移动设备优先的样式 浏览器支持:所有的主流浏览器都支持 Bootstrap 容易上手:只要您具备 HTML 和 CSS 的基础知识 ...

  5. 愚蠢的遗留BUG

    二次开发本来就是很恶心的事,我竟然是三次开发. 今天遇到一个BUG,上传图片的时候报错了,操作过程很简答,点击上传按钮,选择图片,确定上传,如图: 报错信息很直白,也很奇怪: (为了写博客,把代码回滚 ...

  6. sqoop1.9.7安装和使用

    安装1.下载sqoop1.9.7.地址: http://www.apache.org/dyn/closer.lua/sqoop/1.99.72.解压sqoop ,并配置环境变量 ~/.bash_pro ...

  7. uploadify 配置后,页面显示无效果

    uploadify使用的是Flash版本 谷歌浏览器:默认没有开启Flash,进行如下图设置即可

  8. 剑指offer--面试题3

    一 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.完成一个函数,输入这样的数组和一整数,判断这个数组是否包含这个整数. 二 分析 如果这个二维数组是 ...

  9. 使用Apache Commons Email 发生邮件

    Apache Commons Email的Maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-e ...

  10. 用代理IP进行简单的爬虫——爬高匿代理网站

    用西刺代理网站的IP爬高匿代理网站 import re import _thread from time import sleep,ctime from urllib.request import u ...