一个http请求进来都经过了什么(2021版)
引子
四年前我写过一篇文章《一个请求过来都经过了什么》,这个问题是每隔一段时间我就要重新梳理一遍的。因为每个阶段接触的信息不同,看到的想到的也不同。今天来比较一下与4年前认知上有什么变化。
提出问题
高技术含量开放性面试题驾到:”请描述一个请求过来到响应完成都做了什么,越详细越好。”
解决问题
设立场景
假设我在超市买了我喜爱的经典搭配:烤肠+酸奶。然后我就微信扫码付款了。付款时序图大体是这样的:
看的眼晕没关系,和主题关系不大。咱们zoom in(把镜头拉近,只看一部分)一下:
1.1返带订单ID的URL到微信的处理,我不是腾讯的哈,他们内部怎么做的我不知道,这里只是举个例子。
链路处理流程
如上图所示,请求从外网过来,到达一个机房。首先要经过外网DMZ区,DMZ区可以简单理解为隔离区。
接入路由器:它是专线或者互联网的统一入口。
接入交换机:这是一个容灾设备,它可以连接到其他机房的线路,如果本机房线路发生故障,可以绕行其他机房接入进来。
防火墙:有两个作用。一个是外网地址到内网地址的转换;另外一个是防火墙安全策略,进行信息的过滤。
通过防火墙后,会进入内网DMZ,这个也是一个隔离区。在这个区域,一般会设置蜜罐。蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。
核心交换机:一般公司里会有生产环境、测试环境和办公环境。一般都是走了一个交换机设备将其分离开。
防火墙:这里的防火墙是策略的加强。生产环境、测试环境和办公环境的防火策略不同。之后可以部署一些与外部通信的设备,比如MQ。
生产云spine交换机和生产云leaf交换机这种架构叫做脊叶网络,是目前公司普遍使用的一种架构。spine是脊梁,就是主干的意思。leaf是叶子的意思,就是分支了。一般一台spine交换机下面会对应几十组leaf交换机,一起进行流量分发。
F5是负载均衡设备,同时它还可以进行https卸载,就是https转http。关于https可以参考我之前的文章《架构师之路-https的底层原理》,普遍评价说是比较好理解。
F5设备怎么卖,处理能力怎么样,我还专门查了一下,截图如下:
咱们看看最贵的:
产品概述 | |
设备类型 | 负载均衡器 |
---|---|
硬件配置 | 处理器:英特尔四核Xeon处理器(共8个超线程逻辑处理器内核 内存:32GB 硬盘:400GB SSD 接口:标配8个万兆/千兆位光纤端口,最大32个 硬件SSL:标配4000/Blade,最大10000 TPS(2K keys),9Gbps批量加密 硬件DDoS保护:每秒40M SYN cookies 高度:4U 服务器缓存:缺省提供内存仿真cache,提供静态页面加速,降低后台服务器压力 电源:标配两个交流100-240 VAC(800W),50/60Hz自动测距,每插槽电流10A(最大),直流电源(可选) |
性能应用概述 | 每秒L7请求数:1M 每秒L4连接数:400K 每秒L4 HTTP请求数:7M 最大L4并发连接数:24M L4吞吐量:40Gbps L7吞吐量:18Gbps 最大软件压缩:10Gbps 软件架构:64位TMOS 虚拟化支持:每个刀片8个,最大4个刀片 支持的虚拟服务器数量 VIP:无限制 Real Server:无限制 IP Version:支持ipv4 和ipv6 协议层保护:提供HTTP(S),FTP(S),SMTP等协议层安全 安全的管理:可以通过HTTPS、SSH进行安全的远程管理,本地可以通过CONSOLE终端进行管理 |
其他处理流程
从链路处理流程,在公司的软件架构地图上再点一下zoom in,理论上要到达公司的整体架构了。但是公司的整体架构和组织架构之间密不可分,通常是业务架构而不是技术架构。
一个http请求要经过很多个部门甚至事业群的处理才会再传送到外部机构那边。外部机构下游链条也很长,比如支付请求从微信二维码开始到达腾讯内网处理之后,至少要再经过网联(支付监管)再达到银行侧,从银行处理之后原路返回。
再zoom in一下,只看一个部门所做的事情,对一个支付请求来说,至少要经过渠道、交易核心和支付网关三层,在一个大公司,这往往是三个团队,一个大组十几个人的样子。
渠道
渠道是指业务渠道,比如智能终端设备比如扫码枪、小白盒和二维码会分属不同渠道。它们可能会由不同的应用系统来承建。
上面说的只能终端设备很多朋友可能不知道名字,但是一般都在超市等地方见过。
上面是一个扫码枪的图片,生活中我在小卖店见的比较多。我买了东西放到柜台上结账,收银员就会拿出扫码枪对着我的商品条码扫一下,他们就能看着电脑告诉我付多少钱。这个是用来创建商品订单的,和支付没有关系,一般需要另外扫码或现金支付。
盒子设备我在大超市见的多一些,这个是真正的支付设备。商品订单已经生成好了,支付费用也已经汇总好了,拿自己的付款码一扫就可以支付。这种方式的好处是支持离线。就是网络不好也能支付成功,等待网络恢复再进行真正的扣款。
上面这个是大家最熟悉的扫码付款。来来来,欢迎大家扫描上面二维码发起支付,熟悉一下整个付款流程。扫码付款对于扫描的人来说,扫描时解析的数据只有商家的信息没有付款人的信息,所以需要经过互联网几次交互才能支付成功,商家才会放你离开。
综上所述,每种支付渠道支付流程都就有不少差异化信息,所以渠道侧经常需要快速迭代业务。
交易核心
不管何种渠道,它们最终都需要落单,就是把支付订单统一存储,最终进行清算。交易核心的数据一般需要提供多个部门使用,比如清算、营销、会员、风控。
支付网关
支付网关就相当于是业务架构的防腐层,一般公司都提供多种支付方式,也叫支付渠道。比如同时支持微信、支付宝、余额支付、银行卡。不同支付渠道提供的接口不同,需要网关层做一个统一适配。
再zoom in一下,到一个团队,也一般会有几个或者几十个应用系统构成。一个应用的部署架构有两地三中心或者双机房容灾的部署。一个应用web容器内也请求分发和请求处理两种大类的线程。请求处理线程的处理流程在做详细设计的时候一般需要画出活动图来描述处理流程,举例如下:
总结
----程序员修炼之道
往期推荐