架构师训练营作业:第五周

用户头像
m
关注
发布于: 3 小时前

分布式缓存架构

架构原理

什么是cache

原始数据的复制集,以便于访问。

 

Cache VS Buffer

Cache用于优化反复读操作

Buffer用于高速和低速设备的读写性能

 

无处不在的Cache

CPU Cache

OS Cache

数据库 Cache

JVM Cache

 

CDN Cache

代理与反向代理Cache

前端 Cache

应用程序Cache

分布式对象Cache

 

各种介质的数据访问延迟

内存:100ns

SSD磁盘搜索100us

网络数据包在同一个数据中心来回:500us

顺序读1MB网络数据:10ms

顺序从非SSD读取1M: 30ms

跨大下西洋数据包一个来回:150ms



缓存数据存储(Hash表)

 

Cache的关键指标

命中率

缓存键集合大小

缓存可使用的存储空间大小

缓存对象的生存时间TTL

 

常用的缓存实现形式

代理缓存/反向代理缓存

反向代理可以多层部署

内容分发网络CDN

就近部署,不同的运营商都需要部署

 

Read-through VS cache-aside

 

本地对象缓存

本地对象缓存构建分布式集群,即每个应用节点都保存一份本地缓存,并同步更新。

 

远程分布式对象缓存

 

MemCached 分布式缓存

通过客户端实现缓存的路由,缓存集群本身是share nothing的

 

一致性Hash算法

hash环:用箭头相连,箭头上的数字都在箭头指向的节点上。

虚拟节点:解决增加节点后的负载不均衡,实践中一般虚拟150到200个虚拟节点。

 

合理使用缓存

缓存优化的是读数据,因此不适合使用写数据

缓存适合多次读取的数据

不适合没有热点的访问



LRU: least recently used

数据不一致和脏读

缓存预热

缓存问题:

  • 缓存雪崩:大量缓存丢失或失效

  • 缓存穿透:原数据不存在的数据。

  • 缓存击穿:针对某一特别热点服务器的缓存雪崩。

  • 解决方法:

  • 互斥锁。即多个客户端竞争访问原数据的锁,其他客户端等待。

  • 永不过期,通过单独的线程完成更新

缓存中间件:redis vs memcached

  • Redis是在memcached的基础上发展而来

  • Redis支持复杂数据结构

  • 支持多路复用一部IO

  • 支持主从复制

  • Redis支持原生集群和share nothing集群模式

 

消息度列

缓存:优化读性能

消息队列和异步:优化写性能



异步和消息队列的本质:拆分、buffer

 

消息队列的优势:

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

  • 削峰填谷

  • 解耦,失败隔离和自我修复(生产者和消费者不直接依赖)

 

事件驱动架构EDA

类似设计模式中的观察者模式(也称作发布订阅模式)

 

主要的MQ产品

Rabbit MQ

Active MQ

Rocket MQ

Kafka

 

负载均衡

负载均衡的关键点

  • 请求是如何分发到不同的服务器的

  • 请求的路由规则

 

HTTP重定向负载均衡

优点:

简单

 

缺点:

性能差:每次请求都需要额外增加一次重定向请求

安全性差:内部应用服务器需要暴露给客户端

 

DNS负载均衡

DNS负载均衡一般配合实现多级负载均衡,DNS解析出来的是不同的负载均衡服务器的IP

 

反向代理负载均衡

缺点:运行于HTTP层,需要构建完整的HTTP报文,性能较差。不适合大规模集群的负载均衡。

 

IP负载均衡

修改TC/IP数据包的目标和源IP地址,实现转发。不需要构建HTTP报文

 



有点:不需要HTTP层的报文转换

缺点:需要传递返回报文(而返回报文通常很大),增加负载均衡服务器的压力。

 

链路层负载均衡

修改请求的目标mac地址,同时负载均衡服务器和应用服务器共享同一个虚拟IP地址。

响应报文不经过负载均衡服务器





负载均衡算法

  • 轮询/加权轮询

  • 随机/加权随机

  • 最少连接

  • 源地址散列(实现会话粘滞)

 

session管理

  • session复制(性能和容量差)

  • session绑定(无法高可用)

  • cookie记录session

  • 远程session服务器(应用服务器实现share nothing)

 

问题

缓存的更新策略

一致性hash,如果节点的hash值相同怎么办?

异步处理的一致性问题,结果处理。

IP负载均衡如何映射返回报文的目标IP地址?(记录映射表)



用户头像

m

关注

还未添加个人签名 2018.06.06 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营作业:第五周