自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(270)
  • 收藏
  • 关注

原创 【MySQL】数据库节点的平滑扩容方案

扩容一般是指水平分库,也就是当一个业务库无法承载流量压力时,需要对相应的业务的节点数量,但扩容时必须要考虑本次增加节点会不会影响之前的业务,因为很多情况下,当节点的数量发生改变时,可能会影响数据分片的路由规则,这时就要考虑扩容是否会影响原本的路由规则。扩容一般都是基于水平分库的基础上,进一步对水平库做节点扩容,目前业内有两种主流做法:水平双倍扩容法、异步双写扩容法。

2024-04-12 08:15:00 691

原创 【Java】Jar 包依赖冲突排查思路和解决方法

类型转换错误,这个报错跟我这次遇到的一样,本应该引入的是logback包的类,但是实际引入的是slf4j下的同名类,导致类型转换错误:找不到特定方法,如果有两个同名的包但是不同版本,例如 xxx-1.1和 xxx-1.2包同时存在,先加载了 1.1 版本的类,但是 1.2 版本中才提供了新方法,导致提示找不到特定方法。

2024-03-26 08:38:13 645

原创 【RPC】动态代理:面向接口编程,屏蔽RPC处理流程

动态代理在RPC里面的应用,虽然它只是一种具体实现的技术,但我觉得只有理解了方法调用是怎么被拦截的,才能厘清在RPC里面我们是怎么做到面向接口编程,帮助用户屏蔽RPC调用细节的,最终呈现给用户一个像调用本地一样去调用远程的编程体验。既然动态代理是一种具体的技术框架,那就会涉及到选型。我们可以从这样三个角度去考虑:因为代理类是在运行中生成的,那么代理框架生成代理类的速度、生成代理类的字节码大小等等,都会影响到其性能——生成的字节码越小,运行所占资源就越小。

2024-01-19 08:00:00 851

原创 【RPC】网络通信:哪种网络IO模型最适合RPC框架?

系统内核处理IO操作分为两个阶段——等待数据和拷贝数据。等待数据,就是系统内核在等待网卡接收到数据后,把数据写到内核中;而拷贝数据,就是系统内核在获取到数据后,将数据拷贝到用户进程的空间中。以下是具体流程:应用进程的每一次写操作,都会把数据写到用户空间的缓冲区中,再由CPU将数据拷贝到系统内核的缓冲区中,之后再由DMA将这份数据拷贝到网卡中,最后由网卡发送出去。

2024-01-17 08:00:00 1028

原创 【RPC】序列化:对象怎么在网络中传输?

如何选择序列化协议RPC框架中如何去选择序列化协议,我们有这样几个很重要的参考因素,优先级从高到低依次是安全性、通用性和兼容性,之后我们会再考虑序列化框架的性能、效率和空间开销。这归根结底还是因为服务调用的稳定性与可靠性,要比服务的性能与响应耗时更加重要。另外对于RPC调用来说,整体调用上,最为耗时、最消耗性能的操作大多都是服务提供者执行业务逻辑的操作,这时序列化的开销对于服务整体的开销来说影响相对较小。使用RPC框架的最佳实践对象要尽量简单,没有太多的依赖关系,属性不要太多,尽量高内聚;

2024-01-15 08:15:00 1346 3

原创 【分布式算法】Gossip协议详解

gossip协议是很多开源中间件和区块链实现的一种底层通信机制,掌握它的原理和细节能更好的理解中间件和区块链的一些行为和分布式特性。在实际场景中,实现数据副本的最终一致性时,一般而言,直接邮寄的方式是一定要实现的,因为不需要做一致性对比,只是通过发送更新数据或缓存重传,来修复数据的不一致,性能损耗低。在存储组件中,节点都是已知的,一般采用反熵修复数据副本的一致性。当集群节点是变化的,或者集群节点数比较多时,这时要采用谣言传播的方式,同步更新数据,实现最终一致。优势:学习成本:实现简单。

2023-12-19 08:00:00 976

原创 【系统设计】如何确保消息不会丢失?

对于大部分业务系统来说,丢消息意味着数据丢失,是完全无法接受的。其实,现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制,完全可以做到在消息传递过程中,即使发生网络中断或者硬件故障,也能确保消息的可靠传递,不丢消息。绝大部分丢消息的原因都是由于开发者不熟悉消息队列,没有正确使用和配置消息队列导致的。虽然不同的消息队列提供的 API 不一样,相关的配置项也不同,但是在保证消息可靠传递这块儿,它们的实现原理是一样的。这节课我们就来讲一下,消息队列是怎么保证消息可靠传递的,这里面的实现原理是怎么样的。

2023-12-16 08:00:00 863

原创 【RocketMQ】顺序消费消息实现原理分析

顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。向Broker申请的消息队列锁集群模式下一个消息队列同一时刻只能被同一个消费组下的某一个消费者进行,为了避免负载均衡等原因引起的变动,消费者会向Broker发送请求对消息队列进行加锁,如果加锁成功,记录到消息队列对应的中的locked变量中。消息队列锁对应对应的Object对象锁,消费者在处理拉取到的消息时,由于可以开启多线程进行处理,所以处理消息前需要对。

2023-12-15 08:00:00 957

原创 【RocketMQ】Rebalance负载均衡机制详解

Rebalance负载均衡组件, 他负责相对均匀的给消费者分配需要拉取的队列信息。我们此时可能会有以下问题:一个Topic下可能会有很多逻辑队列,而消费者又有多个,这样不同的消费者到底消费哪个队列呢?如果消费者或者队列扩缩容,Topic下的队列又该分配给谁呢?这些时候负载均衡策略就有他的用武之地了。RocketMQ在处理上面的问题是统一处理的,也就是逻辑是一致的,它都是通过这个类来完成负载均衡的工作,看完本文我们就可以明白RocketMQ消费者负载均衡的核心逻辑。消费端的负载均衡是指。

2023-12-13 08:00:00 1240

原创 【分布式】浅谈分布式事务及解决方案

【分布式】浅谈分布式事务及解决方案

2023-12-11 08:00:00 1689

原创 【分布式算法】Raft算法详解

【分布式算法】Raft算法详解

2023-12-05 08:00:00 1058

原创 【分布式算法】Paxos算法详解

Paxos 算法由 Leslie Lamport 在 1989 年提出的一个分布式共识算法,Paxos 算法较难理解,本文尝试以图形化方案解释 Paxos 算法。Lamport 提出的 Paxos 算法包括两个部分:Basic Paxos 算法:多节点如何就某个值达成共识Multi Paxos 思想:执行多个 Basic Paxos ,就一系列的值达成共识概括来说,Basic Paxos 具有以下特点:Basic Paxos 通过二阶段方式来达成共识,即准备阶段和接受阶段。

2023-11-28 08:00:00 1089

原创 【Java】线程池源码解析

一般在开发过程中,一个功能是运行时长太久了,一般是通过什么方式去优化的?异步/多线程,对于一个业务方法而言,如果其中的调用链太长势必会引起程序运行时间延长,导致整个系统吞吐来量下降,而我们使用多线程方式来对该方法的调用链进行优化,对于一些耦合度不是特别高的调用关系可以直接通过多线程来走异步的方式进行处理,大大的缩短了程序的运行时长,但是如果我们的多线程创建方式是通过这种方式去进行显式创建的话它真的可以吗?答案是不可以,Why?如果在生产环境使用这种方式去进行显式创建线程会带来什么后果?OOM。

2023-11-20 07:15:00 230

原创 【分布式】BASE理论详解

【分布式】BASE理论详解

2023-11-17 07:30:00 311

原创 【分布式】CAP理论详解

【分布式】CAP理论详解

2023-11-15 07:00:00 296

原创 【Java】定时任务 - Timer/TimerTask 源码原理解析

【Java】定时任务 - Timer/TimerTask 源码原理解析

2023-11-13 07:00:00 357

原创 【Java】SPI在Java中的实现与应用

【Java】SPI在Java中的实现与应用

2023-11-10 07:00:00 400

原创 【RocketMQ】深入剖析延迟消息核心实现原理

延时消息都是非常日常业务使用中很重要的功能,而RocketMQ通过时间片分级+多队列+定时任务,就实现了这样的功能,设计上是很巧妙的。并且消费重试采用退避式的策略,重试时间的梯度刚好与延时消息策略一致,这样就可以直接利用延时队列去完成消息重试的功能,从策略上来说非常合理(消息消费重复失败,在短时间内重试成功的可能性比较低),并且复用了底层代码,这些是值得去学习和借鉴的。

2023-11-08 07:00:00 678

原创 【RocketMQ】揭开事务消息的神秘面纱

【RocketMQ】揭开事务消息事务消息的神秘面纱

2023-10-26 21:49:42 122

原创 【RocketMQ】浅谈消息发送机制

【RocketMQ】浅谈消息发送机制

2023-09-27 01:59:06 212

原创 【RocketMQ】路由中心NameServer

【RocketMQ】路由中心NameServer

2023-09-21 07:15:00 115

原创 【RocketMQ】设计理念与核心概念扫盲

【RocketMQ】设计理念与核心概念扫盲

2023-09-12 08:15:00 179 1

原创 【操作系统】键盘敲入字母时,操作系统期间发生了什么?

【操作系统】键盘敲入字母时,操作系统期间发生了什么?

2023-07-01 16:29:49 1148 1

原创 【计算机网络】告诉我,TCP 协议真的不会丢数据吗?

【计算机网络】告诉我,TCP 协议真的不会丢数据吗?

2023-06-20 06:00:00 426

原创 【计算机网络】进程崩溃或网络中断后,TCP 连接还存在吗?

【计算机网络】进程崩溃或网络中断后,TCP 连接还存在吗?

2023-06-18 07:15:00 654

原创 【操作系统】浅谈 Linux 中的中断机制

【操作系统】浅谈 Linux 中的中断机制

2023-06-10 07:00:00 1952

原创 【操作系统】僵尸进程与孤儿进程总结

【操作系统】僵尸进程与孤儿进程总结

2023-06-08 07:00:00 1658 3

原创 【操作系统】什么是用户态和内核态?用户态和内核态是如何切换的?

【操作系统】什么是用户态和内核态?用户态和内核态是如何切换的?

2023-06-06 07:00:00 10971

原创 【操作系统】Linux 中的 Page Cache

Page Cache 是 Linux 内核用于缓存文件系统数据和元数据的一种机制。SwapCached 则是 Linux 内核中用于缓存交换空间(swap space)中的页面的一种机制。尽管它们缓存的内容不同,但 SwapCached 也被视为 Page Cache 的一部分,这是因为它们都使用了相同的页面高速缓存机制,即 Linux 中的页缓存(page cache)。

2023-06-04 06:30:00 1009

原创 【设计模式】桥接模式

【设计模式】桥接模式

2023-05-12 12:45:00 550 1

原创 【设计模式】建造者模式

【设计模式】建造者模式

2023-05-10 07:15:00 1306

原创 【JUC】浅析ConcurrentLinkedQueue

【JUC】浅析ConcurrentLinkedQueue

2023-05-09 07:00:00 694 1

原创 【操作系统】高性能网络模式:Reactor 和 Proactor

【操作系统】高性能网络模式:Reactor 和 Proactor

2023-05-07 07:00:00 732

原创 【设计模式】抽象工厂模式

【设计模式】抽象工厂模式

2023-05-06 07:00:00 438

原创 【计算机网络】图解内容分发网络 CDN

【计算机网络】图解内容分发网络 CDN

2023-05-04 07:00:00 835

原创 【设计模式】工厂方法模式

【设计模式】工厂方法模式

2023-04-26 23:00:00 1104

原创 【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?

【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?

2023-04-24 01:00:00 703

原创 【操作系统】CPU 缓存一致性、MESI 协议

【操作系统】CPU 缓存一致性、MESI 协议

2023-04-22 00:00:00 511

原创 【JUC】Java并发机制的底层实现原理

【JUC】Java并发机制的底层实现原理

2023-04-21 01:30:00 732

原创 【计算机网络】Linux 系统是如何收发网络包的?

【计算机网络】Linux 系统是如何收发网络包的?

2023-04-19 07:15:00 864

空空如也

空空如也

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

TA关注的人

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