《大型网站技术架构》笔记 - 概述篇
第一章 大型网站架构演化
1.1 大型网站软件系统的特定
- 高并发、大流量
- 高可用
- 海量数据
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
1.2 大型网站架构演化发展历程
应用服务与数据服务在同一台机器 –> 应用服务与数据服务分离 –> 使用缓存改善网站性能 –> 使用应用服务集群改善网站的并发处理能力 –> 数据库读写分离 –> 使用反向代理和CDN加速网站响应 –> 使用分布式文件系统和分布式数据库系统 –> 使用NoSQL和搜索引擎 –> 业务拆分 –> 分布式服务
网站使用的缓存分为:应用服务器上的本地缓存和专门的分布式缓存服务器上的远程缓存。
为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。
CDN 与 反向代理
CDN 与 反向代理 都用于加速网站访问,本质上都是缓存。
CDN 部署在网络提供商的机房,用户请求网站服务时,从距离自己最近的网络提供商机房获取数据。
反向代理部署在网站的中心机房,用户请求首先访问的是反向代理服务器,如果反向代理服务器缓存着用户请求的资源,就将其直接返回给用户。
使用 CDN 与 反向代理 的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的压力。
大型网站架构技术的核心价值就是随网站所需灵活应对。
驱动大型网站技术发展的主要力量是网站的业务发展。
是业务成就了技术,是业务成就了人。
1.3 网站架构设计误区
- 也为追求大公司的解决方案
- 为了技术而技术
- 企图用技术解决所有问题
- 技术是用来解决业务问题的,而业务的问题,也可以通过业务的手段去解决。
第二章 大型网站架构模式
模式描述了一个不断重复发生的问题及该问题解决方案的核心。
模式的关键在于模式的可重复性,问题与场景的可重复性爱来解决方案的可重复使用。
网站架构模式
- 分层:最初目的是规划软件清晰的逻辑结构便于开发维护,对网站支持高并发向分布式方向发展至关重要。是对软件的横向切分。
- 分割:将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。是对软件的纵向切分。
- 分布式:分层和分割的一个主要目的是为了切分后的模块便于分布式部署。
- 集群:多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。当某台服务器发生故障时,负载均衡设备或系统的失效转移机制将请求转发到其他机器上。
- 缓存:使用缓存有两个条件:数据访问热点不均衡;数据在某个时间段内有效,不会很快过期。
- 异步:可降低系统耦合度,提供系统可用性,加快网站响应速度,消除并发访问高峰。
- 冗余:冷热备份、灾备数据中心。
- 自动化:
- 安全:
山寨与创新的最大区别不在于是否抄袭,是否模拟,而在于对问题和需求是否真正理解与把握。
第三章 大型网站核心架构要素
架构是最高层次的规划,难以改变的决定,这些规划和决定奠定了事务未来的发展方向和最终的蓝图。
维基百科:软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
系统的重要组成部分及其关系构成了系统的架构。
软件架构 5 要素:性能、可用性、伸缩性、扩展性、安全性。
- 性能:任何软件架构设计方案都必须考虑可能会带来的性能问题。影响用户请求的所有环节都可以进行性能优化。
- 可用性:网站高可用的主要手段是冗余。
- 伸缩性:衡量架构伸缩性的主要标准就是是否可以用多台服务器架构集群,是否容易向集群中添加新的机器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的机器数量是否有限制。
- 扩展性:网站的扩展性架构直接关注网站的功能需求。网站可扩展的主要手段是事件驱动和分布式服务。
- 安全性: