【大型网站技术架构 核心原理与案例分析】读书笔记

 

章节                

笔记                

1.概述        

  1. 网站架构模式:分层、分割、分布式、集群、缓存、异步、冗余、自动化、安全。

  2. 核心架构要素:性能、可用性、伸缩性、扩展性、安全。

4.高性能
  1. 一般重复请求一万次计算总响应时间然后除以一万得到单词响应时间。

  2. 测试程序并不是启动多线程然后不停发送请求,而是在两次请求之间加入一个随机等待时间。

  3. 吞吐量:每天通过收费站的车辆数目;并发数:正在行驶的车辆数目;响应时间:车速。TPS:每秒事务数;HPS:每秒请求数;QPS:每秒查询数。

  4. 性能计数器:System Load(系统负载,最理想为CPU数目)、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等指标。

  5. 并发数逐渐增加阶段:性能测试-->负载测试-->压力测试、稳定性测试。

  6. 随着请求增加系统处理能力增加变缓达到最大值,这是系统最大负载点。继续加压系统处理能力反而下降,最后崩溃可看作系统崩溃点。

  7. 浏览器访问优化:1.减少HTTP请求(合并请求,CSS偏移响应);2.使用浏览器缓存(HTTP中Cache-Control和Expires属性,更改文件名逐步更新);3.启用压缩html、css、js启用GZip;4.Css放上面(下载后才渲染页面),js放最下面(下载后立马执行,所以可能阻塞);5.减少Cookie传输(静态资源可启用独立域名,不需要cookie)。

  8. CND加速:对静态资源放入CDN极大改善网页打开速度。

  9. 反向代理:位于网站机房一侧,代理网站WEB服务器接收HTTP请求,可保护网站安全;可存放缓存;可实现自动负载均衡。

  10. 应用服务器性能优化:缓存、集群、异步。

  11. 网站性能优化第一定律:优先考虑使用缓存(访问速度高的存储介质,提高访问速度,无需重复计算)。计算KV对中Key的HashCode对应的Hash表索引,实现快速访问。

  12. 合理应用缓存的地方:频繁修改的数据(读写比例大于2:1)、没有热点的访问、数据不一致与脏读(接受超时后重新加载的时间间隔)、缓存可用性(缓存宕机不能对数据库产生很大影响)、缓存预热(提前加载数据放入缓存、LRU:最近最久未用算法)、缓存穿透(缓存无数据,直接访问数据库,最好将不存在的值缓存为null)。

  13. 分布式缓存:更新同步分布式(JBoss Cache,所有机器保存缓存内容相同)、互不通信的分布式(Memcached,内存:根据大小块分组,查找大于数据的最小chunk,采用LRU算法释放最近最久未被访问的空间,通过一致性哈希算法可无限制伸缩)。

  14. 异步操作:把用户请求直接访问数据库环节增加消息队列,请求发送到消息队列后直接返回,有消息队列操作数据库,从而达到削峰作用。

  15. 使用集群:使用负载均衡技术为一个应用构建一个由堕胎服务器组成的服务器集群,分散请求到多台服务器处理。

  16. 代码优化:多线程(启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数)、资源复用(数据库连接、网络通讯连接、线程、复杂对象等)、数据结构(字符-->MD5指纹-->hash计算-->hashcode)、垃圾回收。

  17. 存储性能优化:1.机械(快速顺序读写、慢速随机)vs固态 2.B+树vs LSM树 3.RAID vs HDFS

  18. RAID:RAID0(同时读写多块,100%)、RAID1(同时写入2块,50%)、RAID10(同时结合1和0,50%)、RAID5((n-1)/n)、RAID6(可靠性比5高,(n-2)/N)。

  19. HDFS:以块为单位,一个文件被分割成若干Block,当写完一个Block是自动复制到另外2台,保证有3个副本。通过MapReduce并发计算任务框架,同时读取多个Block并发处理,相当于RAID0并发。

5.高可用
  1. 网站可用性达到4个9,99.99%;故障分=故障时间*故障权重;使用负载均衡进行无状态服务的失效转移。

  2. 应用服务器集群的session管理:1.复制;2.通过hash算法实现IP和服务器绑定;3.利用cookie记录session;4.利用分布式缓存、数据库独立部署session服务器(推荐)。

  3. 高可用服务:分级管理、超时设置、异步调用、服务降级、幂等性设计。

  4. CAP原理:一个数据服务无法同时满足数据一致性(Consistency,强一致、用户一致、最终一致)、数据可用性(Availibility)、分区耐受性(Partition Tolerance,伸缩性);优先可用、伸缩。

  5. 数据备份:冷备(定期复制,无法保证数据一致性和可用性)、热备(异步热备(由代理写入slave)、同步热备(客户端同时读写master-slave))。

  6. 更新时暂停负载均衡中一部分服务器来更新,然后使用类似Selenium实现自动测试,然后使用预发布(和线上唯一不同的是未放入负载均衡列表中)。

  7. 实现以火车发布模型的自动化发布,然后采用灰度发布(AB测试)进行发布,可方便回滚。

  8. 监控数据采集:1.用户行为日志收集(服务端日志、客户端浏览日志(基于Storm实时计算框架日志统计分析));2.服务器性能监控Ganglia;3.运行数据报告(缓存命中率、平均响应、待处理任务)

  9. 监控管理:系统报警、失效转移、自动优雅降级。

6.伸缩性
  1. 伸缩性:不需要改变网站的软硬件设计,仅通过改变部署的服务器数量就可以扩大或缩小网站处理能力。

  2. 伸缩设计:一类通过功能进行物理分离实现伸缩(任何阶段、横向业务、纵向基础服务),一类是单一功能通过集群实现伸缩。

  3. 实现负载均衡:1.HTTP重定向(要请求2次、定向服务器瓶颈、SEO作弊);2.DNS域名轮询(配置A记录多个IP,缺点生效慢,权限少,通常作为第一步解析到负载均衡服务器);3.反向代理(接收公网,转发内网服务器,应用层负载均衡);4.IP负载均衡(网络修改IP,比反向代理性能好,但同样可能成为瓶颈);5.数据链路层负载均衡(数据链路层修改mac进行分发,然后直接响应数据给客户端,又称作直接路由方式DR,最好产品LVS)。

  4. 负载均衡算法:1.轮询;2.加权轮询;3.随机;4.最少连接(发给当前连接数最少的服务器);5.源地址散列(IP进行Hash,使同IP固定访问一台服务器)。

  5. 路由算法:1.取余(在固定服务器数量下可满足所有,无法扩容);2.一致性Hash(将缓存服务器,分发成多个虚拟节点(150)分布在圆形上,按一个方向查找最近的节点)。

  6. 读写分离-->分库-->MySQL可以使用Amoeba和Cobar两个产品实现分片(将一张表拆开存储在多个数据库中)

  7. NoSQL:not only sql作为关系数据库的补充,放弃结构化查询语言和事务一致性保证,强化可用性和伸缩性。采用HBase实现伸缩。

  8. NoSQL伸缩:应用程序-->向Zookeeper请求HMaster地址-->然后向HMaster输入key请求HRegionServer地址-->然后向HRegionServer输入key查询数据-->HRegionServer访问HRegion得到数据

7.可扩展
  1. 扩展性:指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。除模块分布式还有分布式消息队列和分布式服务两种方式。

  2. 消息队列:1.事件驱动架构(EDA,生产者消费者模式,借助事件消息完成模块间合作);2.分布式消息队列(先进先出、ESB、SOA)

  3. 分布式服务需求与特点:负载均衡、失效转移、高效远程通信、整合异构、对应用最小侵入、版本管理、实时监控。Thrift、Dubbo。

  4. 利用NOSQL实现可扩展的数据结构。

8.安全性
  1. XSS攻击:跨站脚本攻击(反射型,持久型);防御:1.过滤符号;2.HTTPONLY(禁止js访问此属性cookie);

  2. 注入攻击、CSRF(跨站请求伪造)防御:1.表单token;2.验证码;Referer Check;

  3. 其他攻击:错误回显、HTML注释、文件上传、路径遍历。

  4. web应用防火墙:ModSecurity、SiteShell。

  5. 信息加密:1.单向散列加密(MD5、sha+盐salt);2.对称加密(密钥相同DES、RC);3非对称加密(分公、私钥,RSA,证书即为公钥);

  6. 信息过滤:使用正则及Trie树算法或hash表过滤文本、分类算法([无关联即朴素]贝叶斯分类算法)、黑名单(hash表、提取8位指纹布隆过滤器)。

  7. 风险:账户风险、买家风险、卖家风险、交易风险;风控:规则引擎、统计模型。

9.其他
  1. 秒杀:系统独立部署、页面静态化、租借秒杀活动带宽、动态生成随机URL。单独放置定时js文件到不同服务器,限制每台应用服务器接受请求的总数,超过则丢弃。

  2. 故障案例:写日志故障、高并发访问数据库故障、高并发锁故障、缓存引发故障、应用启动不同步故障、大文件读写独占磁盘故障、滥用生产环境故障、不规范流程引发故障(穿透缓存)、编程习惯

  3.  

posted @ 2015-04-04 12:28  炳森之火  阅读(225)  评论(0编辑  收藏  举报