最近用了三天的时间把《大型网站技术架构》看完了,收获颇多。这本书主要讲了一个网站从小到大发展过程在技术架构上的需要注意的地方,这里简短地记录一下我的收获吧。
概述
第一篇概述主要从大型网站的架构演化、架构模式和核心构架要素三个方面对大型网站技术架构进行了一个综合性的概述。
大型网站架构演化发展历程主要经过以下几个阶段:
- 初始阶段的网站架构,能够跑来就行,所有的资源放在一个服务器上
- 应用服务和数据服务分离,随着需求的不断扩大,将应用和数据根据对硬件资源的要求不同分离成应用服务器、文件服务器和数据库服务器
- 使用缓存改善网站性能,根据二八定律把经常访问的一小部分数据缓存在内存中,减少对数据库访问的压力,改善网站性能
- 使用应用服务器集群改善网站的并发处理能力,通过负载均衡调度服务器,将请求分发到应用服务器集群中的任何一台服务器中
- 数据库读写分离,对数据库读的需求远大于写的需求,应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库
- 使用反向代理和CDN加速网站响应,CDN解决不同的地区其访问性能有较大差异的情况,反向代理是应用在应用服务器的一种缓存手段
- 使用分布式文件系统和分布式数据库系统,分布式数据库是网站数据库拆分的最后手段
- 使用 NOSQL和搜索引擎,提供对可伸缩性的更好支持
- 业务拆分
- 分布式服务
架构模式中讲了9种解决大型网站一系列问题的解决方案:
- 分层,将系统在横向维度上切分成几个部分,使得每一个部门负责的职能比较单一
- 分割,在纵向方面对软件进行切分,将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元
- 分布式,将分层和分割后的模块独立部署,达到处理更大的并发访问
- 集群,多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务
- 缓存,将数据存放在距离计算最近的位置以加快处理速度
- 异步,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作
- 冗余,为网站的高可用性提供保障
- 自动化,在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态
- 安全,互联网的开放特性使得其从诞生起就面对巨大的安全挑战
核心架构要素中讲了5个核心架构要素:
- 性能,访问的响应时间、TPS、系统性能计数器决定
- 可用性,高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用
- 伸缩性,通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求
- 扩展性,使网站能够快速响应需求变化,网站可伸缩架构的主要手段是事件驱动架构和分布式服务
- 安全性,保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取
导图
后面的内容比较多,我就整理成思维导图的形式吧
展开的高清大图可以看这里