架构训练营 week05- 总结

用户头像
尔东雨田
关注
发布于: 2020 年 07 月 09 日
架构训练营week05-总结

1 分布式缓存架构

1.0 什么是缓存cache

介于数据访问者和数据源之间的一种高速存储;当数据需要多次读取时,用于加快读取的速度.

缓存数据存储:Hash表:



1.1缓存的关键指标

缓存命中率:查询n次缓存,有多少次得到了缓存;

1.2 影响命中率的3个因素

  • 缓存的key:因为缓存键主要是Hash存储,所以缓存键重复概率要低

  • 进程内存的大小:缓存能使用的内存越大,能容纳的缓存就越多

  • 缓存的存活时间(TTL):缓存的存活越久,被重用的可能性就越大

1.3 缓存的分类

  • 代理缓存:一般在客户端网络,比如公司出口网关、甚至比如浏览器缓存也算一种

  • 反向代理缓存:一般架设在应用服务器前面,为客户端提供响应,比如NGINX、HaProxy等

  • CDN内容分发网络:缓存静态文件,而且分布在全国各地

  • 旁路缓存:让客户端自己先请求缓存,不存在再请求数据服务,客户端复杂了。

  • 分布式对象缓存:在多台缓存服务器存放不同的缓存数据,减轻单台缓存服务器的压力

1.4 一致性Hash

由于分布式缓存架构,在扩容或单台崩溃时,可能带来缓存大批量失效的风险,从而造成缓存大量穿透,最终雪崩的场景,因此提出了一致性Hash的架构方案。

同时,一致性Hash可能带来服务器压力不均衡,所以通过要通过增加虚拟结点的情况来改善

验证一致性Hash算法是否均衡,要通过计算标准差的方案来衡量

标准差计算公式

(每个样本 - 平均值)的平方 / (服务器数 - 1),结果再取平方根

平方根的结果跟平均值越接近,表示算法的质量越好,分布越均衡。



Java里一般使用SortMap或TreeMap红黑树来实现一致性Hash;

Redis不使用一致性Hash,而是使用了桶的方案进行数据分片,Memcached使用一致性Hash,服务器之间不共享信息,甚至服务器都不知道自己在集群里,架构相对简单一些。



1.5 缓存穿透、缓存雪崩及缓存预热

  1. 缓存雪崩

当缓存服务崩溃后,数据库不能承受过大的访问压力而宕机,进而导致整个网站不可用;

  1. 缓存预热

对于一些热点数据,在系统启动时就加载到缓存;

  1. 缓存穿透

客户端持续请求某个不存在的缓存Key,导致数据请求落在后端数据库上。

避免方式:把不存在的数据也进行缓存,但是要设置较短的缓存时长。对于热点key,且数据不敏感的,也可以对请求数据库加锁,其它无缓存请求直接返回空。



2 消息队列与异步架构

2.1 同步调用 VS 异步调用

异步调用,不阻塞应用线程;

2.2 消息队列构建异步调用架构

角色:消息生产者、消息队列、消息消费者

消息队列架构模型:点对点模型、发布订阅模型

2.2.1 消息队列好处

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

  • 带来更好的伸缩性

  • 削峰

  • 解耦

  • 失败隔离和自我修复

2.3 事件驱动架构及MQ比较



3 负载均衡架构

将高并发用户请求分发到多台服务器组成的服务器集群上,利用更多的服务器资源处理高并发下的计算压力

3.1 HTTP重定向负载均衡

3.2 DNS 负载均衡



3.3 反向代理负载均衡



3.4 IP负载均衡



3.5 数据链路层负载均衡



3.6 负载均衡算法

轮询、加权轮询、随机、最少连接、源地址散列。

3.7 集群的session 管理

  • Session复制

  • Session绑定

  • Cookie记录Session

  • 共享Session服务器



4 分布式数据库

4.1 MySQL 复制

  • 主从复制

  • 一主多从复制

  • 主主复制

4.2 数据分片

  • 硬编码实现数据分片

  • 映射表外部存储

4.3 分布式数据库中间件

4.4 数据库集群伸缩

扩容策略

数据库部署方案

单一数据库与单一服务-> 主从复制

2个web服务与2个数据库-> 功能进行分割

综合部署->主从复制、功能分割



用户头像

尔东雨田

关注

预备用枪! 2017.12.12 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营week05-总结