本书从性能、可用性、伸缩性、扩展性、安全性几个网站核心架构要素切入,全面地介绍了这些核心要素面临的问题域、理论基础及应对方案;对这几个方面进行系统地分析,结合目前成熟的解决方案,以及作者自己的工作经验,理论联系实际,踏实细致地提出合理的解决方案,非常值得我们学习和借鉴。
1.大型网站架构演化
大型网站软件系统的特点
高并发,大流量;海量数据;高可用;用户分布广泛,网络情况复杂;安全环境恶劣;需求快速变更,发布频繁;渐进式发展。
发展历程
1.初始阶段的网站架构,只需要一台服务器;
2.应用服务和数据服务分离,使用应用服务器,数据库服务器和文件服务器;
3.使用缓存改善网站性能;
4.使用应用服务器集群改善网站的并发处理能力;
5.数据库读写分离;
6.使用反向代里和CDN加速网站响应;
7.使用分布式文件系统和分布式数据系统;
8.使用NoSQL和搜索引擎;
9.业务拆分,将网站业务分发成不同的产品线,根据产品线将一个网站拆分成不同的应用;
10.分布式服务。
大型网站最终的分布式服务架构如下图所示:
大型网站架构演化的价值观
核心价值是随网站所需灵活应对;驱动力是网站的业务发展。
网站架构设计误区
一味追随大公司的解决方案,注重学习借鉴而不是盲从;
企图用技术解决所有问题,比如业务的问题可以用业务的手段区解决;
为了技术而技术,技术要和业务很好的结合,技术选型和架构设计很重要。
2.大型网站架构模式
网站架构模式
为了解决大型网站面临的高并发访问、海量数据处理、高可靠运行等一系列问题与挑战,大型互联网公司在实践中提出了许多解决方案,以实现网站高性能、高可用、
易伸缩、可扩展、安全等各种技术架构目标。这些解决方案又被更多网站重复使用,从而逐渐形成大型网站架构模式。
1.分层:将系统在横向维度上切分成几个部分,每个部分负责单一的职责。必须合理规划层次边界和接口,禁止跨层次的调用和逆向调用。
2.分割:纵向对软件进行切分,包装成高内聚低耦合的模块。
3.分布式:对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完成同样的功能,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。但分布式在解决网站高并发问题的同时也带来了其他问题。首先,分布式意味着服务调用必须通过网络,这可能会对性能造成比较严重的影响;其次,服务器越多,服务器宕机的概率也就越大,一台服务器宕机造成的服务不可用可能会导致很多应用不可访问,使网站可用性降低;另外,数据在分布式的环境中保持数据-致性也非常困难,分布式事务也难以保证,这对网站业务正确性和业务流程有可能造成很大影响;分布式还导致网站依赖错综复杂,开发管理维护困难。因此分布式设计要根据具体情况量力而行,切莫为了分布式而分布式。常见的分布式方案:分布式应用和服务;分布式静态资源;分布式数据和存储;分布式计算;分布式配置;分布式锁;分布式文件系统。
4.集群:多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
5.缓存:
CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务商那里,在这里缓存网站的一-些静态资源(较少变化的数据),可以就近以最快速度返回给用户,如视频网站和广]户网站会将用户访问量大的热点内容缓存在CDN。
反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。
本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。
分布式缓存:大型网站的数据量非常庞大,即使只缓存一-小部分,需要的内存空间也不是单机能承受的,所以除了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。
使用缓存有两个前提条件,一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;二是数据在某个时间段内有效,不会很快过期,否则缓存的数据就会因已经失效而产生脏读,影响结果的正确性。网站应用中,缓存除了可以加快数据访问速度,还可以减轻后端应用和数据存储的负载压力,这一点对网站数据库架构至关重要,网站数据库几乎都是按照有缓存的前提进行负载能力设计的。
6.异步:用于系统的解耦。将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。能够提高系统可用性,消除并发访问高峰以及加快网站响应速度。
7.冗余:通过冗余实现服务高可用。
8.自动化
9.安全