分布式缓存架构,消息队列,负载均衡

用户头像
garlic
关注
发布于: 2020 年 10 月 23 日
分布式缓存架构,消息队列,负载均衡

分布式缓存架构



缓存 Cache

存在在原始数据的复制集合. 应用场景CPU缓存, 操作系统缓存, 数据库缓存,JVM编译缓存, CDN缓存,代理,反向代理缓存, 前端缓存,应用缓存, 分布式对象缓存.



影响缓存命中指标

  • 键值集合大小

  • 内存空间

  • 对象有效时间



架构中缓存使用



通读缓存: 通读缓存客户端通过通读缓存链接到原始服务器

  • 代理缓存

  • 反向代理缓存

  • 多层反向代理缓存

  • 内容分发网络CDN



旁路缓存: 应用维护的缓存.

  • 浏览器缓存

  • 本地对象缓存



管理方式

  • 本地化管理: 各个节点保存并同步

  • 远程化管理: 由专门的远程节点管理 , 分布式缓存



分布式缓存

  • 一致性hash

  • 虚拟节点



合理使用缓存



需要关注的问题

  • 频繁修改数据

  • 没有热点的访问

  • 数据不一致与脏读: 关注应用是否允许一定时间段内的数据不一致性.

  • 缓存雪崩:

  • 缓存预热

  • 缓存穿透



Redis Vs Memcached

Redis支持复杂数据结构: Strings, Lists, Sets, Hashes, Sorted Set , Bitmaps , HyperLoglogs

Redis支持多路复用异步I/O: 通过封装select/epoll/kqueue/evport实现

Redis支持主从复制: Repcached http://repcached.lab.klab.org/ 是一个Memcached主从复制方案

Redis 原生集群与 share nothing 集群模式



可以看到Redis6 开始支持 Client side caching



Redis集群



redis集群没有使用一致性hash, 使用了另一种形式地方分片被成为hash slot, 集群中有16384个slot, 将key通过CRC16 mod 16384 ,决定可以存放的在那个slot里. 每个阶段负责包含一定数量的slots 如果是三个节点A, B,C 他们包含的slots可能类似这样



  • Node A contains hash slots from 0 to 5500.

  • Node B contains hash slots from 5501 to 11000.

  • Node C contains hash slots from 11001 to 16383.



这些slots在节点中被移动, 当增加一个D节点时 , 在ABC节点上的slots会有部分移动到D, 如果去掉一个节点, 如A, A上的slots会移动到B,C节点.



Redis集群使用主从模式, 集群可以为节点添加从节点,防止某一节点下线导致相关slots无法使用.



客户端可链接任一节点使用与Redis集群, Redis节点间彼此互联.



https://redis.io/topics/cluster-tutorial



消息队列与异步架构



通过消息队列可以构建异步架构



消息队列结构

  • 生产者

  • 消息队列

  • 消费着



消息队列好处



  • 削峰填谷: 可以缓冲交易请求

  • 失败隔离自我修复: 解耦合



事件驱动架构EDA中使用到消息队列



主要产品

  • RabbitMQ

  • ActiveMQ

  • RocketMQ

  • Kafka



负载均衡架构



负载均衡模式

  • http重定向

  • dns负载均衡

  • 反向代理负载均衡

  • IP负载均衡



负载均衡算法

  • 轮询

  • 加权轮询

  • 随机

  • 最少连接

  • 源地址散列



Session管理

session复制

session绑定

cookies记录

session服务器



架构师训练营作业-李智慧老师相关讲义

Photo by Gabriel Peter from Pexels



用户头像

garlic

关注

还未添加个人签名 2017.11.15 加入

还未添加个人简介

评论

发布
暂无评论
分布式缓存架构,消息队列,负载均衡