内容梳理
1.1 大型网站软件系统的特点
与传统企业应用系统相比,大型互联网应用系统的特点:
高并发,大流量:网站在线用户数、日访问次数过亿,需要解决高并发用户、大流量访问等问题。
高可用:保证系统7*24不间断提供可用服务。
海量数据:存储、管理用户、网站等海量相关数据。
用户分布广泛,网络情况复杂:为全球用户提供服务。
安全环境恶劣:有效应对黑客攻击。
需求快速变更,发布频繁:用户需求不断变更,新版本发布频繁。
渐进式发展:从小网站开始渐进演化发展成大型网站。
1.2 大型网站架构演化发展历程
用户从零到亿,数据从零到以p计
1.2.1 初始阶段的网站架构
特点:应用程序、数据库、文件等所有资源都在一台服务器上,使用LAMP技术。
1.2.2 应用服务与数据服务分离
解决的问题:一台服务器上难以完成系统所有服务
特点:用户请求增多,需要存储的数据量增大,将应用和数据分离。分别使用应用服务器(计算密集型,大量CPU消耗)、文件服务器(大容量硬盘)和数据服务器(检索速度快+缓存),不同服务器承担不同角色,对硬件要求不同。
1.2.3 使用缓存改善网站性能
解决的问题:解决数据访问压力
特点:网站访问同样遵循二八定律,将访问频繁的小部分数据进行缓存。主要有应用服务器中的本地缓存和分布式缓存服务器中的远程缓存。本地缓存速度快,但分布式集群中缓存服务不受内存容量限制。
1.2.4 使用应用服务器集群改善网站的并发处理能力
解决的问题:高并发请求和访问 。
特点:增加应用服务器数量,构建应用服务器集群,通过负载均衡调度服务器将用户访问请求分发到不同的应用服务器中,实现系统的可伸缩性。
1.2.5 数据库读写分离
解决的问题:读操作缓存命中率低情况下和全部写操作,使数据库负载压力过高。
特点: 数据库读多写少时,由于读写冲突、锁机制等需要使用主从数据库实现读写分离。所有读操作在从数据库上执行;写操作再主数据库上执行,再将数据同步到从数据库中。
1.2.6 使用反向代理和CDN加速网站响应
解决的问题:提高网站的响应速度。
特点:两种均使用缓存机制,CDN(内容分发网络)将缓存的资源部署在网络运营商机房,用户可以从距离自己最近的运营商机房中获取数据;反向代理将资源部署在网站中心的反向代理服务器中,请求发出后首先访问反向代理服务器,命中则直接返回。
既提高系统响应速度,也减轻后端服务器负载压力。
1.2.7 使用分布式文件系统和分布式数据库系统
解决的问题:读写分离的数据库不能满足网站业务持续增长的需求。
特点:分布式数据库拆分是最后手段,最常用的数据库拆分方法是业务分库,将不同业务的数据库部署到不同的物理服务器上。
1.2.8 使用NoSQL和搜索引擎
解决的问题:网站业务越来越复杂,数据存储和检索的需求也越来越复杂。
特点:使用非关系型数据库(NoSQL)和非数据库查询技术(搜索引擎),支持可伸缩的分布式特性,应用服务器使用同一接口访问各种数据。
1.2.9 业务拆分
解决的问题:网站业务场景日益复杂。
特点:将网站拆分成不同应用,每个应用独立部署维护。应用之间通过超链接建立关系、通过消息队列进行数据分发、通过访问同一数据存储系统关联起来。
1.2.10 分布式服务
解决的问题:业务规模越来越小,存储规模越来越大,整体复杂度指数级增长,部署困难。
特点:将应用系统中公共业务提取出来独立部署,通过分布式服务调用公共业务服务完成具体业务操作。
1.3 大型网站架构演化的价值观
1.3.1 大型网站架构技术的核心价值是随网站所需灵活应对
随着网站业务的发展逐步扩大网站规模。
1.3.2 驱动大型网站技术发展的主要力量是网站的业务发展
业务成就技术,创新的业务发展模式对网站架构提出更高的要求,要先梳清网站的业务问题,不要盲目仿照互联网成功案例生搬硬套。
1.4 网站架构设计误区
1.4.1 一味追随大公司解决方案
不要盲从,深入分析自己网站的业务问题,选择适合的解决方案。
1.4.2 为了技术而技术
技术是为业务服务的,不要一味追求新技术,要以解决业务问题的实际选择合适的技术方案。
1.4.3 企图用技术解决所有问题
业务的问题也可以通过业务的手段解决,分析业务实际需求,及时作出调整。
本章结构