大型网站技术架构综述

由于最近经常用,于是开始把之前在其他平台写的文章搬到这里。并总结形成专辑,希望对大家有用。

1. 高可用架构的设计原则:网站高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。

2.伸缩性强架构的设计标准:衡量架构伸缩性的主要标准是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。

3.扩展性强架构的设计标准:衡量网站架构扩展性好坏的主要标准是在网站增加新的业务产品时,是否可以实现对现有产品的透明无影响,不需要任何改动或者很少的改动既有业务功能就可以上线新产品。不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。网站可扩展架构的主要手段是消息队列和分布式服务。

4. 任何一个大型网站都是从小网站发展而来的,开始的架构都很简单,甚至只有一台服务器,当出现性能问题是不断优化,最终发展成具有成千上万台服务器的规模。性能优化分为web前端性能优化、应用服务器性能优化、存储服务器性能优化。web前端优化包括浏览器加载、网站视图模型、图片服务、CDN服务等。主要优化手段有优化浏览器访问、使用反向代理、CDN等。应用服务器的主要优化手段有缓存(如memcached)、异步(如消息队列)、集群。


大型网站架构演化过程:一台服务器承载应用程序和数据、文件 => 数据和应用分离 =>使用缓存(本地缓存和远程缓存) => 应用服务器使用集群 => 数据库读写分离 => 使用反向代理和CDN => 数据分库 => 分布式数据库和分布式文件系统 => 使用Nosql数据库和搜索引擎 => 业务拆分 => 分布式服务。

5. 应用服务器的高可用架构设计主要基于服务无状态这一特性,这就需要单独存储用户的session信息。常用的方式有利用浏览器的cookie记录session以及使用session服务器集群。

6.保证数据高可用的主要手段是数据备份和失效转移机制。对于缓存服务器集群,应当通过逻辑或者物理分区的方式将整个网站的每个应用的缓存部署在多台服务器上,任何一台服务器宕机都只影响应用缓存的一部分数据,不会对应用性能和数据库负载造成太大影响。

7. CAP:系统的可用性、伸缩性和一致性。一般来说无法同时满足这3者,一般都会选择可用性和伸缩性,放弃强一致性。

8. 网站的伸缩性设计分为2类,一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能,后者是集群内的多台服务器部署相同的服务,提供相同的功能。其中单一功能的伸缩又可分为应用服务器集群伸缩性和数据服务器集群伸缩性。

9. 对于应用服务器集群伸缩性,需要把应用服务器设计成无状态的,即应用服务器不存储请求上下文信息,这样用户请求可以发送到集群中任意一台服务器处理,任意一台服务器处理结果都是相同的。应用服务器集群伸缩性通常有DNS域名解析负载均衡、反向代理负载均衡、IP负载均衡、链路层负载均衡。

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

11. 使用三角传输模式的链路层负载均衡是目前大型网站使用最多的负载均衡手段。例如Linux上的LVS。

12. 常用的负载均衡算法有轮询、加权轮询、随机、最少连接、源地址散列。

13. Memcached的伸缩性算法有余数Hash算法、一致性Hash环、带虚拟节点的一致性Hash环。余数Hash算法在增加一台服务器的情况下缓存命中失败的概率为N/(N+1)。一致性Hash算法具有较高的缓存命中率,增加一台服务器缓存命中失败的概率约为1/(N+1),但存在负载压力不均衡的问题,为了解决这个不均衡问题诞生了带虚拟节点的一致性Hash环。

14. 关系数据库的伸缩性设计中,主服务器将数据同步到从服务器,写操作主要在主服务器进行,读操作、数据分析操作主要在从服务器进行。可以借助Cobar进行数据库服务器的伸缩设计。

15. Nosql数据库的伸缩性设计,以HBase为例,主要借助于Hbase自身的HMaster、HRegionServer、HRegion等概念。通过Key查询HRegionServer地址以及HRegion,并最终获得数据。

16. 在大型网站中,各种模块通过分布式部署的方式,独立的模块部署在独立的服务器集群上,从物理上分离模块之间的耦合关系,进一步降低耦合性提高复用性。模块分布式部署以后具体的聚合方式有分布式消息队列和分布式服务。

17. 目前国内应用比较多的分布式服务框架是阿里巴巴的Dubbo。

18. 传统的关系数据库在创建表的时候需要指定字段名和类型,这种僵硬的数据结构难以面对需求变更带来的挑战。Nosql数据库在创建表的时候只需要指定ColumnFamily,可以在插入数据的时候再指定具体的字段名,通过这种方式数据表可以拥有数百万的字段,使得应用程序的数据结构可以随意扩展,很好的解决了数据结构的扩展性问题。

你可能感兴趣的:(大型网站技术架构综述)