- 博客(188)
- 资源 (4)
- 收藏
- 关注
原创 mysql RR、RC隔离级别实现原理
采用乐观锁实现,它通过对不同事务生成不同的快照版本,通过UNDO版本链进行管理并且在MVCC里面,规定了高版本能够看到低版本的事务变更,低版本看不到高版本的事务变更,从而实现了不同事务之间的数据隔离。是一种特殊的表级别锁。简言之,如果一个事务正在往表中插入记录,所有其他事务的插入必须等待,以便第一个事务插入的行,是连续的主键值。写锁,给事务加上排它锁,该事务可以执行任意读写操作,其他事务无法获取该排它锁,也不能加其他类型的锁。保证并发场景下,使用RC高过RR,RC的锁的粒度是只有一行,RR是多行的锁。
2025-01-07 21:28:51
1410
原创 dubbo消费方调用服务流程
dubbo解析ReferenceConfig,经过dubbo构建代理、Invoker链路,注册消费者,并且订阅注册中心提供方发布的服务,并且经由cluster集群扩展、路由过滤、负载均衡到Protocol层、exchange层、Transport层完成netty服务消费。无论服务发布还是服务订阅,都是通过dubbo的十层架构完成的,每一层都是通过SPI机制或者adative机制进行扩展实现的,Invoker责任链路能够把每一层的的责任划分开来,结构清晰。
2024-06-06 16:07:12
455
原创 dubbo订阅服务
远程引用:创建 invoker 的核心逻辑是在 RegistryProtocol 的 doCreateInvoker 方法中完成的。本地引用:本地引用环节中使用的 invoker 对象是从 InjvmProtocol 中 exporterMap 获取到的。通过解析 @DubboReference 注解来标识需要订阅的服务,并且解析成ReferenceConfig配置类。ReferenceConfig 的 get 方法会先后进行本地引用与远程引用的两大主干流程。2、订阅提供方,可以实时感知到提供方的变化。
2024-06-06 16:06:25
359
原创 dubbo发布服务
通过扫描指定包路径下含有 @DubboService 注解的 Bean 定义,把扫描出来的 Bean 定义属性,全部转移至新创建的 ServiceBean 类型的 Bean 定义中,为后续导出做准备。主要有两块,一块是 injvm 协议的本地导出,一块是暴露协议的远程导出,远程导出与本地导出有着实质性的区别,远程导出会使用协议端口,通过 Netty 绑定来提供端口服务。远程导出的一个分支,会将提供方的服务接口信息,通过 Curator 客户端,写到 Zookeeper 注册中心服务端去。
2024-06-06 16:05:37
516
原创 Dubbo动态服务下线
1、Dubbo服务消费端会使用Zookeeper里面的Watch来针对Zookeeper Server端的/providers节点注册监听,3、Dubbo Client端收到事件以后,就会把本地缓存的这个服务地址删除,这样后续就不会把请求发送到失败的节点上,完成服务下线感知。2、一旦这个节点下的子节点发生变化,Zookeeper Server就会发送一个事件通知Dubbo Client端。dubbo是依赖Zookeeper里面提供的Watch机制来实现的。
2024-06-06 16:04:08
549
原创 RocketMq Broker源码
NameServer 在收到来自 Broker 的心跳消息后,更新 BrokerLiveInfo 中的 lastUpdateTimestamp,如果 NameServer 长时间未收到 Broker 的心跳信息,NameServer 就会将其移除。brokerAddrTable:维护了 Broker Name 和 Broker 元信息的映射关系,Broker 通常以 Master-Slave 架构部署,BrokerData 记录了同一个 Broker Name 下所有节点的地址信息。
2024-06-04 17:03:32
284
原创 RocketMQ consumer DefaultLitePullConsumerImpl 拉模式
推模式做了封装,Broker启动时会将PullRequest封装起来,通过callback设计模式让consumer自行拉取消息,表面看起来时推消息,实际还是consumer自行拉取。4、长轮询优化:使用延时Task处理PullRequest,每隔5秒拉取消息,当处理大批量消息,延迟任务变更为10秒。1、从阻塞队列里面消费PullRequest,PullRequest调用netty client做出Response。拉模式是由consumer主动去拉取消息,自行从阻塞队列里面拉取PullRequest。
2024-06-04 15:23:19
504
原创 Tomcat启动过程
从配置文件读取信息,并且将pojo,StandardServer、StandardService、StandardEngine、StandardHost、Connector类名加载到集合中。将StandardServer、StandardService、StandardEngine、StandardHost、Connector类实例化。发生在org.apache.catalina.startup.Catalina#load()2、容器启动,启用StandardContext维持Socket连接。
2024-05-29 14:44:18
307
原创 order by工作过程和优化
order by 是由优化器决定的,如果优化器认为filesort速度快,那么走filesort排序,如果优化器认为索引速度快,那么走索引排序。
2024-05-28 15:26:37
209
原创 mysql innodb为什么选择B+树
mysql底层采用B+树的数据结构,页索引16KB,全部存储到B+树的非叶子节点上,16KB全是索引数据,相对于B树存储键值对而言,能够存储更多的数据。并且由于索引的关系,树的层高就更矮,而底层的双向链表,对于范围索引,排序查找、去重更有优势。
2024-05-28 00:12:33
143
原创 BeanFactory、FactroyBean、ApplicationContext
定制的工厂Bean,可以通过抽象工厂方式创建的bean,不纳入spring的生命周期、依赖、注入特性,相当于spring给第三方的一个扩展,比如dubbo的@DubboReference,ReferenceBean交给dubbo ioc自己管理。实现BeanFactory接口,全局上下文,非spring自动注入但加入spring管理的bean,刷新生命周期的时候调用的工厂直接就是ApplicationContext,通过ApplicationContext一样可以刷新容器。
2024-05-26 18:03:49
241
原创 spring自定义初始化的加载顺序
构造函数>@PostConstruct > afterPropertiesSet > init-method。
2024-05-26 17:41:15
537
原创 二叉树、红黑树、二叉平衡树
红黑树优化了平衡二叉树需要频繁自旋的场景,插入最多需要两次旋转,删除最多需要三次旋转,不需要顾忌左右子树的高度差1的情况,权衡下,红黑树插入和删除的效率其实更高。缺点:为了平衡左子树和右子树的高度相差不超过1,插入和删除节点需要频繁左旋和右旋,消耗性能。左旋:逆时针旋转两个节点,让一个节点被其右子节点取代,而该节点成为右子节点的左子节点。右旋:顺时针旋转两个节点,让一个节点被其左子节点取代,而该节点成为左子节点的右子节点。特点:左子树和右子树需要通过自旋方式平衡两边树的高低,可以避免链表的出现。
2024-05-23 15:04:37
262
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人