自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

菜鸟一名

在杭州拼搏的菜鸟一名,简书地址:https://www.jianshu.com/u/4ff10209bbd9

  • 博客(119)
  • 问答 (1)
  • 收藏
  • 关注

原创 Sentinel源码分析----滑动窗口

之前说过Sentinel内部统计使用Node来进行处理,而Node底层是使用滑动窗口实现的,这篇文章主要分析一下滑动窗口的实现。以StatisticNode#addPassRequest方法为入口,先看看内部实现: private transient volatile Metric rollingCounterInSecond = new ArrayMetric(SampleCountP...

2019-03-05 00:23:30 2640 2

原创 Sentinel源码分析----降级熔断规则与DegradeSlot

上篇文章讲了流控规则,而除了流控规则之后还有降级、热点、系统、授权等规则,这篇文件主要讲降级规则。降级规则主要处理节点是DegradeSlot,其中具体逻辑由DegradeRuleManager.checkDegrade实现 public static void checkDegrade(ResourceWrapper resource, Context context, Default...

2019-03-04 17:24:06 2333

原创 Sentinel源码分析----流控规则与FlowSlot

FlowSlot主要是用来进行流控规则的处理,直接看下代码 @Override public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... ar...

2019-03-03 20:09:45 2165

原创 Sentinel源码分析----Node分析

Sentinel中有很多类型的Node,例如DefaultNode、StatisticNode、ClusterNode、还有个EntranceNode总共四种类型的Node,第一次看的时候非常懵逼,Node是啥?四个Node有什么不同?上篇文章中,我们看到StatisticSlot中使用了Node去统计了请求信息,那么Node应该就是做请求统计用的,看下Node接口里定义public inte...

2019-02-26 01:27:49 2453 2

原创 Sentinel源码分析----调用流程总览

Sentinel 是什么?github描述如下随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。本文建立在会使用Sentinel的基础上,详细的介绍和使用不会展开,具体介绍和使用看:Sentinel介绍一个简单的Demo如下: String resourceName = ...

2019-02-24 23:54:03 2333

原创 Spring源码解析----@Import

本文章很多知识点基于Spring源码解析----@Configuration、@SpringBootApplication、@Bean@Import标签可以动态的引入一些Configuration类,SpringBoot自动配置也基于这个注解动态引入了很多Conguration类,下面看下使用1 Demo将之前文章demo里的MyConfiguration类上的@Configuration注...

2019-02-11 20:04:09 1506 1

原创 Spring源码解析----@Configuration、@SpringBootApplication、@Bean

这篇文章主要分析一下这几个注解的原理。SpringBoot中这几个注解关系比较紧密,少了@SpringBootApplication注解,SpringBoot很多功能都没法使用,所以文章分析的内容涉及了该注解另外还有个问题也与@SpringBootApplication有关:SpringBoot为什么不需要配置包扫描,Spring是如何知道要扫描哪些路径下的类?1 Demo在上一篇文...

2019-02-11 20:03:33 702

原创 Spring源码解析----SpringBoot启动流程

一个简单的SB程序如下,点击main方法左边的原谅色的三角形就能把程序启动起来,虽然什么功能都没有,但是启动做了很多处理,加载了很多支持多种功能的组件(类似使用new ClassPathXmlApplicationContext()启动一个Spring程序,其中加载了很多东西)@SpringBootApplicationpublic class SpringBootDemoApplicatio...

2019-02-11 20:02:38 3570 1

原创 Java源码分析----Future

一般使用多线程操作的时候会使用Thread+Runnable进行处理,但是这种方式中,Runnable是没有返回值的,假设我们需要获取Runnable的返回值,可能需要如下特殊处理,伪代码如下String returnValue1 = "";String returnValue2 = "";CountDownLatch cdl = ....new Thread(()->{ /...

2018-12-28 16:53:29 205

原创 RocketMQ源码分析----Consumer消费进度相关

在Consumer消费的时候总有几个疑问:消费完成后,这个消费进度存在哪里消费完成后,还没保存消费进度就挂了,会不会导致重复消费Consumer消费进度保存消费完成后,会返回一个ConsumeConcurrentlyStatus.CONSUME_SUCCESS告诉MQ消费成功,以MessageListener的consumeMessage为入口分析。消费的时候,是以ConsumeR...

2018-12-28 16:52:38 1376

原创 RocketMQ源码分析----ProcessQueue

RockerMQ里有个非常重要的数据结构叫ProcessQueue,很多功能,例如消费进度,消费等等功能的底层核心数据保存都是有ProcessQueue提供,下面介绍一下ProcessQueue提供的功能,而整个涉及的流程不会在这展开,在另外的功能分析文章如果涉及才会深入分析看下代码上的注释:Queue consumption snapshot即消息快照的意思,为什么要这样形容呢?主要是...

2018-12-18 01:58:56 2423

原创 RocketMQ源码分析----Producer队列选择与容错策略

队列选择在HA的文章里大概讲了一下Producer如何为高可用贡献出一份力量的,当时只是说了遍历列表选择队列,然后选择一个,没有深入分析,这篇文章深入分析一下其源码,首先从发送消息选择队列的代码开始: String lastBrokerName = null == mq ? null : mq.getBrokerName(); MessageQueue tmpmq = this....

2018-12-12 01:34:15 1167 2

原创 RocketMQ源码分析----Producer启动过程

#总体流程首先从demo为入口分析整个启动过程 public static void main(String[] args) throws MQClientException { DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName"); producer.setNamesrvAddr("127.0....

2018-12-10 01:26:02 424

原创 垃圾收集器知识点总结-MaxTenuringThreshold

MaxTenuringThreshold该参数用于控制对象经过GC多少次仍然存活后晋升到老年代的最大阈值,参数最大可配置为15,即对象最多经过15次GC后仍然存活就会晋升到老年代记住!是最大!也就是说实际上不一定会经过15次才能晋升!这个值的JVM内部会进行动态计算然后动态改变的。最近在线上有个应用GC非常频繁,MaxTenuringThreshold参数配置的是15,而以前对这个参数的理解是...

2018-12-08 17:32:12 3027 1

原创 垃圾收集器知识点总结-CMS

#使用回收算法:标记清除#适用区域:老年代#回收过程:##1.初始化标记:标记Root可达的对象。对于是否把年轻带作为root的这个问题,有不同答案,但是看到了代码里初始化标记的时候做了如下操作初始化标记会执行到上述代码,然后第二个变量是true(可能对代码的理解有偏差)##2.并发标记:标记新生代活的对象为Root;沿着Root标记存活的对象;在与程序运行期间,对象引用关系会变化...

2018-12-08 17:31:19 285

原创 CSDN的界面交互越来越屎了....

界面都是一堆乱七八糟的东西,找个东西找半天=_=

2018-12-08 17:02:50 239 1

原创 Dubbo源码分析----DefaultFuture

前面两篇文章已经分析了provider和consumer之间的通信过程,那么还有几个问题:由于请求是异步的,provider返回结果到客户端之后,consumer怎么知道该结果是哪个请求的?由于请求是异步的,为何Dubbo能同步等待结果? 由于请求是异步的,provider返回结果到客户端之后,consumer怎么知道该结果是哪个请求的?先看下第一个问题,因为provide...

2018-07-22 15:43:51 3102 3

原创 Dubbo源码分析----处理请求

Dubbo默认是使用Netty进行通信的,那么Netty会配置一个Handler,来处理一些事件,所以这个Handler是核心,主要找一下Dubbo初始化Netty的时候设置的Handler回顾一下网络通信相关,在DubboProtocol中,会调用createServer方法返回一个Server对象,这是一个切入点 private ExchangeServer createSe...

2018-07-22 14:58:43 335

原创 Dubbo源码分析----发起请求

从如下代码中还是分析String sayHello = demoService.sayHello("123123");我们知道demoService实际上是一个代理对象,那么假设使用的是JDK的代码,看看获取代理的地方public class JdkProxyFactory extends AbstractProxyFactory { @SuppressWarning...

2018-07-21 17:54:29 399

原创 Dubbo源码分析----过滤器之FutureFilter

FutureFilter主要是用来处理事件通知的过滤器,这么讲可能不太清楚,先看下下面的demo 先定一个是事件通知的类:public class Notify { public void oninvoke(String msg){ System.out.println("oninvoke:" + msg); } public void onret...

2018-07-21 14:34:16 1248

原创 Dubbo源码分析----过滤器之ExecuteLimitFilter

ExecuteLimitFilter主要用来做并发控制例子1:限制服务 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10个,具体配置如下<dubbo:service interface="com.foo.BarService" executes="10" />例子2:限制 com.foo.BarService 的 sayHello 方法,服务器端并发执行...

2018-07-17 02:02:38 743

原创 Dubbo源码分析----过滤器之AccessLogFilter

dubbo的accessLog可以记录请求信息,配置如下:<dubbo:protocol accesslog="true" />然后配置一下日志文件就OK了,具体百度一下,这里只分析一下其中的原理。accessLog的处理是在filter中,具体为AccessLogFilter,看下类的定义@Activate(group = Constants.PROVIDER...

2018-07-17 00:57:43 1669

原创 Dubbo源码分析----多版本

在开发的时候,可能多个项目会修改同一个服务,那么不能直接暴露出来,否则会被其他人给调用到,导致数据不正常,那么这种情况下可以使用dubbo的多版本来解决这个问题,配置如下:// 稳定环境下的provider和consumer<dubbo:service interface="com.foo.BarService" version="1.0.0" /><dubbo:re...

2018-07-16 01:58:53 724

原创 Dubbo源码分析----Dispatcher和ThreadPool

DispatcherDispatcher是决定事件如何派发的策略,即将哪些事件派发线程池,还是说直接在当前线程中执行。先看下接口的定义@SPI(AllDispatcher.NAME)public interface Dispatcher { @Adaptive({Constants.DISPATCHER_KEY, "dispather", "channel.handle...

2018-07-15 19:30:05 946

原创 Dubbo源码分析----扩展机制

(复习了一下,且补充和修改了一些内容,之前那篇不是MD的,所以重新发布了) Dubbo提供了一种类似JavaSPI的一种机制,ExtensionLoader是扩展机制的核心,类似于JavaSPI的ServiceLoader和JavaSPI类似,Dubbo规定在META-INF/services/、META-INF/dubbo/、internal/下定好配置文件,Dubbo会按照一定的规则去加...

2018-07-15 16:13:23 234

原创 Netty源码分析----writeAndFlush

(*文章基于Netty4.1.22版本) ctx.writeAndFlush相当于先调用ctx.write然后再调用ctx.flush,所以下面分析write和flushwritewrite和flush会经过pipeline的每个outbound的Handler,之前文章分析过流程,这里不再分析。write方法最终到达HeadContext的write方法,然后什么都没做,将请求...

2018-07-04 00:33:12 3639

原创 Netty源码分析----NioEventLoop之处理请求

(*文章基于Netty4.1.22版本) 之前已经讲了NioEventLoop的初始化以及核心的队列了,最后还涉及到的就是非常核心的一部分,就是NioEventLoop如何去处理请求。其核心逻辑是run方法,记得之前说过,NioEventLoop的线程初始化的时候,会调用一下run方法开始处理请求 private void doStartThread() { a...

2018-06-27 00:18:41 319

原创 Netty源码分析----NioEventLoop之任务队列

(*文章基于Netty4.1.22版本) 这篇文章主要分析一下NioEventLoop中任务队列相关的代码源码分析taskQueueexecute方法调用的时候或者执行完startThread方法,会调用addTask添加任务 protected void addTask(Runnable task) { if (!offerTask(task)...

2018-06-27 00:17:21 1897 2

原创 Netty源码分析----NioEventLoop之初始化过程及线程模型

Netty的线程模式网上很多文章都有介绍了,很多文章写得也好,加上我的表达能力不太好,这块线程模型的就不分析了,这篇文章主要讲一下Netty线程模型底层实现的细节。线程线程,肯定就是有线程去处理的,但是Netty的线程不是简简单单用一个Thread或者ThreadPool是去实现那样的一个线程模型,其核心是一个叫做EventLoop的东西,这个可以看成是一个Thread的封装、抽象,以NIO为...

2018-06-11 00:20:21 318

原创 Netty源码分析----注册监听事件

(*文章基于Netty4.1.22版本) 上篇服务启动的文章讲了3个步骤 1. 创建Channel并设置非阻塞 2. Channel绑定地址 3. Channel注册Selector但是其实,NIO还有一步是注册感兴趣的事件,在上一篇文章中,只是将感兴趣的事件存放到一个变量中,而没有进行注册,这里,我们看下注册的流程。 一开始我也没找到到底哪里进行注册的,后来先通过AbstractN...

2018-06-05 23:35:50 1195

原创 Netty源码分析----服务启动之开始接收请求及其他细节

(*文章基于Netty4.1.22版本) 在上一篇文章Netty源码分析—-服务启动之Channel初始化中,一开始给出了一个NIO的demo,然后从构造方法开始分析Netty对应的封装操作流程,而这篇文章,而这篇文章会开始分析,当初始化完成之后,Netty是如何开始接收请求的。 先看下上一篇文章NIO的demo中,是如何接收请求的(只保留run方法,其他忽略)public class N...

2018-05-28 00:04:46 1092

原创 Netty源码分析----pipeline

(*文章基于Netty4.1.22版本)介绍Netty中随着一个Channel的创建,会连带创建一个ChannelPipeline,这个ChannelPipeline就像一个处理各种事件的管道,负责去处理Channel上发生的事件,例如连接事件,读事件,写事件等。 更深入的说,处理的并不是ChannelPipeline,而是ChannelPipeline中一个个的ChannelHandl...

2018-05-27 23:45:14 2393

原创 Netty源码分析----服务启动之Channel初始化

Netty底层也是基于NIO,所以在分析服务启动的流程之前,我们先回顾一下NIO的启动Server的代码,写的一个Server例子如下,只保留和Netty启动相关的代码public class NioServer implements Runnable { public static void main(String[] args) { new Thread(new...

2018-05-20 13:59:15 3622

原创 RocketMQ源码分析----HA相关(2)

上一篇文章分析了MS之间的同步,Client端在多Matser多Slave下的情况,这一篇文章主要从NameServer的角度来分析,在整个 架构中,NameServer起了非常大的多用,MS,Client和Server之间都是必须依赖NameServer的协调。 另外,在上一篇文章开始的时候,说了3.5.8版本没有主从切换的功能,那么这篇文章也会分析一下,为什么没有这个功能,走起~源码...

2018-05-16 23:17:34 281

原创 Netty源码分析----PoolThreadCache

整体介绍在讲PoolArena分配的时候,有说到会先从线程缓存里分配,这个线程缓存其实就是PoolThreadCache(好了,从这里开始,要开始出现几个名字差不多的东西….别弄混淆了….(T▽T)),Netty从几个方面去减少线程之间的竞争,一个是在PooledByteBufAllocator持有多个PoolArena,使用线程相关的cache,通过这两种方法去减少竞争,当然其中会带来复杂度...

2018-05-13 15:43:54 377

原创 Netty源码分析----PoolArena

整体介绍前面介绍了PoolSubpage,PoolChunk,PoolChunkList,这在这之上还有个PoolArena,在这里面管理了前面3个结构,结构图如下: 包含了前面说的6个PoolChunkList,还有两个PoolSubpage数组,数组中的每个元素都是一个链表的头节点,在讲PoolSubpage的时候涉及的Head就是从PoolSubpage数组里取的在代码中,Po...

2018-05-13 15:36:48 277

原创 RocketMQ源码分析----HA相关(1)

简单介绍RocketMQ搭建集群无非就是搭建Master和Slave,而根据Master和Slave的数量不同又分为几种方式: 1. 单Master无Slave:这种就是普通的单机模式了,Master一挂,消息服务就不可用了 2. 多Master无Slave:这种如果有其中一个Master挂了,集群还能使用,但是由于没有Slave,如果挂的那台Master还有未被消费的消息,那么将会暂时无...

2018-05-13 15:20:42 528 1

原创 Netty源码分析----PoolChunkList

整体介绍在Netty的内存分配的整体架构中,按我的理解,PoolChunkList是为了解决随着分配的次数增加,分配一段连续内存失败率提高的问题。 试想一下在Chunk中我们分配了很多小的内存,16B,32B,把整个Chunk都切割成这种小的内存块,那么当我们想要分配8KB或者更大的内存的时候,就会失败,因为其他Chunk被切割成很小的内存碎片,无法分配很大的一段内存,所以PoolChunk...

2018-04-14 16:03:28 251

原创 Netty源码分析----PoolSubpage

整体介绍分析PoolChunk的时候,讲到大于等于8KB走Chunk,否则走PoolSubpage,为什么要这么做呢?假如我们需要分配1KB的内存,那么如果还是用Chunk来分配,那么由于Chunk是默认8KB,那么就有7KB的空间浪费了,无法分配,因为一个Chunk是一个整体,所以Netty在Chunk之下拆分了大小相等的内存段,即PoolSubpage,这样空间的利用就更合理了源码...

2018-04-13 00:57:23 302

原创 Netty源码分析----PoolChunk

Netty内存管理这块比较复杂,断断续续看了一个多月了,总要有点输出,写几篇文章稍微分析总结一下整体介绍PoolChunk的结构是一颗平衡二叉树,如下: 注:左边代表的是节点的序号,右边的深度,例如512号节点深度为9,其数据结构为数组memoryMap和depthMap,初始化时相等PoolChunk默认深度为11,一个节点默认为8KB,上图中,最下面有Subpage这个结...

2018-04-12 00:02:36 674

空空如也

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

TA关注的人

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