天天看点

大型网站技术架构 读书笔记1 网站架构的演化和模式 网站架构的演化和模式

网站架构的演化和模式

  本读书笔记涉及书中的第一章——大型网站架构演变和第二章——大型网站架构模式。在架构演变这块,通过使用缓存、集群、分布式等手段实现网站架构的不断升级以应对业务需要。架构模式则分别介绍了网站架构中的一些常用的模式。

一 大型网站架构演化

  架构:最高层次的规划,难以更改的决定。

  软件架构:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

  由上述定义可知,网站架构的核心任务是通过应用该架构使得网站能实现既定的任务。这里的任务即包含系统功能需求,如收藏夹,购物车等;也包括核心架构要素,如系统性能,可用性等。

  而大型网站架构演化的根本原因则是随着并发量和流量访问增大带来的性能、可用性、安全性等非功能性需求问题。要知道,哪怕再简单的功能,随着并发访问量的增大,都会出现各种棘手的问题,这就十分考验网站架构。就如一个伟人说过,任何一个小问题,乘以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 分层

  分层:将系统在横向维度上切分成几个部分,每一个部分负责单一职能,然后通过上层对下层的依赖和调用组成一个完整的系统。

  网站系统的分层:

应用层 负责具体业务和视图展示,如网站首页及搜索的输入和结果展示
服务层 为应用层提供服务支持,如用户管理服务,购物车服务等
数据层 提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等

  优点:可以将一个庞大的软件系统切分成不同的部分,便于分工合作开发和维护;各层之间独立,只需维护调用接口不变即可

  挑战:需要合理规划层次边界和接口;开发过程中需要严格遵循分从架构的约束,禁止跨层次调用和逆向调用。

  说明:封层架构是逻辑上的,还可进一步划分,在物理部署上可以自由实现。

2.2 分割

  分割:在纵向方面对软件系统进行切分,一般按功能和服务进行分割。

  作用和功能:将不同功能和服务进行分割,包装成高内聚低耦合的模块单元,有助于软件开发和维护;便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力

  说明:分割粒度视网站规模和业务而定,以模块为单位。

2.3 分布式

  分布式:将软件系统部署按分层或模块部署在不同服务器上,通过网络带宽进行远程调用,实现软件系统的扩展。对于大型网站,分割和分层的一个主要目的就是为了切分后的模块便于焚无视部署——将不同模块部署在不同服务器上,通过远程调用协同工作。通过增加服务器数量解决高并发问题。

  分布式系统主要问题:

  1. 调用必须通过网络,可能影响性能;

  2. 加大服务器宕机概率,可能会影响网站可用性;

  3. 难以保证数据一致性;

  4. 导致网站依赖错综复杂,开发管理维护困难

  常用分布式方案:

  1. 分布式应用和服务

  2. 分布式静态资源:将JS、CSS、Logo图片等静态资源独立分布式部署,使用独立域名,实现动静分离

  3. 分布式数据和存储:会涉及到NoSQL产品

  4. 分布式计算:对于各种在线业务和后台业务进行处理。常用的Hadoop解决方案采用移动计算进行本地计算的方案。

  5. 分布式配置、分布式锁和分布式文件系统等

2.4 集群

  集群:在分布式情况下,使用多台服务器部署相同模块,并通过负载均衡设备共同对外提供服务。

  作用:1. 提高系统的性能,实现高并发处理;2. 提高系统可用性,实现系统可伸缩性。

2.5 缓存

  缓存:将数据放在举例计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段。除了加快访问速度外,还可以减轻后端应用和数据存储的负载压力。

  缓存的两大前提:1. 数据访问热点不均匀;2. 数据在某个时间段内有效

  主要的缓存设计:

  1. CDN:内容分发网络,部署在离用户最近的网络服务商,存储访问量最大的热点内容(静态资源),实现最快响应。

  2. 反向代理:属于网络前端架构

  3. 本地缓存:在应用服务器端存储热点数据,可存储数据有限

  4. 分布式缓存:使用分布式缓存集群,可以实现大量的缓存存储

2.6 异步

  异步:对于业务之间的消息传递不采用同步,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。同分层、分割、分布式一样,也是一种解耦手段。

  实现方式:服务器内使用**多线程共享内存队列,服务器集群间使用焚无视消息队列。异步架构的典型应用是生产者消费者模式。

  使用异步消息队列优点:

  1. 提高系统可靠性;

  2. 加快网站响应速度;

  3. 消除并发访问高峰

2.7 冗余

  作用:在服务器宕机的情况下保证网站可以继续运行。

  实现:1.冷备份:定期备份,存档保存;2.热备份:对数据库进行主从分离,实时同步

2.8 自动化

  作用:主要用于网站的发布和运维

  发布时应用场景:通过减少人为干预,使发布过程自动化可以减少故障。包括自动化代码管理、自动化测试、自动化安全检测和自动化部署。

  运行时应用场景:自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源。

2.9 安全

  网站在安全架构方面的模式:

  1. 身份认证:密码,手机校验码

  2. 加密

  3. 编码转化、过滤

  4. 风险控制

继续阅读