- 博客(265)
- 收藏
- 关注
原创 【JVM】详解执行引擎子系统、JIT即时编译原理
由于机器码都是由0和1组成的指令代码,可读性实在太差,所以慢慢的推出了指令,用于替代机器码的编码方式。在开发过程中遇到这样的问题,某个服务因为要扩容,原本按照之前的集群规模计算,再扩容1/4之一左右的机器是可以承载新的流量的,但后面启动之后出现了问题,新启动的机器网关那边分配转发流量之后,立马就宕机了,最开始因为是第一次碰到这样的问题,以为是机器或者程序中代码的问题,最后排查发现都没问题,后来尝试将扩容的机器数量从原本计划的1/4增加到1/3之后,流量平滑的被迁移到了新的机器,没有再出现宕机的故障。
2024-04-26 08:15:00
1007
1
原创 【Java】Jar 包依赖冲突排查思路和解决方法
类型转换错误,这个报错跟我这次遇到的一样,本应该引入的是logback包的类,但是实际引入的是slf4j下的同名类,导致类型转换错误:找不到特定方法,如果有两个同名的包但是不同版本,例如 xxx-1.1和 xxx-1.2包同时存在,先加载了 1.1 版本的类,但是 1.2 版本中才提供了新方法,导致提示找不到特定方法。
2024-03-26 08:38:13
2263
原创 【RPC】网络通信:哪种网络IO模型最适合RPC框架?
系统内核处理IO操作分为两个阶段——等待数据和拷贝数据。等待数据,就是系统内核在等待网卡接收到数据后,把数据写到内核中;而拷贝数据,就是系统内核在获取到数据后,将数据拷贝到用户进程的空间中。以下是具体流程:应用进程的每一次写操作,都会把数据写到用户空间的缓冲区中,再由CPU将数据拷贝到系统内核的缓冲区中,之后再由DMA将这份数据拷贝到网卡中,最后由网卡发送出去。
2024-01-17 08:00:00
1131
原创 【RPC】序列化:对象怎么在网络中传输?
如何选择序列化协议RPC框架中如何去选择序列化协议,我们有这样几个很重要的参考因素,优先级从高到低依次是安全性、通用性和兼容性,之后我们会再考虑序列化框架的性能、效率和空间开销。这归根结底还是因为服务调用的稳定性与可靠性,要比服务的性能与响应耗时更加重要。另外对于RPC调用来说,整体调用上,最为耗时、最消耗性能的操作大多都是服务提供者执行业务逻辑的操作,这时序列化的开销对于服务整体的开销来说影响相对较小。使用RPC框架的最佳实践对象要尽量简单,没有太多的依赖关系,属性不要太多,尽量高内聚;
2024-01-15 08:15:00
1432
3
原创 【系统设计】如何确保消息不会丢失?
对于大部分业务系统来说,丢消息意味着数据丢失,是完全无法接受的。其实,现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制,完全可以做到在消息传递过程中,即使发生网络中断或者硬件故障,也能确保消息的可靠传递,不丢消息。绝大部分丢消息的原因都是由于开发者不熟悉消息队列,没有正确使用和配置消息队列导致的。虽然不同的消息队列提供的 API 不一样,相关的配置项也不同,但是在保证消息可靠传递这块儿,它们的实现原理是一样的。这节课我们就来讲一下,消息队列是怎么保证消息可靠传递的,这里面的实现原理是怎么样的。
2023-12-16 08:00:00
1025
原创 【RocketMQ】Rebalance负载均衡机制详解
Rebalance负载均衡组件, 他负责相对均匀的给消费者分配需要拉取的队列信息。我们此时可能会有以下问题:一个Topic下可能会有很多逻辑队列,而消费者又有多个,这样不同的消费者到底消费哪个队列呢?如果消费者或者队列扩缩容,Topic下的队列又该分配给谁呢?这些时候负载均衡策略就有他的用武之地了。RocketMQ在处理上面的问题是统一处理的,也就是逻辑是一致的,它都是通过这个类来完成负载均衡的工作,看完本文我们就可以明白RocketMQ消费者负载均衡的核心逻辑。消费端的负载均衡是指。
2023-12-13 08:00:00
2589
原创 【Java】线程池源码解析
一般在开发过程中,一个功能是运行时长太久了,一般是通过什么方式去优化的?异步/多线程,对于一个业务方法而言,如果其中的调用链太长势必会引起程序运行时间延长,导致整个系统吞吐来量下降,而我们使用多线程方式来对该方法的调用链进行优化,对于一些耦合度不是特别高的调用关系可以直接通过多线程来走异步的方式进行处理,大大的缩短了程序的运行时长,但是如果我们的多线程创建方式是通过这种方式去进行显式创建的话它真的可以吗?答案是不可以,Why?如果在生产环境使用这种方式去进行显式创建线程会带来什么后果?OOM。
2023-11-20 07:15:00
1292
原创 【RocketMQ】深入剖析延迟消息核心实现原理
延时消息都是非常日常业务使用中很重要的功能,而RocketMQ通过时间片分级+多队列+定时任务,就实现了这样的功能,设计上是很巧妙的。并且消费重试采用退避式的策略,重试时间的梯度刚好与延时消息策略一致,这样就可以直接利用延时队列去完成消息重试的功能,从策略上来说非常合理(消息消费重复失败,在短时间内重试成功的可能性比较低),并且复用了底层代码,这些是值得去学习和借鉴的。
2023-11-08 07:00:00
2519
原创 【操作系统】Linux 中的 Page Cache
Page Cache 是 Linux 内核用于缓存文件系统数据和元数据的一种机制。SwapCached 则是 Linux 内核中用于缓存交换空间(swap space)中的页面的一种机制。尽管它们缓存的内容不同,但 SwapCached 也被视为 Page Cache 的一部分,这是因为它们都使用了相同的页面高速缓存机制,即 Linux 中的页缓存(page cache)。
2023-06-04 06:30:00
1946
原创 【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?
【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?
2023-04-24 01:00:00
909
原创 【操作系统】IO模型篇之从BIO、NIO、AIO到内核select、epoll剖析
【操作系统】IO模型篇之从BIO、NIO、AIO到内核select、epoll剖析
2023-04-06 07:00:00
977
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人