Netty源码解析-Reactor 审核中

9 月 5 日
阅读 2 分钟
63
实现这种模式需要定义两个EventLoopGroup,bossGroup就是mainReactor, workerGroup就是subReactor,

Netty源码解析-锁机制

9 月 4 日
阅读 5 分钟
50
为了提高性能,Netty对锁也做了大量优化1、锁优化技术Netty大量使用了锁优化技术:1.1 减小锁粒度1.2 减少锁对象的空间占用1.3 提高锁的性能1.4 根据不同业务场景选择合适锁1.5 能不用锁则不用锁1.1 减小锁粒度在Netty4.1.15.Final版本中ServerBootstrap.init方法中有两个地方对对象加锁,而不是在方法上加一个大锁,缩...

数据库中间件Mycat

9 月 4 日
阅读 6 分钟
19
Mycat是基于Java编写的实现了MySQL协议的数据库中间件,可以将它看成一个数据库代理,可以直接用MySQL客户端工具访问。其核心功能是分库分表和读写分离。

Netty源码解析-零拷贝

9 月 2 日
阅读 4 分钟
85
sendFile(Kafka也是用该技术优化性能):发送文件描述符,如果硬件支持,图二的文件缓冲区和Socket缓冲区可以共享,只需要两次DMA拷贝就可以

Netty源码解析-底层原理及IO模式

9 月 1 日
阅读 3 分钟
124
1、Netty源码编译我们看一下版本4.1.40.Final-SNAPSHOT源码包,可以把源码pull到本地,用IDEA打开。github地址:[链接]包含的模块如下图:2、Netty 源码核心包2.1 Netty源码核心包主要分成下面几块:1、工具类下图红色的模块,如buffer、common、resolver2、底层协议(transport)下图黄色的模块,TCP的不同实现(linux(epo...

Netty与网络编程

8 月 31 日
阅读 9 分钟
175
要了解Netty,必须先了解网络编程1 网络编程1.1 网络IO模型1.1.1 网络三种I/O模型分类:BIO:(同步 阻塞)jdk1.4以前 java.io包NIO:(同步 非阻塞)jdk1.4 java.nio包AIO:(异步 非阻塞)jdk1.7 java.nio包1.1.2 BIO、NIO、AIO处理模式1)BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理,...

Netty对处理粘包和半包的支持

8 月 31 日
阅读 8 分钟
106
1.1 什么是粘包拆包例如:发送 ABC, DEF两个报文收到ABCDEF一个报文,发生了粘包收到AB,C,DEF三个报文,ABC发生了拆包收到AB,CD,EF三个报文,即发生了拆包又发生了粘包1.2 看一个粘包半包样例客户端每次把消息“ABC,DEF,GHI,JKL,MNO\n" 发生一百次给服务端服务端将每次收到的消息输出,并记录收到的次数,然后将消息...

MySQL 事务简介

8 月 24 日
阅读 3 分钟
58
假设一个网购付款的操作,用户付款后要涉及到订单状态更新、扣库存以及其他一系列动作,这就是一个事务,如果一切正常那就相安无事,一旦中间有某个环节异常,那整个事务就要回滚,总不能更新了订单状态但是不扣库存吧,这问题就大了。

CompletableFuture-详解、使用及源码解析

8 月 24 日
阅读 10 分钟
136
问题2:如果不通过get挂起线程,通过while循环,不停的判断任务的状态是否结束,结束后,再拿结果。如果任务长时间没有执行完毕,CPU会一直调度查看任务状态的方法,浪费CPU资源。
封面图

Netty源码解析-零拷贝

8 月 19 日
阅读 4 分钟
145
Netty为了加快文件传输速度,采用了零拷贝技术。sendFile(Kafka也是用该技术优化性能):发送文件描述符,如果硬件支持,图二的文件缓冲区和Socket缓冲区可以共享,只需要两次DMA拷贝就可以
封面图

Netty源码解析-NioEventLoop

8 月 18 日
阅读 3 分钟
109
该方法是EventLoop注册Channel的方法,进入next()方法,就在下图最上面的一个方法。此方法负责选择一个NioEventLoop,进入super.next()方法。
封面图

Mysql分库分表

8 月 13 日
阅读 4 分钟
161
Mysql作为做流行的开源数据库,在各大互联网公司被广泛使用。通常我们用一个库就可以满足需求,但是随着业务的增长,数据量和并发量迅速膨胀。Mysql单表数据量到百万以上的时候,查询效率就会受到影响,另外Mysql单库能承受的并发也有限。这个时候我们需要做分库分表,来提高数据库的性能和扩展性
封面图

Raft协议原理-分布式一致性

8 月 9 日
阅读 10 分钟
124
提到Raft不得不提到Paxos,Paxos 协议是由 Leslie Lamport在1989年提出的一种分布式一致性协议,它是分布式系统领域中的经典协议之一。Leslie Lamport 是分布式计算领域的著名科学家,曾获得图灵奖等多项荣誉。Paxos 协议被称为经典协议,它提供了一种在异步网络模型下实现分布式系统状态机复制的解决方案,而这种解决方...

Redis主从架构原理

8 月 5 日
阅读 3 分钟
113
我们使用redis的时候为了预防单点故障,通常要做高可用设计,redis主从架构就是一种防止redis主节点宕机启用从节点的高可用设计方案。下面我们看一下redis主从架构的设计原理。
封面图

记一次mapstruct对象映射问题排查(Maven optional)

7 月 26 日
阅读 2 分钟
123
碰到一个奇葩的问题,在一个模块order-domain里面使用了mapstruct,创建一个Mapper接口,但是生成的实现类没有字段映射,如下图:

Java锁的批量重偏向

7 月 13 日
阅读 4 分钟
138
    我们知道,当我们使用synchronized关键字的时候,一个对象a只被一个对象访问的时候,对对象加的锁偏向锁,如果之后出现第二个线程访问a的时候(这里只考虑线程交替执行的情况,不存在竞争),不管线程1是已死亡还是运行状态,此时锁都会升级为轻量锁,并且锁升级过程不可逆。   &nbsp...

关于RedLock算法大佬的争论

7 月 13 日
阅读 5 分钟
150
RedLock分布式锁很多人用过,但是大家是否知道,这个算法出来的时候关于他的正确性发生过一些争论,首先是Martin Kleppmann发表了一篇质疑文章,然后antirez做了回应,我们看一下大佬的争论。让我们直击大佬对分布式锁算法及分布式系统设计的探讨和思考

volatile的底层实现

7 月 7 日
阅读 4 分钟
174
java内存模型定义的java线程使用内存的规则,主要目标是定义程序变量的访问规则,即虚拟机中变量存储到内存以及从内存访问的细节。这里讲的变量是指线程共享的变量(如实例字段,静态字段,对象),不包含线程私有变量(如局部变量,方法参数)。

ConcurrentHashMap源码深度分析

2021-08-12
阅读 13 分钟
1.1k
Unsafe类是用来做cas操作的,都是native方法,代码由C++实现,下面的变量表示对应变量的偏移例如:compareAndSwapInt(Object o, long offset, int expected, int x); 表示对象o偏移位置offset的变量如果和期望值expected相等,把变量值设置为x

MySQL间隙锁,next-key锁

2021-06-18
阅读 3 分钟
9.6k
间隙锁是对索引记录之间的间隙的锁,或者是对第一个索引记录之前或最后一个索引记录之后的间隙的锁。例如,SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;阻止其他事务将 的值插入15到列中t.c1,无论列 中是否已经存在任何此类值,因为该范围内所有现有值之间的间隙被锁定。
封面图

看这一篇学会读jvm字节码

2020-10-19
阅读 4 分钟
2.3k
安装插件在setting-Plugins 搜索jclass安装下图中的插件。查看字节码1、首先我们写一个简单的java代码来观察其字节码: {代码...} 2、运行后,点击源程序-》点击view->Show Bytecode With jclasslib3、 我们现在看到上图右边一块就是jclasslib解析出来的字节码:主要有下面几块内容:1) General Information: {代码.....

JVM频繁GC分析

2020-10-12
阅读 3 分钟
5.7k
GC日志打印YGC日志非常频繁,几秒钟一次。PSYoungGen 是使用Parallel Scavenage垃圾收集器的年轻代从日志上可以看到 7056K->544K(8192K) 年轻代总大小非常小只有8M,这就是产生频繁YGC的原因,当new了一个新对象,Young区内存不够分配时,就会触发一次YGC。那么为什么Young区会这么小呢?

Spring Boot创建定时任务

2019-03-19
阅读 1 分钟
2.2k
项目中经常要用到定时任务,比如发邮件短信、清理缓存等等spingboot 创建定时任务非常简单,只需要几个注解就可以。下面我给一个定时清理缓存的任务,测试程序缓存功能的时候经常要用到。