5、web站点架构模式简介及Nginx

LB Cluster:

提升系统容量的方式:

scale up:向上扩展

scale out:向外扩展

 

LVS工作在内核中,本身的数量不受套接字数量限制,利用LVS做调度器,优化的当的话,并发数量可以到达300万,但是LVS是工作在传输层,所以LVS对应用层的报文处理是无能为力。

LVS根据用户请求的IP:PORT来进行调度的,所以并不能区别请求内容到底是动态还是静态的,因为LVS不具有对应用层操作的能力,

要判断请求内容是静态还是动态,可以根据请求内容的后缀名来判断,因此使用LVS负载均衡调度就无效了。

就需要某种服务工作在应用层,实现负载均衡,将用户请求调度至后端多个RS,这种服务器架构就可以实现动态内容和静态内容的分离。但必须工作在应用层。

  http协议的反向代理为例,反向代理是一个可以工作在用户空间的应用程序。当用户请求到达节点A时,程序B负责接收用户请求,程序B自己要监听在80端口上,因此程序B要相当于一个正常的web服务器。当用户请求到达节点A,经由PREROUTING链而后经由路由送往INPUT链,最终送往用户空间。因为程序B时监听在80端口的,所以用户请求就由内核送到了用户空间中的程序B,程序B本来就是http协议的服务器,所以程序B可以工作在http协议,能分析每一个请求,能解码http协议的请求报文的首部,能封装响应首部,所以从本质上来讲程序B是一个web服务器,但响应报文的内容并不在本地(即节点A)提供。当用户请求报文到达程序B后,程序B分析完用户请求后,程序B知道用户请求的是什么,也知道到哪里去找请求的内容,所以由程序B扮演为web服务的客户端把请求发送至后端某一个主机,后端主机的响应报文经过层层拆封(各种首部都会被拆掉,包括http首部,得到报文里面的内容),最终程序B会得到想i也能够报文的内容,并由程序B再把内容封装成响应报文,响应给客户端。所以在客户端看来就是由节点A响应的。

  后端节点通常被称为upstream server即上游服务器,当后端节点有多个,代理模块(程序B)向后端多个upstream server发请求时,会从中抽取一个节点来响应,到底抽取哪一个,也可以根据反向代理模块中所指定的调度方法来实现。

  由于节点A的web服务器(即程序B)是工作在应用层的,所以可以清楚的取到用户所请求的URL,URL所标识的都是互联网上每一个特定资源的请求,而每一个资源也通过后缀名来来判断内容类型的。内容类型分动态内容(.php、.jsp、.do等)和静态内容(.txt、.jpg等),所以就可以实现动态和静态内容的分离。

  假如后端服务器分为两组,静态内容服务器和动态内容服务器。所以节点A中的程序B在实现反向代理时,可以通过判断文件的后缀名,再决定将请求调度至哪个类型的集群。由于无论静态内容服务器和动态内容服务器都不止一个主机,所以程序B还可以基于负载均衡的方式对后端不同类型的服务器组进行调度。

  对静态内容做负载均衡时就不必考虑会话保持的问题,因为静态内容是不会处理会话的(当浏览一个电商网站时,往购物车添加商品时,一些列的处理操作都是由程序处理的),所以把用户的请求调度至静态内容服务器集群时,直接做轮询调度或者加权轮询就可以。对于动态内容的调度需要考虑session保持。

猜你喜欢

转载自www.cnblogs.com/hanshanxiaoheshang/p/9899938.html