NoSQL《大型网站技术架构》读书笔记

特大型网站架构衍生和变化


大型网站的关怀目的

  • 高可用
  • 高性能
  • 易扩展
  • 可伸缩
  • 安全

重型网站的特色

  • 高并发,大流量
  • 高可用
  • 海量数据
  • 用户分布广泛,互联网状态复杂
  • 安然环境恶劣
  • 要求快捷转移,发布频仍
  • 渐进式发展

大型网站架构演变发展进度

  • 起来阶段,一般采纳LAMP来搭建,所有资源存放在一台服务器上
  • 应用服务和数据服务分离,有独立的数据库服务器
  • 行使缓存革新网站品质,按照是二八定律:80%的业务访问集中在20%的数码上
    • 此间必要考虑什么数据符合缓存
    • 缓存能够是本土缓存,也足以是长距离分布式缓存
  • 采用应用服务器集群改进网站的产出处理能力
    • 如若能由此增添一台服务器的点子来创新负载压力,就能够以相同的主意持续增添服务器来不断勘误系统特性,从而完结系统的可伸缩性
    • 那里必要考虑动用什么负载均衡的方针
      *数据库读写分离
    • 缓存中的数据,假如更新过快,那么会不断刷新缓存,从而下降质量
    • 可以运用主流数据库提供的为主热备作用,通过陈设两台数据库的朱从涉嫌,将一台数据库服务器上的数据同步到其余一台上边
  • 利用反向代理和CDM加速网络响应
    • CDN和反向代理的基本原理都是缓存
    • CDN布署在网络提供商的机房,用户在呼吁互连网服务时,能够从距离自己多年来的网络提供商机房获取数据
    • 反向代理布署在网站的基本机房,当用户的呼吁到达为主机房后,首先走访的服务器是反向代理服务器,倘使反向代理服务器中缓存着用户请求的资源,那么就将其一向回到给用户
  • 选择分布式文件系统和分布式数据库系统
    • 网站常用的数据库拆分手段是工作分库,即将不相同工作的数据库安顿到分裂的大体服务器上
  • 利用NoSQL和搜索引擎
  • 工作拆分,使用分而治之的手腕将全部网站工作分成不相同的成品线
  • 分布式服务

巨型网站架构衍生和变化的价值观

网站的市值在于它能为用户提供哪些价值,在于网站能做什么样,而不在于它是怎么做的。因而对此小型网站来说,最亟需做的是位用户提供好的劳务来创设价值,得到用户的认同,从而活下来,野蛮生长。

  • 特大型网站架构技术的骨干价值是随网站所需灵活应对, 它是一个演变的历程
  • 使得大型网站技术升高的重中之动力量是网站的事体发展,是事情成功了技能,而不是倒转。由此要抛开为了技术而技术的覆辙

重型网站架构形式


  • 分层,那是在横向方向对系统进行切分
    • 分段的挑战在于必须合理合法设计层次边界和接口
    • 分段包罗物理分层和逻辑分层两种
  • 分开,那是在纵向方向对系统举办切分
    • 将分化的机能和服务分割开来,包装秤高内聚低耦合的模块单元
  • 分布式
    • 分段和撤并的意在小模块便于分布式陈设
    • 拉动的难题:1)
      分布式意味着服务调用必须经过网络,需求考虑带宽的熏陶;2)
      服务器越多,宕机的票房价值越大
    • 常用的分布式方案:1) 分布式应用和服务; 2) 分布式静态资源;
      3) 分布式数据和存储; 4) 分布式总计;5)
      分布式配置、分布式锁、分布式文件系统。。。
  • 集群,即多台服务器布署相同的施用,从而结成一个集群,通过负载均衡设备共同对外提供劳动
    • 固然访问量很小的分布式应用和劳动,也至少要配置到两台服务器来组成一个小集群,这样能够拉长系统的可用性
  • 缓存,即将数据放在距离总结近期的岗位以加快处理速度
    • CDN
    • 反向代理
    • 地面缓存
    • 分布式缓存
  • 异步,业务之间的音信传递不是联名调用,而是将一个事情操作分成四个阶段,每个阶段之间通过共享数据的点子异步举办合营
    • 一般性必要运用音讯队列
    • 牵动的功利:1) 进步系统可用性; 2) 加速网站响应速度; 3)
      消除并发访问高峰
  • 冗余
    • 集群拉动的必然结果
    • 有惊无险须求的必然结果
  • 自动化,DevOps思维,尽量减弱人工干预
    • 自动化发表
    • 自动化代码管理
    • 自动化测试
    • 自动化安全监测
    • 自动化布置
    • 自动化监控
    • 自动化报警
    • 自动化失效转移、復苏
    • 自动化分配资源
    • ……
  • 安全

重型网站为主架构要素


  • 性能
    • 一个特性难题也许会招致网站用户严重流失
    • 权衡质量的目标:响应时间、TPS、系统质量计数器等
  • 可用性
    • 从未网站可以圆满的7*24运行
    • 网站高可用结构的前提是任其自流会并发服务器宕机,儿高可用设计的对象是当服务器宕机时,服务或者应用照旧可用
    • 需要的手段是集群,即冗余
  • 紧缩性,即经过不停向集群中进入服务器的一手来环节持续升腾的用户并发访问压力和相连增强的数量存储要求
    • 衡量标准:是或不是可以打造集群;是或不是足以一本万利的向集群中添加新的服务器
  • 伸张性,直接关注网站的功用,有限支撑可以高速响应必要变动
    • 衡量标准: 网站增添新的事体产品时,是或不是对现有工作透明无影响
  • 安全性
    • 衡量标准:
      针对现存和机密的种种攻击和窃密手段,是还是不是可以使得的对答

一晃儿响应 – 高品质架构


不等看法下的网站品质

  • 用户意见
    • 第一是端到端的感觉
    • 重大透过前段优化的一手来进步用户体验
  • 开发人士视角
    • 重在关注应用程序本身以及相关子系统的特性,包罗响应延迟、系统吞吐量、并发处理能力、系统稳定等
    • 首要优化手段:
      使用缓存加快数据读取、使用集群升高吞吐能力、使用异步音信加速请求响应、使用代码优化提高程序质量
  • 运维人员意见
    • 根本关切基础设备质量和资源利用率
    • 重在优化手段:
      建设优化骨干网、使用高性价比定制伏务器、利用虚拟化技术优化资源利用率

质量测试目的

  • 响应时间,即选取执行一个操作必要的年华,包涵从发出请求起首到接收最终响应数据所急需的小运
  • 并发数,即系统可以同时处理的哀求的数码,也反映了系统的载重特性
  • 吞吐量,即单位时间内系统处理的乞求数量,显示系统的重整处理能力
  • 品质计数器, 描述服务器或者操作系统质量的有的数目目标

质量测试方法

  • 品质测试,以系列规划初期规划的质量目标为预期目标,对系统不断增压,验证系统在资源可接受范围内,是还是不是能落得品质预期
  • 负载测试,对系统不断的加码并发请求,知道系统的某项或者多项质量目的达到安全临界值
  • 压力测试,超越安全负载的事态下,继续对系统增压,直到系统崩溃或者不可能再处理任何请求
  • 稳定测试,在特定硬件、软件、网络状态下,给系统加载一定压力,是系统运转较长一段时间,来观看系统是不是稳定

Web前段优化

  • 浏览器访问优化
    • 减少http请求
    • 使用浏览器缓存
    • 启用压缩
    • CSS放在页面最上边,JavaScript放在页面最上边
    • 减少Cookie传输
  • CDN加速
  • 反向代理

应用服务器质量优化

  • 分布式缓存
    • 缓存从实质上的话,就是一个内存hash表
    • 缓存要求缓存那一个读写比很高、很少变化的多少,一般的话读写比在2:1以上时,缓存才有含义
    • 应用程序读取数据时,首先到缓存中读取,假如缓存不设有或者已失效,再拜访数据库,同时将新的数额放入缓存
    • 缓存也急需专注缓存热点数据
    • 缓存预热,在新开行的缓存系统中,在启动时就加载热点数据,这样起步后就足以间接行使
    • 缓存穿透,
      应用持续大批量造访不存在的数目,因为那类数据不设有于缓存中,由此会大方走访数据库,从而下降质量
    • 对此分布式缓存来说,近期有两类:1)
      分歧的缓存服务器之间举行通讯,例如JBoss
      Cache;2)不一样缓存服务器之间不进行通讯,例如Memcached
  • 异步操作
    • 相似会采用音信队列,带来的附加利益是会削平峰值
  • 动用集群

代码优化

  • 多线程
    • 要求小心线程安全题材,方法:1) 将对象设计成无状态对象;2)
      使用部分对象;3) 并发访问资源时行使锁
  • 资源复用
    • 要害是单例和资源池(对象池)
  • 数据结构,选用适用的算法
  • 垃圾堆回收
    • 客观设置垃圾回收策略

仓储质量优化

  • 固态硬盘 vs 混合硬盘
  • B+树 vs LSM树
  • RAID vs HDFS

万无一失 – 高可用架构


网站的可用性描述网站可以使得访问的特色,它差别于易用性

网站可用性度量

  • 网站不可用时间 = 故障修复时间点 – 故障发现时间点
  • 网站年度可用性目的 = (1 – 网站不可用时间/年度总时间)* 100%
    • 貌似以多少个9来代表,2个9是基本可用,网站年度不可用时间低于88小时;3个9是较高可用,网站年度不可用时间低于9小时;4个9是兼具自动復苏能力的高可用,网站年度不可用时间低于53分钟;5个9是极高可用性,网站年度不可用时间低于5分钟

网站高可用架构的安插目的是确保服务器硬件故障时劳务照旧可用、数据依旧保留并可以被访问
网站高可用架构的根本手段:数码和劳务的冗余备份以及失效转移,一旦服务器宕机,就将劳动切换至其他可用的服务器上。

高可用的应用

无状态应用:
应用服务器不保留业务的上下文音讯,而仅依照每一遍请求提交的数码举办对应的事务逻辑处理,多个劳务实例之间完全对等,请求提交到其余一个服务器上,处理的构造都是同等的

  • 通过负载均衡进行无状态服务的失灵转移
    • 负载均衡:
      主要使用在业务量和数据量较高的景况下,当单台服务器不足以承担所有的负荷压力时,通过负载均衡手段,将流量和数量分摊到一个集群构成的多台服务器上,
      以升级全体的载重处理能力
  • 应用服务器集群的Session管理
    • Session复制
    • Session绑定
    • 利用Cookie记录Session
    • Session服务器

高可用的服务

  • 分级管理
  • 过期设置
  • 异步调用
  • 劳务降级
  • 幂等性设计

高可用的数量

  • 驷不及舌招数:数据备份和失灵转移
  • CAP原理:
    一个提供数据服务的蕴藏系统不可能同时满足数码一致性(Consistency)、数据可用性(Availibility)、分区耐受性(Parition
    Tolerance)那多少个规范

    • 多少一致性分类: 1) 数据强一致; 2) 数据用户同样; 3)
      数据最终一致
  • 数据备份
    • 冷备的优点是简简单单和链家,开销和技术难度较低,缺点是不可能保险数据最终一致
    • 热备分为三种:1) 异步热备; 2) 同步热备
  • 失效转移
    • 失效确认:1) 心跳检测;2) 应用程序访问失败报告
    • 走访转移
    • 数据復苏

高可用网站的软件品质担保

  • 网站发表,它的历程和服务器宕机效果箱单,其对系统可用性的震慑也
    类似

    • 貌似拔取批量立异的情势展开,不会四遍关掉集群中的整体服务器
  • 自动化测试
    • 一般采纳Selenium来开展测试
  • 预公布验证
    • 预公布服务器是一种特有用途的服务器,它和线上的正规化服务器唯一的区分是未曾配置在负载均衡服务器上,外部用户不可以访问
  • 代码控制
    • 基本开发,分支发表
    • 分段开发,主干发布,那是眼前使用的主流格局
  • 自动化发表
    • 列网店模特型:将各类应用的公布进度作为五次列车旅程,高铁一定运行,时期有若干站点,每一站都开展例行检查,不经过的系列下车,通过的连串持续坐着列车旅行,直到轻轨抵达极限。
    • 事实上中,可能具有体系在半路都下车了,那样火车不得不回到原点,等待难题一蹴即至后再来三次
    • 一种可能是列车上的重点项目若是战败,那么整趟火车须求再次来到
    • 人的过问越少,自动化程度越高,引入故障的可能性就越小
  • 灰度发布
    • 特大型网站都会采取灰度发表情势,将集群服务器分为若干局部,每一日只公布部分服务器,观看运行稳定没有故障,第二天持续宣布部分服务器,持续几天你才把全路集群全体揭破已毕,时期如若发现难题,只须求回滚已发表的一局地服务器即可

网站运行监督

  • 监察数据搜集
    • 用户作为日志收集
    • 服务器品质监控
    • 运作数据报告
  • 督察管理
    • 系统报警
    • 失效转移
    • 机动优雅降级

永无止境 – 可伸缩性架构


网站伸缩性:
在不须要改变网站的软硬件设计,仅仅经过转移陈设的服务器数量就能够增加或者裁减网站的劳动处理能力

网站架构的伸缩性设计

  • 不等成效拓展物理分离完结伸缩
  • 单纯性作用通过集群规模落实伸缩

应用服务器集群的伸缩性设计

  • HTTP重定向负载均衡
  • DNS域名解析负载均衡
  • 反向代理负载均衡
  • IP负载均衡
  • 多少链路层负载均衡
  • 负载均衡算法
    • 轮询
    • 加权轮询
    • 随机
    • 小小链接
    • 原地方散列

分布式缓存集群的伸缩性设计

  • Memcached分布式缓存集群的拜会模型
    • 用用程序通过Memcached客户端访问Memcached服务器集群,Memcached客户端重要由一组API、Memcached服务器集群路由算法、Memcached服务器集群列表以及通讯模块组成
    • 路由算法负责按照应用程序输入的缓存数据KEY计算获得相应将数据写入到Memcached的哪台服务器(写缓存)或者应当从哪台服务器读数据(读缓存)
  • Memcached分布式缓存集群的紧缩性挑衅
    • 挑衅主要针对路由算法,当集群扩容时,怎么样保管路由算法可以得到新参加的服务器?
    • 化解措施:
      在网站访问量最少的时候扩容,然后经过模拟请求的艺术渐渐预热缓存,使得缓存服务器中的数据再次分布
  • 分布式缓存的一致性Hash算法

数码存储服务器集群的伸缩性设计

  • 数量存储服务器必须保险数据的笃定存储,任何处境下都不可以不有限支撑数据的可用性和科学
  • 关周密据库集群的伸缩性设计
    • 行使为主结构达成读写分离
    • 据悉差异工作的数额,放到差距的数据库集群中,即数据库分库
    • 对此专门大的表,进行分片处理
  • NoSQL数据库的伸缩性设计
    • HBase

随需应变 – 可扩张架构


可增加性:在对现有系统影响很小的状态下,系统机能可不止增添或者升高的能力
兑现可扩展的手段:低耦合,高内聚

使用分布式新闻队列下跌系统耦合性

  • 事件驱动架构(伊芙nt Driven Architecture)

    • 概念:通过在低耦合的模块之间传输事件新闻,以保全模块的松弛耦合,并依靠事件消息的通讯完结模块间合作。典型的场地是生产着消费者模型
  • 分布式音讯队列

运用分布式服务创设可服用的事情平台

  • 内需将超大型的、复杂系统查分成可独自安插的模块,从而下跌耦合性
  • Web Service与信用社分布式服务
    • Web Service比较臃肿,可以考虑采纳REST
    • 要么利用开源的化解方案,例如Dubbo

可增加的数据结构

安如太山 – 安全架构


超级攻击格局

  • XSS攻击(跨站脚本攻击)
    • 黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器举行恶意操作的一种攻击模式
    • 分类: 1) 反射型; 2) 持久型
    • 杀鸡取卵办法:1) 消毒; 2) HttpOnly
  • 流入攻击
    • 分类: 1) SQL注入攻击; 2) OS注入攻击
    • 缓解形式:1) 消毒; 2) 参数绑定
  • CSRF攻击(跨站点请求伪造)
    • 攻击者通过跨站请求,以官方用户的地位展开不合规操作
    • 化解格局: 识别请求者身份:1) 表单Token; 2) 验证码; 3)
      Referer check
  • 其余攻击格局
    • Error
      Code,可能来得非凡堆栈,从而暴露危险音讯,解决办法:使用统一的500页面
    • HTML注释,注释可能会揭露危险音信,解决方法:code
      review或者自动扫描
    • 文本上传,可能上传病毒文件,解决方法:设置上传文件白名单,只同意上传指定项目标文书
    • 途径遍历,
      在URL中行使相对路径,遍历系统未开放的目录和文件,解决措施:
      将资源文件部署在独立的服务器上,使用独立域名

信息加密技术以及密钥管理

  • 单项散列加密,包含MD5、SHA等
  • 对称加密, 包涵DES算法、RC算法等
  • 非对称加密, 包罗RSA算法等
  • 密钥安全治本
    • 将密钥和算法放在一个单身的服务器上,甚至做成一个专用的硬件设置,对外提供加密和平解决密服务
    • 将加解密算法放在应用体系中,密钥则放在独立服务器中,在存储时,将密钥切分成数片,分别存储在差其他介质中
网站地图xml地图