IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 单元化架构之流量调度篇 -> 正文阅读

[系统运维]单元化架构之流量调度篇

在之前的文章中,我们了解了单元化架构的一些基本理论和原理,没看过的小伙伴可以再次阅读哈。流量管控调拨和服务请求路由是LDC架构中的一个关键设计主题,本篇文章将向大家详细介绍核心原理和实现。

整个流量调度的架构我们可以分为四层架构,分别是DNS、接入层、服务调用和DAO层。

在这里插入图片描述

DNS

比如用户在打开百度首页时,浏览器会先请求DNS解析www.baidu.com域名,得到一个IP,然后与这个IP建立通信请求。机房间流量分配,就是在DNS解析时完成的,这个过程可能用户都没有察觉到。

DNS根据规则,将域名解析到其中一个机房的IP。目前常用的规则有:

  • 按地域规则,比如按照省份进行引流,浙江省引流到ZJ机房,上海市引流到SH机房等等
  • 按运营商引流,国内特色:“世界上最遥远的距离是你在电信我在移动”,按照用户所在运营商引流到分布在该运营商的机房
  • 按权重规则,比如机房A:机房B:机房C:机房D按照 1:1:2:1 的比例进行随机引流,四个机房各承担 20%:20%:40%:20% 流量

有些应用采用了一种多域名优化技术,可以将路由选择前推到 DNS 层,避免了后面层的跨机房转发。比如百度的域名是www.baidu.com,在系统已知一个用户数据属于哪个单元的情况下,跳转到一个单独的域名,直接解析到对应的数据中心,比如可以直接转发到www.baidur1.com

接入层

得到具体接受服务请求的IP地址后,请求就被发送给目标服务器,接入服务请求处理。

接下去,我们来看下一次用户请求的整个接入和处理过程,如下图所示:
在这里插入图片描述

  • 用户初次请求, DNS可能解析到A机房VIP,经过LVS被发到“接入层”集群
  • “接入层”解析请求,发现带的 zone cookie 为空,于是随机将请求分发给本机房内一台机器,比如ServiceA
  • ServiceA的拦截器解析会话中的 uid,计算该 uid 应该在哪组 RZone 处理。若为本 zone 处理 uid 范围,则继续业务处理逻辑;若为非本zone,比如应为 RZ002 处理,再根据 A/B 权重比例比例,选取一个zone,将该请求转发至RZ002的一台 ServiceA
  • RZ002的一台ServiceA继续业务逻辑处理,比如在本zone内调用对应服务进行交易创建,完成业务处理后返回结果
  • RZ001的一台 ServiceA将请求同步返回给用户,同时植入 Cookie:zone=RZ002
  • 用户继续请求都带上 Cookie zone=RZ002
  • “接入层”解析请求发现带有 zone cookie,直接代理到对应 Zone 的后端集群

服务调用层

用户请求进入web层后,就进入了业务处理环节,主要涉及各个系统间的服务调用、消息处理等。虽然绝大部分调用都应该收敛在单元内部,但是跨单元的调用无法避免。应该调用哪个单元,是业务数据 + LDC 规则决定的,比如GZone需要调用Rzone内的服务,需要根据uid路由到能处理该uid请求的Rzone。

RPC

RPC框架本身是不理解业务逻辑的,要想知道应该调哪个单元的服务,信息只能从业务参数中来。

解决方案是框架定义一个接口,由服务提供方给出一个实现类,描述如何从业务参数中获取两位 uid。服务提供方在接口上打注解,告诉框架实现类的路径。框架就可以在执行RPC调用的时候,根据注解的实现,从参数中截出分片ID。再结合 LDC 路由规则中 uid与逻辑单元之间的映射关系,就知道该选择哪个单元的服务提供方了。

在这里插入图片描述

消息

消息这层是LDC架构中的一个难点,因为涉及到broker之间的连接,但是在LDC中本着一下原则实现消息的通信。

客户端只跟本 Zone 的 broker 建连,同城 broker 之间建连,跨城通过 跨城的borker 连接。

  • 同 Zone 消息链路:发送方 -> broker -> 消费方
  • 同城跨 Zone 消息的链路是:发送方 -> 同城broker -> 同城broker -> 消费方
  • 跨城消息的链路是:发送方 -> broker -> 跨城broker -> 跨城broker -> broker -> 消费方

DAO层

数据访问层的 uid 映射规则跟应用层保持一致。正常情况下,一笔业务请求访问的数据,刚好就在同机房。数据访问层是最后的兜底保障,即使前面所有的防线都失败了,一笔请求进入了错误的单元,在访问数据库的时候也一定会去正确的库表,最多耗时变长,但绝对不会访问到错误的数据。

流量调度场景

蓝绿发布

在LDC架构体系下,灰度发布是最典型的一个应用场景,我们接下来看一下灰度发布的一个过程。

  • Step1.发布前,将“蓝”流量调至0%,对“蓝”的所有应用整体无序分2组发布
    在这里插入图片描述
  • Step2. “蓝”引流1%观察,如无异常,逐步上调分流比例至100%

在这里插入图片描述

  • Step3. 恢复日常运行状态,蓝、绿单元各承担线上50%的业务流量
    在这里插入图片描述

容灾切换

这里后面会整理成单独的文章。

总结

流量调度是LDC架构中的一个关键设计主题,主要涉及的技术包括DNS域名解析、“接入层”请求处理、Cookie中的路由标识设置、路由计算、数据层的数据源访问范围约束等。正是因为LDC单元化部署架构下的流量管控调拨和请求路由处理能力,才使得灰度发布、容灾切换、快速容灾等成为可能。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 23:07:58  更:2022-03-15 23:09:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:46:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码