rocket持久化保证的思想有两点:1是刷盘保证大部分数据不丢失;2是持久化文件的处理,零拷贝技术和内存页,NIO模型保证处理能力 文件持久化目录 ├──abort:rocketbroker启动检查的文件,正常启动会写入一个abort,正常退出会删除abort,通过它来判断上一次是否异常退出 ├──checkpoint:随着broker启动,加载的历史检查点 ├──lock:全局资源的文件锁 ├──commitlog:broker存储的核心,我们都是到rocket是broker集中存储,落地存盘就存在commitlog里 │├──00000000000000000...
关于producer到comsuner全流程,可以参考文章: 【打怪升级】【rocketMq】如何保证消息顺序消费 在rocket4.X版本中,其实所有的生产者都是client,对应的其实就是MQProducer具体的实现,主要分为DefaultMQProducer和TransactionMQProducer。 producer启动 首先我们看一下MQProducer的继承关系: 其中,MQAdmin是上层一些基础方法的抽象,例如创建topic、查询message、查询对应最大最小消费点位; ClientConfig主要是一些基本的客户端公共配置; 我们可以看...
aqs,它是抽象队列同步器AbstractQueuedSynchronizer,是juc包下的核心组件。 关于aqs aqs,是AbstractQueuedSynchronizer的简称,位于juc包下。在jdk1.5后,提供了针对并发处理的一些工具。 通过aqs,其实它提供了实现锁和线程同步机制的上层抽象能力,在aqs中通过volidate修饰的共享变量status状态、和一个队列模型,(FIFO先进先出)线程等待队列,主要处理在多线程竞争时阻塞。 我们通过源码来分析aqs的能力,默认以8版本为主: publicabstractclassAbstra...
通过juc下LockSupport,可以达到阻塞和唤醒线程的操作 线程信号 线程之间是需要通信的。 线程间的通信可以有很多种方式,比如线程调度、令牌许可.... 常见的线程通信方式,类似阻塞,调度,唤醒。通过并发编程中我看到了这样的一段描述,在开头补充出来: 首先,是对于常用的wait和notify、notifyAll等方法的介绍: Javahasabuilt-inwaitmechanismthatenablethreadstobecomeinactivewhilewaitingforsignalsfromotherthreads.Theclassjav...
JVM调优,其实就是调整SWT和FGC的过程 JVM内存模型 通过一张基础的图了解最简单的JVM模型: 其实在jvm模型中,主要包含了我们常见的堆栈方法区等待--每个版本不同可能解释有所不同,这里默认以8版本为例: 首先给出官方文档的解释: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.htmljvms-2.5.4 2.5. Run-TimeDataAreas TheJavaVirtualMachinedefinesvariousrun-timedataarea...
并不是所有的场景都适合微服务,我理解技术开发者都有一颗追求新技术的心,但是更重要的是业务场景及团队。 关于微服务 微服务架构,说白了就是一种上层体系的演变。从最早的单体架构,到前后分离,SOA,甚至微服务架构,其实它们都在做一件事,并且都朝着一个方向去发展:那就是分而治之!从简! 分而治之有什么好处呢?对于服务来说,可能每个服务实例都是集群化、容器化、并且轻量级;对于设计人员就是低耦合,高内聚; 有了这种思想,对整体架构其实是进一步的升级。因为我们都知道微服务架构一方面也是由于对服务性能要求更好的进化。我们追求“三高”,从某种意义而言,通过叠加机器的方式更能有效的提升性能,...