您当前的位置:首页 > 文章 > 一次网络请求中的流量分发过程 | 京东云技术团队

一次网络请求中的流量分发过程 | 京东云技术团队

作者:京东云开发者 时间:2023-06-09 阅读数:340 人阅读

1. 摘要

现代的企业级或互联网系统往往需要进行流量规划,达成透明多级分流。流量从客户端发出到服务端处理这个过程里,流经的与功能无关的技术部件有(达成 “透明分流” 这个目标所采用的工具与手段):客户端缓存、域名服务器、传输链路、内容分发网络、负载均衡器、服务端缓存。透明分流带来的价值:高可用架构、高并发。

本文主要介绍流量规划中的网络请求过程过程及:

第一部分:对一次网络请求的过程作简要介绍,然后介绍自己目前了解到的前端网络组件搭配方式、后端网络组件搭配方式

第二部分:介绍 LB 负载系统 、vip 与 rip 的映射关系

第三部分:介绍内网域名解析及公网域名解析

2. 网络请求过程

通用请求过程及请求过程名词解释来源于: https://cf.jd.com/pages/viewpage.action?pageId=766717554

2.1 通用请求过程

2.2 请求过程名词解释

rip: 真实 ip,指虚拟机或容器 ip

vip: 虚拟 ip,不可跨机房,online 申请,负载、自动探活等功能,分公网 vip 与内网 vip

内网: 专指机房内部,严格的防火墙策略,内网之间无防火墙,可申请内网 vip 提供负载均衡供应用间互访;内网≠办公网

办公网: 办公区个人电脑网络,通过反向代理访问内网机房应用

公网: 互联网用户网络,通过 DNS + 公网 vip 访问内网机房应用

备注(自己理解 ,有可能理解不正确):

公网 vip 即公网虚拟 ip,虚拟不是说公网上找不到这个 ip,虚拟是相对于服务器 ip(rip)来说的,vip 不直接承担业务逻辑

公网 VIP 在公网真实存在、内网 vip 在公司内网真实存在

2.3 前端网络组件搭配方式

引用链接: http://jdthelp.jdos.jd.com/help/bestpractice/multi-web-demo.html

外网访问需满足如下图架构:VIP 后面挂 jen-nginx 来代理前端的主应用,jen 代理后面挂静态应用 1~N

测试环境:多个前端项目可能存在下列架构方式: 域名 -> VIP -> JEN 代理(根据不同域名访问不同文件夹下的文件)-> 静态应用

2.4 后端网络组件搭配方式

后端应用从调用方式来说分为两种 (http 调用 JSF 调用)

前端应用 ---(协议 http 或者 https)--- 后端前置应用 --(协议 jsf 私有协议)----JSF 微服务应用

后端前置应用 -----jsf 微服务应用,之间的负载由消费者来决定,所以一般无须关注这两者之间的负载。

方式 1: vip 下的负载(LB 负载系统) + Nginx

方式 1 备注:

VIP 下可以直接挂载服务器,这里 Nginx 不是必须的,除非你需要 nginx 提供的功能(除了负载)。

如果你仅仅是用 nginx 来做负载,那么请去除 nginx 组件,没有必要加一这个组件,集团的 vip 的 LB 已经包含负载功能,不要加重系统的复杂性。

方式 2:容器 K8S 层面的负载

vip 提供的 LB:

vip 提供的 LB 下是直接挂机器 IP,其中多个 ip 之间没有分组的概念,并且没有探活机制

每次上线需要摘掉负载下的机器,上线完成后,再把机器挂上去

行云部署 - 高级功能 - 负载均衡 ( 容器 k8s 层面的负载 ) 优点:

有机器分组的概念: 按照机房或者 机房 + 机房集群的维度分组后,每个分组申请自己的负载均衡。

具有探活机制: 设置健康探活路径,针对负载进行探活。每次上线无须摘掉负载下的机器。

3. LB 负载系统简介

其实吧,vip 本身就是个 ip,没有多少真正的价值。vip 可以理解为是集团 LB 负载均衡的入口 ip,而 LB 负载均衡才是真正的分流组件。

vip 是系统自动分配复用的(vip 资源珍贵,系统分配的 vip 有可能复用),LB 负载均衡有两种分流规则:

1. 分流规则的实现方式

分流规则两种实现方式,默认规则、专用规则。

默认规则:面向域名,流量接入到后端集群。此为模板,可选择应用范围。

专用规则:面向 VIP,可为某 VIP 独立指定后端集群。 其中专用规则优先级高。

默认规则、专用规则两者关系:

共同点 不同点
默认规则面向域名的一个端口有且只有一条分流规则 专用规则面向 VIP 的一个端口有且只有一条分流规则 默认规则必须存在; 专用规则优先级高; 专用规则无设置时,继承默认规则指向的后端

3.1 默认规则: 默认分流规则:域名 + 端口 + 集群,分流规则唯一性

备注: 系统分配的 vip 有可能复用

在默认规则中, 假设系统分配的 vip 都是 111.111.111

域名 A (www.a.jdcom)+ 域名的一个端口 port (80) 通过配置的 vip (111.111.111) 将请求转发到 后端集群 A。

域名 B (www.b.jd.com) + 域名的一个端口 port (443) 通过配置的 vip (111.111.111) 将请求转发到 后端集群 B。

3.2 专用规则: 面向 vip 的一个端口有且只有 1 条分流规则

备注:(猜测 不确定):专用规则中的 vip 可能不是复用的。

备注:一个 VIP 也可以用多个端口,比如 HTTP 是 80 和 443,TCP 是 2000-2014

4. vip 和 rip 的映射关系 (重要 非常重要)

一对一:一个机房,一个 vip 对应一个 rip

一对多:一个机房,一个 vip 对应多个 rip

多对多: 多个机房,每个机房的 vip 对应 其机房下的多个 rip

4.1 vip 下挂载 rip 的约定

  1. vip(机房入口)是机房维度的,当然如果说 vip 出问题了,一般情况下就是机房出问题了,这个出现的几率会比较小。

  2. vip 是机房维度的,但是 vip 下挂哪些机器 是由研发人员决定的,因此 vip 下的机器是有可能跨机房的。但是研发人员应该 根据机房视图( 机器的机房所在地 )来对应此所在地的机房入口( vip ),应尽可能遵守 这个规定。

4.2 为什么要遵守这个约定呢?

1. 尽可能缩小问题影响的范围: 如果你 VIP 下的机器跨机房,如果 Vip 出问题,导致多个机房的机器都无法接收流量

2. 尽可能匹配断网演练的目标: 机房断网演练,估计 VIP 也不会让流量进入到下一层,如果你 vip 下挂载跨机房的 rip,直接让 机房的断网演练,变成了 跨机房演练(因为多个机房的机器不会接收到流量)

5. 内网域名解析(机房视图与机房入口说明)

  1. 内网域名解析时: vip 是根据 机房入口(目前有 廊坊 vip 马驹桥 vip 印尼 vip) 走的。

  2. 每个视图必须解析。 廊坊视图 —> 廊坊 VIP,马驹桥视图 —> 马驹桥 VIP,其他的视图 —> 选择马驹桥或者廊坊 VIP(必须指向线上可用 VIP)

  3. 为优化机房内访问,优先选择本机房 VIP。

  4. 考虑到旧的机房已下架或者正在下架,旧机房优先选择廊坊、马驹桥 VIP,国外应用优先选择国外的 VIP。

6. 公网域名解析

pop 入口 在计算机网络中,pop 表示入网点(pop),pop 位于网络企业的边缘外侧,是访问企业网络内部的进入点,外界提供的服务通过 pop 进入,这些服务包括 Internet 接入,广域连接以及电话服务(PSTN)。

pop 入口 :新应用上线时应该申请入网点(pop)处的 vip。

域名解析:

不需要 VIP: 直接填写自己的公网 IP

需要 VIP:

  1. 请提前申请 POP 入口的 VIP

  2. 解析前请线下绑定 host 测试 VIP 业务可用性

  3. 按照运营商对应的 POP 入口 VIP 进行解析

7. 总结

简单的请求过程最实用,实用的请求过程最简单。

用简单实用的搭配方式满足流量分发,不要随意搭配,增加系统的复杂性。

作者:京东保险 张江涛

来源:京东云开发者

本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com

标签:技术应用