本系列来源于《大型网站技术架构:核心原理与案例分析》学习笔记总结,本文为本书“第1篇 概述”的总结。
介绍《大型网站技术架构:核心原理与案例分析》的全书结构
第一部分概述的主题内容:大型网站架构演化、架构模式、架构要素
笔记为知识点摘要、总结,对于知识结构的总结
作为一个非技术出身的项目经理,工作中遇到的各类技术问题往往是困扰我们的一个大问题。对于这个问题,除了在工作中频繁与技术同事沟通,项开发的同事学习之外,也需要自己在工作之余不停的补充相关技术知识,能够做到听懂同事在说什么,从逻辑上理解他们的解决方案。项目中经常涉及系统架构,阅读、协助撰写架构文档。最近的一个项目是需要为客户开发一个中型网站,了解网站相关的架构知识,是学习这本书的目标。
全书结构
本书从结构上来说主要分为以下三个部分:
概述大型网站的架构演化、模式和要素
详述大型网站的高性能架构、高可用架构,伸缩性架构、可扩展架构和安全架构
案例分析:淘宝、维基百科、Doris、网购秒杀和大型网站典型故障案例分析
架构师的领导艺术、职场攻略等
我的学习和笔记的重点集中在第一和第二部分及第三部分的几个案例。
第1篇 概述
本篇宗要介绍大型网站架构的演进历程,构架的基本模式和核心要素。
1 大型网站架构演化
1.1 大型网站软件系统的特点
高并发,大流量
高可用
海量数据
用户分布广泛,网络情况复杂
需求快速变更,发布频繁
渐进式发展
1.2 大型网站架构演化发展历程
大型网站架构的演化历程基本经历从小到大,从多到少,从简单到复杂的过程。根据业务的需求和企业的实际情况选择需要的架构模式
1.3 大型网站架构演化的价值观
在网站还很小的时候就去追求网站的架构师舍本逐末,得不偿失的。大型网站架构技术的核心价值是随网站所需灵活应对,遵循从无到有,从小到大,慢慢演化。驱动大型网站技术发展的主要力量是网站的业务发展。
1.4 网站架构设计误区
一味追随大公司的解决方案
为了技术而技术
企图用技术解决所有问题:业务问题也可以通过业务的方式解决
2 大型网站架构模式
2.1 网站架构模式
本书中网站的架构模式介绍的主要有:分层、分割、分布式、集群、缓存、异步、冗余、自动化、安全
1. 分层
将系统在横向维度切分,每个维度负责体格相对单一的职责,然后通过上层对下层的一开和调用组成一个完整的系统。大型网站架构讲系统分成应用层,服务层,数据层。
优点:便于分工开发和维护,保持独立性
挑战:合理规划层次边界和接口,禁止跨层次的调用和逆向调用。
2. 分割
纵向切分,包装成高内聚低耦合的模块单元
3. 分布式
将不同模块部署在不同的服务器上,通过远程调用协调工作,使用更多计算机完成同样的功能
4. 集群
多台服务器部署相同应用构成一个集群,通过负载均衡设备供图对外提供服务。
5. 缓存
缓存是改善软件性能的第一手段,方法有如下几种:
CDN:内容分发网络,部署在距离终端用户最近的网络服务商,缓存网站的一些静态资源
反向代理:部署在网站的前端,当用户请求到达网站的数据中心时,最先访问反向代理,缓存静态资源
本地缓存:应用服务器本地缓存热点数据
分布式缓存:数据量庞大,本地缓存内存不足,将数据缓存在一个专门的分布式缓存集群中
6. 异步
异步是将一个业务的操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。
异步消息队列还有如下特性:
提高系统可用性
加快网站响应速度
消除并发访问高峰
7. 冗余
数据冗余备份:
冷备份:数据库定期备份
热备份:数据库主从分离
8. 自动化
主要集中在发布、运维方面
自动化发布
自动化监控
9. 安全
互联网的开放特性使得在网站架构上有很多安全机制
3 大型网站核心架构要素
除了当前的系统功能需求外,软件架构还需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构。
3.1 性能
对于用户来说,一个网站的性能是非常重要的指标。用户无法忍受反应慢的网站。优化网站性能的手段有:
浏览器:浏览器缓存,页面压缩,合理布局页面,减少cookie传输
CDN
本地缓存和分布式缓存
异步操作
集群服务器
代码层面可以使用多线程、改善内存管理等手段优化性能
数据库服务器端,索引、缓存、SQL优化等手段,或NoSQL
衡量网站性能的指标:
响应时间
TPS,QPS等
系统性能计数器
3.2 可用性
高可用设计的目标就是当服务器宕机的时候,服务或应用依然可以使用。
网站高可用的主要手段是冗余。
应用服务器,多台服务器通过负载均衡组成一个集群,任何一台服务器宕机,只需把请求切换到其他服务器就可以实现高可用。
存储服务器,对数据进行实时备份
3.3 伸缩性
伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
3.4 扩展性
衡量网站架构扩展性好坏的主要标准就是在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。
网站可伸缩架构的主要手段是事件驱动架构和分布式服务。
事件驱动架构在网站通常利用消息队列实现,消息的处理者作为消费者从消息队列中获取消息进行处理。
分布式服务则是将业务和可服用服务分离开来,通过分布式服务框架调用
3.5 安全性
衡量网站安全架构的标准就是针对现存和潜在的各种攻击和窃密手段,是否有可靠的应对策略。