- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 RocketMQ高阶业务问题及解决方案
RocketMq全链路消息零丢失方案发送消息到mq零丢失: 事务消息 Broker 存储消息零丢失:同步刷盘+主从机制 Consumer 消费消息零丢失:手动提交offset + 自动故障转移Broker消息零丢失方案:同步刷盘 + Raft协议主从同步Broker 是负责存储消息的,怎么保证消息发送到Broker后,一定不会丢失呢?刷盘失败首先RocketMq一般情况下,为了保证高吞吐量,使用的是异步刷盘策略。但是这种策略会出现消息写入os cache成功,但是异步写入磁盘的时候失败
2020-06-28 20:41:23 678
原创 JVM系列之垃圾回收器——G1的运行原理以及调优思路
1. G1 垃圾回收器Garbage First 简称 G1,是继 CMS 垃圾回收器之后,又一款并发的垃圾回收器,在 JDK7 中被去掉 Experimental 标识,开始可以被正式使用,在 JDK9 中被 JVM 设置为默认的垃圾回收器。G1 是垃圾收集器发展史上的一个新的里程碑,它采用分区算法,基于 Region 的内存布局方式,对整个堆内存进行局部回收,既能回收新生代,也能回收老年代。G1 垃圾回收器的目标是在期望的停顿时间内,尽可能地提高系统的吞吐量。2. G1 的特点与上篇文章(J
2020-06-28 20:41:12 2111
原创 小白进阶篇之为什么你的JVMSurvivor区仅仅20M
背景某一天,有一位同学在群里发来一张 jmap -heap 内存使用情况图。说 Survivor 区占比总是在 98% 以上。仔细观察这张图,其中包含几个重要信息:From 和 To 区都比较小,只有 10M。容量比较小,才显得占比高。 Old 区的占比和使用量(两个多 G)都比较高。此外,还可以看到 Eden、From、To 之间的比例不是默认的 8:1:1。于是,立马就想到 AdaptiveSizePolicy。经群友的确认,使用的是 JDK 1.8 的...
2020-06-27 19:26:31 1090
原创 聊聊nacos-sdk-go的NamingProxy
序本文主要研究一下nacos-sdk-go的NamingProxyNamingProxynacos-sdk-go-v0.3.2/clients/naming_client/naming_proxy.gotype NamingProxy struct { clientConfig constant.ClientConfig nacosServer nacos_server.NacosServer}复制代码NamingProxy定义了clientConfig、nacosServe
2020-06-27 19:26:23 553
原创 Spring 通过BeanInstance获取对象
Spring Bean 的实例化_02你的赞是我最大的动力,期待与你共同进步 在上篇文章中提到 Object sharedInstance = getSingleton(beanName); 这一行代码,在容器初始化的时候返回的对象为null。 但是,今天这篇文章中,我要先来处理 sharedInstance 不为null的情况,看看Spring做了什么样的处理。对应下述流程图中的方法: getObjectForBeanInstanceprotected Object getObje
2020-06-26 21:32:06 509
原创 Java本地缓存技术选型(Guava Cache、Caffeine、Encache)
言对一个java后台开发者而言,提到缓存,第一反应就是redis和memcache。利用这类缓存足以解决大多数的性能问题了,并且java针对这两者也都有非常成熟的api可供使用。但是我们也要知道,这两种都属于remote cache(分布式缓存),应用的进程和缓存的进程通常分布在不同的服务器上,不同进程之间通过RPC或HTTP的方式通信。这种缓存的优点是缓存和应用服务解耦,支持大数据量的存储,缺点是数据要经过网络传输,性能上会有一定损耗。与分布式缓存对应的是本地缓存,缓存的进程和应用进程是同一个,数
2020-06-26 21:31:57 1633
原创 活到老学到老,原来Spring使用到的是这些设计模式
设计模式单例模式懒汉式有线程安全和不安全的写法public class SingletonL { private static SingletonL instance=null; private SingletonL(){} public static SingletonL getInstance(){ if(instance == null){ instance=new SingletonL(); }
2020-06-22 19:22:34 384
原创 你真的理解MySQL锁么,来看看大牛是怎么分析的
MySQL锁1、基本概念锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中的数据也是一种供多个用户使用的共享资源,当多个用户并发地存取数据时,在数据库加锁的目的可以保证数据库数据的一致性。 锁的类型 在数据库中,对数据的操作其实只有两种,即读和写,所以可用共享锁和互斥锁实现,即共享锁间之间是兼容的,而互斥锁间不兼容。 共享锁(读锁):允许事务读 互斥锁(写锁):允许事务删除或者更新一行数据 共享锁代表了读操作、互斥锁代表了写操作,所以我们可以在数据
2020-06-22 19:22:03 473
原创 聊聊kingbus的binlog_server_handler.go
序本文主要研究一下kingbus的binlog_server_handler.goStartBinlogServerkingbus/api/binlog_server_handler.go//StartBinlogServer implements start a binlog serverfunc (h *BinlogServerHandler) StartBinlogServer(echoCtx echo.Context) error { h.l.Lock() defer h.l
2020-06-19 14:22:23 447
原创 活到老学到老,大牛总结JAVA线程池,纯源码分享指南
线程池的工作原理,以及拒绝策略,大家都很熟悉,下面主要讲一下线程池shutdown的原理,以及一些不常用操作的原理。shutdownpublic void shutdown() { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { checkShutdownAccess(); advanceRunState(SHUTDOWN); inter
2020-06-18 16:29:13 386
原创 Java多线程基础以及线程如何安全的中断
进程与线程进程进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位,比如我们windows电脑上运行的一个程序就是一个进程。在传统进程中进程是资源分配和调度的一个基本单位,在后来引入线程概念后,进程就变成了资源分配的基本单位但不是调度的基本单位。为什么要有线程在说线程前,总结下进程的特点:进程是一个可拥有资源的独立单位; 进程是一个可独立调度和分派的基本单位。这样来看的话好像是没什么问题,但是在多任务环境中,不可能说让所有任务排队,前面的处理完了才处理后面的任务。如果要让
2020-06-03 21:53:17 470
原创 记一次 K8S 内部服务调用域名解析超时排坑经历
前言近期线上 k8s 时不时就会出现一些内部服务间的调用超时问题,通过日志可以得知超时的原因都是出现在域名解析上,并且都是 k8s 内部的域名解析超时,于是直接先将内部域名替换成 k8s service 的 IP,观察一段时间发现没有超时的情况发生了,但是由于使用 service IP 不是长久之计,所以还要去找解决办法。复现一开始运维同事在调用方 pod 中使用ab工具对目标服务进行了多次压测,并没有发现有超时的请求,我介入之后分析ab这类 http 压测工具应该都会有 dns 缓存,而我们.
2020-06-03 21:53:06 1932
effective-java.pdf
2020-04-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人