本文最后更新于:2020年11月14日 下午

平台搭建:

1、数据中心

数据中心一般由多个可用区组成,每个可用区包含多个机房,每个机房又包含一片一片的机柜,每个机柜上放置服务器,机柜有接入交换机,由汇聚交换机相连;每台服务器上由Open vSwitch创建虚拟交换机并进行连接管理,同时使用VPC(虚拟私有网络)进行虚拟机的网络管理。接下来为了应对业务需求,就需要数据库对数据进行持久化保存,缓存减轻数据库读写压力,负载均衡、CDN等方式减轻服务器压力提升用户访问体验等。

2、外网IP广播

边界路由器通过BGP协议,将数据中心等外网IP对外广播,由其他运营商等路由器进行路由信息记录;

3、域名解析

非移动端设备的域名解析请求全过程为本地hosts文件、本地DNS解析缓存、本地DNS服务器、根DNS服务器、顶级DNS服务器、权威DNS服务器;移动端一般使用HTTPDNS服务,直接调用HTTPDNS服务器,获取到对应到公网IP。

4、静态资源CDN

静态资源一般保存在nginx后等varnish缓存,对于不常更新的静态图片等会保存在对象存储里,并配置CDN,下发到边缘节点。本地 DNS 服务器去请求 CDN 的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台合适的缓存服务器提供服务,将 IP 返回给客户端,客户端去访问这个边缘节点,下载资
源。缓存服务器响应用户请求,将用户所需内容传送到用户终端。如无用户所要内容,则会向上级请求,直至追溯至愿服务器。

5、建立连接

HTTP是基于TCP连接的,用户访问需要先通过TCP三次握手建立TCP连接,并各自在TCP层会晤一个连接的状态机。建立完TCP连接后,会进行HTTPS连接建立,双方协商TLS版本、加密和压缩算法,验证证书,然后创建对称密钥用于传输加密。HTTPS采用非对称加密的方式传输密钥,对称加密的方式传输数据,解决了密钥传输的安全问题,同时也提高了数据传输的效率。

6、网络传输

HTTP网络报文主要包括请求行、请求头部、请求正文,由浏览器或者HTTP客户端封装传递给传输层;在TCP层会把报文封装成一个个报文段,并附加上TCP头部,TCP头部包含源目的端口号,发送给网络层;IP层会附加上IP头部,包含源目IP地址等信息,将报文段封装为网络包,根据路由信息,发送往对应等网关。此时会根据ARP协议获取下一跳IP的mac地址,将下一跳的MAC作为目标地址,放入MAC头部封装,通过交换机发送。

7、流控拥塞与重传

网络包传输链路复杂,容易产生拥塞和丢包现象,需要依靠TCP协议对包进行重传,并通过TCP的滑动窗口协议进行传输控制。

8、NAT

网络包到达目标公网IP后,由于MAC地址和IP地址匹配,网络包即将进入数据中心内部,由虚拟网关节点到NAT规则将公网IP转换为VPC内对应到私网IP,在由内部路由传递到对应到服务器上,实际上不止NAT,端口也会对应到进行NAT转换,这样数据包才能传递到对应到服务上进行处理。

9、RPC调用

网络包到达物理机A后,OVS 会将包从 VXLAN 隧道里面解出来,发给 HAProxy 所在的虚拟机。HAProxy 所在的虚拟机发现 MAC 地址匹配,目标 IP 地址匹配,就根据 TCP 端口,将包发给HAProxy 进程,因为 HAProxy 是在监听这个 TCP 端口的。HAProxy是四层负载,会将请求转发给后端的controller层,这个包发出去之后,还是会被物理机上的 OVS 放入 VXLAN 隧道里面,OVS 会将包从 VXLAN 隧道里面解出来,发给 Controller 层所在的虚拟机。由controller层处理具体http请求。

10、HTTP请求处理

Controller 层会通过 RPC 调用这个HTTP请求包含的服务层,以Dubbo为例:Controller 层需要读取注册中心,将具体HTTP请求的服务的进程列表拿出来,选出一个来调用。Dubbo 中默认的 RPC 协议是 Hessian2。Hessian2 将下单的远程调用序列化为二进制进行传输。调用的时候,统一使用 Hessian2 进行序列化,使用 Netty 进行传输,底层如果跨物理机,仍然需要通过 VXLAN 的封装和解封装。