- 博客(176)
- 资源 (4)
- 收藏
- 关注
原创 dubbo消费方调用服务流程
dubbo解析ReferenceConfig,经过dubbo构建代理、Invoker链路,注册消费者,并且订阅注册中心提供方发布的服务,并且经由cluster集群扩展、路由过滤、负载均衡到Protocol层、exchange层、Transport层完成netty服务消费。无论服务发布还是服务订阅,都是通过dubbo的十层架构完成的,每一层都是通过SPI机制或者adative机制进行扩展实现的,Invoker责任链路能够把每一层的的责任划分开来,结构清晰。
2024-06-06 16:07:12 416
原创 dubbo订阅服务
远程引用:创建 invoker 的核心逻辑是在 RegistryProtocol 的 doCreateInvoker 方法中完成的。本地引用:本地引用环节中使用的 invoker 对象是从 InjvmProtocol 中 exporterMap 获取到的。通过解析 @DubboReference 注解来标识需要订阅的服务,并且解析成ReferenceConfig配置类。ReferenceConfig 的 get 方法会先后进行本地引用与远程引用的两大主干流程。2、订阅提供方,可以实时感知到提供方的变化。
2024-06-06 16:06:25 301
原创 dubbo发布服务
通过扫描指定包路径下含有 @DubboService 注解的 Bean 定义,把扫描出来的 Bean 定义属性,全部转移至新创建的 ServiceBean 类型的 Bean 定义中,为后续导出做准备。主要有两块,一块是 injvm 协议的本地导出,一块是暴露协议的远程导出,远程导出与本地导出有着实质性的区别,远程导出会使用协议端口,通过 Netty 绑定来提供端口服务。远程导出的一个分支,会将提供方的服务接口信息,通过 Curator 客户端,写到 Zookeeper 注册中心服务端去。
2024-06-06 16:05:37 493
原创 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 494
原创 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 250
原创 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 406
原创 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 280
原创 order by工作过程和优化
order by 是由优化器决定的,如果优化器认为filesort速度快,那么走filesort排序,如果优化器认为索引速度快,那么走索引排序。
2024-05-28 15:26:37 176
原创 mysql innodb为什么选择B+树
mysql底层采用B+树的数据结构,页索引16KB,全部存储到B+树的非叶子节点上,16KB全是索引数据,相对于B树存储键值对而言,能够存储更多的数据。并且由于索引的关系,树的层高就更矮,而底层的双向链表,对于范围索引,排序查找、去重更有优势。
2024-05-28 00:12:33 122
原创 BeanFactory、FactroyBean、ApplicationContext
定制的工厂Bean,可以通过抽象工厂方式创建的bean,不纳入spring的生命周期、依赖、注入特性,相当于spring给第三方的一个扩展,比如dubbo的@DubboReference,ReferenceBean交给dubbo ioc自己管理。实现BeanFactory接口,全局上下文,非spring自动注入但加入spring管理的bean,刷新生命周期的时候调用的工厂直接就是ApplicationContext,通过ApplicationContext一样可以刷新容器。
2024-05-26 18:03:49 216
原创 spring自定义初始化的加载顺序
构造函数>@PostConstruct > afterPropertiesSet > init-method。
2024-05-26 17:41:15 483
原创 二叉树、红黑树、二叉平衡树
红黑树优化了平衡二叉树需要频繁自旋的场景,插入最多需要两次旋转,删除最多需要三次旋转,不需要顾忌左右子树的高度差1的情况,权衡下,红黑树插入和删除的效率其实更高。缺点:为了平衡左子树和右子树的高度相差不超过1,插入和删除节点需要频繁左旋和右旋,消耗性能。左旋:逆时针旋转两个节点,让一个节点被其右子节点取代,而该节点成为右子节点的左子节点。右旋:顺时针旋转两个节点,让一个节点被其左子节点取代,而该节点成为左子节点的右子节点。特点:左子树和右子树需要通过自旋方式平衡两边树的高低,可以避免链表的出现。
2024-05-23 15:04:37 234
原创 mybatis-plus、PageHelper分页插件
PageHelper:轻量级插件,无须撰写limit语句。mybatis-plus:重量级插件,无须撰写limit。
2024-02-19 12:53:08 270
原创 mybatis datasource种类
mybatis 内置了三种数据源,分别是Pooled,Unpooled和JNDI,其中Pooled数据源是具有连接池的。开发场景下,通常使用以下几种数据源。Druid:兼顾了性能和监控,综合。C3P0:性能稍好,常用。Hikari:性能快。
2024-02-18 18:30:15 160
原创 mybatis缓存机制
经验:二级缓存性能很好,但是对开发者有一定的要求,这个要求就是在撰写mapper时候,一定要保证在命名空间里面的单表查询,一切join表场景全部避免,这样可以有效避免脏读场景。1、大型分布式系统、小公司多实例部署同一台机器建议不要开启二级缓存,多表join场景下,有的表可以读到最新的值,但有的表会读到以前的缓存,同样会出现脏读场景。1、大型分布式系统、小公司多实例部署同一台机器建议关闭一级缓存,产生脏读,读旧值情况比较大。一级缓存(SqlSession会话级别缓存)二级缓存(命名空间缓存,可以跨会话级别)
2024-02-16 23:33:47 205
原创 #{}和${}区别
{}类似jdbc中的PreparedStatement,对于传入的参数,在预处理阶段会使用?代替,可以有效的避免SQL注入。${}就是拼接字符串,没有预编译操作。
2024-02-16 20:54:46 237
原创 Innodb下修改事务工作流程(buffer pool、redo log、undolog、binlog)
undolog的写入最开始写到内存中的,然后由1个后台线程定时刷新到磁盘中的。Innodb优先从Buffer Pool中查询该条记录,如果没有就从磁盘文件中缓存到Buffer Pool中。binlog中记录的信息包括:事务开始的时间、数据库名、表名、事务ID、SQL语句等。提交事务后,后台异步线程将Buffer Pool写入磁盘中,这里会有一定的延时。同步修改到redo log buffer,此时并没有写入磁盘中。更新Buffer pool中的脏页,此时并没有写入磁盘中。4、写入redo log日志。
2024-02-16 15:01:45 256
原创 union和union all区别
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则排序;效率高 UnionAll:对两个结果集进行并集操作,包括重复行,不进行排序;效率低
2024-02-16 12:50:09 100
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人