摘要:删除策略 Redis的数据过期删除策略采用:定时删除和惰性删除两种策略 定时删除策略:Redis启用一个定时器监视所有的key,判断key是否过期,过期的话就删除。这种策略可以保证过期的key最终被删除,但是也存在严重的缺点:每次遍历都遍历内存中所有的key,非常消耗CPU资源,并且当key已过期,
阅读全文
摘要:FastLeaderElection 目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5;按编号依次启动,它们的选举流程如下: 服务器1启动,给自己投票,然后发投票信息,由于其他机器还没有启动所以它收不到任何反馈信息,服务器1的状态一直属于Looking。 服务器2启动,给自
阅读全文
摘要:ZAB协议包含两种模式: 崩溃恢复模式 消息广播模式 崩溃恢复模式: Zookeeper集群服务刚刚启动 Leader宕机 Leader重启 网络故障导致不存在过半服务器与Leader保持正常通信 当进入崩溃恢复模式时,所有服务器参与重新选举,首先选举产生新的Leader,然后集群中Follower
阅读全文
摘要:zookeeper不是为高可用设计的 由于要跨机房容灾,很多系统实际上是需要跨机房部署的。出于性价比的考虑,通常会让多个机房同时工作,而不会搭建N倍冗余。也就是说单个机房肯定撑不住全流量。由于zookeeper集群只能有一个master,因此一旦机房之间出现故障,zookeeper master就只
阅读全文
摘要:RocketMQ和Kafka区别 1)适用场景 Kafka适合日志处理 RocketMQ适合业务处理 结论:平手,根据具体业务定夺 2)性能 kafka单机写入TPS号称在百万条/秒; RocketMQ大约在10万条/秒; 结论:追求性能的话,kafka单机性能更高 3)可靠性 RocketMQ支持
阅读全文
摘要:缓存常见问题 缓存击穿 概念:对于一些设置了过期的key,如果这个key可能会在某些时间点被超高并发地访问,是一个热点数据 原因:缓存在某个时间点过期的时候,恰好在这个时间点对这个key有大量的并发请求过来,该key没有命中,大量请求穿透到数据库服务器。 解决方案: 1)使用互斥锁;在缓存失效的时候
阅读全文
摘要:概括:缓存是通过牺牲强一致性来提高性能的。 这个是由CAP理论决定的。缓存系统适用的场景就是非强一致性的场景,它属于CAP中的AP。 强一致性还是弱一致性? CAP理论,指的是在一个分布式系统中,只能满足其中两项,三者不可兼得。 CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个
阅读全文
摘要:Redis的双写问题 双写的情况下,是先操作数据库还是先操作缓存呢? 在Cache-Aside缓存模式中,有些小伙伴会有疑问,在写入请求的时候,为什么是先操作数据库呢?为什么不先操作缓存呢? 假设有A、B两个请求,请求A做更新操作,请求B做查询读操作。 A、B两个流程如下: 线程A发起一个写操作,第
阅读全文
摘要:谈谈一致性 一致性是指数据保持一致,在分布式系统中,可以理解为多个节点中的数据是一致的。 强一致性:用户写入什么数据,就可以读出什么数据。这种一致性最符合用户的直觉,用户体验好,但实现起来往往对系统的性能影响最大。 弱一致性:在用户写入系统成功后,不承诺可以立即读出写入的数据,也不承诺多久数据可以达
阅读全文
摘要:RocketMQ消息发送 RocketMQ发送普通消息有三种方式: 可靠同步发送:发送者向MQ执行发送消息API时,同步等待,直到消息服务器返回发送结果。 可靠异步发送:发送者向MQ执行发送消息API时,指定消息发送成功后的回调函数,然后调用消息发送API后,立即返回,消息发送者线程不阻塞,直到运行
阅读全文
摘要:基础概念 分布式服务SOA架构体系中会有服务注册中心,分布式服务SOA的注册中心主要提供服务调用的解析服务,指引服务调用方(消费者)找到对应的服务提供者,完成网络通信。 架构设计 消息中间件的设计思路一般基于主题的订阅发布机制,消息生产者(Producer)发送某一主题的消息到消息服务器,消息服务器
阅读全文
摘要:设计理念 RocketMQ的设计是基于主题的发布与订阅模式,核心功能包括:消息发送、消息存储、消息消费; 整体设计有两个目标:简单与高性能,具体体现如下三个方面: 首先,引入Nameserver作为协调组件,与业界普通使用Zookeeper作为协调组件不同,RocketMQ通过自研Nameserve
阅读全文