架构师训练营 1 期 - 第五周总结(vaik)

用户头像
行之
关注
发布于: 2020 年 10 月 25 日
架构师训练营 1 期 - 第五周总结(vaik)

本周概要

本周主要讲述了分布式缓存的基本概念,基本原理,缓存的种类和应用场景,分布式缓存的一致性hash算法原理;然后是通过消息队列来实现异步架构,并讲述了异步架构带来的好处;最后部分讲解的是负载均衡架构,以及各种负载均衡实现原理和应用场景,以及相关的算法。

我的理解:

通过本周的学习,我对当今互联网架构师所需要掌握的基础方法,原理、线路有了更加清晰的认识,也渐渐深入到更加基础的技术原理和实现,以及针对解决的问题,不过我觉得要想成为一个优秀的架构师,光听老师的课程远远不够,老师的课程只是指明了一条道路和方向,而具体的路则需要自己脚踏实地的一步一步走完,过程中遇到的种坑和问题都需要自己亲自去解决,有了老师的指引,我想我能更快更好的走下去。

分布式缓存架构

基本概念和原理、衡量指标

什么是缓存
  • 介于数据访问者与数据源之间的一种高速存储,用于加快读取的速度

  • 缓存和缓冲的区别

缓存主要是从高速存取设备中读取

缓冲主要是用于高速设备向低速设备中读和写

我的理解:

缓存最核心的作用就是提升性能,减少网络请求步骤,最近节点返回数据,从而节省流量,降低成本。

缓存数据存取(Hash表)

我的思考:

利用Hash读取的算法复杂度只O(1),从而根据Key快速找到物理地定位到Value,这是软件算法层面的实现。

而硬件层面上,直接把低速的硬盘中的数据复制到高速的内存中直接返回,从而几十上百倍提升读取速度

缓存的关键指标
  • 缓存命中率

  • 缓存键集合大小:缓存键数量越小,缓存的效率越高

  • 缓存可用内存空间:物理上能缓存的对象越多,命中率就越高

  • 缓存对象生存时间:对象生存时间越长,对象被重用的可能性越高

我的思考:如何提升缓存命中率,需要从业务角度去仔细分析数据的变化和读取频率。一种是频繁读,写得小的数据作为热点数据,命中率自然要高;另一种是读写取频率少的数据刚作为冷数据;最后一种是写多读少的数据尽量不放缓存。

各种介质数据访问延迟

缓存的各种形式和应用

代理缓存

反向代理缓存

多层反向代理缓存

CDN缓存

通读缓存

旁路缓存

浏览器对象缓存

本地对象缓存

本地对象缓存构建分布式集群

远程分布式对象缓存



Memcached分布式缓存

  • Share-Nothing模型

  • 由客户端实现路由算法去匹配对应的缓存服务器

  • 这种本地路由算法存在增加节点后,缓存不均匀的问题

我的理解:以上各种缓存的应用场景是不一样的,实现的机制和原理也有差异,充分理解场景和原理差异是掌握好各种缓存应用的关键,这需要自己花更多的时间和实践中去学习掌握。

分布式缓存的一致性Hash算法



我的实现思路:

1 一个SortedMap保存所有的虚拟结点,以虚拟结点的hashcode为Key Value直接就服务器IP

2 三个核心方法

添加服务器

删除服务器

根据Key查找服务IP

3 虚拟结点的Hashcode算法

//添加缓存服务器
public void AddCacheServer(String serverIp){
for(int i=0;i<cacheServerMappingNumber;i++){
String nodeKey = i*10000+"_"+serverIp+"_"+i*10000;
int hashCode = nodeKey.hashCode();
virtualCacheServerKeyList.put(hashCode,serverIp);
}
}
//删除缓存服务器
public void RemoveCacheServer(String serverIp){
for(int i=0;i<cacheServerMappingNumber;i++){
String nodeKey = i*10000+"_"+serverIp+"_"+i*10000;
int hashCode = nodeKey.hashCode();
virtualCacheServerKeyList.remove(hashCode);
}
}

缓存的常见问题和解决方法

数据不一致与脏读
缓存雪崩
缓存穿透
缓存预热

Redis VS Memecached

  • Redis 支持复杂的数据结构

  • Redis 支持多路复用异步 I/O 高性能

  • Redis 支持主从复制高可用

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

redis集群



消息队列

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





消息队列的好处
  • 实现异步处理,提升处理性能

  • 更好的伸缩性

  • 削峰填谷

  • 失败隔离和自我修复

  • 解耦

事件驱动架构 EDA

负载均衡架构

HTTP 重定向负载均衡
DNS 负载均衡
反向代理负载均衡
IP 负载均衡
数据链路层负载均衡



用户头像

行之

关注

还未添加个人签名 2018.09.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 1 期 - 第五周总结(vaik)