Introduct

  此部分开始介绍第二篇-架构,分别对性能、可用性、伸缩性、可用性、安全性五个方面进行了详细的介绍,比如如何进行评估、设计和优化,并提出相应的解决方案。

  • 瞬时响应:网站的高性能架构
  • 万无一失:网站的高可用架构
  • 永无止境:网站的伸缩性架构
  • 随需应变:网站的可扩展架构
  • 固若金汤:网站的安全架构

架构

第四章 瞬时响应:网站的高性能架构

架构-第四章-高性能架构

网站性能测试

  • 不同视角下网站性能

    1. 用户:响应时间
    2. 开发人员:响应延迟、系统吞吐量、并发处理能力、系统稳定性等
    3. 运维人员:基础设施性能和资源利用率,如带宽能力、服务器硬件配置、数据中心网络架构、服务器和网络带宽的资源利用率等
  • 性能测试指标

    1. 响应时间
    2. 并发数:同时处理请求的数目,通过多线程模拟请求测试系统并发处理能力
    3. 吞吐量:单位时间内系统处理的请求数量,如 TPS(每秒事务数)、HPS(每秒HTTP请求数)、QPS(每秒查询数)
    4. 性能计数器:服务器或操作系统性能的一些数据指标,如System Load、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等
  • 性能测试方法

    1. 性能测试:验证系统在资源可接受范围内,是否能达到性能预期
    2. 负载测试:通过不断增加并发请求以增加系统压力,直到系统的某项或者多项性能指标达到安全临界值
    3. 压力测试:超过安全负载的情况下,继续施加压力,直到系统不能再处理任何事情,以此获得最大压力承受能力
    4. 稳定性测试:在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以检测系统是否稳定。

  性能测试是一个不断对系统增加访问压力-即不断增加测试程序的并发请求数,以获得系统性能指标、最大负载能力、最大压力承受能力的过程。

  • 性能测试报告
  • 性能优化策略

  性能排查:检查请求处理的各个环节的日志、分析哪个环节响应时间不合理、超过预期;然后检查监控数据,分析影响性能的主要因素是内存、磁盘、网络、还是CPU,是代码问题还是架构设计不合理,或者系统资源确实不足。

  优化策略分为:web前端性能优化、应用服务器性能优化、存储服务器性能优化3大类。


web前端性能优化

  • 浏览器访问优化

    1. 减少http请求:每个HTTP需要启动独立的线程处理,方案如合并CSS,合并JavaScript,合并图片等
    2. 使用浏览器缓存:静态资源更新频率较低,设置HTTP头中Cache-Contral和Expires的属性,缓存一定时间;然后通过更新文件名称实现文件更新;更新策略是逐量更新,避免集中更新缓存,造成负载剧增、网络堵塞。
    3. 数据+压缩:启用GZip
    4. CSS放在页面最上面,JS页面最下面
    5. 减少Cookie传输
  • CDN加速:静态资源

  • 反向代理

    1. 安全屏障
    2. 缓存功能
    3. 负载均衡

应用服务器性能优化

  • 分布式缓存

    1. 缓存的基本原理:更高速的存储介质;存储计算结果
    2. 合理使用缓存:以下不适合的场景
      1. 频繁修改的数据
      2. 没有热点的访问:即不是二八定律
      3. 数据不一致和脏读:缓存失效时间
      4. 缓存可用性:缓存雪崩,使用缓存服务器集群解决,某台服务器宕机,只是部分缓存数据丢失,不至于雪崩
      5. 缓存预热:LRU
      6. 缓存穿透:高并发地请求不存在的数据,最终落到数据库上;解决:value=null进行缓存
    3. 分布式缓存架构
      1. JBoss Cache为代表的需要更新同步的分布式缓存
      2. Memcached为代表的不互相通信的分布式缓存
  • 异步操作

  使用消息队列将调用异步化,可以改善网站的扩展性,还可改善网站系统的性能。

image

  消息队列具有很好的削峰作用–将短时间高并发产生的事务消息存储在消息队列,从而削平高峰期的并发事务。

任何可以晚点做的事情都应该晚点在做

  • 使用集群

  在网站高并发访问的场景下,使用负载均衡技术为一个应用构建一个多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性。

  • 代码优化
    1. 多线程
    2. 资源复用
    3. 数据结构
    4. 垃圾回收

存储性能优化

  • 机械硬盘 vs 固态硬盘
  • B+树 vs LSM树
  • RAID vs HDFS