标签:
永无止境:网站的伸缩性架构
1. 所谓网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务能力。
2. 网站架构的伸缩性设计:
1). 不同功能进行物理分离实现伸缩性:通过增加服务器提高网站处理能力,新增服务器总是从现有服务器中分离出部分功能和服务
纵向分离(分层后分离):将业务处理流程上不同部分分离部署,实现系统伸缩性。
横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。横向分离的粒度可以非常小,甚至可以一个关键网页部署一个独立服务。
2). 单一功能通过集群规模实现伸缩:使用集群,即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。
集群伸缩性又可以分为应用服务器集群伸缩性和数据服务集群伸缩性,而数据服务器集群又可分为缓存数据服务器集群和存储数据服务器集群。
3. 应用服务器集群的伸缩性设计:应用服务器应该设计成无状态的,即应用服务器不存储请求上下文信息,如果将部署有相同应用的服务器组成一个集群,每次用户请求都可以发送到集群中任意一台服务器上去
处理,任何一台服务器的处理结果都是相同的。
如果HTTP请求分发装置可以感知或者可以配置集群的服务器数量,可以及时发现集群中新上线或下线的服务器,并能向新上线的服务器分发请求,停止向已下线的服务器分发请求,那么就实现了应用服务器集群的伸缩性。
负载均衡的集中方式:
1). HTTP重定向负载:简单,但需要两次请求服务器才能完成一次访问,性能差。可能会成为网站访问的瓶颈,使用不多。
2). DNS域名解析负载均衡:这是利用DNS处理域名解析请求的同时进行负载均衡处理的一种方案。
优点:将负载均衡的工作转交给DNS,同时许多DNS还支持基于地理位置的域名解析,即会将域名解析成举例用户地理最近的一份服务器地址。
缺点:可能也会将域名解析到已经下线的服务器,导致用户访问失败。
事实上,大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段,即域名解析得到的一组服务器并不是实际提供Web服务的物理服务器,而是将同样提供负载均衡服务的内部服务器,这组内部
负载均衡服务器再次负载均衡,经请求分发到真正的Web服务器。
3). 反向代理负载均衡:大多数反向代理同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不同的Web服务器上。
优点:负载均衡和反向代理服务器功能集成在一起,部署简单。
缺点:反向代理是所有请求和响应的中转站,其性能可能会成为瓶颈。
4). IP负载均衡:在网络层通过修改请求目标地址进行负载均衡。
5). 数据链路层负载均衡:数据链路层负载均衡方式是指在通信协议的数据链路层修改mac地址进行负载均衡,又称为三角传输模式,直接路由方式。
使用三角传输模式的链路层负载均衡是目前大型网站使用最广泛的一种负载手段。在Linux平台最好的链路层负载均衡开源产品时LVS(Linux Virtual Server).
4. 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,
LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。
参考:http://www.ha97.com/5646.html
5. 负载均衡算法:
负载均衡服务器的实现可以分成两个部分:
a. 根据负载均衡算法和Web服务器列表计算得到集群中的一台Web服务器地址
b. 将请求数据发送到该地址对应的Web服务器上
具体的轮询算法有一下几种:
a. 轮询
b. 加权轮询:根据应用服务器硬件性能的情况,在轮询的基础上,按照配置的权重将请求分发到每个服务器,高性能的服务器能分配更多的请求。
c. 随机:请求被随机分配到各个应用服务器,在许多场合下,这种方案都很简单实用,因为好的随机数本身就很均衡。即使应用服务器硬件配置不同,也可以使用加权随机算法。
d. 最少连接:记录每个应用服务器长在处理的连接数(请求数),将新到的请求分发到最少连接的服务器上,应该说,这是最符合负载均衡定义的算法。同样,最少连接算法也可以实现加权最少连接。
e. 源地址散列:根据请求来源的IP地址进行Hash计算,得到应用服务器,这样来自同一个IP地址的请求总是在同一个服务器地址上,该请求的上下文信息可以存储在这台服务器上,在一个会话周期内重复使用,从而实现会话粘滞。
标签:
原文地址:http://www.cnblogs.com/Jtianlin/p/5136340.html