网站架构的演化和模式
本读书笔记涉及书中的第一章——大型网站架构演变和第二章——大型网站架构模式。在架构演变这块,通过使用缓存、集群、分布式等手段实现网站架构的不断升级以应对业务需要。架构模式则分别介绍了网站架构中的一些常用的模式。
一 大型网站架构演化
架构:最高层次的规划,难以更改的决定。
软件架构:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
由上述定义可知,网站架构的核心任务是通过应用该架构使得网站能实现既定的任务。这里的任务即包含系统功能需求,如收藏夹,购物车等;也包括核心架构要素,如系统性能,可用性等。
而大型网站架构演化的根本原因则是随着并发量和流量访问增大带来的性能、可用性、安全性等非功能性需求问题。要知道,哪怕再简单的功能,随着并发访问量的增大,都会出现各种棘手的问题,这就十分考验网站架构。就如一个伟人说过,任何一个小问题,乘以13亿,都是一个大问题。如果一个公司像淘宝这样业务急速增长,那么网站架构演变则是一件不得不经历的过程。
1.1 大型网站软件系统的特点
1. 高并发、大流量
2. 高可用:不轻易宕机
3. 海量数据
4. 用户分布广泛、网络情况复杂:即使一个国家的不同地区,网络情况也千差万别
5. 安全环境恶劣:各种漏洞和信息泄露
6. 需求快速变更、发布频繁:敏捷开发
7. 渐进式发展:伴随着架构演化
1.2 大型网站架构演化发展历程
大型网站的技术挑战:庞大客户量、高并发访问和海量数据,这也是大型网站架构需要解决的问题。这里,从最简单的单机LAMP方案到提供完整体系的分布式集群方案,分十个历程进行说明。这一块最好看书,书上图文结合,通俗易懂,下面简单说明下。
1. 初始架构:使用LAMP方案,整个架构使用各种开源软件和一台服务器即可。操作系统使用Linux,应用程序使用PHP开发,并部署在Apache服务器上,数据库使用MySQL。
2. 将应用服务和数据服务分离:使用独立的文件服务器和数据库服务器部署数据。
3. 使用缓存:这里在应用服务器配置本地缓存,有需要的话建立独立的分布式缓存服务器缓存热点数据以提高性能。此时,应用服务器称为网站瓶颈。
4. 应用服务器集群:针对3的痛点,部署多台应用服务器并构成集群,使用一台独立的负载均衡服务器在前端进行请求分发操作。
5.数据库读写分离:对于关系型数据库,可以使用主从模式,对数据库进行读写分离,从而加快响应速度。
6. 反向代理和CDN:这里也是使用缓存,不过是将缓存部署在前端。其中,CDN位于网络提供商机房,离用户最近;反向代理位于网站中心机房,在结构上位于负载均衡服务器前端。
7. 分布式系统:对6中的文件系统和数据库系统使用分布式部署,以实现更大的文件存储能力。
8. NoSQL和搜索引擎:在应用服务器中加入统一数据访问模块,采用非关系数据库和非数据库查询技术以实现对数据存储和检索的更高要求。
9. 业务拆分:将网站拆分成不同应用,应用间采用超链接建立关系,使用消息队列进行数据分发。
10.分布式服务:将共同使用的业务独立部署,并使用专门的消息队列服务器进行业务调用。
到第十步时,整个网站架构已经相当复杂,需要其架构师具有很好的驾驭能力。应用得当,能解决网站中大部分技术问题。
1.3 其他
大型网站架构技术的核心价值是随网站所需灵活应对。需求本身比技术重要,发现、提出并合理解决需求比炫技重要的多。
驱动大型网站技术发展的主要力量是网站的业务发展:是业务成就了技术,是事业成就了人。按照吴军博士的观点:去站在风口。
二 大型网站架构模式
模式:每一个模式描述了一个在我们周五不断重复发生的问题及该问题解决方案的核心。这样,可以对该方案进行复用而无需重复工作。模式的关键在于模式的可重复性,问题和场景的可重复性带来的解决方案的可重复使用。
网站架构中有一些模式被许多大型网站一再验证,通过对这些模式的学习,我们可以掌握大型网站架构的一般思路和解决方法,以指导架构设计。
2.1 分层
分层:将系统在横向维度上切分成几个部分,每一个部分负责单一职能,然后通过上层对下层的依赖和调用组成一个完整的系统。
网站系统的分层:
应用层 | 负责具体业务和视图展示,如网站首页及搜索的输入和结果展示 |
---|---|
服务层 | 为应用层提供服务支持,如用户管理服务,购物车服务等 |
数据层 | 提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等 |