分布式缓存架构,消息队列,负载均衡
分布式缓存架构
缓存 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
评论