微服务
文章平均质量分 90
小小少年_
这个作者很懒,什么都没留下…
展开
-
nacos源码入门
这个bean是监听了WebServerInitializedEvent事件,在监听到这个事件之后,会进行一些列的逻辑,我们来看下主要关注这里的register()方法对于nacos注册中心,业务应用是如何注册的,再总结下在应用启动之前,我们需要引入springcloud-nacos相关的jar包。原创 2023-03-07 18:42:52 · 622 阅读 · 0 评论 -
sentinel源码入门
总结来看,sentinel的源码逻辑是比较清晰的通过springboot的自动注入,注入了一个切面在切面中,通过环绕通知,分别执行slot的entry()和exit()方法在调用entry()方法之前,会通过spi机制,获取到所有的slot,并构建成一个执行链在所有的slot被调用完毕之后,会开始调用业务的方法在最后的finally方法中,会调用exit(),执行各个slot的exit()方法。原创 2023-03-07 08:20:58 · 537 阅读 · 0 评论 -
seata源码-全局事务提交 服务端源码
以上,就是全局事务提交的逻辑,整体看下来,我们可以发现,对于全局事务提交的时候,分支事务在处理的时候,是异步来处理的,这是和回滚逻辑有很大的区别,因为上篇博客中,我们有看到,全局事务回滚时,分支事务在第二阶段,是同步处理的,在接收到请求之后,会根据undoLog生成回滚sql,并执行,然后删除undoLog数据,但是对于全局事务提交的第二阶段,会发现,接收到请求之后,直接塞到了队列中,通过异步的请求,没1000ms执行一次提交的逻辑。原创 2023-02-19 10:23:10 · 604 阅读 · 0 评论 -
seata源码-全局事务回滚服务端源码
对于分布式事务,进行全局回滚的逻辑,还是比较简单的在事务管理者这边发起全局事务回滚的请求seata服务端,也就是事务协调者接收到请求之后,会向所有的rm,发起netty请求,进行分支事务的处理各个分支事务,会根据undoLog日志,生成回滚的sql,然后执行seata服务端在等分支事务返回状态之后,会先删除分支事务,在删除分支事务之前,会将分支事务加的锁给删除(这里的锁,如果是mysql的话,其实就是写入到mysql中的一条记录)原创 2023-02-12 10:13:41 · 1188 阅读 · 0 评论 -
openFeign源码学习
所以,openFeign其实底层,就是通过代理对象的方式,帮我们去发起远程调用,在代理对象中,会分别区分使用微服务名进行负载均衡的逻辑和程序员直接指定ip、端口的方式,本质上没太大的区别,只是一个集成了ribbon,一个直接发起调用。原创 2023-02-11 10:37:04 · 546 阅读 · 0 评论 -
seata源码-开启全局事务服务端源码
通过上面服务端的代码来看,其实在开启全局事务的时候,服务端的逻辑是比较简单明了的根据事务id + ip + port生成全局事务id根据全局事务id,写入到globalTable表中一条记录这里写到数据库中的记录,就是全局事务的信息,在后面分支事务提交和回滚的时候,都会相应的操作这条记录。原创 2023-02-07 08:32:48 · 476 阅读 · 0 评论 -
seata源码-入门
这篇博客,主要是站在client端的角度,去看了一些源码,大致的逻辑,再总结下当业务应用启动的时候,会通过seata的bean对象,给需要处理全局事务的service,生成代理对象在service的方法被执行的时候,会被interceptor拦截到在被拦截之后,会先开启全局事务,接着执行目标方法,如果没有异常,就进行全局事务提交,如果有异常,就进行全局事务回滚。原创 2023-02-05 13:52:26 · 529 阅读 · 0 评论 -
sentinel滑动时间窗口算法统计通过请求数量细节
问题描述昨天写的笔记中,最后我留了一个疑问,疑问是这样的:假如:在0-500ms之间有4次请求,500-1000ms之间有4个请求;在1000ms - 1500ms之间请求次数为0,1600ms的时候,有三个请求进来,此时在进行判断的时候,会把第二个窗口进行reset:也就变成了这样:我的疑问是:此时在统计qps的时候,如果还是直接把两个窗口的请求次数累加到一起,那就统计的不是前1S之内的请求数了;、今天翻了下源码,发现针对这个场景的源码了:源码com.alibaba.csp.sentin原创 2022-04-02 12:35:51 · 544 阅读 · 1 评论 -
sentinel滑动时间窗口算法学习
滑动时间窗口先不说sentinel的算法实现,先说什么是滑动时间窗口,我们在进行限流的时候,比如通过QPS进行限流,那假如我们以秒为单位,举个例子:我设置了限流规则,qps是10如果不使用滑动窗口算法,在统计qps的时候,就有可能会有问题,比如:在0 - 500ms中的请求数是0,但是在500ms - 1000 ms的请求数是10;在1000ms - 1500ms 之间又进来了5个请求,此时只判断了1000ms - 2000 ms之间的请求数因为没有把1S进行拆分多个窗口,所以在1000ms之后原创 2022-04-02 07:31:12 · 3568 阅读 · 3 评论