大型网站技术架构——核心原理与案例分析,笔记思考【未完】

1. 核心要素

  1. 性能
  2. 可用性
  3. 伸缩性
  4. 拓展性
  5. 安全性

五个要素能不能都要呢?

2. 性能

网站的性能是客观的指标,可以具体体现到响应时间、吞吐量等技术指标,同时也是主观感受。

用户视角的性能:

​ 就是用户在浏览器上直观感受到的网站响应速度快还是慢。

开发人员眼中的性能:

  1. 响应延迟
  2. 系统吞吐量
  3. 并发处理能力
  4. 系统稳定性等

相关的优化手段有:

  1. 缓存加速读取
  2. 使用集群提高吞吐能力
  3. 使用异步消息加快请求响应及实现削峰
  4. 使用代码手段优化

运维人员视角的性能主要是基础设施性能和资源利用率,包括:

  1. 网络运营商的带宽能力
  2. 服务器硬件配置
  3. 数据中心网络结构
  4. 服务器和带宽的资源利用率

主要优化手段:

  1. 建设优化骨干网
  2. 高性价比定制服务器
  3. 利用虚拟化技术优化资源

性能测试指标主要有:

  1. *响应时间

  2. 并发数

    反映系统的负载特性

    网站系统用户数>>网站在线用户数>>网站并发用户数

  3. 吞吐量

    体现系统的整体处理能力,TPS、HPS和QPS

  4. 性能计数器

性能测试方法:

  1. 性能测试——性能预期测试
  2. 负载测试——安全临界值测试
  3. 压力测试——最大压力承受能力测试
  4. 稳定性测试——长时间运行稳定性测试

性能优化策略:

​ 思路:如果性能测试结果不满足设计或业务需求,那么就需要寻找系统瓶颈,分而治之,逐步优化

  1. 性能分析

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

  2. 性能优化

    根据网站分层架构,可分为Web前端性能优化、应用服务器性能优化、存储服务器性能优化。

2.1 Web前端性能优化

​ 主要优化手段:优化浏览器访问、使用反向代理、CDN

2.1.1 浏览器访问优化

  1. 减少HTTP请求

  2. 使用浏览器缓存

  3. 启用压缩

  4. CSS放最上面,JS放最先

    浏览器会在下完全部CSS后才对页面进行渲染,最好的做法是将CSS放在最上面,尽快下载CSS。JS相反,浏览器在加载JS后立即执行,有可能会阻塞整个页面,造成显示缓慢,因此JS最好放在页面最下面。

  5. 减少cookie传输

2.1.2 CDN加速

2.1.3 反向代理

反向代理的功能= 请求转发+负载均衡+缓存

2.2 应用服务器性能优化

优化手段主要有缓存、集群和异步

网站性能优化第一定律:优先考虑使用缓存优化性能

2.2.1 分布式缓存

缓存穿透 缓存击穿 缓存雪崩

缓存的优势在于:1. 提升IO速度;2. 减少重复计算,同时因为局部性原理的存在,所以缓存很实用

合理使用缓存

使用缓存要注意的问题:

  1. 频繁修改的数据——刚放了就修改
  2. 没有热点的访问——存错数据了
  3. 数据不一致与脏读——实时更新的问题
  4. 缓存可用性——缓存的稳定性
  5. 缓存预热——设置缓存的时候加载热点数据
  6. 缓存穿透——没有命中,都落到数据库上
  7. 缓存击穿——部分热门数据key过期,导致查询落到数据库上
  8. 缓存雪崩——大面积的key过期,导致查询直接落到数据库上

一个集群要解决什么问题?

分布式缓存集群的第一个问题:各个集群直接需不需要互相通信?需不需要同步?

代表之作,Memcached,一致性哈希算法等路由算法

Memcached的特点:

  1. 简单的通信协议

    使用TCP协议

  2. 丰富的客户端程序

    支持Memcached的通信协议就可以和Memcached的机器通信

  3. 高性能的网络通信

    通信模块:Libevent,一个支持事件出发的网络通信程序库。

  4. 高效的内存管理

    固定空间分配,使用LRU算法。

  5. 互不通信的服务器集群架构

    使其拥有更好的伸缩性,几乎可以做到线性增长。

2.2.2 异步操作

主要是消息队列。

  1. 可以削峰

名言:任何可以晚点做的事情都应该晚点再做

2.2.3 使用集群

将请求分散到集群上的不同机器去解决。

2.2.4 代码优化

  1. 多线程(多协程)

    解决线程安全的一些手段:

    1. 将对象设计为无状态对象
    2. 使用局部对象
    3. 并发访问资源时使用锁
  2. 资源复用

    主要的复用方法:减少资源创建时的消耗

    1. 资源池
    2. 单例模式
  3. 数据结构

    随机散列算法一般是通过先对字符串取信息指纹,再对信息指纹取hashcode。

  4. 垃圾回收

    提高利用率。

2.3 存储服务器性能优化

2.3.1 机械硬盘vs固态硬盘

2.3.2 B+树vs LSM树

B+树:

​ B+树一般两层索引,最后一层是叶子ID,一般更

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值