一个HTTP请求究竟发生了什么

这个问题 去年 分析过一次

1、首先 请求从浏览器出发
2、到达 服务器 nginx
3、nginx分发给 各个服务容器 tomcat
4、tomcat 把请求发给 服务系统
5、服务 接收请求 由前端控制器 struts 或者 springmvc 接收
6、进行业务控制 service
7、获取业务数据 dao层 查询db 并返回 数据
8、数据 反向 dao ----service---controller
9、最后由springmvc 返回 不经历nginx 返回到浏览器

那么今年 结合新了解的 服务 更新这个列表

首先建立连接 【tcp ip 协议 】
1、三次握手 【过程】
2、经过的信息 源地址 ip 发送 一个请求连接包 到 目标地址
3、目标服务器 接收到信息 返回数据包 表明连接成功 可以继续发送请求

请求建立后 发送 https请求服务
服务会先到 目标地址的linux服务器
linux 先到网卡
网卡把请求 发给 linux端口服务
如果还有LVS负载均衡服务等服务、会把请求发送给负载服务器
如果没有LVS服务器 那么服务进入nginx等应用层负载均衡服务
nginx服务分发给各个端口 端口内是真是服务的地址

如果有docker容器 要进入docker容器

进入docker容器 再进入服务实例
服务实例 有springmvc 接收请求
调用service服务【会有服务调用】
服务调用有RPC框架【dubbo或者 eureka等等】
service 调用dao

【这里还有java 底层】

从service说吧
服务进入service
那么要在虚拟机开辟一块新内存 用户内容存储和业务执行
开辟方法 是调用的C
c指针开辟空间 把业务逻辑代码 转为 二进制数据 然后cpu 执行
【关于CPU】
学过计算机或者单片机的应该都了解cpu 单片机 也是个简单的cpu 只能执行一些较为简单的逻辑控制 一般cpu不都讲由多少多少亿个晶体管构成吗 、其实蛮复杂的、一个个数起来都得好几年吧、何况是按一定的方法方式排列到一起 能够执行起来

跑偏了
在dubbo或者eureka中还会有netty nio aio bio问题
由于了解不全面 这块就不写了

还有数据库,并发访问量,事务,存储过程。

你可能感兴趣的:(一个HTTP请求究竟发生了什么)