用户使用浏览器访问一个网站,动动手指刷新下页面就是一个HTTP GET请求,那么从发起请求到显示具体页面之间这个过程发生了什么呢?这个问题就是我一直在思考的。正好今天有点空闲,就把这个流程根据我正在做的项目整理了下,然后画了这个流程图,有不对的地方请大家指出,献丑。图如下:
如图一个请求从发起到显示到用户有如下步骤:
1、浏览器发起请求,通过本地DNS服务转发到DNS服务器
2、DNS服务器解析请求的域名,返回给浏览器实际要访问的IP地址,在这个项目中我们在服务器端做了个分发,通过算法从多个负载均衡服务器中选取一个IP返回给浏览器
3、浏览器根据获取到的IP地址,访问具体的负载均衡服务器。
4、负载均衡服务器根据算法把请求分发给一个具体的应用服务器
5、应用服务器根据具体的请求地址匹配路由,处理相关业务。在这个项目中一个业务是由一个或多个服务构成。在业务中去调用服务,每个服务都有自己的服务器。
6、服务调用开始获取数据,首先先从缓存中读取数据,缓存返回结果。
7、缓存返回结果给服务,服务判断是否获取到了数据。获取到了就直接返回至应用。
8、如果缓存没命中那就从数据库中读取数据并同步至缓存中。服务把数据返回至应用
9、在返回给应用之前如果要收集本次请求的相关信息,那就把这个请求相关的信息交给消息队列(这个是可选,异步的)
10、服务返回数据给应用,应用组合服务相关的数据
11、应用根据返回的数据,生成相关响应,返回至浏览器处理。
以上就是我在做项目的请求大致流程。从中不难看出一些疑问。我们要注意到是应用服务器直接返回给浏览器,而不是通过负载均衡服务器返回的。这个是为什么呢?
在这个项目中负载均衡使用的是数据链路层负载均衡方案,数据链路层负载均衡工作在Linux内核进程,性能很高。后端服务器的响应不需要再次经过负载均衡服务器,解决了负载均衡服务器网卡流量瓶颈的问题。
同时,我根据每一步的过程画了个技术相关的图,可能有的知识点遗漏了,请大家给予指正,如下:
画完这个图之后,发现要学的东西有很多很多。所以要努力学习啊,早日成为大牛,加油!
领取专属 10元无门槛券
私享最新 技术干货