整本书分为很多章节,但是我只是简要说一下大概内容和总结的内容. 文末有本书的链接(我的QQ聊天链接) 我没有放在GitHub上,不过没关系啦,QQ传输的更快~~~
首先我把这本书拆分为十二个方面来描述
第一点 大型网站的架构系统的特点
现在我们熟悉的都是MVC的架构,什么是是MVC的架构?
就是web应用分为三层架构,每一层各司其职(貌似也不仅仅是web应用),现在大部分的网站(这里指的是大型网站,但是中小型的网站也已经实施分层的思想)都是使用这种思维和设计模式.但是这只是设计上的特点,还有其他特点,比如:
高并发,大流量 高可用 海量数据 用户分布广泛,网络情况复杂 安全环境恶劣需求快速变更,发布频繁 渐进式发展
以上的要素基本上就是大型网站的要点,
第二点 大型网站的架构演化发展历程
大型网站都是从小网站发展而来的
- 初始阶段 没有人访问 一台服务器就足够 上面拥有网站的所有架构和数据
- 发展阶段 随着业务的发展 一台服务器不能满足需要 这个时候是数据和应用分离
- 继续发展阶段 使用缓存改善网站的性能 降低服务器的压力
- 使用应用服务器集群处理高并发
- 数据库读写分离
- 反向代理和CND加速网站响应
- 使用分布式文件系统和分布式数据库
- 使用NoSQL和搜索引擎
- 业务拆分
- 分布式服务
第三点 大型网站的架构演化价值观
这个网站是做什么的?为什么做,怎么做?实现的方法以及企业文化等等都是可以是大型网站的演化价值观
也许有的网站是为了利益,有的是为了好玩,但是最终网站的走向和这些是分不开的
第四点 网站架构的误区
一味追求大企业的实践方案
这是非常不推崇的,因为那是别人的实践,对于他们的企业以及网站就是非常优秀的解决方案,但是对于我们自己的网站就一定好用,我们应该做的借鉴,而不是抄袭
为了技术而技术
怎么说的?杀鸡焉用宰牛刀,这句话完全诠释.我们要做的应该是刚刚好,资源不会不够或者浪费,
企图用技术解决所有问题
这里小猪童鞋要说,法律是技术,而案件就是问题,有时候法和情之间很难抉择,在这里也是一样的.
技术不是万能的,但是没有技术不行,有些应该是业务的架构,比如12306,此处不吐槽了.它的业务架构很复杂很复杂,比起来淘宝的双11来讲,淘宝的双十一抢购,二者各方都有专攻
淘宝是计算商品,而12306是计算路线,大家可以设想一下,我从A到Z,途径ABCD---XYZ,这个是一个完整的路途,12036是不是需要计算有没有这样的一个我不需要换座位的路线,如果有,直接给我,如有没有,就要开始计算,我到哪儿需要转车,而且在计算的过程中,又有很多人来买票退票,自然就很复杂,崩溃也就很正常.
第五点 大型网站的架构模式 (这个就字面意思 很好理解滴 本猪就不解释啦)
- 分层 MVC思想
- 分割
- 分布式
- 集群
- 缓存
- 异步
- 冗余
- 自动化
- 安全
第六点 大型网站核心架构要素(也是字面意思)
什么是架构:"最高层次的规划,难以改变的决定"
- 性能
- 可用性
就是不能经常挂掉,就算挂点也能很快跑起来 这里有个4个9以上的指标 就是一年的99.99%的时间是可以正常使用的 - 伸缩性
就是是否可以多台服务器构建集群,是否容易向集群中添加新的服务器或者去除不需要的服务器 - 扩展性
在网站新增产品或者业务的时候,或是网站下架某个业务的时候,是否会对整体的架构有很大的影响,时候这个业务挂掉,也不会影响整体的使用 - 安全性
第七点 网站的高性能架构:瞬时响应
1. 网站的性能测试
1.1 不同视角下的网站性能
a. 用户视角
b. 开发人员视角
c. 运维人员视角
1.2 性能测试指标
a. 响应时间
b. 并发数
c. 吞吐量
d. 性能测试器
1.3 性能测试方法
a. 性能测试
b. 负载测试
c. 压力测试
d. 稳定性测试(最大负载点.系统崩溃点等)
1.4 性能测试报告
1.5 性能优化策略
a. 性能分析
b. 负载优化
2. Web前端性能优化
1.1 浏览器访问优化
a. 减少HTTP请求
b. 使用浏览器缓存
c. 启用压缩
d. CSS放在最上面 JavaScript放在最下面
e. 减少Cookie的传输
1.2 CDN加速
1.3 反响代理
3. 服务器性能优化
1.1 分布式缓存
a. 缓存的原理
b. 合理修改缓存
注意点:
频繁修改的数据
没有热点的访问
数据不一致和脏读
缓存可用性
缓存预热
缓存穿透
c. 分布式架构缓存
d. 一些缓存的"大哥" Redis / Memcached
Memcached的特点
简单的通信协议
丰富的客户端程序
高性能的网络通信
高效的内存管理
互不通信的服务器集群架构
1.2 异步操作
1.3 使用集群
1.4 代码优化
a. 多线程
- 将对象设计为无状态对象
- 使用局部对象
- 并发访问资源时候使用锁
b. 资源复用
c. 数据结构
e. 垃圾回收
1.5存储性能优化
a. 机械硬盘 VS 固态硬盘
b. B+树 VS LSM树
c. RAID VS HDFS
第八点: 网站的高可用架构:万无一失
1.1 网站可用性的度量与考量
也就是4个9, 99.99%的时间可用 以及度量
分类 | 描述 | 权重 |
---|---|---|
事故级故障 | 严重故障,网站整体不可用 | 100 |
A类故障 | 网站访问不顺畅或核心功能不可用 | 20 |
B类故障 | 非核心功能不可用.或核心功能少数用户不可用 | 5 |
C类故障 | 以上之外的故障 | 1 |
故障分=故障时间(分)x故障权重
1.2 高可用的网站架构
MVC / 集群等
1.3 高可用的应用
a. 通过负载均衡进行无状态服务的失效转移
b. 应用服务器集群的Session管理
1.session的复制
2.session的绑定
3.利用cookie记录session
4.session服务器
1.4 高可用的服务
a. 分级管理
b. 超时设置
c. 异步调用
d. 服务降级
e. 幂等性设计
1.5 高可用的数据
a. CAP原理
1.数据持久性
2.数据可访问性
3.数据一致性
3.1数据强一致
3.2.数据用户一致
3.3数据最终一致
b. 数据备份
c. 失效转移
1.失效确认
2.访问转移
3.数据恢复
1.6 高可用网站的软件质量保证
a. 网站发布
b. 自动化测试
c. 预发布测试
d. 代码控制
1.主干开发.分支发布
2.分支开发,主干发布
e. 自动化发布
f. 灰度发布
1.7 网站运行监控 (不允许没有监控的系统上线)
a. 监控数据采集
1.用户行为日志
1.1服务器端日志收集
1.2客户端浏览器日志收集 (JavaScript脚本)
b. 服务器性能监控
c. 运行数据报告
e. 监控管理
1.系统报警
2.失效转移
3.自动优雅降级
第九点 网站的伸缩性架构:永无止境
网站架构的伸缩性设计
1.不同功能进行物理分离实现伸缩
2.单一功能通过集群规模实现伸缩
应用服务器集群的伸缩性设计
1.HTTP重定向负载均衡
2.DNS域名解析负载均衡
3.反向代理负载均衡
4.IP负载均衡
5.数据链路层负载均衡
6.负载均衡算法
6.1轮询
6.2加权轮询
6.3随机
6.4最少链接
6.5源地址散列
分布式缓存集群的伸缩性设计
a. Memcached分布式缓存集群的访问类型
b. Memcached分布式缓存集群的伸缩挑战
c. 分布式缓存的一致性Hash算法
d.数据存储服务器集群的伸缩性设计
1.关系型数据库集群的伸缩性设计
2.NoSQL数据库的伸缩性设计
第十点 网站的可拓展架构:随需应变
关键词:拓展性 伸缩性
1. 构建可拓展的网站架构
2. 利用分布式消息队列降低系统的耦合性
a.事件驱动架构
b.分布式消息队列
3. 利用分布式服务打造可复用的业务平台
a.Web Service与企业级分布式服务
b.大型网站分布式服务的需求要点
1.负载均衡
2.失效转移
3.高效的远程通信
4.整合异构系统
5.对应用最少侵入
6.版本管理
7.实时监控
c.分布式服务框架设计
d.可拓展的数据结构
e.利用开发平台建设网站生态圈
第十一点 网站的安全架构:固若金汤
1.道高一尺魔高一丈的网站应用攻击与防御
a.XSS攻击
b.注入攻击
c.CSRF攻击
d.其他攻击和漏洞攻击
1.Rrror Code
2.HTML注释
3.文件上传
4.路径遍历
e.Web应用防火墙 ModeSecurity(开源) NEC的SiteShell(收费)
f.网站安全漏洞扫描
2.信息加密技术以及密钥安全管理
a.单向散列加密 (MD5 / SHA)
b.对称加密(DES / RC)
c.非对称加密(RSA)
d.密钥安全管理
3.信息过滤与反垃圾
a.文本匹配
b.分类算法
c.黑名单
4. 电子邮件商务风险控制
a.风险
1.账户风险
2.卖家风险
3.买家风险
4.交易风险
b.风控
1.规则引擎
2.统计模型
第十二点 国内外大型网站的架构之路
这里内容很多,我辽这儿了先.有空来补全(其实也不是很多,核心都在上面十一点啦)
华丽的分割线 balabala