[笔记] 大型网站技术架构——核心原理与案例分析 [六]

6 永无止境:网站的伸缩性架构

6.1 网站架构的伸缩性设计

一般说来,网站的伸缩性设计可分为两类,一类是根据功能进行物理分离实现伸缩;一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。

6.1.1 不同功能进行物理分离实现伸缩

每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定的服务。具体可分为如下两种情况:

纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统的伸缩性。

横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。

6.1.2 单一功能通过集群规模实现伸缩

“当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车。”

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

负载均衡服务器:请求分发装置

实现负载均衡的基础技术不外以下几种:

6.2.1 HTTP重定向负载均衡

根据用户的HTTP请求计算一台真实的Web服务器地址,并将该Web服务器地址下乳HTTP重定向响应中(响应状态码302)返回给用户浏览器。

缺点是:浏览器需要两次请求服务器才能完成一次访问,性能较差;重定向服务器自身处理能力有可能成为瓶颈,整个集群的伸缩性规模有限;有可能使搜索引擎判断为SEO作弊。

6.2.2 DNS域名解析负载均衡

DNS域名解析负载均衡的优点是将负载均衡的工作转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦。

缺点是:DNS更新需要一定的时间;DNS负载均衡的控制权在域名服务商那里,网站无法对其做更多改善和更强大的管理。

大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负载均衡手段,即域名解析得到的一组服务器并不是实际提供Web服务的物理服务器,而是同样提供负载均衡服务的内部服务器,这组内部负载均衡服务器再进行负载均衡,将请求分发到真实的Web服务器上。

6.2.3 反向代理负载均衡

大多数反向代理服务器同时提供负载均衡的功能,管理一组Web服务器,将请求根据负载均衡算法转发到不同Web服务器上。

由于反向代理服务器转发请求在HTTP协议层面,因此也叫应用层负载均衡。优点是和反向代理服务器功能集成在一起,部署简单。缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。

6.2.4 IP负载均衡

在网络层通过修改请求目标地址进行负载均衡。

6.2.5 数据链路层负载均衡

在Linux平台上最好的二链路层负载均衡的开源产品是LVS(Linux Virtual Server)。

6.2.6 负载均衡算法

负载均衡服务器的实现可分为以下两部分:

  1. 根据负载均衡算法和Web服务器列表计算得到集群中一台Web服务器的地址
  2. 将请求数据发送到该地址对应的Web服务器上

具体的负载均衡算法通常有以下几种:

  • 轮询:所有请求被依次发到每台应用服务器上
  • 加权轮询:根据应用服务器硬件性能的情况,在轮询的基础上,按照配置的权重将请求发到每个服务器,高性能的服务器能分配到更多的请求
  • 随机
  • 最少连接:记录每个应用服务器正在处理的连接数(请求数),将新到的请求分发到最少连接的服务器上
  • 源地址散列:根据请求来源IP地址进行Hash计算,得到应用服务器,这样来自同一个IP地址的请求总是在同一个服务器上处理,该请求的上下文信息可以存储在这台服务器上,在一个会话周期内重复使用,从而实现会话粘滞

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

和所有服务器都部署相同应用的应用服务器集群不同,分布式缓存服务器集群中不同服务器中缓存的数据各不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须先找到缓存有需要数据的服务器,然后才能访问。这个特点会严重制约分布式缓存集群的伸缩性设计,因为新上线的缓存服务器没有缓存任何数据,而已下线的缓存服务器还缓存着网站的许多热点数据。

分布式缓存集群伸缩性设计的最主要目标:必须让新上线的缓存服务器对整个分布式缓存集群影响最小,也就是说新加入缓存服务器后应使整个缓存服务器集群中已经缓存的数据尽可能还可被访问到。

6.3.1 Memcached分布式缓存集群的访问模型

应用程序通过Memcached客户端访问Memcached服务器集群,Memcached客户端主要由一组API、Memcached服务器集群理由算法、Memcached服务器集群列表及通信模块组成。

6.3.2 Memcached分布式缓存集群的伸缩性挑战

由上节可知,在Memcached分布式缓存系统中,对于服务器集群的管理,路由算法至关重要,和负载均衡算法一样,决定着究竟该访问集群中的哪台服务器。

6.3.3 分布式缓存的一致性Hash算法

目的:使得新加入的服务器不影响大部分缓存数据的正确命中——>一致性Hash算法。

一致性Hash算法通过一个叫做一致性Hash环的数据结构实现KEY到缓存服务器的映射。

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

6.4.1 关系数据库集群的伸缩性设计

  • 数据库主从读写分离
  • 数据分库:不同业务数据表部署在不同的数据库集群上(限制是:跨库的表不能进行Join操作)
  • 数据表拆分

目前网站在线业务应用中比较成熟的支持数据分片的分布是关系数据库产品主要由开源的Ameoba和Cobar。

Cobar是一个分布式关系数据库访问代理,介于应用服务器和数据库服务器之间。

Cobar的伸缩有两种:Cobar服务器集群的伸缩和MySQL服务器集群的伸缩。

6.4.2 NoSQL数据库的伸缩性设计

以HBase为例:其主要依赖其可分裂的HRegion及可伸缩的分布式文件系统HDFS来实现伸缩性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值