序
- 书籍是人类进步的阶梯,字里行间传达的是做者缜密的态度、思惟的火花。盛世繁华之下,太多的人都伴随着有生活的窘迫、工做的无奈以及情感的羁绊,烦躁之余不妨读一本书,放下不快,或许能给你带来思惟的拓展、情感的愉悦以及心里的宁静,在此感谢《大型网站技术架构》的做者的分享。私觉得,互联网技术迭代突飞猛进,但核心架构理念是很是值得学习的,愿好书有更多人学习参考,谨以此笔记分享 😃
1、大型网站架构技术演化
- 核心:技术的更新是由于业务的发展,技术是来解决业务问题的
- 误区:技术不能解决全部问题,业务问题须要经过业务手段来解决
- 要素:性能、可用性、伸缩性、扩展性、安全性这五个特性间的关系须要进行平衡处理
平衡策略
性能算法
- 衡量性能的通常指标:
- 响应时间
- TPS(TransctionPerSecond,每秒系统可以处理的交易或事务的数量)
- 系统性能计数器
-
客户端:sql
- 浏览器缓存、页面压缩、减小Cookie传输、合理布局页面
- 使用 CND加速,静态资源分发至离用户最进的网络服务商机房,同时在网站机房部署反向代理服务器,缓存热点文件,加快请求相应速度,减轻应用服务器负载压力
-
服务端:数据库
- 服务器本地缓存和分布式缓存
- 异步操做,将用户请求发送至消息队列等待后续任务处理,当前请求直接返回响应给用户
- 高并发状况下,将多台应用服务器组成一个集群共同对外服务,提升总体处理能力,改善性能
- 代码中,使用多线程、改善内存管理等手段优化性能
-
数据库服务端:浏览器
- 索引、缓存、SQL优化
- 使用 NoSQL,经过优化数据模型、存储结构、伸缩特性等手段
可用性缓存
- 衡量标准:假设任意一台服务器宕机时,以及出现各类不可预期的问题时,系统总体是否依然可用
-
应用服务器:安全
- 多台服务器经过负载均衡设备组成集群,有个前提,应用服务器是不你保存
会话信息
,不然服务器宕机,即便将用户请求转发到其余服务器上也没法完成业务处理
-
存储服务器:服务器
-
开发阶段:网络
伸缩性数据结构
- 衡量标准:是否能够用多台服务器构建集群,是否容易向集群中添加新的服务器,加入新服务器后是否能够提供与原来的服务器无差异的服务,集群中可容纳的服务器数量是否有限制
-
应用服务器集群:多线程
- 服务器上不保存数据,全部服务器都是对等的,能够经过使用合适负载均衡设备向集群中不断加入服务器
-
缓存服务器集群:
- 加入新的服务器可能会使缓存路由失效,进而致使集群中大不符缓存数据都没法访问,若是应用严重依赖缓存,须要改进缓存路由算法
- 使用NoSQL数据库缓存,而不是使用 关系型数据库
扩展性
安全性
- 衡量标准:针对现存或潜在的各类攻击手段与窃密手段,是否有可靠的应对策略
1. 大型网站演化历程
思考角度:
- 单体应用局限性
- 数据库分库分表、主从复制
- 缓存性能、时效性
- 集群、负载均衡
- 分布式(业务、文件系统、配置、数据一致性、调度)
- 异步
- 自动化
- 安全
1.1 单服务器应用
- 特色:应用程序、数据库、文件系通通一放在一个服务器上
- 隐患:
- 数据库和文件系统会随着网站运行时间增加,存储空间再也不知足需求,扩展困难
- 当用户量或并发量增大时,应用程序与数据库间会有争夺内存,很大几率会宕机
1.2 应用服务和数据服务分离
1.3 使用缓存减少数据库压力
-
特色:常常访问的数据进行缓存,用户获取数据时直接从缓存中获取,减少数据库压力(二八定律)
- 本地缓存:访问速度更快,可是受本地内存限制,缓存数量有限
- 远程分布式缓存:集群,部署大内存的 的服务器做为专门缓存服务器,
能够作到理论上不受内存容量限制的缓存服务
-
隐患:单一应用处理请求的链接数有限,应用服务器成为网站的的瓶颈
-
解决方案:增长应用服务器,经过应用服务器集群,负载均衡调度服务器来将链接分发到合适的应用服务器
1.4 解决缓存问题:主从复制,读写分离
1.5 CDN加速和反向代理加速网站响应
- 特色:基本原理都是缓存,一方面加快访问速度,一方面下降服务端压力
- CDN:用户请求服务时,从距离本身最近的网络提供商机房获取数据
- 反向代理:在服务端,请求发送到服务端后,若服务端有数据则会返回数据;同时反向代理在请求量到必定规模时,也能够经过负载均衡将请求分发的合适的应用服务器上
1.6 分布式 文件系统 和 分部式 数据库系统
1.6 使用NoSQL 以及搜索引擎
1.7 业务拆分
- 特色:每一个应用独立部署,应用间经过
超连接
或消息队列
进行数据分发;或者经过访问同一个数据存储系统来构成一个关联的完整系统
1.8 分布式服务
- 特色:独立部署公用业务,由这些可复用的业务链接数据库,提供共用业务服务。
应用系统只须要管理用户界面,经过分布式服务调用共用业务完成具体业务操做
- 解决的问题:
- 数据库链接有限,公用业务进行数据库访问,而后为应用提供数据服务便可,减少数据服务器压力
- 公用业务获得复用,系统更好的维护
1.9 云计算平台
- 情景:大型网站经过上述演化,已经过组合和改进现有技术架构
解决海量数据的管理 和 高并发事物的处理
。所以大公司能够将这些解决方案应用到网站之外的业务上去,中小型公司不须要关注技术架构问题,直接购买便可得到更大的存储空间 和更多的计算资源
- 特色:成熟的架构体系和资源,大型网站开始搭建
云计算平台
,为中小型企业提供计算服务;一方面使大型网站自己的资源(服务器、架构方案),充分获得再利用,另外一方面使得中小型公司能够专一业务的发展,没必要再架构上试错
,经过购买计算服务便可。
2. 大型网站架构模式
2.1 分层
2.2 分割
- 层级内纵向分割。例应用层可分多个(服务层也可根据须要分层)
2.3 分布式
- 基础条件:
分层
和分割
,将不一样模块部署在不一样的服务器是和,经过远程调用协同工做
- 实现:分布式用于处理访问量大和数据量大的应用,经过使用更多的计算机、CPU、内存、存储空间,提升并发访问量、负载均衡、计算及存储性能
- 问题:
- 宕机:一台服务器宕机,这太服务的其余子服务器也不能正常使用,资源浪费,网站可用性下降
- 网络:网络波动会影响性能
- 数据:分布式环境中数据保持一致性
2.3.1 分布式应用和服务
- 基础条件:应用和服务模块分层分割分布式部署,
- 优势:
- 改善网站性能和并发性,加快开发和发布,减小数据库链接资源损耗
- 提升服务的
复用性
,便于业务功能的扩展
2.3.2 分布式静态资源
- 动静分离,静态资源分布式部署减轻应用服务器的压力。经过使用
独立域名
,由用户体验部开发等措施,能够加快浏览器并发访问速度
2.3.3 分布式数据和存储
2.3.4 分布式计算
- 计算什么:搜索引擎的索引构建 和 数据仓库的数据分析统计
- 实现:利用
Hadoop
及其MapReduce
分布式计算框架进行批处理计算
,优势以下:
- 计算:移动计算 而不是 移动数据,将计算程序分发到数据所在的位置以加速计算和分布式计算
- 分布式配置:网站线上服务器配置实时更新 分布式配置
- 分布式锁:分布式环境下实现兵法和协同的分布式锁
- 分布式文件系统
2.3.3 集群
- 相同应用用多台服务器部署,经过网关控制实现负载均衡,当一台服务器不能使用了,不会致使应用崩溃
2.3.4 缓存
- 目的:将数据存放在离计算机最近的位置以加快处理速度。
- 使用缓存的条件:
- 热点数据应该放在缓存中
- 数据不会在短时间失效,不然会产生
zhang读
- 实现:
2.3.5 异步
2.3.6 冗余
- 情景:网站须要 7x24 小时连续运行,服务器规模比较大时,宕机是必然事件。因此避免数据丢失,须要对数据周期进行
冗余备份
- 常见方式:
- 冷备份,数据按期备分
- 热备份,数据库主从分离
- 灾备数据重心
2.3.7 自动化
- 自动化发布
- 自动化代码管理
- 自动化测试
- 自动化安全检测
- 自动化部署
- 自动化监控
- 自动化报警
- 自动化失效转移
- 自动化失效恢复
- 自动化降级
- 自动化分配资源
2.3.8 安全
- 敏感信息加密
- 对于常见的攻击网站的 XSS 攻击、SQL 注入、进行编码转换等相应处理
- 对垃圾信息进行过滤
- 对交易转帐业务进行
风险控制