分布式(8)

目录

36.什么是TCC?

37.分布式系统中常用的缓存方案有哪些?

38.分布式系统缓存的更新模式?

39.分布式缓存的淘汰策略?

40.Java中定时任务有哪些?如何演化的?


36.什么是TCC?

TCC(Try Confirm Cancel)又被称补偿事务,TCC与2PC的思想很相似,事务处理流程也很相似,但2pc是应用在DB层面,TCC则可以理解为在应用层面的2PC,是需要我们编写业务逻辑来实现。

TCC他的核心思想是:针对每个操作都要注册一个与其对应的确认(Try)和补偿(Cancel)。

还拿下单扣库存解释他的三个操作:

Try阶段:下单时通过Try操作区扣库存预留资源。

Confirm阶段:确认执行业务操作,在只预留的资源基础上,发起购买请求。

Cancel阶段:只要涉及到相关业务中,有一个业务方预留资源未成功,则取消所有业务资源的预留请求。

TCC的缺点:

应用侵入性强:TCC由于基于在业务层面,至使每个操作都需要有try,Confirm,Cancel三个接口。

开发难度大:代码开发量很大,要保证数据一致性Confirm和cancel接口还必须实现幂等性。

37.分布式系统中常用的缓存方案有哪些?

客户端缓存:页面和浏览器缓存,APP缓存,H5缓存,localStorage和sessionStorage

CDN缓存:

内存存储:数据的缓存

内容分发:负载均衡

Nginx缓存:本地缓存,外部缓存

数据库缓存:持久层缓存(Mybatis,hibernate多级缓存),MySQL查询缓存

操作系统缓存:Page Cache,Buffer Cache

38.分布式系统缓存的更新模式?

Cache Aside模式

1.读取失效:Cache数据没有命中,查询DB,成功后把数据写入缓存

2.读取命中:读取Cache数据

3.更新:把数据更新到DB,失效缓存

Read/Write Througn模式

缓存代理了DB读取,写入的逻辑,可以把缓存看成唯一的存储

Write Back模式

这种模式下所有的操作都走缓存,缓存里的数据再通过异步的方式同步到数据库里面。所以系统的写性能能够大大提升了。

分布式系统缓存淘汰策略

缓存淘汰,又成为缓存逐出,是指在存储空间不足的情况下,缓存系统主动释放一些缓存对象获取更多的存储空间。一般LRU用的比较多,可以重点了解一下。

FIFO 先进先出是一种简单的淘汰策略,缓存对象以队列的形式存在,如果空间不足,就是放队列头部的对象。一般是链表实现。

LRU 最近最久未使用,这种策略是根据访问的时间先后来进行淘汰的,如果空间不足,会释放最久没有访问的对象(上次访问时间最早的对象)。比较常见的是通过有线队列来实现。

LFU 最近最少使用,这种策略根据最近访问的频率来进行淘汰,如果空间不足,会释放最近访问频率最低的对象。这个算法也是用优先队列实现的比较常见。

更进一步的谈谈Redis缓存淘汰的8个模式,可以参考上文Redis问答部分。

39.分布式缓存的淘汰策略?

分布式系统缓存淘汰策略

缓存淘汰,又成为缓存逐出,是指在存储空间不足的情况下,缓存系统主动释放一些缓存对象获取更多的存储空间。一般LRU用的比较多,可以重点了解一下。

FIFO 先进先出是一种简单的淘汰策略,缓存对象以队列的形式存在,如果空间不足,就是放队列头部的对象。一般是链表实现。

LRU 最近最久未使用,这种策略是根据访问的时间先后来进行淘汰的,如果空间不足,会释放最久没有访问的对象(上次访问时间最早的对象)。比较常见的是通过有线队列来实现。

LFU 最近最少使用,这种策略根据最近访问的频率来进行淘汰,如果空间不足,会释放最近访问频率最低的对象。这个算法也是用优先队列实现的比较常见。

更进一步的谈谈Redis缓存淘汰的8个模式,可以参考上文Redis问答部分。

40.Java中定时任务有哪些?如何演化的?

Timer

解释:1000ms是延迟启动时间,2000ms是定时任务周期,每2s执行一次

ScheduledExecutorService

解释:延迟1秒启动,每隔1秒执行一次,是前一个任务开始时就开始时间间隔,但是会等上一个任务结束再开始下一个

SpringTask

解释:

1.task1是隔5秒执行一次,{秒}{分}{时}{日期}{月}{星期}

2.task2是延迟1秒,每隔1秒执行一次

Quartz

quartz是一个开源的分布式调度库,他基于Java实现

1.Job表示一个任务,要执行的具体内容。

2.JobDetail表示一个具体的可执行的调度程序,Job是这个可执行调度程序索要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。

3.Trigger代表一个调度参数的配置,什么时候去调。

4.Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。

相关推荐
方方洛4 小时前
ray教程-25-附录E-端到端实战案例
人工智能·分布式·机器学习
迅翼SwiftWing1 天前
编队系列(二)|固定翼如何依靠邻居信息保持队形?一致性控制、通信拓扑与分布式仿真实现,附仿真代码
分布式
ly76891 天前
幂等消费者与重试副作用:Kafka 端点接入时的去重边界
分布式·kafka·linq·apache camel·幂等消费者·重试副作用·去重边界
qq_452396231 天前
第三篇:《从 ZooKeeper 到 KRaft 的迁移实战:前置条件、三阶段流程与回滚策略》
分布式·zookeeper·云原生
真上帝的左手2 天前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
程序猿乐锅2 天前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
sunny06602 天前
推理 INFRA 方法论(2):分布式推理:TP、DP、EP、CP 与 PP 的取舍
人工智能·分布式
字节探索2 天前
Redis 分布式锁:从 SETNX 误删到看门狗自动续期的原理与实践
redis·分布式
真上帝的左手2 天前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件
斯普信专业组2 天前
Kafka 3.9.1 三节点集群部署方案(ZooKeeper 模式)
分布式·zookeeper·kafka