自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(293)
  • 收藏
  • 关注

原创 Go语言KV存储引擎

kv存储引擎

2023-03-25 17:34:47 380 1

原创 TiDB架构分析

tidb

2023-03-03 00:03:36 583

原创 那些年我们追过的源码

java 源码

2023-02-08 22:01:11 249

原创 insert唯一索引死锁问题-2

innodb mysql 死锁

2023-02-07 22:45:08 320

原创 insert唯一索引死锁问题-1

innodb 死锁

2023-02-06 23:26:35 403

原创 insert唯一索引加锁流程

mysql innodb锁

2023-01-11 22:55:42 557

原创 MySQL Innodb Insert语句加锁流程

mysql innodb 锁

2023-01-10 23:39:31 1068

原创 MySQL普通索引加锁分析

mysql innodb锁

2023-01-09 22:41:54 370

原创 分布式存储--聊聊分布式数据库NewSQL

分布式数据库

2022-12-04 21:06:24 454

原创 分布式存储--字节数据库

分布式存储

2022-12-03 10:49:42 335

原创 分布式存储--负载均衡

分布式存储 负载均衡

2022-11-29 22:53:33 667

原创 分布式存储--数据库分类

分布式存储

2022-11-13 09:26:05 524

原创 分布式存储--大规模订单架构设计

订单系统,大数据

2022-11-12 19:16:21 750

原创 分布式存储--TableStore

TableStore

2022-11-12 11:57:00 727

原创 分布式存储--如何设计一个分布式存储--理论模型

分布式存储

2022-11-11 00:20:40 788

原创 分布式存储--类Redis存储

redis,分布式kv,

2022-11-10 19:57:55 776

原创 分布式存储--Elasticsearch

三者之间的联系:控制节点负责集群分片的分配和索引元信息的维护,数据节点负责存储数据,通过多副本协议实现数据高可用,协调节点负责客户端的接入,es是客户端通过rest http协议进行访问的,数据的读写就依靠协调节点进行处理了,可能一次数据访问需要多个分片一起参与。一个索引包含多个文档,实际存储是一个索引包含多个分片支持分布式,并且分片有主分片和副分片的概念,通过类似Raft算法的PacificA算法实现多节点分布式一致性。一个分片就是一个lucene索引。读流程:确定分片后,轮询选择分片(可能读副分片)

2022-11-09 23:58:01 277

原创 RocketMQ 5.0 POP消费模式

RocketMQ POP

2022-09-28 23:13:33 495

原创 RocketMQ消息重试机制

mq消息重试

2022-09-28 00:26:49 699 1

原创 分布式事务七种解决方案

6)最大努力通知(支付宝支付结果回调通知);1)XA规范,java实现-jta;7)seataAT模式;

2022-07-31 23:40:53 180

原创 RocketMQ-生产者发送消息&获取路由信息架构设计

rocketmq获取路由信息

2022-07-03 18:55:08 152

原创 RocketMQ-事务消息架构设计

rocketmq--事务消息架构设计

2022-07-02 10:27:05 124

原创 RocketMQ-延时消息实现原理

rocketmq-延时消息原理

2022-06-29 23:09:22 188 1

原创 RocketMQ-推模式消费过程

rocketmq推模式消费

2022-06-26 22:42:57 86

原创 RocketMQ-主从同步架构设计

rocketmq主从同步架构设计

2022-06-25 11:25:14 112

原创 RocketMQ Broker存储过程

1)接收生产者发送过来的消息,写入到commitlog,这里如果开启了堆外内存,会写到堆外内存;2)然后是commitlog文件的刷盘,有两种策略:同步刷盘和异步刷盘,如果是同步刷盘,会将commitlog文件刷回磁盘再返回给客户端,如果是异步刷盘+不开启堆外内存,那么会有异步线程定期将commitlog文件刷回磁盘,如果是异步刷盘+开启堆外内存,那么会先把数据从堆外内存拷贝到commitlog文件对应的mmap内存区,再通知异步线程定期将commitlog文件刷回磁盘;...

2022-06-19 22:47:13 120

原创 场景设计题--URL短链设计

URL短链由固定短域名+唯一字符串组成;唯一字符串怎么生成?1)假设保存在数据库有一个表long_short_url,有id,long_url,short_url 三个字段,需求是根据long_url查询对应的short_url,给long_url创建索引,short_url可以通过hash(long_url),但可能会有hash冲突,怎么解决呢?最简单的话可以给short_url创建唯一索引,如果hash冲突了必定插入不成功,可以对原来的long_url进行加工,在后面拼接上自定义的字符串,再进行has

2022-06-16 20:45:56 201

原创 问题排查--内存溢出

相关工具1)top命令;2)vmstat命令;3)pidstat命令;4)jstat命令;5)jstack命令;6)jmap命令导出堆文件,使用MAT分析内存溢出问题1)高并发下没有限流,瞬间创建大量对象,一般限流可以解决;2)内存泄漏导致,需要找到问题代码;1)线上怎么知道内存溢出了?2)top命令查看jvm进程内存使用情况;3)top -Hp pid命令查看具体线程堆栈信息、CPU使用率和负载;4)jmap命令查看堆内存,发现老年代内存使用率过高;5)jmap命令查看存活对象的

2022-06-14 22:49:27 799

原创 Redis分布式锁架构设计

仅当一个key不存在时,才设置成功,返回1,否则设置失败,返回0设置过期时间,redis2.8以前需要通过lua脚本保证setnx命令和expire命令的原子性,2.8以后可以直接通过setnx ex|px命令可能获取锁成功的线程执行业务比较久,比如只锁了3s,但是业务执行了4s,解决方案有两种,第一:评估加锁代码块执行时间,设置锁的时间;第二:watchdog思想,异步线程定期给锁续约;通过del命令实现,但是需要判断锁是否是自己设置的,其实这个是有必要的,因为redis本身的问题,比如设置key成功了,

2022-06-12 22:21:44 133

原创 MySQL执行器与存储引擎是怎么交互的

1)连接器2)查询缓存3)分析器4)优化器5)执行器6)存储引擎

2022-06-12 21:10:09 327

原创 Redis RDB持久化原理

RDB触发方式1)save2)bgsave3)后台触发,配置文件2和3都是通过fork子进程来处理fork本身是系统调用,会阻塞父进程,主要是复制页表耗时,理论上内存越大,越耗时;如果子进程生成rdb过程中,父进程大量修改或者删除key,因为fork是写时复制的原因,会导致父进程必须申请新的内存页,然后拷贝数据到新的内存页进行修改,会产生大量的缺页中断异常...

2022-06-12 19:04:16 59

原创 AOP与代理的区别

AOP–面向切面编程,一种编程思想代理–代理模式,一种设计模式AOP可以用代理模式实现,比如SpringAOP(底层是jdk动态代理&cgblib动态代理)AOP还可以用其他方式实现,本质就是织入方式的不同,比如Aspectj AOP有三种织入方式,分别是编译期织入、编译后织入、LTW(JavaAgent)实现。加上前面的运行时织入,就有四种了。如果不想用SpringAOP,可以用ByteBuddy AOP,也比较方便。...

2022-06-04 20:20:15 415

原创 Linux内核--思考问题

1)为什么每个进程都有自己的页表,如果多个进程映射到同一个物理页呢?2)中断的过程?3)系统调用的原理是软中断int 80,执行中断处理程序需要进入内核态,比单纯的中断多了哪些步骤?4)系统调用的两种方式:int 80 与 sysenter5)系统调用怎么进行参数传递的?6) 进程的内存信息:代码段、数据段、堆段、栈段,用mm_struct表示7)Linux的线程是轻量级进程,拥有独立的task_struct结构,但是mm_struct是共享的,那多个线程的多个函数栈不会冲突吗?其实线程的函数栈

2022-06-03 17:30:38 82

原创 nacos配置中心源码分析

nacos配置中心源码分析ConfigService接口实现类NacosConfigServiceNacosConfigService构造方法最重要一个组件:ClientWorkerClientWorker构造方法最重要一个组件:ConfigRpcTransportClientConfigRpcTransportClient的start方法:开启配置更新监听任务executeConfigListen方法客户端有文件缓存,但CacheData不是缓存,只是Listener缓存客户端获取配置:

2022-05-21 12:06:08 339

原创 CPU上下文切换原理

CPU上下文:把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来,加载新任务的CPU上下文,执行新任务。任务:1)进程;2)线程;3)硬件中断,中断处理程序的调用;CPU特权模式1)Ring0–内核空间;2)Ring3–用户空间;进程可以运行在用户空间和内核空间。通过系统调用实现进程用户态到内核态的切换。系统调用会发生CPU上下文切换,但是不涉及虚拟内存等进程用户态的资源,不会切换进程,也叫做特权模式切换。进程上下文:1)虚拟内存;2)栈;3)全局变量;4)内核堆栈;

2022-05-15 17:50:29 393

原创 sleuth与zipkin原理

2022-05-15 16:17:00 88

原创 服务治理--熔断限流--Sentinel原理

2022-05-15 16:06:48 177

原创 负载均衡算法--权重随机

思路1)设w的权重之和为total,然后把total分成n份,n是w数组的长度,比如w数组[1,3,4,5],total=13,分成4份,那么第1份[1,1],第2份[2,4],第3份[5,8],第4份[9,13];2)在[1,total]范围上,选取一个随机数x,看落到哪个范围上,返回第几份的序号;伪算法// 返回[1,total]范围的随机数x=random(1,total);// 遍历区间,看x落在哪个区间for(每个区间:区间){if(区间包含x){return 当前区间序号;.

2022-05-12 22:50:18 300

原创 延时消息实现--从数据结构到落地实现

延时消息指定延时后可以消费该消息或者说被执行数据结构有序表1)有序数组(二分)2)二叉搜索树(红黑树)3)跳表小根堆1)Java的DelayQueue,优先级队列跳表1)查询时间复杂度logn这3种数据结构的思想都是根据延时消息的执行时间升序排序,最小的就是最先执行的,添加消息的时候维护大小关系;落地实现1)定时扫描MySQL创建一个延时消息表delay_msg,有一个delivery_time字段,表示执行时间,那么执行SQL select * from delay_msg w

2022-05-12 00:00:50 285 1

原创 Redis怎么实现分布式锁

怎么实现1)setnx如果一个key已经存在,设置失败,返回0;2)防止死锁设置过期时间 :lua脚本/redis2.8以后的ex命令3)过期时间设置多久如果锁住的代码还没执行完,锁已经过期了,那么其他线程又能获取锁,所以可以开启一个异步线程,如果当前线程还没释放锁,继续延长锁的过期时间;同时释放锁的时候判断key对应的value是不是自己设置的,如果是才删除,用lua脚本保证原子性;绝对安全吗redis实现的分布式锁无论如何也不能保证安全,假设现在是单机redis实现分布式锁,一个线程获取

2022-05-05 23:39:00 744

go语言编写的兼容redis协议的kv存储

go语言编写的兼容redis协议的kv存储

2022-12-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除