自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

走在路上

人生最难的修行,是与自己和解

  • 博客(27)
  • 收藏
  • 关注

转载 好文分享:阿里巴巴为什么不用 ZooKeeper 做服务发现?

阿里巴巴为什么不用 ZooKeeper 做服务发现?

2021-10-25 13:18:55 154 1

原创 J.U.C篇:线程池源码分析

多线程可以最大限度地发挥多核CPU的计算能力,提高生产系统的吞吐量和性能,但也会带来一些问题,比如:线程数量过大可能耗尽CPU资源;线程的创建和销毁开销比较大;线程本身占用内存空间,大量线程会抢占内存资源,可能会导致OOM,即便没有,大量的线程回收也会给GC带来很大压力。因此出现了线程池的概念,对线程进行复用。

2020-08-13 17:03:57 170

原创 Dubbo篇:负载均衡策略源码分析

在进行消费端服务调用的时候,看到初始化了LoadBalance,通过负载均衡获取一个可用的节点。LoadBalance也是一个扩展点,Dubbo内置了4种负载均衡算法,都继承自AbstractLoadBalance,AbstractLoadBalance中实现通用逻辑,留一个抽象方法doSelect方法给子类实现,默认是RandomLoadBalance实现

2020-08-08 01:04:46 295

原创 Dubbo篇:服务端请求响应与消费端异步写回结果源码分析

上文消费端服务调用中描述了发起一次远程调用的调用链,解析到了触发了Netty的outBound写事件writeAndFlush,将请求编码发送,但一次远程调用其实并没有真正完成,完整的一次远程调用还应包括接受服务端返回数据,将其返回给业务方。本文会继续上文做余下工作的解析。

2020-08-04 00:15:50 392

原创 Dubbo篇:消费端远程服务调用源码分析

不贴架构图的源码分析没有灵魂,所以,架构图在此。不过个人感觉,架构图的作用在于源码看的七七八八的时候,通过架构图将其串成一个整体,并理解其设计思路。

2020-07-30 23:23:40 321

原创 Dubbo篇:基于Netty实现Dubbo协议编解码源码分析

Dubbo协议设计参考了TCP/IP协议,包括协议头和协议体两部分。16字节报文头主要携带了魔法数(0xdabb,用于分割两个不同请求),以及当前请求报文是否是Request、Response、心跳和事件的信息,请求时也会携带当前报文体内序列化协议编号,另外还有请求状态、请求唯一表示和报文体长度。...

2020-07-26 18:03:15 960

原创 Dubbo篇:ReferenceBean服务发现源码分析

每个ServiceBean表示一个生产者,对应的每个ReferenceBean都表示一个消费者,ReferenceBean的设计跟ServiceBean有些像,同样是纵向继承了ReferenceConfig相关类,具体逻辑实现也在ReferenceConfig中。横向实现了FactoryBean、ApplicationContextAware、InitializingBean、DisposableBean接口

2020-07-22 21:17:10 583

原创 Dubbo篇:ServiceBean服务暴露源码分析

ServiceBean是Dubbo中很重要的一个类,每个暴露出去的服务都会生成一个ServiceBean。ServiceBean继承自ServiceConfig,ServiceConfig是服务暴露的具体实现类。另外ServiceBean还实现了InitializingBean,DisposableBean,ApplicationContextAware,ApplicationListener,BeanNameAware,ApplicationEventPublisherAware几个接口。

2020-07-19 23:57:04 466

原创 Dubbo篇:基于XML配置集成Spring源码分析

目前Dubbo框架提供了3种配置方式:XML配置、注解、属性文件。本文主要介绍schema设计和XML解析。Dubbo集成Spring主要利用了Spring提供的扩展自定义标签。

2020-07-15 22:52:38 221

原创 Dubbo篇:SPI扩展点加载机制源码分析

SPI扩展点机制是Dubbo良好可扩展性的基础,几乎所有的功能组件都基于此实现的。Dubbo的SPI机制基于Java SPI实现,在其基础上做了一些改进和优化。

2020-07-14 15:37:51 163

原创 Netty篇:异步调用之Future与Promise源码分析

Netty继承和扩展了JDK Future系列异步回调的API,对原有的接口进行了增强,是Netty异步任务能够以非阻塞的方式处理回调结果,同时引入了一个新接口GenericFutureListener来封装异步非阻塞回调,有一个需要自己实现的回调方法operationComplete,异步任务执行完后,会回调此方法。

2020-07-12 03:13:21 285

原创 Netty篇:ChannelPipeline与ChannelHandler源码分析

每个Channel都会维护一个ChannelPipeline,而ChannelPipeline其实是包含头尾指针的双向链表,里边的的每个节点都是由ChannelHandler封装成的ChannelHandlerContext上下文,ChannelHandlerContext中除了封装ChannelHandler还包含了一些所关联的组件实例。

2020-07-08 21:43:44 332

原创 Netty篇:Unsafe类I/O事件处理及NioSocketChannel注册流程源码分析

NioEventLoop中重写的run方法对OP_ACCEPT、OP_CONNECT、OP_READ、OP_WRITE 四种事件处理的源码分析

2020-07-06 01:15:04 378

原创 Netty篇:NioServerSocketChannel启动注册流程源码分析

io.netty.channel.Channel是Netty网络操作抽象层,聚合了一组功能,包括但不限于网路的读写,客户端发起连接,主动关闭连接,链路关闭,获取通信双方的网络地址等。

2020-07-01 23:10:06 475

原创 Netty篇:Reactor线程模型和NioEventLoop,NioEventLoopGroup源码分析

Reactor线程模型简单描述,NioEventLoop,NioEventLoopGroup源码简单分析

2020-06-24 15:22:25 327

原创 Netty篇:ByteBuf之内存池源码分析

Netty的内存池的实现有些复杂,使用了大量的位运算,晦涩难懂,不过万能的博客上好多大神已经介绍的非常详细,本文根据自己的理解顺一下思路

2020-06-10 22:47:32 491

原创 Netty篇:ByteBuf之堆外内存与回收策略源码分析(非池化)

上文描述过,ByteBuf根据内存分可以分为堆内存和堆外内存实现,此处以非池化实现介绍,两个重要子类是UnpooledHeapByteBuf和UnpooledDirectByteBuf,因为堆外内存和堆内存除了内存分配之外,其他实现十分相似,先简单描述下堆内存实现,然后重点分析堆外内存的分配及回收策略

2020-05-26 10:31:27 1496 2

原创 Netty篇:ByteBuf部分源码分析

缓冲区(Buffer)     缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:     使用缓冲区可以减少实际的物理读写次数,而且缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收...

2020-05-10 23:11:20 245

原创 Netty篇:拆包与粘包

TCP粘包/拆包问题描述       TCP是个“流”协议,所谓流,就是没有界限的一串数据。一个业务上完整的包可能会被TCP拆分成过个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。解决策略 (1)消息定长,每个报文大小固定,不够则空位补齐(2)在包尾增加回车换...

2020-04-28 13:51:34 154

原创 ZooKeeper集群搭建、事务日志与快照

ZooKeeper集群搭建

2020-04-23 17:04:50 268

原创 ZooKeeper篇:Watcher机制与ACL权限控制

数据变更通知Watcher机制与权限控制ACL机制

2020-04-21 23:00:06 153

原创 ZooKeeper篇:Leader选举

Leader选举是ZooKeeper保证分布式数据一致性的关系,选举的Leader必然是ZXID最大的一个节点,这才才能保证数据恢复*

2020-04-18 23:15:59 161 1

原创 ZooKeeper篇:2PC、3PC以及ZAB协议

对一个分布式系统的设计中,往往在系统的可用性和一致性之间反复权衡,于是产生了一系列的一致性协议。为了解决分布式一致性问题,涌现出了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议、Paxos算法以及ZooKeeper使用的ZAB协议

2020-04-15 14:40:00 407

原创 ZooKeeper篇:从ACID到CAP再到BASE

        随着互联网的快速发展,单机系统已经逐渐无法满足业务需求,于是分布式系统逐渐成了主流架构,同时带来的还有系统变迁过程中的一系列问题。其中比较典型的就是数据一致性问题,因此也就有了从单机事务ACID到分布式事务CAP理论再到BASE理论的演变

2020-04-12 23:33:50 139

原创 手写一棵红黑树(插入与遍历)

红黑树jdk8的HashMap中加入了红黑树,然后红黑树就成了万恶之源。

2020-04-11 23:03:15 554

原创 HashMap的线程不安全(jdk8也会造成死循环,原因暂未查明)

HashMap           众所周知,HashMap是线程不安全的,至于怎么个不安全法,还是要代码跑一下,看看效果,才有感觉。HashMap线程不安全测试代码         &nb...

2020-04-06 14:54:23 559 1

原创 缓存行与伪共享

缓存行        由于CPU的速度远远大于内存速度,为提高CPU的速度,CPU中加入了缓存(cache),缓存分为三级L1,L2,L3。级别越小越接近CPU, 速度更快, 同时容量越小。每个缓存里面是以缓存行为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节,最常见的缓存行大小是64个字节。&...

2020-04-04 21:51:01 279

空空如也

空空如也

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

TA关注的人

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