如果创建一个简单的网站,在业务量和数据量都不大的情况下,部署一台服务器也就够用,但这样的单机部署会面临两大问题。
一是:在单机部署的情况下,用户通过网络直接与web服务器相连,一旦这个服务器挂掉,用户的请求就得不到响应,将无法访问该网站。
二是:即使服务器的运行一切正常,但如果多用户同时访问,超过了服务器的承载量,也会导致网络响应速度缓慢,甚至出现无法连接的情况,这也是网站用户无法接受的。
一个小型的网站在部署和运行时都会面临各种各样的问题,而我们日常所用到的大型网站在能完整呈现到最终用户面前,需要经过多个环节,任何一个环节出了问题,都可能导致网站的页面不可用,所以相比于网站的其他非功能特性,网站的可用性更受到人们的关注,大型网站的不可用事故直接会影响到公司的形象和利益。
而网站的高可用架构设计的主要目的就是保障服务器硬件出现故障的时候,服务依然可用,数据能够正常保存,并能够被正常访问。
一个典型的网站设计通常遵循“ 应用层-服务层-数据层 ”这一基本的分层模型,不同的业务产品会部署到不同的服务器集群上,如文科,贴吧等属性不同的产品会部署在各自独立的服务器集群上,而这些产品又会依赖一些共同的复用业务,例如注册登录服务,用户管理服务等,这些可复用的业务也分别部署在独立的服务器集群上。相应的在数据层上的数据库服务,文件服务等跟数据相关的服务也是部署在独立的服务器集群上。这种集群部署用来分摊多用户的请求,以保障网站的高可用性。
那么集群部署面临一个问题,就是每个服务器都有其对应的IP地址,想把用户请求分摊到不同的服务器上,不可能要求用户输入不同的IP地址访问,这个时候就需要一台代理服务器,对外提供唯一的入口,统一接收用户的请求,这样对于用户来说,始终通过一个域名访问网站即可,完全感知不到网站到底部署了多少台服务器,也不关心他是如何部署。这就是“负载均衡(Load Balancer)”,也是企业中最重要的高并发解决方案之一。
负载均衡,主要是在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的多台服务器上。当集群中的服务器都可用时,负载均衡服务器会把用户发送的访问请求分发到任意一台服务器上进行处理,而当服务器宕机时,负载均衡服务器通过心跳检测机制发现该服务器失去响应,会把它从集群服务器列表中删除,而将请求发送到别的服务器上,而所有的后端服务器会保证提供相同的内容,以便用户的请求在任何一台服务器中处理都得到一致的内容。
负载均衡的主要作用是:
高并发:负载均衡可提高系统的并发数,它通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力。
伸缩性:在网站的渐进式衍化中,最重要的技术手段就是使用服务器集群,随着业务的变更会添加或减少服务器数量,在这个过程中由负载均衡进行分发控制,保障了网站架构的可伸缩性。
高可用:负载均衡设备可通过心跳检测等手段监控到某台应用不可用时,就将其剔除出集群列表,并将请求分发到集群中其他可用的服务器上,这使得应用集群具备高可用的特性。
安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。