技术选型能力反映了架构师的综合水平(第 5 周学习总结)

用户头像
李德政
关注
发布于: 2020 年 07 月 08 日
技术选型能力反映了架构师的综合水平(第 5 周学习总结)

一、分布式缓存架构

1. 什么是缓存Cache?

缓存:存储在计算机上的一个原始数据复制集,以便于访问。缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加快读取的速度。

2. 无处不在的缓存

  • CPU缓存

  • 操作系统缓存

  • 数据库缓存

  • JVM编译缓存

  • CDN缓存

  • 代理与反向代理缓存

  • 应用程序缓存

  • 分布式对象缓存

3. 缓存的关键指标

访问速度要快:缓存数据存储结构一般是Hash表

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

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

  • 缓存键集合大小

  • 缓存可用内存空间

  • 缓存对象生存时间

4. 缓存分类

a. 通读缓存(read-through)

  • 代理缓存

  • 反向代理缓存

  • 多层反向代理缓存

  • 内容分发网络(CDN)



b. 旁路缓存(cache-aside)应用代码主动缓存对象

  • 浏览器对象缓存

  • 本地对象缓存:对象存储在同一台机器的共享内存中



c. 远程分布式对象缓存(Redis、Memcached)

  • Memcached分布式对象缓存:由应用程序对key进行hash,选择分片

  • Redis分布式对象缓存

5. 分布式对象缓存的一致性hash算法

集群:有多台提供相同服务的机器组成

访问集群路由算法

当由应用程序对key进行hash取模,选择分片时,如果增加了服务节点,会导致取模结果失效,大量缓存无法命中。传统的hash算法无法解决这个问题,于是就有了一致性hash。

一致性hash也有缺点:可能出现不均衡

解决:基于虚拟节点的一致性hash算法

6. 缓存为什么能显著提升性能

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

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

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

7. 合理使用缓存

使用缓存对提升系统性能有很多好处,但是不合理的使用缓存可能非但不能提高系统性能,还会成为系统累赘、甚至风险。

频繁修改的数据不适合缓存:这种数据缓存起来后,由于频繁修改,还没来得及修改就已经失效或更新,徒增系统负担。一般来说,数据的读写比在2:1以上,缓存才有意义。



系统没有热点数据访问:如果系统没有热点数据,不遵循二八定律,那么增加缓存也意义不大。



数据不一致与脏读:缓存数据通常有失效时间,当更新了数据库中的数据时,缓存数据可能没有及时更新,会导致数据不一致。如果采用立即更新缓存或失效缓存的方式,可以减少数据不一致的情况,但也增加了一定的复杂度。



缓存雪崩:由于缓存过期失效导致大量请求穿透缓存到数据库,导致数据库服务宕机,而引发整个服务故障。



缓存预热:缓存中存放的是热点数据,热点数据又是缓存系统利用LRU算法对不断访问的数据筛选淘汰出来,这个过程需要花费较长时间,在这段时间系统的性能不太高、数据库负载较大。那么最好在缓存系统启动的时候就把热点数据加载好。



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

二、消息队列与异步架构

1. 同步调用 VS 异步调用

异步采用消息队列的方式(Tornado采用的异步方式是???)

缓存可以提升读的能力,消息队列可以提升写的能力(给用户返回一个提交成功的结果,保护数据库)。

削峰填谷、解耦

事件驱动架构EDA

三、负载均衡架构

负载均衡分类:

  • http重定向负载均衡

  • DNS负载均衡

  • 反向代理负载均衡

  • IP负载均衡

  • 数据链路层负载均衡



负载均衡算法:

  • 轮询

  • 加权轮询

  • 随机

  • 最少连接

  • 源地址散列(IP Hash等)

四、分布式数据库

分类:

  • MySQL主从复制

  • MySQL一主多从复制

  • MySQL主主复制



发布于: 2020 年 07 月 08 日 阅读数: 41
用户头像

李德政

关注

还未添加个人签名 2017.11.30 加入

还未添加个人简介

评论

发布
暂无评论
技术选型能力反映了架构师的综合水平(第 5 周学习总结)