大型网站之伸缩篇

112 阅读4分钟

网站的伸缩性架构(伸缩性)

绝大数网站都是渐进式成长的,在这个过程中最重要的技术是就是使用服务器集群,通过不断地向集群中添加服务器来增加整个集群的处理能力。

网站架构的伸缩性设计
网站的伸缩性设计分为两大类

  • 根据功能进行物理分离实现伸缩,即不同的服务器部署不同的服务,提供不同的功能。(前期 趋向于分层)
  • 单一功能通过集群实现伸缩,即集群内多台服务器部署相同的服务,提供相同的内容。(后期 在分层的基础上分割)

集群伸缩性可以细分为应用服务器集群伸缩性和数据服务集群伸缩性。

应用服务器集群的伸缩性设计

负载均衡是网站必不可少的基础技术手段,不但可以实现网站的伸缩性,同时还改善网站的可用性。
常见负载均衡的方法有

  • 利用Http重定向负载均衡,即利用nginx中的rewirte模块来实现。(客户端行为,不需要服务器转发响应,这种方法性能比较差)
  • DNS域名解析负载均衡,DNS负载均衡的控制权在域名服务商中,通常作为第一级负载均衡手段。(不需要服务器转发响应)
  • 反向代理负载均衡,即利用nginx中的upstream模块来实现(配置简单,但性能也有局限性,响应要通过反向代理服务器返回给客户端)
  • IP负载均衡,即利用网关服务器实现负载均衡(性能有提升,响应要通过网关服务器,受限于其网卡带宽)
  • 数据链路层负载均衡,在通讯协议的数据链路层修改mac地址进行负载均衡。(不需要服务器转发响应,最常见的是LVS)

负载均衡算法
轮询:所有请求被依次分发到每台应用服务器上,即每台服务器需要处理的请求数目都相同,适合于所有服务器硬件都相同的场景。
加权轮询:在轮询的基础上,按照配置的权重将请求分发到每个服务器,高性能的服务器能分配更多的请求。
随机:请求被随机分配到各个应用服务器,即使应用服务器配置不同,可以加权随机算法。(这种方法最常用)
最小连接:记录每一个应用服务器正在处理的连接数,将新的请求分发到最少连接的服务器,也支持加权最小连接。
源地址散列:对请求的IP地址进行hash计算,实现同一个IP地址的请求总在一个服务器上处理。(实现对有状态应用服务器高可用的一种方式)

分布式缓存集群的伸缩性设计

分布式缓存服务器集群中不同服务器中缓存的数据各不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理(服务器是不对等的),
必须先找到缓存有需要数据的服务器。

分布式缓存集群伸缩性设计的主要目标:
1.新上线的缓存服务器对整个分布式缓存集群影响尽肯能小
2.原有的缓存数据尽可能还能被访问

memcached分布式缓存访问模型
在这里插入图片描述
路由算法负责根据应用程序输入的缓存数据KEY计算得到对应的缓存服务器。(读写缓存对应的服务器)
借助分布式缓存的一致性Hash算法和虚拟节点(一台物理即通常虚拟成150)的思想,可以大大减少新节点的影响。
这样可以做到迁移尽可能少的数据。
在这里插入图片描述
一致性Hash算法可以根据不同的属性参数(通常是IP和端口号),生成一串不相同的Hash值,并将Hash值转换成0-2^32-1的整数,
不同范围的值由不同服务器进行处理。(B-C之间的由B处理)

数据存储服务器集群的伸缩性设计

a.关系数据库集群的伸缩性设计
MyCat,这个是基于阿里巴巴的Cobar方案优化而来,支持半自动化分片、join。
Cobar本身是一个分布式关系数据库访问代理,介于应用服务器和数据服务器之间。
数据库是对底层存储文件的抽象,而Mycat是对数据库的抽象。

b.NoSql数据库的伸缩性设计
以HBase为例,HBase的伸缩性主要依赖器可分裂的HRegion(原理是LSM树)以及可伸缩的分布式文件系统HDFS实现。

在这里插入图片描述