写点什么

Week 5 学习总结

用户头像
balsamspear
关注
发布于: 2020 年 11 月 06 日

5.1 分布式缓存架构:架构原理与使用中的注意事项



  • 缓存是介于数据访问者与数据源之间的一种调整存储。



  • 缓存(Cache)与缓冲(Buffer)的区别?

- 缓存是为了提高数据的读取速度

- 缓冲是为了匹配不同硬件的处理速度

- 高速硬件把数据全部写到缓冲中,低速硬件慢慢读取;

- 低速硬件把数据慢慢写到缓冲中,调整硬件可以快速读取

  • 缓存的关键指标:缓存命中率

- 命中缓存数 / 访问总数 * 100%

  • 影响缓存命中率的主要指标

- 缓存粒度

- 缓存内存大小

- 缓存有效期

- 缓存业务场景(读多写少)



5.2 分布式缓存架构:常见的缓存实现形式



  • 缓存分类

- 正向代理缓存

- 返回代理缓存

- CDN

- 浏览器缓存

- 程序缓存

- 程序分布式缓存

- 远程分布式缓存

- Memcache、Redis

  • 一致性 Hash 算法

  • 缓存为什么能提高性能?

- 内存读取速度快

- 不需要中间计算过程

  • 合理使用缓存,避免滥用

  • LRU,Least Recently Used,最近最少使用,即淘汰最长时间没有被使用的数据

  • 缓存问题

- 数据不一致

- 缓存穿透:大量访问缓存和数据库都不存在的数据

- 缓存击穿:大量访问缓存中没有而数据库中有的数据

- 缓存雪崩:缓存数据同时过期

- 缓存预热



5.3 分布式缓存架构:一致性Hash算法



  • 普通 Hash 算法的问题

- 分配不均匀

- 伸缩不灵活

  • 一致性 hash 算法

- 将服务器节点放到一个环(0~2^32-1)上

- 将数据进行 hash 计算,按顺时针方向映射到离其最近的节点上



5.4 消息队列:如何避免系统故障传递?



  • 消息队列模型

- 点对点模型

- 发布订阅模型

  • 消息队列好处

- 异步处理,提高性能

- 良好的伸缩性

- 削峰填谷

- 失败隔离和自我重试

- 解耦合

  • 主要 MQ 产品

- RabbitMQ,性能好、社区活跃,使用 Erlang 开发,非 Erlang 开发者维护和二次开发困难(49 M)

- ActiveMQ,跨平台,Java 开发(27 M)

- RocketMQ,java 开发,由阿里开源,性能好,可靠(35 M)

- Kafka,Scala 开发,海量日志传输(63 M)



5.5 负载均衡架构:如何用十行代码写一个负载均衡服务器?



  • 负载均衡分类

- HTTP 重定向负载均衡服务器,两次 HTTP 请求

- DNS

- 硬件

- 软件(服务端负载均衡、客户端负载均衡)

  • 负载均衡算法

- 轮询

- 加权轮询

- 随机

- 最少连接

- 源地址 hash

  • session

- session 复制,所有应用服务器同步保存所有 session

- session 绑定,始终访问同一服务器

- Cookie 记录 session id

- session 服务器



用户头像

balsamspear

关注

还未添加个人签名 2019.10.24 加入

还未添加个人简介

评论

发布
暂无评论
Week 5学习总结