一张图带你了解前后端数据流向全过程
1. 外部建立连接过程
①外网客户端访问 http://www.baidu.com/ -> 地址解析
DNS 解析顺序:本地内存缓存 -> /etc/hosts -> /etc/resolv.conf -> 网卡文件 -> DNS 服务器(迭代,递归两种方式获取 IP 和域名,DNS 协议既有 TCP 又有 UDP,53 端口)
②客户端和服务端建立连接
HTTP1.1建立长连接(请求头、请求行、请求体,方式(GET、POST)
③TCP三次握手过程
TCP 建立连接的过程称为三次握手,为了确认双方收发数据的能力 1.发送方向接收方发送SYN请求 ⒉接收方接收到此请求后会主动回复一个ACK,并且同时也发送一个SYN请求 3.发送方接收到接收方发来的SYN请求后,给出一个ACK确认
2. 企业内部数据交互
①防火墙(软硬件)
通过流量过滤、ACL 访问控制、黑白名单、安全组、规则过滤、SNAT、DNAT 等方式控制连接请求并交给负载均衡器
②负载均衡器
LVS+Keepalived、Haproxy、SLB、硬件负载均衡器 …
负载均衡器将流量分发给对应的业务模块( NG+Keepalived 或 apache+Keepalived
③流量分发
流量发送到 NG/apache 的 80 端口,会被监听 80 端口的后台进程捕捉到 -> 接待请求然后遍历对应的配置文件。( socket 连接被 NG/apache 对应的后台进程捕捉到然后交给服务程序处理)
-
第一条路径
-
第二条路径
apache 通过加载 PHP 模块进行交互,对接 PHP(共享内存)
④tomcat/php收到请求
(1) 需要通过 redis,需要发送到 redis 的 6379 端口,redis 中主要通过 内存/缓存 的方式存储一些高热数据,通过缓存命中的方式读取高热数据,如果命中了可以直接返回,不会经过 mysql。( redis 通过监听 6379 端口获取请求)
(2) 不需要经过 redis 发送给 mysql 的 3306 端口 -> 进程接待 -> 线程处理(sock 通讯文件)-> 进入到数据内部 -> 执行 SQL 语句
数据库 select 查询时的顺序:先查询索引目录 -> 有的话直接定位具体的 库.表,获取数据,没有的话遍历 库.表 中的数据,获取后返回
php 接收请求,遍历配置文件,加载对应的项目,然后也需要获取后端存储的数据库 sock 通讯文件。 共享存储 NFS 可以通过提供网络存储的方式分别为导诊平台业务和门户网站的业务提供共享存储。(可以先使用磁盘挂载 /test1 /test2 两个目录,然后通过 NFS exporter 配置文件,提供共享存储)
上一篇:
Java基础知识总结(2021版)