六、永无止境:网站的伸缩性架构(大型网站技术架构原理)

  6.1 网站架构的伸缩性设计

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

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

  网站发展早期---通过增加服务器提高网站处理能力时,新增服务器总是从现有服务器中分离出部分功能和服务。如下图

  

 ·  每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定服务。通过物理上分离不同的网站功能,实现网站伸缩性的手段,不仅可以用在网站发展早期,而且可以在网站发展的任何阶段使用。

   具体分为:

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

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

  

   横向分离的粒度可以非常小,甚至可以一个关键网页部署一个独立服务,比如对于电商网站非常重要的产品详情页面,商铺页面,搜索列表页面,每个页面都可以独立部署,专门维护。

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

    将不同功能分离部署可以实现一定程度的伸缩性,随着网站访问量的逐步增加,即使分离到最小粒度的独立部署,单一的服务器也不能满足业务规模的要求。因此必须使用服务器集群,即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。

    以搜索服务器为例,如果一台服务器可以提供每秒 1000 次的请求服务,即 QPS(Query Per Second) 为 1000。那么如果网站高峰时每秒搜索访问量为 10000,就需要部署 10 台服务器构成一个集群。若以缓存服务器为例,如果每台服务器可缓存 40GB 数据,那么要缓存 100GB 数据,就需要部署 3 台服务器构成一个集群。计算一个服务的集群规模,需要同时考虑其对可用性、性能的影响及关联服务集群的影响。

    具体来说,集群伸缩性又可分为应用服务器集群伸缩性和数据服务器集群伸缩性。这两种集群由于对数据状态管理的不同,技术实现也有非常大的区别。

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

    6.2.1 http 重定向负载均衡

    6.2.2 dns域名解析负载均衡

    6.2.3 反向代理负载均衡

    6.2.4 ip负载均衡

    6.2.5 数据链路层负载均衡

    6.2.6 负载均衡算法

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

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

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

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

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

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

    6.4.2 nosql 数据库的伸缩性设计

  6.5 小结

原文地址:https://www.cnblogs.com/veggiegfei/p/10469825.html