2020-07-04- 第五周学习总结
1 分布式缓存
1.1 定义
存储计算机上的一个原始数据复制集,以便于访问。
缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加快读取的速度。一方面缓解了数据源的访问压力,另一方面提升了数据访问速度。
缓存和缓冲的区别
Buffer也是介于数据访问者和数据源之间的一种高速存储,用来解决数据访问者和数据源之间数据处理速度的不匹配性问题,比如从CPU写数据到磁盘上,CPU访问数据的速度要比磁盘快得多,这时候快速地向磁盘写数据,但是磁盘却不能将数据及时存储,此时CPU就要等待磁盘写数据完毕后才能再次向磁盘写数据。此时缓冲就是为了解决这种速度的不匹配性问题,当通过写数据时先将数据写入缓冲(Buffer)中,当Buffer写满后再通知磁盘进行读取。
缓存的数据结构是Hash表
1.2 缓存命中率
缓存命中率:缓存是否有效依赖于能多少次重用同一个缓存响应业务请求,这个度量指标被称作缓存命中率。
如果查询一个缓存,十次查询九次能够得到正确结果,那么它的命中率是90%。
影响缓存命中率的主要指标
缓存键集合大小,键数量越少,缓存的效率越高。
缓存可使用内存空间,物理上能缓存的对象越多,缓存命中率就越高。
缓存对象生存时间,对象缓存的时间越长,被重用的可能性就越高。
1.3 缓存类型
分布式和集群的区别
很多个服务器构成的系统就叫做分布式,集群是分布式概念中的子集。特指的是提供同样功能的服务器构建应用服务器子系统。一组NoSQL服务器构成NoSQL集群。集群中每个应用服务器构件的应用是一样的。
集群中怎么添加一个服务器?实现伸缩。
(1)Memcache分布式缓存如何通过key找到对应服务器中的value。
使用hashcode进行服务器个数取模,余数就是对应服务器的序号。
也叫做余数hash算法。
(2)加进来的服务器,取模的数目不一样导致集群数据获取失败。
分布式对象缓存的一致性hash算法。
技术是纯粹的,不能指望一个技术解决所有问题。
1.4 Hash算法
1.4.1 一致性hash算法
一致性hash算法的思想是将服务器节点计算得到的hash值映射到0~2的32次方的hash环上,通过对服务器节点hash值排序,将在相邻节点之间的KV值存入到hash值较大的那个节点上,而大于最大的hash值服务器节点则保存到最小的hash值服务器节点上,这样就将整个HashCode组成一个环。
一致性hash节点扩容
每增加一个服务器,失效的key就会到数据源去查找。服务器越多,这种影响越小。
缺点
这种算法存在的问题是负载不均衡。
1.4.2 基于虚拟节点的一致性hash算法
基于虚拟节点的一致性Hash算法是在一致性hash算法基础上,将每个物理节点生成N个虚拟服务器节点,并将虚拟机服务器节点的hashCode映射到Hash环上的一种算法。当需要找到KV应该保存到哪个节点上时,需要先知道KV对应的虚拟节点,再通过虚拟节点查找到物理节点上。
这种算法相对于一致性hash算法有着较好的负载均衡性,但是这种负载均衡性其主要核心因素在于hash函数,只要hash函数能将KV均匀分布再hash换上,那么整个算法就能保证相对的负载均衡。
2 消息队列
2.1 异步调用架构
消息生产者,消息队列,消息消费者
点对点模型,发布订阅模型。
2.2 优点
实现异步处理,提升处理性能
更好的伸缩性,根据业务需求适当增加生产者或者消费者。
削峰填谷,将峰值请求进行队列异步处理。
失败隔离和自我修复,生产者消费者之间不会相互依赖,且不受对方失败影响。
解耦合,请求/响应耦合表面积 >>> 事件驱动耦合表面积
2.3 主要MQ产品比较
RabbitMQ,性能好,社区活跃,但是使用了Erlang开发,对于不熟悉Erlang的同学而言不便于二次开发和维护。(49M)
ActiveMQ影响较广泛,可跨平台,使用Java开发,对Java比较友好。(27M)
RocketMQ时阿里推出的一个开源产品,也是使用Java开发,性能较好,可靠性也比较高。(35M)
Kafka,LinkedIn出品,Scala开发,专门针对分布式场景进行优化,因此分布式的伸缩性会比较好。(63M)
3 负载均衡
3.1 常见负载均衡架构
HTTP重定向负载均衡
DNS负载均衡
反向代理负载均衡
IP负载均衡
数据链路层负载均衡
3.2 负载均衡算法
轮询
加权轮询
随机
最少连接
源地址散列
3.3 应用服务器集群的Session管理
Session复制
Session绑定
使用Cookie记录Session
Session服务器
4 分布式数据库
MySQL复制
MySQL主从复制
MySQL一主多从复制,优点有分摊负载、专机专用、便于冷备、高可用
MySQL主主复制
MySQL主主失效恢复
MySQL复制中,主主复制的两个数据库不能并发写入。复制只是增加了数据的读并发处理能力,没有增加写并发能力和存储能力。更新表结构会导致巨大的同步延迟。
评论