平台的服务部署在多个机房中。以北京为例,就有AX、BX和CX三个机房。自建的DNS服务会将用户的流量根据不同的运营商切换到不同的机房。
用户请求到达服务端后,首先会经过反向代理服务器。反向代理(Reverse Proxy)方式是指以代理服务器来接受公网上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给公网上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。平台目前使用的反向代理有LVS和Nginx。
LVS:Linux Virtual Server,基于IP的负载均衡和反向代理技术
Nginx:基于HTTP的负载均衡和反向代理服务器
关于Nginx,除了以上提到的之外,还负责集群的健康检查。这个主要是通过Nginx自带的健康检查模块实现的。Nginx server会轮询后端集群的index.jsp页面,如果返回200则认为服务器正常,请求会正常被转发到该服务器;返回503则进行服务器摘除,请求将不会再到达该服务器。
经过反向代理转发后,请求会到达部署Web应用的应用服务器。平台目前主要使用Tomcat作为应用容器。之后,请求会被统一的Web框架解析并处理。稍后会详细讲述Web框架的内容。
对于上行和下行不同的请求,请求处理的链路也不同。
以微博核心业务Feed流为例。应用服务器在收到下行请求(如查询一条微博的内容)时,会直接访问缓存资源,如果命中则直接返回结果给客户端,否则继续查询DB,将结果返回客户端。
而收到上行请求(如发微博)时,应用会将上行请求写入一个消息队列中。由另一个单独的处理应用读取消息队列,执行上行请求的资源操作,比如写入缓存、更新DB等等。
这种队列加处理机的上行请求模式被平台广泛使用,主要有以下优点:
解除前端应用和后端资源的耦合
削峰填谷:在请求量很大时,队列可以作为缓冲,缓解后端资源的压力
湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网