大型网站架构的归纳总结
一、大型网站架构演化发展历程:
1、初始阶段的网站架构:应用程序、数据库、文件等资源均在同一台服务器上。
2、应用服务和数据服务分离
3、使用缓存改善网站性能
4、使用应用服务器集群改善网站的并发处理能力
5、数据库读写分离
6、使用反向代理和CDN加速网站响应()
7、使用分布式文件系统和分布式数据库系统
8、使用NoSQL和搜索引擎
9、业务拆分
10、分布式服务
二、大型网站架构模式:
1、分层:将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。挑战:必须合理规划层次边界和接口,禁止跨层次的调用和逆向调用。
2、分割:将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。
3、分布式:使用更多的计算机完成同样的功能,能够处理的并发访问和数据量就越大。
4、集群:多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
5、缓存:将数据存放在距离计算最近的位置以加快处理速度。
A、CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,它缓存网站的一些静态资源,可以就近以最快速度返回给用户。
B、反向代理:当用户请求到达网站的数据中心时,最先访问的就是反向代理,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。
C、本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。
D、分布式缓存:将数据专门存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。
缓存使用的前提条件:数据访问热点不均衡,某些数据会被频繁的访问。数据在某个时间段内有效,不会很快过期。
6、异步:业务之间的消息传递,不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。
作用:提高系统可用性,加快网络响应速度,消除并发访问高峰。
7、冗余:服务和应用的服务器冗余部署,数据库冗余备份。
8、自动化:发布过程自动化、自动化代码管理、自动化测试、自动化安全检测、自动化部署、自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源。
9、安全:密码和手机校验码、数据加密、验证码、网络攻击、垃圾敏感数据过滤、风险控制。
三、大型网站核心架构要素
1、高性能:从用户浏览器到数据库,影响用户请求的所有环节都可以进行性能优化。
在客户浏览器端,可以通过浏览器缓存、页面压缩、合理布局页面、减少Cookie传输等手段改善性能。可以使用CDN,使用户通过最短访问路径获取数据。可以部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力。
在应用服务器端,可以使用服务器本地缓存和分布式缓存,可以通过异步操作将用户请求发送至消息队列等待后续任务处理。可以将多台应用服务器组成一个集群共同对外提供服务。
在代码层面,可以通过多线程、改善内存管理等手段优化性能。
在数据库服务器端,优化索引、缓存、SQL语句、使用NoSQL。
2、可用性:网站高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份。任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
对于应用服务器,多台应用服务器通过负载均衡设备组成一个集群共同对外提供服务。
对于存储服务器,对数据进行实时备份,当服务器宕机时,需要将数据访问转移到可用的服务器上,并进行数据恢复。
3、伸缩性:指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备,就可以向集群中不断加入服务器。
对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,需要改进缓存路由算法保证缓存数据的可访问性。
对于关系数据库,虽然支持数据复制主从热备等,但很难做到大规模集群的可伸缩性,可通过路由分区等手段将部署有多个数据库的服务器组成一个集群。
对于NoSQL数据库产品,其先天就是为海量数据而生,对伸缩性的支持通常都非常好。
4、扩展性:网站的扩展性架构直接关注网站的功能需求。网站的可扩展架构的主要手段是:事件驱动架构和分布式服务。
事件驱动架构,在网站通常利用消息队列实现,将用户请求和其他业务事件构造成消息发布到消息队列,消息的处理者作为消费者从消息队列中获取消息进行处理。通过这种方式,可以透明地增加新的消息生产者任务,或新的消息消费者任务。
分布式服务,将业务和可复用服务分享开来,通过分布式服务框架调用。新增产品可以通过调用可复用的服务实现自身的业务逻辑,而对现有产品没有任何影响。
5、安全性:网站的安全架构,就是保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取。