架构师训练营第 5 周总结:缓存,消息队列,负载均衡,分布式数据库

发布于: 2020 年 07 月 08 日
架构师训练营第5周总结:缓存,消息队列,负载均衡,分布式数据库

缓存

什么是缓存,缓存有什么作用?

缓存是在数据访问者和数据源之间的一种高速存储。当数据需要多次读取,用于加快读取的速度。

缓存为什么能显著提升性能?

  • 缓存数据通常来自内存,比磁盘上的数据有更快的访问速度

  • 缓存存储数据的最终结果形态,不需要中间计算,减少cpu资源的消耗

  • 缓存降低数据库,磁盘,网络的负载压力,使这些I/O设备获得更好的响应特性

缓存是系统性能优化的大杀器

  • 技术简单

  • 性能提升显著

  • 应用场景多

缓存命中率是衡量缓存的关键指标。

缓存命中率:能多少次重用同一个缓存响应业务请求,这个度量指标被称为缓存命中率。

如果查询一个缓存,10次查询9次能够得到正确结果,那么它的命中率是90%

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

缓存键集合大小

缓存可使用内存空间

缓存对象生存时间(TTL)

缓存数据存储,一般使用hash表的数据结构。

缓存无处不在,常见的缓存种类有

cpu缓存,操作系统缓存,数据库缓存,JVM编译缓存,CDN缓存,代理与反向代理缓存

应用程序缓存,分布式对象缓存

通读缓存(read-through)

  • 代理缓存,反向代理缓存,CDN缓存都是通读缓存

  • 通读缓存给客户端返回缓存资源,并在请求未命中缓存时获取实际数据

  • 客户端连接的是通读缓存而不是生成响应的原始服务器

旁路缓存(cache-aside)

  • 对象缓存时一种旁路缓存,旁路缓存通常时一个独立键值对存储

  • 如果缓存中需要的对象不存在,应用会连接主数据源来组装对象,并将其保存回对象缓存中以便将来使用

一致性hash算法在缓存集群中的运用,保证缓存集群在添加或删除机器时,仍然能够快速准确的找到缓存所在的机器。

不适合使用缓存存储的数据:

  • 频繁修改的数据

  • 没有热点访问的数据

更新缓存的三种策略:

  1. 设置失效时间,超过失效时间的就从数据库重新加载

  2. 通知缓存失效,删除缓存数据,下次查询数据库时,再重新写入缓存

  3. 数据更新时立刻更新缓存,会带来更多的系统开销和事务一致性问题,不推荐使用

使用缓存需要注意的问题:

缓存雪崩:数据库已经习惯有缓存的日子,当缓存服务器崩溃时,数据库会因为完全不能承受如此大的压力而宕机。

缓存预热:对热点数据进行缓存的预加载。

缓存穿透:如果因为不恰当的业务或者恶意攻击持续的请求某个不存在的请求,因为缓存没有保存该数据,所有的请求都会落到数据库上,会对数据库造成很大的压力。一个简单的对策就是将不存在的数据也缓存起来(设定值为null),并根据情况设置较短或较长的失效时间。

二 消息队列

消息队列针对的是写的场景。将可以异步处理的消息先写入消息队列中,然后再从消息队列中拿出进行处理。

消息队列的组成:消息的生产者,消息队列,消息消费者。

消息队列的好处

  • 实现异步处理,提升处理性能

  • 更好的伸缩性

  • 削峰填谷

  • 失败隔离和自我修复:因为发布者不直接依赖消费者,所以消息系统可以将消费者系统错误与生产者系统组件隔离。生产者和消费者互相不受对方失败影响。

  • 解耦

消息队列的两种模型:点对点模型和发布订阅模型。

使用事件驱动架构EDA,可以把没有必要同步返回的操作变为异步执行,异步返回,优化程序性能,提升用户体验。

主要的MQ产品开发语言: RabbitMQ Erlang 开发。ActiveMQ和RockerMQ Java开发。Kafka Scala 开发。

三 负载均衡

负载均衡的分类:

  • HTTP重定向负载均衡

  • DNS负载均衡

  • 反向代理负载均衡

  • IP负载均衡

  • 数据链路层负载均衡

负载均衡的算法:

  • 轮询

  • 加权轮询

  • 随机

  • 最少连接:记录每个应用服务器正在处理的连接数(请求数),将新到的请求分发到最少连接的服务器上。这是最符合负载均衡定义的算法。

  • 源地址散列:根据请求来源的IP地址进行Hash计算,得到应用服务器。这个算法可用保证同一个来源的请求总在同一个服务器上处理,实现会话粘滞。

应用服务器集群Session管理的方法:

  • Session复制

  • Session绑定

  • 利用Cookie记录Session

  • Session服务器

四 分布式数据库

mysql复制方案

  • 主从复制

  • 一主多从复制

  • 主主复制

一主多从复制方案的优点:

分摊负载

专机专用

便于冷备

高可用

mysql复制的注意事项:

  • 主主复制的两个数据库不能并发写入

  • 复制只是增加了数据的读并发处理能力,没有增加写并发能力和存储能力

  • 更新表结构会导致巨大的同步延迟。所以需要更新表结构时,一般都是在主数据库和从数据库上分别手动操作。

用户头像

hifly

关注

还未添加个人签名 2018.03.08 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第5周总结:缓存,消息队列,负载均衡,分布式数据库