1,网站架构的伸缩性设计
一般说来,网站的伸缩性设计可分为两类,一类是根据功能进行物理分离实现伸缩;一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。
1)不同功能进行物理分离实现伸缩
每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定的服务。具体可分为如下两种情况:
纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统的伸缩性。
横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。
2)单一功能通过集群规模实现伸缩
“当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车。”
2,应用服务器集群的伸缩性设计
1)HTTP重定向负载均衡
HTTP重定向服务器是一台普通的应用服务器,其唯一的功能就是根据用户的HTTP请求计算一台真实的Web服务器地址,并将该Web服务器地址写入HTTP重定向响应中返回给用户浏览器。
缺点是:浏览器需要两次请求服务器才能完成一次访问,性能较差;重定向服务器自身处理能力有可能成为瓶颈,整个集群的伸缩性规模有限;有可能使搜索引擎判断为SEO作弊。
2)DNS域名解析负载均衡
每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回,这样A记录中配置的多个服务器就构成一个集群,并可以实现负载均衡。
DNS域名解析负载均衡的优点是将负载均衡的工作转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦。
缺点是:DNS更新需要一定的时间;DNS负载均衡的控制权在域名服务商那里,网站无法对其做更多改善和更强大的管理。
大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段,即域名解析得到的一组服务器并不是实际提供Web服务的物理服务器,而是同样提供负载均衡服务的内部服务器,这组内部负载均衡服务器再进行负载均衡,将请求分发到真实的Web服务器上
3)反向代理负载均衡
大多数反向代理服务器同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不同Web服务器上。
由于反向代理服务器转发请求在HTTP协议层面,因此也叫应用层负载均衡。优点是和反向代理服务器功能集成在一起,部署简单。缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。
4)IP负载均衡
在网络层通过修改请求目标地址进行负载均衡。其在内核进程完成数据分发,较反向代理负载均衡(在应用程序中分发数据)有更好的处理性能,但受限于负载均衡服务器的网卡贷款。
5)数据链路层负载均衡
在通信协议的数据链路层修改mac地址进行负载均衡,又叫做三角传输模式。负载均衡数据分发过程中不修改IP地址,只修改目的mac地址,通过配置真是物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一致,从而达到不修改数据包的源地址就可以进行数据分发的目的。这种负载均衡方式又称直接路由方式DR
在Linux平台上最好的二链路层负载均衡的开源产品是LVS(Linux Virtual Server)
6)负载均衡算法
轮询:所有请求被一次分发到每台应用服务器上
加权轮询:按照配置的权重将请求分发到每个服务器,高性能的服务器能分配更多请求。
随机:请求随机分配到各个服务器
最小链接:记录每个应用服务器正在处理的连接数,将新到的请求分发到最少连接的服务器上
源地址散列:根据请求来源的IP地址进行Hash计算,得到应用服务器,这样来自同一个IP地址的请求总在同一个服务器上处理,请求的上下文信息可以存储在这台服务器上,实现会话粘滞。
3,分布式缓存集群的伸缩性设计
1)Memcached分布式缓存集群的访问模型
应用程序输入需要写缓存的数据<K,V>,API将K输入路由算法模块,路由算法根据K和Memcached集群服务器列表计算得到一台服务编号NODE1,静儿得到该机器的IP地址和端口。API调用通信模块和编号为NODE1的服务器通信,将数据<K,V>写入服务器,完成缓存写操作;
读缓存使用同样的路由算法和服务器列表,通过K值访问相同的服务器去读取相同的缓存。
2)路由算法:
简单的使用余数Hash:用服务器数目初一缓存数据KEY的Hash值,余数为服务器列表下标编号
一致性Hash算法:构造一个长度为0~2^32的整数环,根据节点名称的Hash值,将缓存服务器节点放置在这个Hash环上,然后根据需要缓存的数据的Key值计算得到其Hash值,然后再Hash环上顺时针查找距离这个Key的Hash值最近的缓存服务器节点,完成Key到服务器的Hash映射查找
4,数据存储服务器集群的伸缩性设计
1)关系数据库集群的伸缩性设计
数据库主从读写分离
数据分库:不同业务数据表部署在不同的数据库集群上(限制是:跨库的表不能进行Join操作)
数据表拆分
目前网站在线业务应用中比较成熟的支持数据分片的分布是关系数据库产品主要由开源的Ameoba和Cobar。
Cobar是一个分布式关系数据库访问代理,介于应用服务器和数据库服务器之间。
Cobar的伸缩有两种:Cobar服务器集群的伸缩和MySQL服务器集群的伸缩。
2)NoSQL数据库的伸缩性设计
以HBase为例:其主要依赖其可分裂的HRegion及可伸缩的分布式文件系统HDFS来实现伸缩性