服务器之 ECC 内存的工作原理
大家好,我是飞哥!在开始今天的分
随机一门技术分享之Netty
涉及Netty的writeAndFlush详解以及ChannelHandler的部分设计问题
Redis系列:RDB内存快照提供持久化能力
★ Redis24篇集合1 介绍从上一篇的 《深刻理解高性能Redis的本质》 中可以知道, 我们经常在数据库层上加一层缓存(如Redis),来保证数据的访问效率。这样性能确实也有了大幅度的提升,因为从内存中取数远比从磁盘中快的多,但是本身Redis也是一层服务,也存在宕机、故障的可能性。一
API性能调优
概述API/服务性能在为用户提供更好的体验方面发挥着重要作用,本文介绍几种技巧来提高API/服务的性能。可以从如下几个指标进行衡量响应时间:衡量API/服务的响应速度有效负载及其大小:通过网络传输的数据量吞吐量:调用API/服务的次数可以从如下参数进行优化,以使API/服务性能更好
日常Bug排查-连接突然全部关闭
日常Bug排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。
日常Bug排查-偶发性读数据不一致
日常Bug排查-偶发性读数据不一致前言日常Bug排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。Bug现场业务场景先描述这个问题出现的业务场景。这是一个支付的场景,如果支付成功了,我们就把支付状态置为success(主单据更新)同时写入支付成功
Netty源码解析:writeAndFlush
Netty - Series 1这是一个后续打算进行长期更新的系列,每篇只包含相关的几个知识点,并不保证完全的准确性。那么作为第一篇,以我比较推崇的Netty框架作为开山作,并希望可以给大家带来一些比较少见但是又比较实用的东西。后续也没有什么特别长远的计划,大概率还是围绕着Netty、Rocket
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
问题描述某产品线的某个RocketMQ GroupID消息大量积压;DBA反馈该应用使用的TBase数据库带宽流量飙升,TBase数据库的CPU、Load处于正常范围。问题分析应用逻辑该应用主要逻辑是从RocketMQ接收消息,如果该消息在TBase中不存在,则插入相关信息到TBase中;如
实现定时任务的六种策略
这篇文章,我们聊聊实现定时任务的六种策略。1 自定义单线程上图中,我们启动一个线程,该线程无限循环执行,每隔20毫秒执行业务代码。这种方式非常简单易用,在很多中间件中得到广泛应用。2 JDK ScheduledExecutorServiceScheduledExecutorServic
浅析AbstractQueuedSynchronizer
最近算是闲来无事,再者就是,很早之前
日常Bug排查-集群逐步失去响应
前言日常Bug排查系列都是一些简单Bug排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^Bug现场最近碰到一个产线问题,表现为某个应用集群所有的节点全部下线了。导致上游调用全部报错。而且从时间线分析来看。这个应用的节点是逐步失去响应的。因为请求量较小,直到最后一台也失去响
一文讲透消息队列RocketMQ实现消费幂等
这篇文章,我们聊聊消息队列中非常重要的最佳实践之一:消费幂等。1 基础概念消费幂等是指:当出现 RocketMQ 消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消费并未对业务系统产生任何负面影响。例如,在支付场景下,消费者消费扣款消息,对一笔订单执行扣款操
聊聊数据库连接池 Druid
在 Spring Boot 项目中,数据库连接池已经成为标配,然而,我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。 在这篇文章中,我们将探讨数据库连接池,深入解析其实现机制,以便更好地理解和规避潜在的风险。
Java虚拟机
Vue混淆与还原
Vue混淆与还原引言Vue是一种流行的JavaScript框架,用于构建用户界面。它简单易用且功能强大,备受开发者喜爱。然而,在传输和存储过程中,我们需要保护Vue代码的安全性。混淆是一种有效的保护措施,可以加密和压缩代码,使其难以被理解和修改。本文将介绍Vue混淆的概念以及如何进行还原。
​HTML代码混淆技术:原理、应用和实现方法详解
HTML代码混淆是指将HTML源码通过特定的算法进行加密处理,使得人类可读的源码变得难以理解和识别,从而防止爬虫对网站数据的抓取。其原理主要包括以下几个方面:
如何收集pod重启前现场
借助容器生命周期回调收集pod重启前现场
解锁 ElasticJob 云原生实践的难题
最近在逛ElasticJob官方社区时发现很多小伙伴都在头疼这个ElasticJob上云的问题,ElasticJob本就号称分布式弹性任务调度框架,怎么在云原生环境就有了问题了呢,这就要从Kubenertes和ElasticJob的一些状态化说起。
数据库系列:事务的4种隔离级别
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:MySQL引擎
数据库系列:RR和RC下,快照读的区别
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:MySQL引擎
理解 RocketMQ 消息轨迹,看这一篇就够了
这篇文章,我们聊一聊 RocketMQ 的消息轨迹设计思路。查询消息轨迹可作为生产环境中排查问题强有力的数据支持 ,也是研发同学解决线上问题的重要武器之一。1 基础概念消息轨迹是指一条消息从生产者发送到 Broker , 再到消费者消费,整个过程中的各个相关节点的时间、状态等数据汇聚而成的完整
深度链接(DeepLink)应用场景解析与解决方案
深度链接(DeepLink)移动互联网时代,App成为了绝对的流量入口,用户90%以上的时间都花在一个个App的体验中,移动端自然而然地成为企业推广拉新、营销促活的绝佳场景。然而当用户需要通过网页访问App中的具体内容时,传统链接无法对不同的独立App进行内容交互,使得用户需要多番操作才能到达目标
数据库系列:聊聊MySQL并发控制
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:MySQL引擎
聊聊如何在Java应用中发送短信
很多业务场景里,我们都需要发送短信,比如登陆验证码、告警、营销通知、节日祝福等等。这篇文章,我们聊聊 Java 应用中如何优雅的发送短信。1 客户端/服务端两种模式Java 应用中发送短信通常需要使用短信服务提供商提供的短信 API 。我们经常使用的短信渠道有:阿里云、腾讯云、华为云、亿美
腾讯Ckafka队列使用测评
本文主要是测试Ckafka的性能如何,作为一款商用的消息中间件,从消息的接收和处理,以及监控维度查看消息中间件的使用方便程度,比起自己搭建一个kafka的框架来说有什么省心的地方和优点缺点。
使用云函数实现定时签到
云函数 Serverless 是一种无服务器计算服务,可以帮助用户在云端运行代码而无需管理服务器,用户只需编写业务逻辑代码并上传到云端,云函数会根据请求量自动扩容,按照实际使用的计算资源付费,同时支持与其他云服务集成,如对象存储、消息队列、数据库等。云函数 Serverless 可以用于处理数据、构
数据库系列:MySQL引擎MyISAM和InnoDB的比较
1、数据库核心知识点数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍
传统营销与获客痛点对比,真实有效的解决方案来了
随着互联网发展玩法流量逐渐多样以及外部环境的变化,渠道流量和获客途径也在随之颠覆,原有赛道里的玩家们可能都发现了:过去稳定的用户池以及获客套路已经有些玩不转,投放以及激励措施逐渐失效。因此,如何确保在多变的互联网环境下,迅速搭建起能时刻满足用户需求的运营体系,已经成为众多企业急待解决的问题。本文
数据库系列:前缀索引和索引长度的取舍
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能1 背景有时候我们需要在字符类型的字段上建设索引,但是如果该字
数据库系列:使用高区分度索引列提升性能
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更1 背景我们常常在创建组合索引的时候,会纠结一个问题,组合索引包含多个索引字段,它的顺序应该怎么放,怎样能达到更大的性能利用。正确的索引字段顺序应该取决于使用该索引的查
Java核心知识体系5:反射机制详解
Java核心知识体系1:泛型机制详解Java核心知识体系2:注解机制详解Java核心知识体系3:异常机制详解Java核心知识体系4:AOP原理和切面应用1 介绍无论是那种语言体系,反射都是必不可少的一个技术特征。从Java体系来说,很多常用的技术框架或多或少都使用到了反射技术,比如Spri
1024 程序员节,圆一个小小的梦
Hope is a good thing, maybe the best of things, and no good thing ever dies.希望是件美丽的东西,也许是最好的东西,而美好的东西是永远不会消逝的。大家好,我是勇哥 。1024 , 程序员节,圆了我一个小小的梦。花
实用案例:解析工具类App的用户拉新、增长策略
移动工具类App早已渗入生活的方方面面,除了日常的通信娱乐外,你也许在不知不觉间就已经使用了多个工具App,比如刚刚你就在使用某输入法打字、打开某相机拍照、打开某应用查看天气…传统的工具类App的属性是“用完即走”,用户完成了一次使用,就关闭了App,对App的依赖性不大,因此推出有效的创新玩法、
MQ系列16:MQ实现消息过滤处理
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障
MQ系列15:MQ实现批量消息处理
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障
最新发布!阿里巴巴内部实战AlibabaSentinel高并发流量治理手册
为什么要使用Sentinel?Sentinel使用简单、配置灵活,可将Sentinel的动态数据源接口与配置中心结合使用,动态地改变流量规则。Sentinel提供的流量控制功能有限流、熔断、系统自适应、授权等。笔者当时使用了熔断和系统自适应功能应对突增流量导致服务雪崩的问题,同时使用限流功能并结合
开发者必看!GitHub爆火的lntelliJ IDEA软件开发手册堪称又一神作
lntelliJ IDEA是一款优秀的软件开发工具,学习和掌握IntelliJ IDEA对于开发者来讲具有十分重要的意义。图片来自网络今天给大家分享的这份手册以IntelliJ IDEA的操作及使用为主线,同时贯穿示例教学,全面地向你展示其强大的开发与管理能力。内容展示:第1章与第2章讲解
几行代码轻松复现druid连接泄露的BUG之onFatalError
背景介绍在一次druid数据库连接池连接泄露的排查分析介绍了连接泄露的分析排查过程,在几行代码轻松复现druid连接泄露的BUG之PhyTimeout介绍了当配置了phyTimeoutMillis参数情况下,连接泄露的场景,下面通过代码的方式来复现当数据库操作出现FatalError情况下连接泄露
几行代码轻松复现druid连接泄露的BUG之keepalive
背景介绍在一次druid数据库连接池连接泄露的排查分析介绍了连接泄露的分析排查过程,在几行代码轻松复现druid连接泄露的BUG之PhyTimeout介绍了当配置了phyTimeoutMillis参数情况下,连接泄露的场景,在几行代码轻松复现druid连接泄露的BUG之onFatalError介绍
莫慌!阿里人用五个模块讲明白了SpringCloud,可下载
Spring Cloud“微服务”应该是互联网圈内争论很久的一个话题,开发者对此的讨论也一直在继续,近些年,SpringCloud有碾压Dubbo的趋势,你怎么看呢?SpringCloud在近些年来受到国内不少开发人员的广泛关注,也是比较吃香的一个技术技能,如果一个程序员连SpringCloud
两个例子带你入门 Disruptor
Disruptor 是英国外汇交易公司 LMAX 开发的一个高性能队列。很多知名开源项目里,比如 canal 、log4j2、 storm 都是用了 Disruptor 以提升系统性能 。这篇文章,我们通过两个例子一步一个脚印帮助同学们入门 Disruptor 。1 环形缓冲区下图展示了 Di
如何随心所欲调试HotSpot VM源代码?(改造为CMakeLists项目)
将HotSpot VM源代码从Makefile项目更改为CMakeLists项目,避免调试崩溃和链接不过去,代码报红等问题。
13 轻量级锁的重入 以及 线程1获取轻量级锁并释放线程2获取锁 的调试
前言 09 给对象添加偏向锁的调试10 偏向锁的退出的调试11 偏向锁的重入 以及 线程1获取偏向锁并释放线程2获取锁 的调试12 给对象添加轻量级锁的调试呵呵 接着前几篇  本文调试一下 一下的几个场景1. 轻量级的重入2. 线程1添加了轻量级
客户端请求502 Bad Gateway和413Request Entity Too Large问题
项目场景:这个任务的主要目标是上传大文件,这些文件非常庞大,可以达到几百兆字节。需要确保上传过程的可靠性和稳定性,同时确保上传速度快,并且不会出现任何错误或中断。这个任务可能需要使用高速的互联网连接和专门的上传软件来完成。问题描述提示:直接走程序是没有问题的,会提示自定义错误,但是走n
编写 GPT 提示词的公式 + 资源分享
GPT 能够给我们带来很大的帮助,因此我们要好好利用它。我们希望 GPT 输出令我们满意的内容,影响 GPT 输出内容的因素有模型和输入(Prompt,提示词)。
两个实验让我彻底弄懂了「订阅关系一致」
这篇文章,笔者想聊聊 RocketMQ 最佳实践之一:保证订阅关系一致。订阅关系一致指的是同一个消费者 Group ID 下所有 Consumer 实例所订阅的 Topic 、Tag 必须完全一致。如果订阅关系不一致,消息消费的逻辑就会混乱,甚至导致消息丢失。1 订阅关系演示首先我们展示正确
几行代码轻松复现druid连接泄露的BUG
背景介绍在一次druid数据库连接池连接泄露的排查分析介绍了连接泄露的分析排查过程,但是对造成连接泄露的场景描述的不是太详细,下面通过代码的方式来复现连接泄露的case。复现过程连接泄露场景模拟了在设置了phyTimeoutMillis参数情况下,连接泄露的场景。连接泄露模拟代码impo
微服务17:微服务治理之异常驱逐
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构 微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断
微服务18:微服务治理之异地多活容灾
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构 微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断
测试Activemq artemis队列生产消费ack场景优化版本
 文章目录前言架构设计名词说明生产10000数据总共耗时消费10000数据总共耗时最后单条消息消耗需要异步接收异步消费测试代码5000数据测试异步接收异步消费1万数据测试异步接收异步消费3万数据测试异
这次操作差点把自己送走
这次操作差点把自己送走起因自从RabbitMQ的版本从3.9.8升级到3.11.15之后就一直没有消停过,这不监控又在呼唤了。集群中的一个节点磁盘的增速超过了阈值,查看服务器进七天的磁盘使用量一直在缓慢的增长,不是一个好的预兆,如果一直增长下去就会触发集群的磁盘空间阻塞,这是最致命的,一旦由于磁
【全网首发】Redis系列24:Redis使用规范(军规级)
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
麻了啊!一个烂分页,踩了三个坑!
前段时间踩到一个比较无语的生产 BUG,严格来说其实也不能算是 BUG,只能说开发同事对于业务同事的需求理解没有到位。
【全网首发】Redis系列23:性能优化指南
作为一个辅助提升速度的组件,如果自己存在请求延迟的情况,那将是一个巨大的灾难,可能引起整条业务链路的雪崩
聊聊Java 中的经典垃圾回收器
从不同角度分析垃圾收集器,可以将其划分为不同的模型。按线程数分,可以分为串行垃圾回收器和并行垃圾回收器;按照工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器;
【全网首发】一次NSF FeignClient支持Apache HttpClient的优化
NSF(Netease Service Framework)是网易数帆下的一款微服务框架,项目在压测过程中,发现NSF FeignClient有性能瓶颈,下面对遇到的问题及优化方案进行分析,以备忘。
【全网首发】监控druid数据库连接池连接泄露的思路
在上篇介绍了druid 1.2.18之前的版本存在连接泄露的风险,同时为了发现新版本可能存在的连接泄露风险,需要能够及时发现连接泄露的问题,下面介绍一下解决思路。
搭稳Netty开发的地基,用漫画帮你分清同步异步阻塞非阻塞
NettyNetty是一款非常优秀的网络编程框架,是对NIO的二次封装,本文将重点剖析Netty客户端的启动流程,深入底层了解如何使用NIO编程客户端。Linux网络编程5种IO模型根据UNIX网络编程对于IO模型的分类,UNIX提供了5种IO模型,分别是 阻塞IO 、 非阻塞IO、 IO复用
万字完整深入解析JVM面试必备,原来这就是和年薪百万的差距
工作之余,想总结一下JVM相关知识。话不多说直接进入主题Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚
Java并发编程解析 | 基于JDK源码解析Java领域中ReentrantLock锁的设计思想与实现原理 (一)
通过对Java领域中,JDK内部提供的各种锁的实现来看,一直围绕的核心主要还是基于AQS基础同步器来实现的,但是AQS基础同步器不是一种非它不可的技术标准规范,更多的只是一套技术参考指南。
刚分析完的线上问题,想骂娘!
接上篇的事情,看到报警群有个报错,赶忙的去处理了。
Druid连接池优化,TPS提升50%
对Nginx域名转发做了个压测,结果不大理想,jmeter哗哗的报错,Nginx连接全是超时,tps波动剧烈
【全网首发】一次druid数据库连接池连接泄露的排查分析
最近项目组某应用将数据库由Oracle切换到了TBase,遇到了数据库连接泄露导致无法创建新连接的问题,下面是问题的分析过程。
性能测试之文件上传的瓶颈分析调优
这是一个给第三方压测之后,第三方反馈的性能问题。
解密Transmittable-Thread-Local:让跨线程拷贝变得轻松自如
Java作为一门广泛应用的编程语言,其在跨线程拷贝方面的处理一直是一个令人头疼的问题。在多线程的应用场景中,经常需要将某些数据从一个线程传递到另一个线程,比如如下几个场景:全链路追踪:全链路追踪是一种用于监控和诊断分布式系统的技术。
超级详细的Nginx负载均衡配置 不看是你的损失哦~
什么是负载均衡假设生产环境只有一台服务器,一旦压力过大就很有可能导致Web服务响应缓慢,严重的可能会导致生产环境宕机。
为什么 JVM 叫做基于栈的 RISC 虚拟机
有了指令集架构这层抽象,我们就无需关心其背后的实现是虚拟机还是物理机,甚至假如实际的执行是基于寄存器实现的,但指令集架构里是基于栈的,我们也可以说这套指令集架构是基于栈的。
Redis的过期键删除策略看这一篇就足够了
来个灵魂拷问:缓存解决能解决什么问题呢?
md!这代码有毒
你好,我是yes。刚想周五下午摸个鱼,直接一个钉钉消息打破了我的计划:有个bug。我说:啥bug?对方说:刚申请的内部用户的账号登录不上去。我说:还有这种事,报啥错?登录的时候报了这个错:他的密码是这个的:我瞄了一眼,这明显不含大写啊,你让他密码改成含大写的就行了。对方有点懵:
Java集合框架之一:ArrayList源码分析
ArrayList底层维护的是一个动态数组,每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。ArrayList不是同步的(也就是说不是线程安全的),如果多个线程同时
使用 SQL 的方式查询消息队列数据以及踩坑指南
为了让业务团队可以更好的跟踪自己消息的生产和消费状态,需要一个类似于表格视图的消息列表,用户可以直观的看到发送的消息;同时点击详情后也能查到消息的整个轨迹。
这样才能玩转Linux内核之CPU篇
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及
Java字符串池(String Pool)深度解析
在Java中有两种创建字符串对象的方式:1)采用字面值的方式赋值  2)采用new关键字新建一个字符串对象。这两种方式在性能和内存占用方面存在着差别。
Java反射机制深度剖析
Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制。我们知道Java是一门静态语言,在程序编译时变量的数据类型都已经确定,那么在Java运行时环境中,对于任意一个类,我们能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个
Tomcat源码分析
面向组件架构tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成,如Server、Service、Connector等,并基于JMX管理这些组件
深度解析ConcurrentHashMap1.8源码分析
本文就来和大家一起探讨一下关于ConcurrentHashMap的源码,版本是JDK1.8,下面让我们正式开始吧。
【全网首发】深入剖析 Golang 程序启动原理 - 从 ELF 入口点到GMP初始化到执行 main!
看似简简单单的一个 Golang 的 Hello World 程序,只要你愿意深挖,里面真的有极其丰富的营养的!
详解canal同步 MySQL 增量数据到 ES
canal 是阿里知名的开源项目,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。这篇文章,我们手把手向同学们展示使用 canal 将 MySQL 增量数据同步到 ES 。1 集群模式图中 server 对应一个 canal 运行实例 ,对应一个 JVM 。ser
一次艰难的内存泄露排查,BeanUtils的锅
通过jstat -gcutil pid 5000 ,发现fgc次数很多而且频繁,此时老年代占比已经大约70%左右,且已经回收不了内存,我们这边设置的fgc阈值是老年代的70%
美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?
周末的时候,有一位小伙伴提了一些关于  ConcurrentHashMap 的问题,都是他最近面试遇到的。
记录一次dubbo项目实战
一、案例说明存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表。
测试Activemq artemis队列生产消费ack
 文章目录前言架构设计测试代码5000数据测试异步接收异步消费1万数据测试异步接收异步消费3万数据测试异步接收异步消费5万数据测试异步接收异步消费发送大小总结 前言这个测试主要
【全网首发】MQ系列14:MQ如何做到消息延时处理
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障
面试官:我们来拉扯一下Spring Boot 最大连接数吧?
如果说我们来玩个文字游戏,当面试官问“一个 SpringBoot 项目能处理多少请求”的时候,我们可以从线程池的角度去答。但是当面试官问“一个 SpringBoot 项目能接受多少个连接”的时候,我们就不得不聊到刚刚提到的这两个参数了。
记一次cpu飙升问题排查
我先给大家看一下一副正常的gc曲线监控(为保密性,我自己按照平台监控画了出来)
go的net/http有哪些值得关注的细节?
了解它的内部实现原理,可以帮助我们写出更高性能的代码,以及避免协程泄露造成的内存泄漏问题。
线程数突增!领导说再这么写就gc掉我
突然发现我们的一个应用,应用内线程数超过 900 条,接近 1000 条,但是 cpu 并没有高涨,内存也不算高峰。
VictoriaLogs:一款超低占用的 ElasticSearch 替代方案
背景前段时间我们想实现 Pulsar 消息的追踪流程,追踪实现的效果图如下:实现其实比较简单,其中最重要的就是如何存储消息。消息的读取我们是通过 Pulsar 自带的 BrokerInterceptor 实现的,对这个感兴趣的朋友后面会单独做一个分享。根据这里的显示内容我们大概需要存储
真理大讨论:Service层的接口是不是多此一举?
分歧出现的背景这是谁的问题?代码架构的问题?有什么问题?解决问题的思路是什么?总结背景这个问题要从业界鼎鼎大名的三层架构说起: 表示层、业务逻辑层、数据访问层。似乎从一开始接触写代码,好像就有一个不成文的规定,Service 层往往要写一个 
测试Activemq artemis队列生产消费
@[toc]概要ActiveMQ Artemis是一个开源的消息中间件,它实现了JMS规范,支持多种协议和传输方式。它提供了一个高性能、可扩展、可靠的消息传递系统,适用于各种场景,包括云计算、大数据、企业集成等。可靠性高:ActiveMQ Artemis使用持久化存储来保证消息的可靠
在AQS的概念和设计层面-浅浅的挖呀挖呀挖
AQS,全称 Abstract Queued Synchronizer,是一个抽象的队列同步器,通过维护一个共享资源状态( Volatile Int State )和一个先进先出( FIFO )的线程等待队列来实现一个多线程访问共享资源的同步框架。
【全网首发】Redis系列22:Redis 的Pub/Sub能力
Redis的发布订阅(Pub/Sub)模式是一种消息传递机制,它允许在发送者和接收者之间建立松耦合的通信关系。
【笔记】网络编程实战-上篇
三次握手不是 TCP 本身的要求,而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的
【全网首发】typedef vs using
今天我们聊点点的知识点typedef & using😁。
12 给对象添加轻量级锁的调试
接着前三篇,我们这里来调试一下轻量级锁;以下内容基于 jdk9 + lldb-1001.0.13.3
【全网首发】优雅上下线之如何安全的关闭Tomcat持久连接
为了保证应用在下线的时候尽可能少的丢失流量,我们期望达到以下两个目标:在停止应用之前,所有新的请求不再发送到该应用上(本次分析的问题)在停止应用之前,应用正在处理的请求能够完整的处理
spring ws stomp接口式编程
 文章目录概要整体架构流程技术细节小结引用 概要在项目开发中,使用Websocket订阅可以实现实时推送数据更新和变化。但是,这也存在一些痛点。首先,Websocket订阅需要对订阅对象进行管理,确保订阅的准确性和及时性。其次,订阅的消息需
RocketMQ生产环境出现故障,一起探究问题根因!
我遇到一个RocketMQ集群出现了一个十分诡异的现象,现象如下图所示:
【全网首发】Tomcat连接之KeepAlive逻辑分析
背景介绍我们的系统运行在阿里云上,负载均衡使用的SLB,应用运行环境使用的EDAS,Servlet容器使用的是taobao-tomcat-7.0.59。我们期望在停止应用之前,能够将已经与tomcat建立的连接安全的关闭掉,然后结合SLB的健康检查机制,实现停止应用前优雅的摘流能力,这样在应用停止
InnoDB 全表扫描和全主键扫描一样吗?
《explain 显示 count(*) 使用了索引,实际却是全表扫描》提到了全表扫描和对主键索引进行全索引扫描,我把这两者等价对待了。对主键索引进行全索引扫描对应的就是本文标题中的全主键扫描。因为有两位读者就全表扫描、全主键扫描这两种读取数据的方式和我进行了交流,为了弄清楚两者到底是不是
美团面试:MySQL 保存日期用哪种数据类型?Datetime?Timestamp?数值时间戳?
MySQL 日期类型选择属于后端面试比较高频的知识点了。即使不是准备面试,日常开发也是需要经常用到的。
【全网首发】微服务16:微服务治理之熔断、限流
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构 微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断
Elasticsearch 保姆级入门篇
Elasticsearch 是一个分布式的、面向生产规模工作负载优化的搜索引擎。Kibana 可以将 Elasticsearch 中的数据转化为直观的图表、图形和仪表盘。这篇文章,您将学习本地安装 Elasticsearch 和 Kibana,以及使用开发工具/ Java SDK 创建索引和搜
my.cnf 增加一个配置项,MySQL 不能启动了
有一天,同事问了我一个来自客户的问题:在 my.cnf 中增加系统变量 foreign_key_checks 之后,MySQL 就启动不了了。我们尝试通过 SET 命令修改 foreign_key_checks,成功了。查看官方文档,明明也是有这个系统变量的:为什么把 foreign_key
java解析表达式Jexl
前言在项目中,我们可以使用一些表达式来判断是否需要触发警告。例如一些常见的表达式及其含义:条件表达式:这是最基本的表达式,用于判断某个条件是否成立。例如:if (x > 10) { // do something}这个表达式会判断变量 x 是否大于 10,如果成立,则
IO密集型服务提升性能的三种方法
在面对IO密集型系统性能优化时,我们可以通过三种主要的方式来进行:批处理、缓存和多线程。这三种方式各有其优点和适用场景。
配置Redis LUA脚本
前言在工作中碰到统计相关的业务,原先是从DB里面读数据,还因为是几乎近乎实时统计,仔细思考发现公式还是有优化的空间,考虑放到内存里面来统计,之前的单体服务倒是很好解决,加锁就可以,但是碰到微服务就要考虑多端并发原子性问题,自然而然想到了Lua脚本。1.配置Lua脚本脚本文件local
【全网首发】Redis系列21:缓存与数据库的数据一致性讨论
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
11 偏向锁的重入以及线程1获取偏向锁并释放线程2获取锁的调试
以下运行时数据可能是来自于多次调试, 可能会存在运行时数据 对不上的情况, 但是的条理逻辑会在文字中描述清楚的 
Linux内核这样学才能学会(内存篇)
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及
SpringBoot处理form-data表单接收对象数组
前言主要是为了存档,碰到表单传对象数组的情况,一般都是一个表单只能传一个对象,后面经过跟前端的研究和讨论发现居然可以传对象数组,以此作为记录分享。@Datapublic class SealLocationInfoRequest implements Serializable {
JSCH连接ssh终端执行文件操作
JSch是一个纯Java实现的SSH2协议的客户端库。它允许您在Java应用程序中进行安全的远程登录、文件传输和执行命令。您可以使用JSch来连接到远程服务器并执行各种操作。导入pom包 <dependency> <groupId>
【全网首发】微服务15:微服务治理之超时
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构 微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断
表面上:雪花算法的续集。实际上:歪师傅的许愿贴。
你好呀,我是歪歪。周一的时候不是发了《在开源项目中看到一个改良版的雪花算法,现在它是你的了。》这篇破文章嘛
HikariPool一直报连接不可用
前言一开始发现测试环境报错,原先配置6现在配置20依然还是很频繁的报错,想看下底层到底如何处理的导致这个问题,到底什么情况。
java的cmd命令行和jsch执行压测
前言项目中用到了cmd命令去执行,但是发现一个问题就是,当需要切换用户和执行命令的时候特别的麻烦,所以后面又该用了jsch的连接方式,测试一下性能理想不理想,看看有劣势。相关配置ssh的连接数# cat /etc/ssh/sshd_config | grep MaxSessions#
ThreadPoolExecutor——高效处理并发任务的必备良器
ThreadPoolExecutor是Java concurrent中用于管理线程池的类,它是Executor框架的一个实现
一篇文章告诉你对象存储底层的工作机制
大家好,我是威哥,《RocketMQ技术内幕》、《RocketMQ实战》作者、RocketMQ社区首席布道师、极客时间《中间件核心技术与实战》专栏作者、中通快递基础架构资深架构师,越努力越幸运,唯有坚持不懈,与大家共勉。1、MinIO集群拓扑结构MinIO可以部署到三种类型的
聊聊 RocketMQ 名字服务
NameServer 是专为 RocketMQ 设计的轻量级名字服务,它的源码非常精简,八个类 ,少于1000行代码。
【全网首发】lambda with template
在重构的过程中,某些使用cpp11往往需要几十行甚至上百行实现的功能,用17进行重写也就那么十几行完事,真的太方便了,今天就聊聊用过的一个比较爽的功能lambda with template。
ThreadPoolExecutor的submit正确的使用方式
项目场景:线程池的地方用的还是挺多的,一般来说用的多的还是execute方法,submit方法还是用的挺少的,一般ThreadPoolExecutor 的 submit 方法通常用于将一个任务提交到线程池中执行。这个方法会返回一个 Future 对象,可以用来检查任务的执行状态,获取任务的返
Linux中如何构建4块虚拟盘来搭建分布式MinIO集群?
大家好,我是威哥,《RocketMQ技术内幕》、《RocketMQ实战》作者、RocketMQ社区首席布道师、极客时间《中间件核心技术与实战》专栏作者、中通快递基础架构资深架构师,越努力越幸运,唯有坚持不懈,与大家共勉。由于最近刚接手对象存储相关系统的建设与稳定性运维,作为一个
从CPU的视角看 多线程代码为什么那么难写!
现代CPU的本质其实也是一个分布式系统,很多时候仍需要编程者手动去解决数据不一致性的问题
Java高并发之CyclicBarrier简介
在使用 Java 中的 CyclicBarrier 时,需要仔细考虑各种情况,以确保程序的正确性和性能。
详解Redisson分布式限流的实现原理
目前在工作中遇到一个性能问题,我们有个定时任务需要处理大量的数据,为了提升吞吐量,所以部署了很多台机器,但这个任务在运行前需要从别的服务那拉取大量的数据,随着数据量的增大,如果同时多台机器并发拉取数据,会对下游服务产生非常大的压力。
Java中使用HashMap时指定初始化容量性能一定会更好吗?
别人给出的结论不一定的完全正确的,只有知道产生结论的原因,才能更有效的利用这个结论。
聊聊 Linux 中断机制
中断的历史原因在聊中断机制之前,我想先和大家聊一聊中断机制出现的前因后果。最一开始计算机操作系统的设计是能够一次性的执行所有的计算任务的,这被称为顺序执行,也是批处理操作系统(Batch system)。顺序执行的意思是一个任务接着一个任务的依次执行,就像我们编写代码的时候,我们肯定是写完一行代
Go 面试题:string 是线程安全的吗?
每次做并发操作时,都建议想清楚,这个场景的到底需不需要保护共享变量,做好原子操作等。
在开源项目中看到一个改良版的雪花算法,现在它是你的了
一般来说,我们除了“全局唯一”这个基本属性之外,还会要求生成出来的 ID 具有“递增趋势”,这样的好处是能减少 MySQL 数据页分裂的情况,从而减少数据库的 IO 压力,提升服务的性能。
别B+树了,out了
今天这篇先聊聊其内部引入 Blink Tree 来替换 B+Tree 的事情
SpringBoot+MyBatisPlus实现读写分离
前言随着业务量的不断增长,数据库的读写压力也越来越大。为了解决这个问题,我们可以采用读写分离的方案来分担数据库的读写负载。本文将介绍如何使用 Spring Boot + MyBatis Plus + MySQL 实现读写分离。读写分离原理读写分离是指将数据库的读操作和写操作分别放到不同的数据库
生产环境又OOM了,这次是Mybatis的锅?
前言继上次线上 CPU 出现了报警,这次服务又开始整活了,风平浪静了没几天,看生产日志服务的运行的时候,频繁的出现 OutOfMemoryError,就是我们俗称的 OOM,这可还行!频繁的 OOM 直接会造成服务处于一个不可用的情况,通过 Skywalking 查看链路调用,基本全报红了,基本处
搭建Mysql主从复制
MySQL主从复制是一种常用的数据库高可用性解决方案,可以提高数据库的可用性和性能。本教程将介绍如何搭建MySQL主从复制。1、MySQL 支持的复制类型基于语句的复制(STATEMENT):在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率
美团面试:宕机了,Redis 如何避免数据丢失?
最近抽空对之前写的 Redis 持久化机制进行了大幅完善,图文并茂,清晰易懂。分享一下,希望对你有帮助!
高频面试题:谈谈你对 Spring Boot 自动装配机制的理解
前言Spring Boot 作为现在 Java 微服务开发中的中流砥柱,其开箱即用、免去 xml 配置等特点,高效便捷的使 Java 程序员进行业务开发。每次面试 Spring Boot 相关技术点时,其自动装配原理也是重点关注对象。下面我将结合源码针对 Spring Boot 实现自动配置做
从 Pulsar Client 的原理到它的监控面板
前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。
MySQL 自适应哈希索引(一)构造
曾经优化慢查询时,经常在日志中看到 truncate,当时一直疑惑 truncate 为什么会慢。转到数据库方向之后,又碰到过几次 truncate 执行时间过长,导致 MySQL 短暂卡住的问题。经过源码分析和同事测试验证,发现这几次的问题都跟自适应哈希索引有关,所以,深入研究下自适应哈希索
异常体系与项目实践
不论是JDK基础,还是各类组件,在源码中都涉及大量的异常封装,从而精确的反映出描述信息,先来看看Java中的异常体系基础
Kafka是如何支持百万级TPS的?
内存是线性地址空间,kernel程序先进入内存,一进入内存就开启保护模式,然后进行空间和权限的划分。
容量评估实践:一个Tomcat最多能同时处理多少个HTTP请求​?
背景Tomcat流量模型概览如何评估Tomcat的最大容量WHY拓展背景系统上线后,要评估下系统容量+业务流量,可以避免系统资源浪费、防止系统资源不足导致系统不可用。本次以Tomcat这个Servlet容器来分析一个SpringBoot项目最多能同时处理多个请
聊一聊适配器模式
其实编程主要考察的还是我们的一种思维模式,就像这个适配器模式,理解它的运用场景最重要。
网络IO模型BIO->Select->Epoll多路复用的进化史
当你有1000客户端(文件描述符)的时候,每循环一次,只需要调用一次select,把1000个文件描述符作为参数传给内核,由内核去遍历的数据状态。
记一次线上问题 → Deadlock 的分析与优化
数据库的加锁是比较复杂的,不同的数据库的加锁实现也是有区别的,本篇中的死锁案例还是比较好分析的
聊一聊模板方法模式
模板方法模式其实是一个比较简单的设计模式,它有如下优点:1、封装不变的逻辑,扩展差异化的逻辑;2、抽取公共代码,提高代码的复用性;3、父类控制行为,子类实现细节。
日志打印组件踩了Java反射的坑,真是一步一个脚印
有同学反馈,他啥也没做,之前的一个老接口突然报错了,让帮忙看一下
【全网首发】Redis系列20:LFU内存淘汰算法分析
上一期我们介绍了 Redis系列19:LRU淘汰内存淘汰算法分析 ,大致了解了LRU(Least Rencently Used) 的算法原理,即将最近最久未使用的算法进行数据淘汰。
记一次字符串末尾空白丢失的排查 → MySQL 是会玩的!
一天,小伙伴找到我,他说他碰到一个很奇怪的问题;他说:明明表名的入参是 test ,为什么展示到界面的记录包括 test 这条记录?
10 偏向锁的退出的调试
以下内容基于 jdk9 + lldb-1001.0.13.3 ,另外以下运行时数据可能是来自于多次调试, 可能会存在运行时数据 对不上的情况, 但是的条理逻辑会在文字中描述清楚的 
MySQL 幻读问题
幻读问题产生的本质原因是:如果事物中操作的都是快照读,那么是不会产生幻读问题的。
hive 行转列,列转行一些函数总结
在Hive中,collect_set函数用于将某一列中的元素收集到一个集合中,并去除重复的元素。这个函数适用于处理需要对列中的元素进行聚合并获取唯一值的情况。
各个语言运行100万个并发任务需要多少内存?
有些程序在10000个连接中仅消耗了略高于100MB的内存,但另一些程序却达到了接近3GB。
.NET中委托性能的演变
.NET中的委托.NET中的委托是一项重要功能,可以实现间接方法调用和函数式编程。自.NET Framework 1.0起,委托在.NET中就支持多播(multicast)功能。通过多播,我们可以在单个委托调用中调用一系列方法,而无需自己维护方法列表。即使在今天,委托的多播功能在桌面开发中仍然
Wireshark 的抓包和分析
WireShark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。在网络封包和流量分析领域有着十分强大功能的工具,深受各类网络工程师和网络分析师的喜爱。本文主要内容包括:
一万七千字长文详解那些大数据面试中的kafka面试题
Kafka 的未来发展趋势将会围绕着更好的可观测性、数据治理和合规性、扩展性和灵活性、云原生支持、安全性和可靠性等方面展开
JVM高阶面试:Java8为什么使用元空间替换永久代?
Java8 选择使用元空间(Metaspace)替代永久代(PermGen)是 JVM 内存模型的一次重大改进
JAVA 变量的作用域真的是代码块吗?
笔者在生产环境中发现了一个问题,客户在上传文件的时候使用SDK上传,程序在线上稳定跑了一天半,通过一个定时任务不停的上传文件
GO 学了一个月,代码不会写,先看个源码解析
本地启动在第三篇自定义中间件的前提下,已经说了很多关于本地通过 CRD 或者 File 作为 provider 的启动方式,这里想要补充一下关于本地 DEBUG 3.0.0 版本代码的问题,后续的源码分析也都会基于目前最新的 3.0 版本。在写文章的时候,目前 3.0 版本还是 beta 版本。
面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)
一个 SpringBoot 项目,未进行任何特殊配置,全部采用默认设置,这个项目同一时刻,最多能同时处理多少请求?
面试必问,JVM内存模型扫盲
在JDK8中,运行时常量池已经被移动到元空间(Metaspace)中。元空间是在本地内存中分配的,与JVM的堆内存是分离的,因此不会受到Java堆大小的限制
【全网首发】Redis系列19:LRU淘汰内存淘汰算法分析
如果这种情况长时间持续下去,可能会导致内存耗尽,所以Redis必须有一个完善的内存淘汰机制来保障。
【升职加薪秘籍】我在服务监控方面的实践(1)-监控蓝图
如何对线上服务进行监控,内容涉及到的指标设计,软件配置,监控方案等等你都可以拿来直接复刻到你的项目里,这是一套非常适合中小企业的监控体系
09 给对象添加偏向锁的调试
大家 平常使用到 synchronized 的时候一定是对它的使用有一定的了解了, 那么我们这里来调试一下
我坚定的认为,这个源码肯定是有 BUG 的!
前几天有读者看了文章后找到我,提出了两个问题。有点意思,我给你盘一下。
【全网首发】微服务14:微服务治理之重试
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构 微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断
【全网首发】一步一图带你构建 Linux 页表体系—详解虚拟内存如何与物理内存进行映射
笔者这次想让虚拟内存和物理内存两者一起动态联动起来,在这个联动的过程中将之前的这些静态知识点统统串联起来,形成一条内存管理的主线
我试图给你分享一种自适应的负载均衡。有点打脑壳,但是确实也有点厉害。
自适应负载均衡,虽然这个算法我是在 Dubbo 的源码里面看到的。但是这并不算是 Dubbo 的专属,而是一种算法思想,只不过你可以在 Dubbo 里面找到其对应的 Java 实现。
这篇文章关于一个源码调试方法,短小精悍,简单粗暴,但足够好用。
你好呀,我是歪歪。上周发布了《我试图通过这篇文章告诉你,这行源码有多牛逼。》这篇文章。文章中有这样的一段描述:然后有个读者来问我:是怎么把 JDK 源码中的一行代码给注释掉的?这个问题确实不错,属于一个偶尔用一下能起到奇效的源码调试技巧。所以我决定写个文章来说明一下这个问题。但是
xplain 显示 count(*) 使用了索引,实际却是全表扫描
这篇文章依然源于一位读者的提问:explain 显示 count(*) 使用了索引,optimizer trace 却显示为全表扫描,这是为什么?去年,我写过一篇关于 count(distinct) 实现原理的文章《count(distinct) 玩出了新花样》。还记得当时调试源码的过程中,如
Linux上文件监控的踩坑分享
在高磁盘IO的主机上、不同版本的内核上以及海量监控目标中,将会面临哪些问题呢?业务性能与安全性如何做更好地取舍均衡?
MProfiler通过Hook进行性能诊断
本文含有大量代码,如果阅读不方便,可去MProfiler官网阅读。地址:http://mprofiler.com/pages/guide05/Hook翻译成中文就是勾取的意思,是一种截取信息,更改程序执行流向,添加新功能的技术。MProfiler也Hook了一些方法,这些方法包括:(1)Java
08 String.intern 同一个字符串返回不同的引用
突然有一个想法, 我们之前 不是一直经常会看到 这样的示例么, 然后一般情况下 都会有很多的剖析, 这四个等式是如何如何, 所以结果是怎样 
一文带你弄懂 Maven 拉包原理
业务需求开发的时候,我们总是会遇到拉不到依赖包的情况。此时如果不清楚 Maven 拉取依赖包的原理,那么很可能找不到问题所在。今天树哥就带大家了解下 Maven 拉包的原理,让你在遇到问题的时候能快速解决!三种仓库在 Maven 中,仓库指的是存放代码构建的一个位置。从分类上来说,Maven
分布式服务必问,Kafka分区Leader选举过程
上篇文章讲了Kafka Controller的选举过程,Controller的选举是为了保证整个Kafka集群的高可用。今天讲一下Kafka Leader Replica(领导者副本)的选举过程, Leader Replica选举的目的是为了保证数据在分区副本之间的可靠传输和一致性。1. L
搞了 2 周性能优化,QPS 终于翻倍了!
前段时间我们的服务遇到了性能瓶颈,由于前期需求太急没有注意这方面的优化,到了要还技术债的时候就非常痛苦了。
揭开 RocketMQ 事务消息的神秘面纱
事务消息是 RocketMQ 的高级特性之一,相信很多同学都对于其实现机制很好奇。这篇文章,笔者会从应用场景、功能原理、实战例子、实现细节四个模块慢慢为你揭开事务消息的神秘面纱。1 应用场景以电商交易场景为例,用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购物车状态清空等多
高并发面试必问,常见四大限流算法实现原理
在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。限流算法也是面试中必考题,今天一灯带大家一块学习一下常见的四种限流算法,分别是:固定窗口算法、滑动窗口算法、漏桶算法、令牌桶算法。1. 固定窗口算法1.1 实现原理
揭秘 @GlobalLock 隔离保障的微妙之处
若要保障分布式事务修改中的写隔离,必须利用 Seata 中全局锁机制,保障数据修改操作是互斥的,即不会造成写入脏数据
【全网首发】为什么新版内核将进程pid管理从bitmap替换成了radix-tree?
今天我来给大家聊聊为什么 Linux 内核要将 bitmap 替换成基数树,最后也看看这次替换的性能效果。
还不懂分布系统,速看Kafka Controller选举过程
了解到Kafka集群包含多个Broker节点,但是这些Broker节点的具体作用是什么?是怎么进行通信的?某个Broker节点挂了之后,Kafka集群是怎么进行故障转移,保持高可用的?
超简单的Kafka架构入门指南,看这一篇就够了
Kafka 可以处理多种类型的数据,如事件、日志、指标等,广泛应用于实时数据流处理、日志收集、监控和分析等领域。
07 运行时常量池索引的 rewrite
细心的你, 可能会发现 code 运行时的字节码和 class 文件中的字节码有一些不一样的地方?
美团面试官:可重复读隔离级别实现原理是什么?(一文搞懂MVCC机制)
可重复读隔离级别实现原理是什么?它和MVCC又有什么关系?什么是Read View?
RabbitMQ采坑记
RabbitMQ介绍RabbitMQ是一个高可用和数据安全的消息管理系统。在业务中多应用实现业务间交互的异步解耦,通过MQ中间件实现业务的削峰填谷,保障业务避免高峰期流量激增冲击。简单说就是类似Kafka、RokectMQ消息中间件的存在,但相较其他消息中间件RabbitMQ提供了友好的后台管理和
抓包分析RST报文
今天我们来分析下网络连接中经常出现的RST信号,连接中出现RST信号意味着这条链接将会断开,来看下什么时候会触发RST信号,这在分析连接断开的原因时十分有帮助。
为什么需要插入意向锁?
不久之前,有位读者问了一个关于 insert intention waiting 的问题,回答过程中,我还把意向锁(intention lock)和插入意向锁(insert intention lock)搞混了,实际上这是 2 种不同类型的锁。为此,我研究了下插入意向锁,于是有了这篇文章。本
MySQL 不一样的 NULL
你好,我是yes。前不久看到面试群里有同学发表了一个疑问~
面试挂了,批量执行Redis命令的方式有哪些,谁能回答?
1. 引言1.1 创作初衷最近参加面试的时候,被问到一个关于Redis的问题:批量执行Redis命令的方式有哪些?突然被问到这个问题,我先是有点懵逼。最容易想到的是Redis的一些批量命令,例如MGET(同时获取多个key的value)、MSET(同时设置多个key-value键
Java虚拟机
true or false?
有同学在星球问了这样一个问题~
答读者问:唯一索引冲突,为什么主键的 supremum 记录会加 next-key 锁?
本文缘起于一位读者的提问:插入一条记录,导致唯一索引冲突,为什么会对主键的 supremum 记录加 next-key 排他锁?我在 MySQL 8.0.32 复现了问题,并调试了加锁流程,写下来和大家分享。了解完整的加锁流程,有助于我们更深入的理解 InnoDB 的记录锁,希望大家有收获。
高级Java程序员必问,Redis事务终极篇
1. 简介1.1 什么是Redis事务Redis事务(Transaction)通过将多个Redis操作封装为一个原子性的操作序列,确保在事务执行过程中,不会受到其他客户端的干扰。从而在保证数据一致性的同时,协调并发,提高数据操作的效率和性能。1.2 Redis事务的应用场景在分布式系
只需七步,教你轻松解决Redis热点Key问题
 1.什么是Redis热点KeyRedis热点key指的是访问频率较高的key,当大量的请求集中在一个或少数几个热点key上时,会导致这些key所在的Redis节点的CPU、内存和网络带宽等资源被大量消耗,影响Redis集群的整体性能和稳定性。2. 热点Key带来的问题
06 “eden没有发生minor gc, 对象直接分配在了old gen“ 的调试
最近在看这样一篇文章的时候,eden区没有发生minor gc,对象直接分配在了old gen,看到了 R大 的叱咤风云, 讲解的非常细致, 十分令人佩服
【全网首发】Redis系列18:过期数据的删除策略
Redis 是一个kv型数据库,我们所有的数据都是存放在内存中的,但是内存是有大小限制的,不可能无限制的增量。
还傻傻搞不懂MySQL事务隔离级别么(图文并茂,保证你懂!)
并行事务可能出现的问题,具体表象就是脏写,脏读,不可重复读,幻读。MySQL通过隔离不同程度地规避这些问题,MySQL隔离级别有4种,包括:读未提交(READ UNCOMMITTED)、读提交 (READ COMMITTED)、可重复读 (REPEATABLE READ)、串行化 (SERIALIZ
聊聊 RocketMQ 主从复制
提到主从复制,我们可能立马会联想到 MySQL 的主从复制。 MySQL 主从复制是 MySQL 高可用机制之一,数据可以从数据库服务器主节点复制到一个或多个从节点。 这篇文章,我们聊聊 RocketMQ 的主从复制,希望你读完之后,能够理解主从复制的精髓。
深度剖析分布式事务,轻松掌握实现原理与应用技巧!
相信大家都有多多少少接触过分布式事务,因为我们现在写的代码可是服务于亿级用户量级的,那么大的请求量级不可能全部写在一台服务器上面对吧
TCP/IP网络模型
在网络模型中有分为7层模型(OSI模型)和5层模型和TCP/IP模型OSI模型将应用层和表示层作为独立的两层,而TCP/IP模型将它们合并为一个应用层。
不会JVM调优怎么进互联网大厂
如果说有什么在面试中经常被问到,但是在实际工作中又不经常用到的Java技术,那么JVM调优绝对可以排得上号。每当有同学被问到这个问题的时候,内心的OS大概是这样:我一个QPS几百的系统,有啥好调优的,默认配置用用得了,调JVM参数整不好系统还能干崩了,想想好像是这么个道理。但是对于一些高并发大流量业
堆内存OOM泄露-mat工具分析实践
线上程序在运行几天后,服务无法访问。查看日志,发现程序出现OutOfMemory 异常。
操作系统
处理机调度
在多道程序环境下,内存中存在着多个进程,进程的数目往往多于处理机的数目。这就要求系统能按某种算法,动态地将处理机分配给一个处于就绪状态的进程,使之执行。分配处理机的任务是由处理机调度程序完成的。 对于大型系统运行时的性能,如系统吞吐量、资源利用率、作业周转时间或响应的及时性等,在很大程度上都取决于
昨天去银行转钱,最后怒失300万
如果执行完步骤2, MySQL突然宕机了 ,那就会出现一个“灵异”事件,小埃钱少了300万,但小克账户并未收到300万,小埃没有还钱成功, 钱不翼而飞了 !
如果让你来设计CPU之内存篇(上)
哈喽,我是子牙,一个很卷的硬核男人。深入研究Windows内核、Linux内核、Hotspot源码…聚焦做那些大家想学没地方学的课程:手写操作系统、手写虚拟机、手写模拟器、手写编程语言…目前已经做了两个成熟的课程:手写JVM、手写OS,感兴趣的小伙伴可以加班主任微信咨询
看完intern源码,和面试官battle,巨自信
什么情况字符串会写入常量池;什么情况字符串不会写入常量池;intern底层是如何实现的;字符串过多导致OOM如何解决
【全网首发】性能优化利器之constexpr
今天,聊聊在升级过程中的一个比较重要的优化点-编译期优化。
线上服务挂了 3 分钟
说好的动态调度扩缩容负载均衡呢??怎么没支棱起来?
05 相互引用的类加载的调试
最近看到了这样的一篇文档,Java类初始化的相互引用和次序问题;, 也是一个很经常看到的基础问题但是 在以前的话, 我一定是思考那些理论来分析这个问题, 比如 main 中读取 Clazz1.x1 导致了 Clazz1 的初始化
掌握四种强大且隐秘的缓存,内功更进一步
这篇文章,笔者想聊聊缓存,只不过并不是大家耳熟能详的 Redis ,而是那些隐藏在中间件或者框架中强大却又隐秘的缓存,笔者愿称他们为缓存世界的扫地僧
如果让你来设计中断机制
哈喽,我是子牙,一个很卷的硬核男人从这篇文章开始,准备系统性给大家讲讲中断这个玩意。对于中断,很多小伙伴为什么学不明白呢?因为中断很底层,底层到CPU层面,有些中断更是由CPU+操作系统配合实现的。作为一个写过操作系统的男人,我就以我独特的手法带大家玩转中断本系列文章预计分四篇:深刻理解
【全网首发】微服务13:云基础场景下流量策略实现原理
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构 微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断
编译程序的任务
编译程序是一种翻译程序,编译程序是将一种语言形式翻译成另一种语言形式。它将高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。 整个编译过程一般可以划分为 5 个阶段:词法分析、语法分析、语义分析及中间代码生成、中间代码优化和目标代码生成。
Spring应用启动分析优化
Spring Startup Ananlyzer 采集Spring应用启动过程数据,生成交互式分析报告(HTML),用于分析Spring应用启动卡点,优化Spring应用启动速度。
【全网首发】盘点内核中常见的CPU性能卡点
评估运行应用程序运行状况时,上下文切换、CPU迁移、缺页中断都是需要被关注的性能指标。
eBPF 入门开发实践教程十四:使用 USDT 捕获用户态 Java GC 事件耗时
eBPF 还支持使用 USDT (用户级静态定义跟踪点) 捕获用户态的应用程序行为,本文我们将介绍如何使用 eBPF 和 USDT 来捕获和分析 Java 的垃圾回收 (GC) 事件的耗时。
04 对象的默认内存布局
最近看到了这样的一篇文章,一个对象的引用占多少个字节呢?4个?8个?算出来都不对,这是一个之前想要弄明白, 但是这块的代码似乎是看着有点复杂, 所以一直没有花时间来整理一下, 最近看到了一篇文章, 看了一下 R大的分析 
如何从抓包文件中分析慢请求
请求慢的原因很多,当出现前端反应接口慢时,而通过后端日志查看请求处理时间并不慢时,往往会手足无措,当面对网络问题出现手足无措时,这就是在提醒你该抓包分析了,那么一般如何根据抓包文件去分析慢请求呢,今天我们就来看看。
【全网首发】定位频繁创建对象导致内存溢出风险之JDBC MySQL
背景介绍在文章【定位频繁创建对象导致内存溢出风险的思路】中分析了三种【事中】定位的方法,总体思路是能够拦截对象的创建逻辑,现在对【同一条SQL语句,平时返回预期内的数据条数,出问题的时候返回了几十万条数据,短时间内创建了大量对象进而导致非预期的GC】这个场景进行分析。问题分析同一条SQL语句,
Java中「Future」接口详解
在系统中,异步执行任务,是很常见的功能逻辑,但是在不同的场景中,又存在很多细节差异;
业务逻辑复杂,历史久远的接口出现数据错误怎么办?
接口返回数据错误,如何快速找到问题原因并进行修复?01背景1.1 下班时,业务反馈:线上数据错了1.2 分析找前端同学确认控制“点击咨询期货”是由接口返回的“skuLt”字段控制:02BugShoot
从ReentrantLock角度解析AQS
JUC下提供了很多并发编程实用的工具类,比如并发锁lock、原子操作atomic、线程池操作Executor等等
IO流中「线程」模型总结
Java提供「三种」IO网络编程模型,即:「BIO同步阻塞」、「NIO同步非阻塞」、「AIO异步非阻塞」;
你为什么吃不透Dubbo源码?这样看既不浪费时间又高效
对于Dubbo源码,首先,你需要先能在项目中引入Dubbo,以及能够使用基本功能,基于这个基础之上,正确的阅读顺序应该是这样
wireshark分析tcp传输之文件上传速率问题
在网络性能问题排查思路那一节里,我提到了查看系统网络瓶颈的方法以及排查丢包问题的手段。但就此分析网络问题还不够精细,有时网络资源并没有达到瓶颈,或者并没有丢包产生,但是网络传输速率就是很慢,或者有丢包产生,但无法知道丢包的详细过程,无法知道整个tcp传输过程的具体情况。如何更加精细的查看网络包传
03 回顾反射参数问题
在上周的时候, 看了一下我的 "05 问题" 这一系列博客, 看了一下第一篇文章, "01 反射参数问题", 发现了一些当时遗留的一些问题, 当时可能由于 水平啊, 理解啊等各方面原因, 这个就当做了一个问题 记录在了这里~
【全网首发】Redis系列17:聊聊布隆过滤器(实践篇)
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
JVM coredump分析系列(4):常见的SIGBUS案例分析
笔者先前遇到多个SIGBUS crash问题,在此处归纳整理下问题定位思路并且给出复现的用例,以便提升定位同类问题的效率
编译器优化那些事儿(10):区域分析
为了有效地优化代码,编译器需要在程序的各个节点建立并求解与信息有关的方程来收集数据流信息,并将这些信息分发给流程图的每个块,这个过程被称为数据流分析~
一次系统延迟优化案例
一次系统延迟优化案例服务监控系列文章服务监控系列视频问题背景线上隔三差五晚上10点左右总会有sql报警出现,且是同样的sql,我们的sql报警是在应用程序内部通过对sql操作增加钩子函数,对sql前后执行的位置记录下时间戳,然后sql执行完毕后,对时间戳进行相减得到sql执行时长,大于1s则
【全网首发】Redis系列16:聊聊布隆过滤器(原理篇)
布隆过滤器(Bloom Filter)是 Redis 4.0 版本提供的新功能,我们一般将它当做插件加载到 Redis 服务器中,给 Redis 提供强大的去重功能
深度解析Seata AT 模式:性能优化与隔离保障的平衡之道
脏写和脏读数据隔离性可从读和写两个维度来审视:从写的视角来看,是不能有脏写的,即不能让一个事务修改另外一个事务修改过但尚未提交的数据。
Linux上文件监控的踩坑分享
前言在Linux主机安全产品HIDS中,文件监控是特别常见的需求,在实现方案上,Linux内核层提供了文件变动的通知机制fsnotify,然而,在高磁盘IO的主机上、不同版本的内核上以及海量监控目标中,将会面临哪些问题呢?业务性能与安全性如何做更好地取舍均衡?今天,我的小伙伴阿松xjas给大家分
小心 MybatisPlus 的一个坑与面试题
昨天测试说有个 xx 功能用不了,扔给我一个截图,说有报错:报错信息就是:Transaction rolled back because it has been marked as rollback-only,很好理解:事务被回滚了,因为它已经被标记了只能回滚。
群里分享的面试题,第一题就不会了?
你好,我是yes。在群里看到小伙伴在讨论一份面试题,我一看好家伙!密密麻麻的一堆!不过还好不要求候选人写出来,只需要面试口述回答即可。这类面试题其实相比寻常的八股文质量高多了,毕竟更贴合实际应用,比如第一题就贴了堆栈的信息让你说出其原由,这就比较考察平常经验的累积了。不过有小伙伴看到第一
mysql invalid conn排查
mysql invalid conn排查服务监控系列文章服务监控系列视频问题背景服务使用golang ,客户端库是go-mysql-driver ,系统测试环境频繁但是不总是报出invalid conn 错误,但实际拿sql执行时却是正常执行。排查思路原因分析客户端使用了无效连接由于
聊聊 RocketMQ 的消费逻辑
RocketMQ 是笔者非常喜欢的消息队列,4.9.X 版本是目前使用最广泛的版本,但它的消费逻辑相对较重,很多同学学习起来没有头绪。这篇文章,笔者梳理了 RocketMQ 的消费逻辑,希望对大家有所启发。
案例分享-被*队友的mybatis蠢哭的一天
昨晚加班的时候被队友拉着看一个mybatis的问题,耗费了我一个小时时间,最后差点没被我打死,实在是觉得滑稽,今天回家写下来跟大伙分享一下。
我又和redis超时杠上了
经过上次redis超时排查一次redis超时排查经历,并联系云服务商解决之后,redis超时的现象好了一阵子,但是最近又有超时现象报出,但与上次不同的是,这次超时的现象发生在业务高峰期,在简单看过服务器的各项指标以后~
InnoDB为什么不用跳表,Redis为什么不用B+树?
作为开发人员,我们每天都要开发大量的接口,其中包括了读接口和写接口,而对于写接口来说,除了要保证他的性能、可用性以外,还需要有一个重要的问题,那就是考虑如何保证接口的幂等性
gpt被我问得连连认错:cglib还能代理私有方法?
我问gpt,cglib能不能代理私有方法,它说……我说我给你纠正这么多错误,你给我说下明天哪只鸡会涨吧,它给我说
【全网首发】一次有关 DNS 解析导致 APP 慢的问题探究
HTTTPDNSAWS Router53APP 使用 HTTPDNS, 为解决 DNS 解析生效慢, DNS 劫持等问题。
Java语言
Java的volatile
volatile 关键字可以说是 Java 虚拟机提供的最轻量级的同步机制,但是它并不容易被正确、完整地理解,以至于许多程序员都习惯去避免使用它,遇到需要处理多线程数据竞争问题的时候一律使用 synchronized 来进行同步。了解 volatile 变量的语义对理解多线程操作的其他特性很有意义。
Java的先行发生原则
先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则。依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂的定义之中。
图文详解 Linux 分页机制!
分页机制可以用于任何一种分段机制,也可以理解为先有分段机制才有分页机制,这是由于历史原因,分段机制要比分页机制更轻,先出现的分段后出现的分页。
eBPF Talk: challenge verifier
在这篇文章里,将分析 verifier log,找到问题所在,并解决这个问题。
慢查询性能优化实践
项目组接到两家客户反馈,部分生产统计报表查询缓慢,甚至某些报表无法查询出1个月的统计数据。
RocketMQ 顺序消费机制
顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。 顺序消息分为**分区顺序消息**和**全局顺序消息**。
【全网首发】剖析CPU性能火焰图生成的内部原理
在进行CPU性能优化的时候,我们经常先需要分析出来我们的应用程序中的CPU资源在哪些函数中使用的比较多,这样才能高效地优化
【全网首发】MQ系列13:消息大量堆积如何为解决
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障
八大生产故障 排查思路(通用版)
你好,我是悟空。常见的生产故障有哪些?在生产环境中,常见的故障类型包括但不限于以下几种:网络故障:网络故障可能包括网络连接中断、网络延迟过高、路由错误等。这可能导致系统无法正常访问外部资源,或导致应用程序无法与其他系统进行通信。服务器故障:服务器故障可能包括硬件故障、操作
【全网首发】抽丝剥茧,记一次 Go 程序性能优化之旅
一个服务健康检查系统,这个系统自上线开始就有一个问题:健康检查耗时有点高。但一直拖着没解决,究其原因只能拿出下面这张图。
内存分析诊断系列-理解heap dump
通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的
02 FinalReference.referent的回收时机
前言 在某本书上面曾经看到过, Hotspot VM 的 gc 是准确式GC, 我的理解就是 这一次 gc 之后 应该会把所有的 "垃圾对象" 清理掉 假设对应的 $FinalizedClazz 重写了 finalize 方法, 并且有一个 没有任何
Java的Atomic原子类
Java SDK 并发包里提供了丰富的原子类,我们可以将其分为五个类别,这五个类别提供的方法基本上是相似的,并且每个类别都有若干原子类。
记一次服务器被当肉鸡挖矿的经历
前言前一阵子,阿里云服务器促销,买了一台2G的主机来做测试学习用,搭好环境后基本就没怎么管它,最近发现CPU总是跑满,,于是按CPU消耗排序,排在第一的是一个名为“kdevtmpfsi”的进程,查了一下是一个挖矿木马,于是赶紧采取办法1、查看CPU占用TOP命令看了
JVM coredump分析系列(3):JNA 5.10.0升级到5.12.1进程core分析
笔者近期把JNA从5.10.0升级到5.12.1以后,发现进程会core,且hs_error中的堆栈全部是JDK的内部函数,很难分析出和JNA升级的关联。
【云原生•监控】Categraf大一统的监控数据采集器
希望对所有常见监控对象提供监控数据采集能力,采用 All-in-one 的设计,不但支持指标采集,也希望支持日志和调用链路的数据采集。
编译器优化那些事儿(9):Machine Outliner
在嵌入式领域,代码体积(code size)优化能够减少内存的使用,对产品的竞争力至关重要
【全网首发】深度解析 slab 内存池回收内存以及销毁全流程
笔者详细地为大家介绍了 slab cache 进行内存分配的整个链路实现,本文我们就来到了 slab cache 最后的一部分内容了,当申请的内存使用完毕之后,下面就该释放内存了。
Go设计模式--中介者,最后的模式
大家好,这里是每周都在陪你一起进步的网管~!今天继续学习设计模式,也是我们要学习的最后一个设计模式—中介者模式,对这个模式有一点了解后会觉得它跟我们已经学过的观察者模式挺像,但是两者还是有些区别的,使用场景也不一样,具体我们放在最后再讲,先来一起学习中介者模式。中介者模式是一种行为
Kafka必知必会18问:30+图带您看透Kafka
基于前面的消息队列文章,我们对消息队列发展历史有了一个比较全面的了解,并且最主流的两款消息队列:RabbotMQ和RocketMQ的用法,使用场景,常见问题以及解决方法,原理都有了比较深入的了解:消息队列那么多,为什么建议深入了解下RabbitMQ?高并发异步解耦利
【全网首发】我们通常说的POD到底是什么?
但凡阅读过源码,或者看过一些比较畅销的c++书籍,其都提到一个概念POD(Plain Old Data),当第一次遇到该概念的时候,忽略。然后正是因为忽略了该概念的真正含义,导致对某些问题或者原理理解的不是很透彻,当时研究了很久,才把这个概念彻底搞懂,今天借助本文,聊聊POD。
高并发异步解耦利器:RocketMQ究竟强在哪里
上篇文章 消息队列那么多,为什么建议深入了解下RabbitMQ? 我们讲到了消息队列的发展史:并且详细介绍了RabbitMQ,其功能也是挺强大的,那么,为啥又要搞一个RocketMQ出来呢?是重复造轮子吗?本文我们就带大家来详细探讨RocketMQ究竟好在哪里。Rocket
01 PhantomReference没有进入ReferenceQueue
最近看到一篇文章, 然后 基于改文章的代码, 做了一些 调整, 然后 发现了一些 奇怪的事情, 并稍微整理了一下
Go设计模式--解释器模式
大家好,这里是每周都在陪你一起进步的网管~!今天继续学习设计模式—解释器模式解释器模式是一种行为设计模式,可以用来在程序里创建针对一个特点领域语言的解释器,用于处理解释领域语言中的语句。换句话说,该模式定义了领域语言的抽象语法树以及用示来解释语法树的解释器。模式使用场景解释器模式
分页列表缓存,你真的会吗
开源中国的红薯哥写了很多关于缓存的文章,其中多级缓存思路,分页列表缓存这些知识点给了我很大的启发性。 写这篇文章,我们聊聊分页列表缓存,希望能帮助大家提升缓存技术认知。
不要用 in + 子查询
你好,我是yes。前两天我的 VIP 用户向我抛出了一个 SQL 问题,他的 MySQL 是 8.x版本:大概意思如下 sql :select * from A where id in (  sele
慢查询日志中的 Lock_time 从哪里来?
经常关注慢查询日志的读者,和 Lock_time 应该算是老相识了,大家对这位老相识了解有多少呢?研究 Lock_time 之前,我对它的了解,仅限于它表示锁等待时间。至于它包含哪些锁等待时间、怎么计算得到的,我并不清楚。所以,我一直有个困惑:为什么有些 SQL 执行时间很长,Lock_time
消息队列那么多,为什么建议深入了解下RabbitMQ?
你为啥要在项目中选择xxx消息中间件?提起消息队列,也许你的脑海里会不自觉地蹦出好多概念:JMS、Kafka、RocketMQ、AMQP、RabbitMQ、ActiveMQ、Pulsar、Redis Stream…如果你的项目中恰好用到了其中的一个消息中间件,那么你
Java的CAS操作
CAS 是乐观锁设计思想的实现。CAS 的思想是:在“读取 - 修改 - 写回”操作序列中,先读取并修改数据,写回数据前先判断读取数据后的这段时间内数据是否发生变化(共享变量的当前值是否是我们的期望值)。
Hive分桶秘籍:解锁大数据性能提升的神秘力量
摘本文将对Hive分桶的合理性进行分析,阐述了分桶的原理、优势以及如何设计合理的分桶方案。通过探讨分桶在不同场景下的应用,我们可以更好地理解分桶对于提高查询性能和数据管理的重要性。
【全网首发】翻车了,被读者找出 BUG
本文是上篇文章《使用增强版 singleflight 合并事件推送,效果炸裂!》的续集
来这公司一年碰到的问题比我过去10年都多
无意间发现我们 Kafka 管理平台的服务的 open files 和 CPU 监控异常,如下图,有一台机器 CPU 和 opfen files 指标持续在高位,尤其是 open files 达到了4w+。原因分析第一反应是这个服务请求很高?但是这个服务是一个管理服务不应该有很高的请求量才对
如果面试官让你分析类初始化阶段的死锁现象
哈喽,大家好,我是江湖人送外号[道格牙]的子牙老师。准备写两篇文章透彻剖析下类的初始化阶段及初始化阶段的死锁问题:类的初始化做什么JVM底层是如何实现类的初始化的为什么会出现死锁问题怎么解释死锁问题如果证明你对死锁的判断是正确的我是如何论证的会由浅入深,循
如何用Spring Boot打造一个高性能的电商平台:搭建过程、踩坑经历及实践经验分享
背景:如何避免单点风险:基于实践经验分享服务拆分原则的一些思考01新项目需要的能力
Java中synchronized的优化
为了实现高效并发,虚拟机对 synchronized 做的一系列的锁优化措施。包括:适应性自旋、锁消除、锁粗化、轻量级锁、偏向锁。
云原生背景下如何配置 JVM 内存
前段时间业务研发反馈说是他的应用内存使用率很高,导致频繁的重启,让我排查下是怎么回事;在这之前我也没怎么在意过这个问题,正好这次排查分析的过程做一个记录
分类树,我从2s优化到0.1s
大家好,我是苏三,又跟大家见面了。前言分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中。但就是这样一个简单的分类树查询功能,我们却优化了5次。到底是怎么回事呢?背景我们的网站使用了SpringBoot推荐的模板引擎:Thymeleaf,进行动态渲染。它是一个XML/
Java语言
Java的线程
本篇文章介绍了1. Java的线程生命周期;2. Java的线程状态切换;3. Java线程API的使用。
不是单例的单例——巧用ClassLoader
本文通过如何将一个单例类实例化两次的案例,用代码实践来引入  Java 类加载器相关的概念与工作机制。理解并熟练掌握相关知识之后可以扩宽解决问题的思路,另辟蹊径,达到目的。
我试图通过这篇文章告诉你,这行源码有多牛逼。
这次给你盘一个特别有意思的源码,正如我标题说的那样:看懂这行源码之后,我不禁鼓起掌来,直呼祖师爷牛逼。
Redis 多线程网络模型[译]
说明今天读取了一篇关于【Redis 多线程网络模型】的国外文章,写的非常不错,深入浅出,从单线程、多线程、io多路复用以及他们实现的思路,所以把他简单翻译下;大家可以看下原文:https://www.sobyte.net/post/2022-03/redis-multi-threaded-ne
Go设计模式--命令模式
大家好,这里是每周都陪你进步的网管,假期归来咱们继续更新设计模式系列,这次要和大家一起学习的是命令模式,如果你对领域驱动设计感兴趣,这个模式一定要好好学,命令模式是DDD风格的框架中高频使用的一个模式。命令模式是一种行为型模式。它通过将请求封装为一个独立的对象即命令对象,来解耦命令的调用者和接收
Go设计模式--备忘录模式,带暂存的业务功能可以参考它来实现
大家好,这里是每周都在陪你一起进步的网管~!今天继续学习设计模式—备忘录模式备忘录模式(Memento Pattern)又叫作快照模式(Snapshot Pattern), 或令牌模式(Token Pattern), 指在不破坏封装的前提下, 捕获一个对象的内部状态, 并在对象之外保
洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法
大多数并发量稍微高点的项目中都不会让请求直达MySQL这类的关系型数据库,而是中间加一道或者几道缓存,就如同操作系统中的CPU的多级缓存,以及主存那样,通过更快速的硬件去提高数据读取的效率,进而加快系统的处理速度,避免让IO成为系统的瓶颈。
性能追击:万字长文30+图揭秘8大主流服务器程序线程模型
本文为《高性能网络编程游记》的第六篇 “性能追击:万字长文30+图揭秘8大主流服务器程序线程模型”。最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让大家见笑了。本文我们来探索一下主流的各种应用服务器的网络处理模型,看看
Go设计模式--访客模式
大家好,这里是每周都在陪你一起进步的网管~!今天继续学习设计模式—访客模式访客模式也叫访问者模式(Visitor Pattern)是一种将数据结构对象与数据操作分离的设计模式,可以在不改变数据结构对象类结构的前提下定义作用于这些对象的新的操作, 属于行为型设计模式。访问者模式主要适
Go设计模式-迭代器到底是不是一个多此一举的模式?
大家好,这里是陪你一起进步的网管~!上周收到了各位对设计模式的催更,这里我就直接开始啦,今天要一起学习的是迭代器模式。迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern)。提供了一种方法顺序地访问一个聚合对象中的元素,而不是暴
Java的抽象类 & 接口
抽象类:在子类继承父类时,父类的一些方法实现是不明确的(父类对子类的实现一无所知)。这时需要使父类是抽象类,在子类中提供方法的实现。 接口(interface)技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。
【全网首发】心心念念的优化完成了,虽然不是很完美
期间也想了各种方案,无奈不是很完美,恰好吴老师进群了,随向有着20多年经验的吴老师进行了请教,也跟A总,E总等进行了讨论,慢慢的也有了优化思路
【全网首发】使用增强版 singleflight 合并事件推送,效果炸裂!
最近在工作中对 Go 的 singleflight 包做了下增强,解决了一个性能问题,这里记录下,希望对你也有所帮助。
Seata 高性能 RPC 通信的实现- 巧用 reactor 模式
reactor 模式是一种事件驱动的应用层 I/O 处理模式,基于分而治之和事件驱动的思想,致力于构建一个高性能的可伸缩的 I/O 处理模式
Seata 高性能 RPC 通信的实现基石-Netty篇
学习 Netty 需要从了解与 Netty 相关的几个关键类开始,如Bootstrap 、ServerBootstrap、Channel、Selector、ChannelFuture、EventLoop 、EventLoopGroup 、ChannelHandler和 Pipeline 等
人人都应该知道的CPU缓存运行效率
CPU除了利用率之外,还有很容易被人忽视的指标,就是指令的运行效率。
记一次 MySQL 主从同步异常的排查记录,百转千回!
你好,我是悟空。本文主要内容如下:目录一、现象最近项目的测试环境遇到一个主备同步的问题:备库的同步线程停止了,无法同步主库的数据更改。备库报错如下:从库同步报错信息完整的错误信息:Relay log read failure: Could not parse
聊聊本地缓存和分布式缓存
**缓存**,消息队列,分库分表是高并发解决方案三剑客。 缓存之所以能够让系统“更快”,本质上做到了如下两点: - 减小 CPU 消耗 将原来需要实时计算的内容提前算好、把一些公用的数据进行复用,这可以减少 CPU 消耗,从而提升响应性能。 - 减小 I/O 消耗 将原来对网络、
网络编程范式:高性能服务器就这么回事
本文为《高性能网络编程游记》的第五篇 “网络编程范式:高性能服务器就这么回事”。随着互联网技术的兴起,以及互联网应用用户的井喷式增长,对服务器能够处理的并发连接数量也提出了更高的要求。要打造一个高性能发服务器,必须面临C10K,甚至C10M的
图文详解 Linux 分段机制!
上一篇聊到分段机制是为了提供了隔绝代码、数据和堆栈区域的机制,能够使得多个程序运行在同一个内存空间中不会相互干扰,这是对内存平坦模型的一种保护。内存经过分段机制后会变为一个个的段,这称为多段模型。多段模型能够利用分段机制的功能提供由硬件增强代码、数据结构、程序和任务的保护措施。现在我们知道了分段
保护模式下的内存管理
我们知道,内存可以看做一个非常大的数组,我们想要查找内存中某个元素的话,会通过数组的下标来指定,内存也是如此,不过这有一个前提是这个数组是由一组有序的字节组成的,在这个有序的字节数组中,每个字节都有一个唯一的地址,这个地址也叫做内存地址。内存中存储着很多对象,每个对象是由不同字节组成的,比如一个
彻底弄懂IO复用:IO处理杀手锏,带您深入了解select,poll,epoll
本文为《高性能网络编程游记》的第三篇 “IO复用:IO处理杀手锏,带您深入了解select,poll,epoll”。本节我们介绍IO复用,通过简单的例子演示IO复用的使用,以及实现原理,这个技术是目前构建目前的高性能服务器必备技术,在后面我们介绍到各
Java的反射机制
Java 的反射机制允许在程序运行期间,借助反射 API 获取类的内部信息,并能直接操作对象的内部属性及方法。
异步IO:新时代的IO处理利器
本文为《高性能网络编程游记》的第四篇 “异步IO:新时代的IO处理利器”。无论是非阻塞IO,IO复用,还是信号驱动式IO,都不是真正意义上的IO,真正的异步IO是数据从内核空间拷贝到用户空间也是异步处理的,拷贝完成,再通知应用进程,应用进程直接
Java的枚举类型
如果类的对象的数量只有有限个,并且可以确定对象的属性,那么考虑使用枚举类。所有的枚举类型都是 Enum 类的子类。它们继承了这个类的许多方法。
三分钟短文快速了解信号驱动式IO,似乎没那么完美
本文为《高性能网络编程游记》的第二篇 “信号驱动式IO,似乎没那么完美”。前面的图解Socket核心内幕以及五大IO模型一文中,我们介绍了五大IO模型。在本文中,我们重点来介绍一下目前操作系统中实现信号驱动式IO,了解其使用场景和局限性,通过一
一次由热部署导致的 OOM 排查经历
开发中,将代码部署到 test 环境测试的时候,容器经常因为 OOM 重启,而相同的代部署在 prod 环境则没有问题,怀疑是因为近期 test 环境更换了热部署基础镜像包导致的(由于我们的服务只能在 test 环境进行测试,因此使用了公司的代码修改热部署插件)。于是想通过一些 JVM 工具排查下
图解Socket核心内幕以及五大IO模型
本文为《高性能网络编程游记》的第一篇 图解Socket核心内幕以及五大IO模型。都说Java天生适合做网络编程,因为其网络模块为我们屏蔽了很多底层网络通信技术细节,简单易用,再配合强大的高性能网络框架如Netty的加持,写高性能网络处理程序那可是信手捏来。不过,我们
MProfiler的字节码增强服务
在引入字节码增强Service之前,研究了一下BTrace和jvm-sandbox的实现,因为这两个开源软件是以程序编写的方式使用的,另外还有Arthas,虽然是以命令执行的方式使用的,但其相关的一些命令,如monitor和watch等仍然使用了字节码增强,有很高的参考价。下面我们就这3个知名度比较
全网最硬核 JVM 内存详解(下)
本篇主要从 Hotspot 实现出发,以 Linux x86 环境为主,紧密贴合 JVM 源码并且辅以各种 JVM 工具验证帮助大家理解 JVM 内存的结构~
【全网首发】深入理解 slab cache 内存分配全链路实现
最后我们介绍了 slab 所在内存页的详细初始化流程,其中包括了对  slab freelist 链表的初始化,以及 slab 对象的初始化~
RocketMQ 消费者是如何负载均衡的 ?
RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )。集群消费:同一 Topic 下的一条消息只会被同一消费组中的一个消费者消费。也就是说,消息被负载均衡到了同一个消费组的多个消费者实例上。广播消费:当使用广播消费模式时,每条消息推
全网最硬核 JVM 内存详解(上)
网上有很多关于 JVM 内存结构的分析以及图片,但是由于不是一手的资料亦或是人云亦云导致有很错误,造成了很多误解;
SQL运行内幕:从执行原理看调优的本质
相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如:避免 select *;join字段走索引;慎用in和not in,用exists取代in;避免在where子句中对字段进行函数操作;尽量避免更新聚集索引;group by如果不需要排序,手
面试官:限流算法有哪些?
限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。1.计数器算法计数器算法是在一定的时间间隔里,记录请求次数,当请求次数超过该时间限制时,就把计数器清零,然后重新计算。当请求次数超过间隔内的最大次数时,拒绝访问。计数器算法的实现比较简单,但存在“突刺现
面试官:熔断和降级有什么区别?
熔断和降级都是系统自我保护的一种机制,但二者又有所不同,它们的区别主要体现在以下几点
Java的static修饰符
本文主要介绍:静态域、静态常量、静态方法、工厂方法。
【云原生•监控】夜莺可观测性之告警系统设计 - 2
夜莺监控系统在告警引擎的建设上,提供了诸多灵活配置能力,而且具备多样的告警策略,下面我们来看一下告警系统是如何设计实现的。
带你读 MySQL 源码:where 条件怎么过滤记录?
源码分析系列的第 3 篇文章,我们来聊聊 MySQL 是怎么判断一条记录是否匹配 where 条件的。本文内容基于 MySQL 8.0.32 源码。
带你读 MySQL 源码:select *
源码分析系列的第 2 篇文章,我们来聊聊 select * 中的星号是怎么展开为表中所有字段的。本文内容基于 MySQL 8.0.32 源码。
算法的艺术:MySQL order by对各种排序算法的巧用
这篇文章我们从比较宏观的角度来看MySQL中关键字的原理。本文,我们主要探索order by语句的底层原理。
Java的Object类
Object 类是 Java 中所有类的始祖,在 Java 中每个类都是由它扩展而来的。
带你读 MySQL 源码:limit, offset
我一直想写 MySQL 源码分析文章,希望能够达成 2 个目标:不想研究源码的朋友,可以通过文章了解 MySQL 常用功能的实现逻辑,做到知其然,也知其所以然。想研究源码的朋友,能够以文章为切入点,迈进 MySQL 源码研究之门。
【全网首发】从一次字符串拼接失败说起
当时聊到的一个关键点是静态变量的初始化线程安全问题,今天借助本文,聊聊静态变量的另外一个问题:静态变量初始化顺序。
【全网首发】案例分享-full gc导致k8s pod重启
在之前的记一次k8s pod频繁重启的优化之旅中分享过对于pod频繁重启的一些案例,最近又遇到一例,继续分享出来希望能给大家带来些许收获。
Java的初始化块
初始化块是一种初始化数据域的方法。
多图详解Linux内存分配器slub
slub的数据结构相对于slab来说要简单很多。并且对外接口和slab兼容。所以说,从slab的系统更换到slub,可以说是易如反掌。
系统崩溃了?别惊慌!这里有快速恢复的方法!
网站挂了,系统当前的状态;根因分析:并发量高,资源不够用了;小结:梳理健康检查失败的原因及此类问题的排查方向;总结:解决慢SQL、GC频繁加内存、并发量高水平扩展加Pod;灵魂6问:压测做了没?
MySQL多版本并发控制MVCC实现原理
承接上文MySQL事务特性ACID实现原理!MVCC(多版本并发控制)数据库中的并发大概分几种情况:读读:不需要并发控制,因为没有改变任何值。
Gateway集成Netty服务
目录一、Netty简介二、Netty入门案例1、服务端启动2、通道初始化3、自定义处理器4、测试请求三、Gateway集成1、依赖层级2、自动化配置四、配置加载1、基础配置2、属性配置类3、配置加载分析五、周期管理方法1、控制类2、管理类
SpringBoot集成Tomcat服务
目录一、Tomcat集成1、依赖层级2、自动化配置二、Tomcat架构三、Tomcat配置1、基础配置2、属性配置类3、配置加载分析四、周期管理方法1、控制类2、核心方法五、参考源码 使用的成本越低,内部封装越复杂;
分布式ID|源码解析美团Leaf双Buffer优化方案
分布式ID的使用场景基于MySql的初步方案第一次优化:Leaf-segment数据库方案第二次优化:Leaf-segment 双buffer优化源码解析双buffer优化方案背景在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。
Java的final修饰符
可以将实例域定义为 final。对于 final 域来说,构建对象时必须初始化 final 实例域,构造对象之后就不允许改变 final 实例域的值了。final 类和 final 方法用来阻止继承。
MySQL事务特性ACID实现原理
前文回顾MQ消费端如何保证幂等性?MySQL使用B+Tree的数据结构,尽可能少的层级或IO读取量的情况下,能够缓存或存储更多数据量且达到快速查询的效果。在进行索引存储的时候,索引的数据要放到磁盘里面,不可能将磁盘里面的所有文件一口气读到内存里面,因此要使用分块读取的方式,而操作系统本身进行内
【全网首发】详解Redis三大集群模式,轻松实现高可用!
Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式:主从复制模式(Master-Slave)、哨兵模式(Sentinel)和Clust
【云原生•监控】夜莺监控系统的可观测性实操 - 1
笔者已经在公有云上搭建了一套临时环境,可以先登录体验下
数据结构:“答应我,别再逃避我了好吗?”
大型互联网的高并发、高性能、高可用系统,对技术要求越来越高,我们引入各种中间件,这些中间件底层涉及到的各种数据结构和算法,是其核心技术之一
线程池这样用,架构师看了都说好
在真实业务场景中,线程池可能遇到的问题比这里描述的还要多,稀奇古怪。
MQ消费端如何保证幂等性?
MQ消息重复,如何保证消费端的幂等性MVCC(多版本并发控制)方式这是乐观锁的一种实现,每一次要对库存的数量+1,这种方式解决消息重复没有问题,但不太好,因为消息在生产的时候,生产者要判断id是不是重复的
架构演变之路:为何要搞微服务架构?
为什么我们要搞微服务架构,一个项目把代码从头撸到尾不是很方便吗,开发更快速,部署也容易。而且一提起微服务,涉及的技术就一大堆,好像几辈子也学不完。
面试官:说一下 Nacos 的健康检测机制?
Spring Cloud Alibaba Nacos 作为注册中心不止提供了服务注册和服务发现功能,它还提供了服务可用性监测的机制。有了此机制之后,Nacos 才能感知服务的健康状态,从而为服务调用者提供健康的服务实例,最终保证了业务系统能够正常的执行。两种健康检查机制Nacos 中提供了两种健
RocketMQ最佳实践之坑?
前不久踩了个坑,而这个坑跟 RocketMQ 推荐的一个最佳实践有关。
Kafka3.0源码分析-消费者的初始化
概述KafkaConsumer是从Kafka服务端拉取消息的API,开发人员可以基于这套API轻松实现从Kafka服务端拉取消息的功能;消费者是如何与Kafka服务端之间实现网络连接的管理、心跳检测、请求超时重试等功能消费者是如何实现订阅Topic的分区数量、以及Consumer Group的
【全网首发】深入剖析Redis持久化机制
Redis是基于内存存储的数据库,如果遇到服务重启或者崩溃,内存中的数据将会被清空。所以为了确保数据安全性和可靠性,我们需要将内存中的数据持久化到磁盘上。 持久化不仅可以防止由于系统故障、重启或者其他原因导致的数据丢失。还可以用于备份、数据恢复和迁移等操作。
两万字详解!Netty经典32连问!
前言大家好,我是田螺。我们去面试的时候,经常被问到netty的题目,我整理了netty的32连问。
Apisix开发环境搭建
背景云原生网关Apisix作为Apache基金会的顶级项目被大家所熟知,在微服务架构体系下,网关又是一个不可或缺的重要组件。使用早期的Spring Cloud封装Zuul的网关各方面都不太适合了,升级到Spring Cloud Gateway同样存在着一定的风险。综合考虑后使用Apisix作为AP
国产监控之光-夜莺监控(Nightingale)
夜莺是一个服务端组件,类似 Grafana,可以对接不同的TSDB时序数据库作为数据源,支持的TSDB时序数据库如Prometheus、VictoriaMetrics、Thanos等等,只要数据进到这些库里了,夜莺就可以对数据源的数据进行分析、告警、可视化,以及后续的事件处理、告警自愈。
品味布隆过滤器的设计之美
布隆过滤器是一个精巧而且经典的数据结构。你可能没想到: RocketMQ、 Hbase 、Cassandra 、LevelDB 、RocksDB 这些知名项目中都有布隆过滤器的身影。对于后端程序员来讲,学习和理解布隆过滤器有很大的必要性。来吧,我们一起品味布隆过滤器的设计之美。1 缓存穿透
Prometheus 云原生kubernetes服务发现原理图解
Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到discoveryManager结构体trargets字段中,最终由sender协程将discoveryManager的targets字段数据发送给scrape采集模块。
前端性能精进(七)——构建
前端构建是指通过工具自动化地处理那些繁琐、重复而有意义的任务。这些任务包括语言编译、文件压缩、模块打包、图像优化、单元测试等一切需要对源码进行处理的工作。
prometheus 服务发现原理
Prometheus核心功能包括服务发现、数据采集和数据存储。服务发现模块专门负责发现需要监控的目标采集点(target)信息,数据采集模块从服务发现模块订阅该信息,获取到target信息后
面向对象程序设计
面向对象程序设计是一种编程范式或编程风格。 面向对象的程序是由类和对象组成的(以类和对象作为组织代码的基本单元),并将封装、抽象、继承、多态这四个特性,作为程序设计和实现的基础。
【Redis源码分析】Server启动过程
我们通过源码来看看redis的server启动的时候会初始化哪些参数或者对象,以及都做了哪些工作?说明源码分析基于redis的6.2版本源码分析主要是在server.h和server.c本次主要是分析启动过程的流程,一些细节等后续分章节分析流程图源码解析预备知识
PC GWP-ASan方案原理 | 堆破坏问题排查实践
字节APM-PC平台开发实现了堆破坏检测利器——GWP-ASan,帮助字节内部业务剪映在PC端快速定位解决了多个疑难堆破坏问题。本文详细介绍了PC GWP-ASan的原理与方案,并提供了多个实践案例。
太坑了吧!一次某某云上的redis读超时排查经历
问题背景:最近一两天线上老是偶现的redis读超时报警,并且是业务低峰期间,甚是不解,于是开始着手排查。
【全网首发】栽了,迄今为止吐槽最多的标准库函数
对于大流量业务来说,上线某个模型或者feature,需要通过实验来检验效果。
Apache HttpClient使用和源码分析
在上文中分析了 HttpURLConnection的用法,功能还是比较简单的,没有什么封装接下来看看Apache HttpClient是如何封装httpClient的使用的版本 <dependency> <groupId>org.ap
Keepalive长链接的问题排查
事件:统一接口的管理,推行网关。选型产品为云原生开源Apisix(一套基于Nginx、OpenResty、Luajit实现的一套支持热插拔组件的云原生网关)。现在运行的应用是通过Nginx作为代理转发,通过Apisix能够替换调Nginx,达到更灵活的管理应用API。起因:现有的一套应用A -
插件化框架相关性能优化
插件化框架的发展经历了四个阶段:探索阶段、发展阶段、品质阶段、体验阶段。各个阶段有各个阶段需要完成的使命。。需要通过不断的熟读系统的代码和写的老代码,不断的挖掘瓶颈问题,见微知著,保持好奇,勇于尝试。
【全网首发】Redis系列15:使用Stream实现消息队列
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
Kafka3.0源码分析-生产者的实现细节
在 Kafka 中,生产者(Producer)负责将消息发送到 Kafka 集群,是实现高效数据流动的关键组件之一。本文将从源码层面分析 Kafka 生产者的实现细节,帮助读者更好地理解 Kafka 生产者的工作原理和性能特征。1. Kafka 生产者是如何实现消息的发送和分发的?
前端性能精进(六)——网络
网络也是前端性能优化的重要一环,网页上的资源都要经过网络来传输。优化网络性能除了缓存和压缩之外,还有就是协议和 CDN
JVM coredump分析系列(2):使用Arthas抓取火焰图导致的crash分析
前一段时间,有用户反映使用 Arthas 抓取火焰图后 JVM 进程经常会出现 crash 导致进程挂掉
【云原生 • Prometheus】图解Prometheus数据抓取原理
discovery模块利用各种服务发现协议发现目标采集点,并通过channel管道将最新发现的目标采集点信息实时同步给scrape模块,scrape模块负责使用http协议从目标采集点上抓取监控指标数据。
iOS Monorepo 全源码解决方案
Monorepo 全源码方案为大型移动端开发提供了全面可行性验证以及宝贵经验。未来,我们会将现有的功能回馈到 bazel 社区,并且推出一系列文章来讲述 BitSky 套件的工作流程及原理。
JVM:并发的可达性分析
当前主流编程语言的垃圾收集器基本上都是依靠可达性分析算法来判定对象是否存活的
前端性能精进之浏览器(五)——JavaScript
JavaScript 是一种通过解释执行的高级编程语言,同时也是一门动态、弱类型的直译脚本语言,适合面向对象(基于原型)和函数式的编程风格。
前端性能精进之浏览器(四)——呈现
本文第一章节详细描述了资源的优化,并在开篇指出资源都存在着优先级,浏览器会按优先级进行请求。预加载可提升资源的优先级,预提取可降低资源的优先级,预连接可提前进行 TCP 连接或 DNS 查询。
译 | Linux perf_events Off-CPU Time Flame Graph
I’ve been asked how to do these several times, so here’s a quick blog post.我已经被问过几次如何做到这些,所以这里有一篇简短的博客文章。CPU Flame Graphs are great for understand
【全网首发】从内核源码看 slab 内存池的创建初始化流程
slab cache 机制确实比较复杂,涉及到的场景又很多,大家读到这里,我想肯定会好奇或者怀疑笔者在上篇文章中所论述的那些原理的正确性,毕竟 talk is cheap ,所以为了让大家看着安心,理解起来放心,从本文开始,我们将正式进入 show you the code 的阶段
扯下@EventListener这个注解的神秘面纱。
前段时间看到同事在项目里面使用了一个叫做 @EventLintener 的注解。在这之前,我知道这个注解的用法和想要达到的目的,但是也仅限于此,其内部工作原理对我来说是一个黑盒,我完完全全不知道它怎么就实现了“监听”的效果。
长达 1.7 万字的 explain 关键字指南!
要让 SQL 又快又好的前提是,我们知道它「病」在哪里,而 explain 关键字就是 MySQL 提供给我们的一把武器!
MySQL 驱动中虚引用 GC 耗时优化与源码分析
本文简述了一种优雅解决 MySQL 驱动中虚引用导致 GC 耗时较长问题的解决方法、也根据自己的理解讲述了虚引用的作用、结合 MySQL 驱动的源码描述了虚引用的使用场景,希望对你能有所帮助。
Java虚拟机
Java内存模型
《Java虚拟机规范》中曾试图定义一种“Java内存模型”(Java Memory Model,JMM)来屏蔽各种硬件和操作系统的内存访问差异, 以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。 Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储
译 | Off-CPU Flame Graphs
On-CPU performance issues can solved using CPU Flame Graphs. That leaves off-CPU issues: the time spent by processes and threads when they are not run
腾讯面试:如何优雅停止一个正在运行的线程?
前言停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要使用。虽然它可以达到停止线程的目的,但是这个方法是不安全的,已被废弃。
一文带你弄懂 MySQL 的加锁规则!
MySQL 的加锁规则是怎样的,我还不是特别清楚。所以今天我们就来深入了解下 MySQL 的加锁规则。
Java的对象克隆
Object 类提供的 clone() 方法是 “浅拷贝”,并没有克隆对象中引用的其他对象,原对象和克隆的对象仍然会共享一些信息。深拷贝指的是:在对象中存在其他对象的引用的情况下,会同时克隆对象中引用的其他对象,原对象和克隆的对象互不影响。
往往排查很久的问题,最后发现都非常简单。。。
线上某个 Topic 发生了大量的RetriableCommitException,并且集中在灰度机器上
美团二面:spring事务不生效的15种场景
去美团面试被问了这么一道面试题: Spring 事务在哪几种情况下会不生效? 今天田螺哥跟大家聊聊,spring事务不生效的15种场景。
【全网首发】MQ系列12:如何保证消息有序性
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障
【全网首发】Modern Cpp丨从万能引用到完美转发
记得几年前,同事在review我代码的时候,提了个意见,建议使用emplace_back()来替代push_back()。后面随着对Mordern Cpp的使用和了解,发现STL在几乎所有的容器中都提供了emplace()或者emplace_back()函数,旨在提高程序性能
几张图彻底搞懂几个好玩的并发辅助类和阻塞队列
在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。这个时候就可以使用CountDownLatch。CountDownLatch最重要的方法是countDown()和await(),前者主要是计数减一,后者是等待计数到0,如果没有到达0,
JVM的垃圾收集算法
介绍分代收集理论和几种垃圾收集算法(标记-清除、标记-复制、标记-整理)的思想及其发展过程。
从节点崩了,还怎么「主从读写分离」?
本篇通过一次 MySQL 从节点崩了的事件,引出了如何对从节点做高可用,然后从实践的角度详细讲解了如何去配置 keepalived 来保证从节点的高可用。
【全网首发】Redis系列14:使用List实现消息队列
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
【全网首发】如何正确获取容器的CPU利用率?
如何正确地获取容器中的 cpu 利用率?容器 cpu 使用率的指标项为什么比物理机上少了 nice/irq/softirq?
内存管理:判断对象是否存活
在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对 Java 堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)。 有两种判断对象是否存活的算法:引用计数算法、可达性分析算法。
调优 mybatis saveBatch 25倍性能
最近在压测一批接口,发现接口处理速度慢的有点超出预期,感觉很奇怪,后面定位发现是数据库批量保存这块很慢。
【全网首发】解Bug之路-应用999线升高
某应用的999线突然升高。由于是个QPS高达几十万的查询服务,1分钟的升高就会影响数千个请求。初步判断应用容量不够,直接进行相关扩容,扩容后反而加剧了问题!
我的10分钟快速调优生产环境CPU利用率大法,震惊了面试官
10分钟内调优CPU利用率绝大部分开发在面试时都会被面试官问到一个问题:请举一个在以前工作过程中你觉得自己做的非常不错的事例;换言之:请吹一个牛;一般人呢,这个牛他会悠着点吹,大多数符合
eBPF verifier验证器与编译器inline内联
二月份编写eCapture的GoTls密钥捕获功能时,遇到了一个小bug,就是在UBUNTU 21.04的Linux上运行时,遇到eBPF verifier的报错,无法启动,后来通过启用always inline解决了这个问题~
rocketmq-spring 实战与源码解析一网打尽
RocketMQ 是大家耳熟能详的消息队列,开源项目 rocketmq-spring 可以帮助开发者在 Spring Boot 项目中快速整合 RocketMQ。
Java的运行时数据区域
本文从概念上介绍 Java 虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题。
Java的访问修饰符
为了实现面向对象程序设计(OOP)的封装这个特性,需要程序设计语言提供一定的语法机制来支持。这个语法机制就是访问权限控制(访问修饰符:public、protected、private、default)。
Nginx代理后getServerName()方法获取不到域名
当使用了Nginx代理,会出现Java用HttpServletRequest的getServerName()方法获取不到域名,而是127.0.0.1的情况复现首先修改本地的hosts文件来模拟域名访问将test.com添加到配置中然后写一个接口来输出getServerName()方法 @
一文读懂并发包中的读写锁和Condition实现原理
这两天就有朋友说ReentrantLock中的Condition条件等待以及ReentrantReadWriteLock读写锁的实现有点繁琐,问我能不能讲下其关键实现原理。这篇文章我们就来谈谈这个主题
使用 eBPF 技术跟踪 Netfilter 数据流
我们了解到对于 Netfilter 的底层函数为 ipt_do_table,那么我们只需要使用 kprobe 和 kretprobe 获取到入参和返回结果,即可以获取到对应的过滤结果
图解并发包中锁的通用实现
阅读完本篇文章,你将了解到:抽象同步器AQS的实现原理、ReentrantLock实现原理、非公平锁和公平锁实现的区别;基于这些内容,您也可以自己进一步探索可中断锁的实现原理、AQS的核心是state字段以及双端等待队列、如何优雅的中断一个线程
eBPF: 从 BPF2BPF 调用到尾调用
我在学习尾调用的时候苦于没有一个能跑起来的简单易懂的例子,所以最后自己撸了一个,这个版本我认为是目前能找到的所有例子里对初学者最友好,逻辑最清晰的一个~
使用eBPF实现基于DWARF的堆栈遍历
译者注:原文为https://www.parca.dev/[1]的Javier Honduvilla Coto[2],文章地址DWARF-based Stack Walking Using eBPF[3],副标题Deep dive into the new DWARF-based stack
Java限流及常用解决方案
限流基本概念对一般的限流场景来说它具有两个维度的信息:时间:限流基于某段时间范围或者某个时间点,也就是我们常说的“时间窗口”,比如对每分钟、每秒钟的时间窗口做限定。资源:基于可用资源的限制,比如设定最大访问次数,或最高可用连接数。上面两个维度结合起来看,
支付宝一面:如何基于Redis实现分布式锁?
网上有很多 Redis 分布式锁相关的文章,写了一个相对简洁易懂的版本,针对面试和工作应该够用了。
一文带你彻底理解同步和锁的本质
为了更好地从底层原理去了解锁的机制,形成体系化的知识,这篇文章我会从进程间通信底层原理说起,然后介绍一下Java中各种线程通信的实现机制,最后做一个系统的总结。
Topic太多!RocketMQ炸了!
最近排查一个问题,发现RocketMQ稳定性同样受到topic数量影响!!
【全网首发】数据库系列:数据库高可用及无损扩容
在大型互联网场景中,数据库的高可用性显得尤为重要,为了保证稳定性,一般需要采用强化的架构模式,以保证数据层能够提供持续有效的稳定支撑。
借鉴MAT,我也开发了MProfiler的堆分析程序
Java应用一键诊断利器-MProfilerMProfiler技术架构MProfiler要想丰富诊断项,接口是基础。这些接口在保证稳定性和性能之外,还要尽可能的丰富,这样在编写诊断项时,就能够方便的获取更多的信息做出更精确的判断了。MProfiler目前正在使用C/C++开发集成堆分析程序,我们
RabbitMQ、RocketMQ、Kafka性能为何差距如此大?
mysql并发写大部分情况下维持在600-800之间,并发读1200-1500之间,所以消费端在消费消息的时候需控制在并发小于1000,从而达到限流的效果。
我试图通过这篇文章,教会你一种阅读源码的方式。
啃源码的过程,一定是非常枯燥的,特别是啃自己接触不多的框架源码的时候,千头万绪,也得下手去捋,所以一定要耐得住寂寞才行。调试源码,一定要亲!自!动!手!只是去看相关的文章,而没有自己一步步的去调试源码,那你相当于看了个寂寞。
【全网首发】定位频繁创建对象导致内存溢出风险的思路
背景介绍近来一段时间排查了几例由于应用程序频繁创建对象导致FGC的问题,问题产生的场景包括:同一条SQL语句,平时返回预期内的数据条数,出问题的时候返回了几十万条数据,短时间内创建了大量对象进而导致非预期的GC。应用程序在处理Excel文件的时候,短时间内创建了大量对象进而导致非预期GC。
【全网首发】RocketMQ控制台消费者堆栈信息展示优化分析
背景介绍专有云企业版v_3_12,消息队列RocketMQ控制台->Group管理,查看Group ID下单个消费端堆栈信息,期望只展示与该Group ID相关的堆栈信息,在以下场景与期望不符。场景介绍在同一个程序中创建两个不同Group ID的消费端实例,在控制台中查看一个Group
Kafka消费者
消费者读取消息。在其他基于发布与订阅的消息系统中,消费者可能被称为订阅者 或 读者。 消费者订阅一个或多个主题,并按照消息生成的顺序读取它们。消费者通过检查消息的偏移量来区分已经读取过的消息。
译 | JEP 331: Low-Overhead Heap Profiling
Summary(概要)Provide a low-overhead way of sampling Java heap allocations, accessible via JVMTI.提供一种低开销的Java堆分配采样方式,可通过JVMTI访问。Goals(目标)Provide a wa
【全网首发】Redis系列13:分布式锁实现
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
Kafka生产者
生产者创建消息。在其他基于发布与订阅的消息系统中,生产者可能被称为发布者 或 写入者。
如果有人给你撕逼Java内存模型,就把这些问题甩给他
导读JVM内存模型(JMM)是并发的基础,要是想扎实的理解并发原理,那么就必须对JMM有比较深刻的认识。相信大部分朋友都有所了解了。这两天回顾了一下相关内容,在琢磨怎么才能更加直观的表达出这个内存模型,并且对这个模型有比较深刻的认识。刚好最近想做做动画,所以打算练练手尝试下以动画的形式来描述下这个
Java界的性能优化高手
Java代码性能优化谁最在行,那一定是每天从事优化工作的人,目前来看就是Java编译器了。我们本章主要了解下这个性能优化高手平时是怎么工作的,怎么帮我们提高代码效率,以及讨论一下代码效率方面的问题。
初识Kafka
通过阅读本篇文字,你可以了解到 Kafka 中的概念:消息、主题、分区、消费者群组、broker 等。
译 | The JVM Tool Interface (JVM TI): How VM Agents Work
原文出处:https://www.oracle.com/technical-resources/articles/javase/jvm-tool-interface.html翻译内容来自有道翻译。The JVM tool interface (JVM TI) is a standard nati
从源码彻底理解 Prometheus/VictoriaMetrics 中的 relabel/metric_configs 配置
最近接手维护了公司的指标监控系统,之后踩到坑就没站起来过。。
深入理解事务
事务将应用程序的多个读、写操作捆绑在一起成为一个逻辑执行单元。即事务中的所有读写是一个执行的整体,整 个事务要么成功(提交)、要么失败(中止 或者 回滚)。如果失败,应用程序可以安全地重试。
面试必备:四种经典限流算法讲解
前言大家好,我是田螺.最近一位朋友去拼夕夕面试,被问了这么一道题:限流算法有哪些?用代码实现令牌桶算法。跟星球好友讨论了一波,发现大家都忘记得差不多了.所以田螺哥再整理一波,常见的四种限流算法,以及简单代码实现,相信大家看完,会茅塞顿开的。1、固定窗口限流算法1.1 什么是固定窗口限流算
用 Seata 搞定分布式事务的规范化建设-赋能产研|提质增效
一、背景随着微服务架构的演进,单体应用按照服务维度进行拆分,组织架构也随之演进以横向、纵向维度拆分;导致了原来调用一个服务的一个接口就完成的功能,现在需要协同调用多个服务的多个接口才能完成。原来在一个库中就完成的功能,现在可能要涉及多个库的多张表,通常还会有多种存储介质一起协作以支撑数
完了,CPU100%了
cpu使用率100%问题,是一个让人非常头疼的问题。因为出现这类问题的原因千奇百怪,最关键的是它不是必现的,有可能是系统运行了一段时间之后,在突然的某个时间点出现问题。
【全网首发】MySQL全面瓦解30:备份与恢复
1 为什么需要数据库备份灾难恢复:当发生数据灾难的时候,需要对损坏的数据进行恢复和还原需求的变更或者回滚:当需求发生变更,或者需要回滚到之前的版本时,数据库备份也显得很重要。审计:需要知道某一个阶段的数据或者Schema的实际情况测试:将实际的生产环境的数据导入到本地备份为测试数据,来验证
深入探索Java泛型的本质
为什么泛型擦除后仍可以获取类型信息,如何获取泛型类型,Java泛型与C++、Python中的有何区别,本文将为您揭开泛型的内幕
美团:某动态线程池框架是官方开源的么?
最近,有很多同学在微信上问我这么一个问题:Hippo4j 动态线程池框架是美团开源的么?类似于这样的问题还挺多,在这里统一回复下:美团官方并没有开源任何关于动态线程池的框架。美团官方关于对动态线程池框架的唯一产出,来自于大家基本上看过或者有印象的一篇博客。Java线程池实现原理及其在美团业
【全网首发】将线程死锁检测集成进arthas以提高定位效率
arthas jvm命令显示了死锁线程个数,线程名称、线程ID并没有展示出来,如果想知道死锁线程具体信息需要再使用jstack来分析,如果死锁线程信息可以在arthas中展示出来可以提高问题排查效率。
数据库设计的步骤
数据库设计是指:根据用户的需求,在数据库管理系统上(比如:MySQL、Oracle),设计数据库的结构和建立数据库的过程。 数据库设计的设计内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。
10分钟教你如何hack掉Java编译器
导读如标题所述,我们如何才能hack掉java编译器,也就是javac呢?为了找到这个套路,我们需要从一般的编译流程,javac的编译流程,插入式注解处理器说起,最后通过一个例子演示如何在编译期间篡改代码,并且介绍业界常见的应用场景。读完该篇文章,你可以了解到:
不可以不知的Java代码编译历程
1. 编译流程主要包含哪些步?2. javac命令主要是做什么事情的?3. 什么是JIT?4. Java程序有哪些执行模式?
【全网首发】如何检测由synchronized或Lock引起的线程阻塞问题
背景介绍排查问题的时候,有遇到synchronized使用不合理导致接口响应延迟,出现问题的伪代码如下:public synchronized Object businessMethod(Object params){ Object ret = xxxx; Object resp
Java代码是如何被CPU狂飙起来的?
无论是刚刚入门Java的新手还是已经工作了的老司机,恐怕都不容易把Java代码如何一步步被CPU执行起来这个问题完全讲清楚。但是对于一个Java程序员来说写了那么久的代码,我们总要搞清楚自己写的Java代码到底是怎么运行起来的。
SQL优化13连问,收藏好!
大家好,我是田螺。金三银四已经开始啦,准备了SQL优化的13连问,内容非常干!相信大家看完一定会有帮助的。1.日常工作中,你是怎么优化SQL的?大家可以从这几个维度回答这个问题:分析慢查询日志使用explain查看执行计划索引优化深分页优化避免全表扫描
腾讯二面: Redis 如何使用批量操作提高效率?
使用批量操作可以减少网络传输次数,进而有效减小网络开销,大幅减少 RTT。
设计模式开发实践(外观、策略、代理)
一、背景  项目组接到新需求,在客运站站务系统窗口售票中,分销城际定制客运班线车票。传统汽车客运站班线客流逐年下滑,在网约车影响和政府政策主导下,传统汽车客运站开始寻求积极的业务转型,深度与城际出行、定制客运出行整合。  既支持传统站务系统班线客运–分销至–定制客运售票,也支持定制客运车票–分销
深入思考:JVM是如何进行方法调用的
我们知道方法调用会产生栈帧,存在虚拟机栈中,那么究竟JVM是如何进行方法调用的呢?
完了完了!线上发生 OOM 了!
先从监控链路分析了一波,发现请求是已经打到服务上了,处理之前不知道为什么等了 3s,猜测是不是机器当时负载太大了,通过 QPS 监控查看发现,在接口慢的时候 CPU 突然增高,同时也频繁的 GC ,并且时间很长,但是请求量并不大,并且这台机器很快就因为 Heap满了而被下掉了。
Go设计模式--桥接模式,让代码既能多维度扩展又不会臃肿
下面举个大家都能理解的例子来说明桥接模式模式在系统多维度扩展和降低臃肿度上的作用
【全网首发】内核是如何给容器中的进程分配CPU资源的?
容器中的核是真的逻辑核吗?Linux 是如何对容器下的进程进行 CPU 限制的,底层是如何工作的?容器中的 throttle 是什么意思?为什么关注容器 CPU 性能的时候,除了关注使用率,还要关注 throttle 的次数和时间?
.NET微服务系统迁移至.NET6.0的故事
本次迁移涉及的是公司内部一个业务子系统,该系统是一个多样化的应用,支撑着公司的多个业务方向。目前,该系统由40多个基于.NET的微服务应用构成,使用数千个CPU核心和数TB内存,在数百个Linux容器中运行。每天,该系统需要处理数十亿次请求。该系统其中大部分服务是在2018-2019年左右由老旧
从RabbitMQ平滑迁移至Kafka架构设计方案
历史原因,公司存在多个 MQ 同时使用的问题,我们中间件团队在去年下半年开始支持对 Kafka 和 Rabbit 能力的进行封装,初步能够完全支撑业务团队使用。
通过硬件计数器,将性能提升3倍之旅
本文通过对CPU层面的代码挖掘,发现JVM存在的问题,并通过对JVM打补丁的方式解决了大实例下性能不足的问题
【全网首发】日常Bug排查-mq不消费
同事反馈应用出现了一个诡异的问题。mq在应用启动10分钟之后就开始堆积。反复重启了几次都是如此。
线程数量与执行效率的分析
在同一机器/操作系统上,使用n个线程处理X个任务是不是和使用n*m个线程处理X个任务效率相同?
Java语言
Java集合
Java 集合主要包括 Collection 和 Map 两种: 1、Collection 是一种存储元素的集合,Collection 包括 List、Set、Queue 三种类型。 2、Map 是一种存储键值对的集合。
eBPF 快速定位网络抖动
在容器集群中新部署的服务 A,在测试初期发现通过服务注册发现访问下游服务 B(在同一个容器集群) 调用延时 999 线偶发抖动,测试 QPS 比较小,从业务监控上看起来比较明显,最大的延时可以达到 200 ms。
传输安全HTTPS
通过阅读本篇文章你可以了解到: 1、为什么要有HTTPS; 2、TLS1.2 握手的过程。
【全网首发】诡异!std::bind in std::bind 编译失败
上周的某个时候,正在愉快的摸鱼,突然群里抛出来一个问题,说是编译失败,截图如下:
使用 Go 语言开发 eBPF 程序
本文将介绍基于 Go 和对应的库开发 eBPF 程序
eBPF 完全入门指南.pdf(万字长文)
开发者可基于 eBPF 开发性能分析工具、软件定义网络、安全等诸多场景。本文将介绍 eBPF 的前世今生,并构建一个 eBPF 环境进行开发实践,文中所有的代码可以在我的 Github[2] 中找到。
一篇图文彻底弄懂Class文件是如何被加载进JVM的
1. Class.forName究竟是怎么获取Class对象的,Class对象又是什么?2. Class文件是如何被加载到JVM里面的?3. 类变量是存在堆中还是存在方法区中?
一篇图文彻底弄懂类加载器与双亲委派机制
1.类加载器是怎么被创建出来的?2. 什么是双亲委派机制?为什么要有这种机制?3. 什么是线程上线文类加载器 
eBPF指令集规范v1.0
编译成功的eBPF程序,加载时偶尔会过不了内核BPF verifier,冒出一堆汇编语句。理解eBPF指令集,可以帮助我们调试这类问题。
前端性能精进之浏览器(三)——图像
本文对图像的优化进行了系统性的梳理,首先是对请求做优化。为了更科学的对图像进行请求,列出了懒加载、预加载和 Data URI 三种优化方法。
从输入URL到Web页面呈现的全过程
简单来说,当用户在浏览器的地址栏中输入 URL 并点击回车后,浏览器从服务端获取资源,然后将内容显示在页面上。这个过程经过了:浏览器缓存 -> DNS 域名解析 -> URL 编码 -> 使用 HTTP 或者使用 HTTPS 协议发送请求等过程。
Java对象历险记与垃圾回收机制
对象的分配和回收流程 为了解读上面的动图,我们先来介绍一下垃圾收集相关的知识。1、对象回收处理过程2、判断用户是否可用算法2.1、引用计数算法如上图,给对象一个引用计数器refCount。每有一个对象引用它,计数器加1,当refCount=0的时候,表示对象不再可用。
【全网首发】Redis系列12:Redis 的事务机制
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
Java运行时数据区域是如何工作的
1、运行时数据区域注:方法区,Java 8之前也叫PermGen永久带,Java8去掉了永久带,引入了Metaspace元空间。1.1、程序计数器存储:当前线程所执行的字节码的行号指示器。(执行native方法时为空)这个区不会出现OOM异常。1.2、Java虚拟机栈存储:Jav
一文带你搞懂 mmap 技术
当我们对内存特定区域进行读写时,操作系统便会检测到这一操作,然后根据不同场景去做读磁盘或者写磁盘的操作。
前端性能精进之优化方法论(二)——分析
在上一节中曾提到过两种性能监控:SYN 和 RUM,那么对应的也有两种分析:数据分析和实验室分析。数据分析会通过采集上来的性能信息来剖析和定位可能存在的各种问题。
前端性能精进之优化方法论(一)——测量
本文的示例代码摘取自 shin-monitor,一款开源的前端监控脚本。为了便于记忆,特将此系列的所有重点内容浓缩成一张思维导图
Go设计模式--享元模式,节省内存的好帮手
当一个系统中有大量的重复对象的时候,如果这些对象是不可变对象,我们就可以使用享元模式,将这些对象设计成享元,在内存只保存一份,供需要的代码使用,这样能减少内存中对象的数量,起到节省内存的作用。
性能优化 · MySQL常见SQL错误用法
今天给大家分享几个SQL常见的“坏毛病”及优化技巧
BPF内核实现详解
BPF的字面上意思Berkeley Packet Filter意味着它是从包过滤而来。如果在开始前对BPF缺乏感性的认识建议先看一下参考文档:“3.1、Berkeley Packet Filter (BPF) (Kernel Document)”、“3.2、BPF and XDP Reference
问了几人,MySQL changebuffer 这点都没答对
之前我写过一篇关于 mysql innodb 所有 buffer 的内容 :总结 mysql 的所有 buffer,一网打尽就这篇了!
携程一面:什么是双亲委派模型?
这是携程一面的一个 JVM 面试真题。参加过校招面试的同学,应该对这个问题不陌生。一般提问 JVM 知识点的时候,就会顺带问你双亲委派模型
一起聊一聊hive的索引优化
大家好,我是球球,今天给大家聊聊hive的索引。
.NET遍历二维数组-先行/先列哪个更快?
上周在.NET性能优化群里面有一个很有意思的讨论,讨论的问题如下所示:
扯什么 try-catch 性能问题?
“yes,你看着这鬼代码,竟然在 for 循环里面搞了个 try-catch,不知道try-catch有性能损耗吗?”老陈煞有其事地指着屏幕里的代码:
MProfiler技术架构
MProfiler是单机Java应用一键检测利器,其主要的技术架构如下图所示.MProfiler为了减少对目标Java进程的干扰,对目标Java进程只是采集数据,对数据的分析以及风险库诊断都要在独立的MProfiler进程中执行。MProfiler在分析目标Java应用程序时,由于JVMTIA
看完这一篇,ShardingSphere-jdbc 实战再也不怕了
谈到分库分表中间件时,我们自然而然的会想到 ShardingSphere-JDBC 。 这篇文章,我们聊聊 ShardingSphere-JDBC 相关知识点,并实战演示一番。
通过 Pulsar 源码彻底解决重复消费问题
背景最近真是和 Pulsar 杠上了,业务团队反馈说是
内容分发网络 CDN
内容分发网络(英语:Content Delivery Network 或 Content Distribution Network,缩写:CDN)将源站资源缓存到全国各地的边缘服务器,供用户就近获取,降低源站压力。
一个诡异的 Pulsar InterruptedException 异常
今天收到业务团队反馈线上有个应用往 Pulsar 中发送消息失败了,经过日志查看得知是发送消息时候抛出了 java.lang.InterruptedException 异常。
操作系统
高效入门eBPF
今天主要进行eBPF的入门介绍,说起eBPF就不得不先了解一下eBPF的前身BPF。eBPF是extended BPF 的简称,而BPF的全称是Berkeley Packet Filter,即伯克利报文过滤器。
【全网首发】数据库系列:覆盖索引和避免回表
1 介绍在MySQL数据库查询过程中,索引覆盖和避免不必要的回表,是减少检索步骤,提高执行效率的有效手段。下面从这两个角度分析如何进行MySQL检索提效。2 数据准备模拟一个500w数据容量的部门表 emp,表结构如下,并通过工具模拟500w的数据:CREATE TABLE `emp` (
Redisson分布式锁RedissonLock的原理
Redisson的分布式锁用的是setnx命令吗?Redisson分布式锁RedissonLock的原理以及源码分析。
Istio升级后踩的坑
前段时间我们将 istio 版本升级到 1.12 后导致现有的应用监控有部分数据丢失(页面上显示不出来)。
Redis Cluster去中心化设计的思考
常见的分布式存储如Zookeeper的工作模式即是 Leader 协调写入,⾼并发场景下 Leader 单节点会成为系统的瓶颈,单节点的瓶颈本质就是中心化的问题
Redisson限流器RRateLimiter使用及源码分析
我们分析一下Redisson的限流器RRateLimiter的原理和源码。然后利用Redisson提供的限流器RRateLimiter自定义一个注解,在项目中简化限流器的使用。
自省|探讨线程间入门级协作的19个问题
在《并发之道:三大并发问题与 JMM 何干?》中,在讨论【编程语言如何解决并发问题】的话题时,有聊到编程语言面对并发的三大问题,它所做的是对多线程的通信、同步机制进行包装,为开发者提供使用轻便、功能丰富的多线程编程 API
RedisTemplate调lua踩了个坑
RedisTemplate的Serializer将不同的数据类型进行序列化时,内置了一套逻辑,譬如Long类型的追回“L”,Byte的追加“B”。这就可能与redis期望的数据不一致,而引发错误
火山引擎推出一站式小程序监控方案
火山引擎 APM 团队打造出一站式小程序监控平台,旨在为开发者提供可跨平台、监控能力完善、简单易用的小程序监控服务。
面试官:如何排查死锁?
从易用性和性能方面来考虑,推荐使用 jconsole 或 jvisualvm 来排查死锁。
分布式事务解决方案
随着时间的推移,用户量增大了,发现一个Java服务扛不住了,于是技术大佬决定对于系统进行升级
JVM级别内存屏障如何禁止指令重排序的
当多个cpu访问同一份数据的时候怎么保证数据的一致性?在最底层级别的控制有好多种
【全网首发】Linux 中 CPU 利用率是如何算出来的?
top 输出的利用率信息是如何计算出来的,它精确吗? ni 是 cpu 在处理啥时的开销? wa 代表的是 io wait,那么这段时间中 cpu 到底是忙碌还是空闲?以上问题本文将为你解答!
NAPI-RS 是怎么工作的: 从 NAPI 到 Build Script & FFI
NAPI-RS 是一个在 Rust 下编写高性能 Node.js 扩展的框架,底层使用 N-API 进行交互。本文从 Build Script 与 FFI 出发简单介绍了 NAPI-RS 的实现原理
DelayQueue延迟队列之Java篇
java.util.concurrent.DelayQueue是Java提供的一个延迟队列,数据是放在内存中的,JVM重启之后数据就全没了
系统上线前,SQL脚本的9大坑
系统上线时,非常容易出问题。即使之前在测试环境,已经执行过SQL脚本了。但是有时候,在系统上线时,在生产环境执行相同的SQL脚本,还是有可能出现一些问题。
【全网首发】一文吃透 Go 内置 RPC 原理
hello 大家好呀,我是小楼,这是系列文《Go底层原理
JVM coredump分析系列(1):OOM导致的crash分析
笔者近期遇到多个内存 OOM 导致的crash,因为内存问题发生的原因不仅牵涉 JVM 还涉及到操作系统底层,在此整理一下相关的原理和分析思路,以便今后发生类似的问题可以有一个参考
DCL单例模式是如何保证数据安全的?
承接上文证明CPU指令是乱序执行的。DCL单例(Double Check Lock)到底需不需要volatile?
【全网首发】数据库系列:前缀索引和索引长度的取舍
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:使用高区分度索引列提升性能1 背景有时候我们的字段是个长字符串,在长字段上建立索引,会让索引变得大而且慢。根据我们之前的了解,每个磁盘块(disk)存储的
【全网首发】inline: 我的理解还停留在20年前
在上篇文章访问私有变量——从技术实现的角度破坏"封装"性一文中,在第二个实现示例中,用到了inline 变量,一开始,是懵逼的,因为在我的印象中inline 仅仅函数,而在此处却用于声明变量
证明CPU指令是乱序执行的
cpu速度要比内存的速度快100倍,中间有各种各样的缓存,最常见的是三级缓存,由于它的速度非常快,在执行指令的时候也会有一些优化,比如现在有2条指令,一个是mov指令即从内存中读取一个数据到某一个寄存器中
【全网首发】一种获取阻塞线程栈帧数据的思路
总体思路是: ● 通过线程ID找到对应的线程对象; ● 通过指定的depth获取线程栈在depth处的类名、方法名; ● 通过指定的方法入参获取对应的Method对象,进而获取到方法的本地变量表; ● 通过线程对象、方法的本地变量表,最终获取到指定depth的栈帧数据
Java字节码,你还可以搲的更深一些!
从Java字节码的顶层结构介绍开始,通过一个实际代码,了解了类加载以后,在JVM内存里的表现形式,并了解了jhsdb对Java进程的观测方式
io_uring,干翻 nio!
随着一步步的优化,系统调用这个大家伙,调用次数越来越少了。
CPU缓存一致性原理
承接上文线程的执行cpu速度和内存速度比值,目前比值是1
访问私有成员—从技术实现的角度破坏"封装" 性
对于C++三大特性中的封装特性,如果直接访问私有变量,则编译器会报错,那么有没有其它方式可以访问私有变量呢?
一次偶然机会发现的MySQL“负优化”
数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个离奇的“索引失效”支配的恐惧。
架构杂谈—互联网系统架构演进
随着业务的发展,对系统的处理能力、高可用性也就提出了越来越高的要求,在单节点的基础上,集群架构应运而生
【全网首发】抛砖系列之k8s HorizontalPodAutoscaler(HPA)
“高可用、高并发、大流量”这些曾经似乎只会出现在互联网业务中的高大上词汇,现在已然是随处可见,不管真实业务场景会不会出现,对外宣称时都会标榜这类特性,要支持这类特性有一个极其基础的能力是必须具备的,那就是扩容,而扩容一般又分为垂直扩容和水平扩容,最为广泛的属水平扩容。
数据库锁的12连问,抗住!
如果有多个并发请求存取数据,在数据就可能会产生多个事务同时操作同一行数据。如果并发操作不加控制,不加锁的话,就可能写入了不正确的数据,或者导致读取了不正确的数据,破坏了数据的一致性。因此需要考虑加锁。
舒服了,电光火石间,又在顶级开源项目里面捡了个大漏!
你知道的,我就喜欢盘一点开源项目的 BUG,看看有没有机会,捡捡漏什么的。在我辉煌的“捡漏”历中,曾经最浓墨重彩的一笔是在 Redisson 里面,发现作者在重构代码的时候,误把某个方法的计数,从默认值为 0,改成了为 1。
Java语言
线程的执行
承接上文CPU原理简介程序的执行是由控制器发信号推动整个
【全网首发】数据库系列:使用高区分度索引列提升性能
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更1 背景我们常常在创建组合索引的时候,会纠结一个问题,组合索引包含多个索引字段,它的顺序应该怎么放,怎样能达到更大的性能利用。正确的索引字段顺序应该取决于使用该索引的查
开放报名 | 字节跳动工程师带你 5 天进阶 iOS 应用稳定性优化
iOS稳定性训练营开启报名!5天进阶异常问题排查与稳定性治理
Java语言
CPU原理简介
cpu内部有一个部件叫ALU(数据逻辑单元)是用来做计算的,寄存器用来存数据的,pc(程序计数器)用来存指令。
8 个线程池最佳实践和坑!使用不当直接生产事故
这篇文章我会简单总结一下我了解的使用线程池的时候应该注意的坑以及一些优秀的实践
zookeeper恢复了,线上微服务却全部掉线了,怎么回事?
注册中心zookeeper重启恢复后,线上微服务却全部掉线了,怎么回事?!最近因为一次错误的运维操作,导致线上注册中心zk被重启。而zk重启后发现所有线上微服务开始不断掉线,造成了持续30分钟的P0故障。
修改 lower_case_table_names 导致 frm 文件删除失败
最近碰到一个线上问题,mysqldump 导出数据报错
MySQL 不相关子查询怎么执行?
对于 where 条件包含子查询的 SQL,我们可以做一点优化,就是把这类 where 条件放在最后,让 MySQL 能够少做一点无用功,提升 SQL 执行效率。
BCC小白写测试上下文切换延时程序
学习兴趣起源于论文《Linux上下文切换性能测试的一种新方法》的阅读,该论文提出了一种在用户态编写应用程序并且调用schedu_yield()系统调用主动放弃处理器实现任务切换的测试方法,然后与传统的使用管道读写切换、在内核态测试context_switch()函数的开销等方法进行了对比分析
从一个 Demo 说起 Zookeeper 服务端源码
Zookeeper目前是Apache下的开源项目,作为最流行的分布式协调系统之一,我们平时开发中熟知的Dubbo、Kafka、Elastic-Job、Hadoop、HBase等顶级开源项目中的分布式协调功能都是通过借助Zookeeper来实现的,可以看到想要在生产中保障Zookeeper服务的稳定、
Pulsar负载均衡原理及优化
当一个集群可以水平扩展后负载均衡就显得非常重要,根本目的是为了让每个提供服务的节点都能均匀的处理请求,不然扩容就没有意义了。
CPU性能指标提取及源码分析
这篇报告主要根据CPU性能指标——运行队列长度、调度延迟和平均负载,对系统的性能影响进行简单分析。
關於用 Go 实现堆和堆操作,可能是最通俗易懂的讲解了
堆是一种树形数据结构,分为大顶堆和小顶堆,顾名思义,大顶堆就是堆顶(第一个元素)始终存放的是这组元素中的最大元素,小顶堆就是堆顶元素是最小元素。如果需要从一组对象中查找最大值或最小值,使用堆能够高效率的完成需求。排序算法中的堆排序正是利用了堆这一数据完成的排序,堆在实际应用中主要被用于实现优先队列
Go 内联优化:如何让我们的程序更快?
大家好,我是煎鱼。最近周末在家学习时看到 @Dave Cheney 的《Inlining optimisations in Go[1]》还是有不少养分的,翻译分享给大家,部分内容有所修改、删减、调整。这是一篇介绍 Go 编译器如何实现内联的文章,以及这种优化将如何影响你的 Go 代码,并最终
百万数据excel导出功能如何实现?
我们要如何才能解决这些问题,实现一个百万级别的excel数据快速导出功能呢?
【全网首发】数据库系列:MySQL慢查询分析和性能优化
1 背景我们的业务服务随着功能规模扩大,用户量扩增,流量的不断的增长,经常会遇到一个问题,就是数据存储服务响应变慢。导致数据库服务变慢的诱因很多,而RD最重要的工作之一就是找到问题并解决问题。下面以MySQL为例子,我们从几个角度分析可能产生原因,并讨论解决的方案。2 定位慢查询的原因并优化
MySQL索引15连问,抗住!
前言大家好,我是田螺。金三银四很快就要来啦,准备了索
【全网首发】从进程栈内存底层原理到Segmentation fault报错
这篇文章中我给大家介绍进程栈的初始化过程、栈对应的物理内存是如何分配的、以及栈的自动增长。也会看到“Segmentation fault (core dumped)”产生的的根本原因。
辞旧岁立新年 | 展望前端工程师的2023
字节前端工程师黄健参与「InfoQ 2022年度技术盘点与展望」,展望前端研发工程师的 2023,从前端工程师与云原生;回顾过去,畅谈未来;职业发展,未来前景三个部分展开精彩分享。
【全网首发】记一次SSL握手导致业务线程阻塞的案例分析
问题描述产品线反馈RocketMQ某Group ID出现消息堆积,重启后正常,一段时间后再次堆积,近期堆积问题出现的频次有些高,希望能够分析解决下
“堆外内存”这玩意是真不错,我要写进简历了。
一个服务的各项 JVM 的配置都比较合理的情况下,它的 GC 情况还是不容乐观。
TCP-三次握手
TCP-三次握手最近对计算机网络蛮感兴趣的,借着这股劲,来系统研究研究 TCP 协议。先来个经典的三次握手问题一问,为什么要三次握手?首先 TCP 协议底层是 IP层,IP层 本身是不可靠的TCP 协议的出现,就是要创建一个可靠的协议,区别于 UDP协议TCP 为了提供可靠的服务,得先建
【全网首发】深度剖析 Linux 伙伴系统的设计与实现
本文笔者就为大家完整地介绍一下伙伴系统这部分的内容,我们将基于内核 5.4 版本的源码来详细的讨论一下伙伴系统在内核中的设计与实现
Apache Kafka入门级教程
Apache Kafka是什么?摘抄自官网首页的一段话
内核优化之 PSI 篇:快速发现性能瓶颈,提高资源利用率
一个进程的运行过程实际上是一个不断等待不断执行的过程,过多的等待会对进程的吞吐和延时造成负面影响,是否有一种内核机制能够量化这些等待时间呢?
ThreadDump分析笔记(一)解读堆栈
1. 概述随着系统日益增大,代码结构日渐复杂,经过验收测试的系统可能在实际生产环境下表现的一塌糊涂,也可能非常棒。因此通过QA并不能保证系统不会发生内存泄漏,往往流量越大泄露的越快,最后导致系统崩溃。比如在某个时间点系统一直出现TimeOut、或者系统突然处理速度急剧下降等问题。对于开发人员就非
万字详解,吃透 MongoDB!
本文已经收录进 JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。)少部分内容参考了 MongoDB 官方文档的描述,在此说明一下。MongoDB 基础MongoDB 是什么?MongoDB 是一个基于 分布式文件存储 的开源 NoSQL
我与流式计算的故事
聊聊流式计算吧 , 那一段经历于我而言很精彩,很有趣,想把这段经历分享给大家。1 背景介绍2014年,我在艺龙旅行网促销团队负责红包系统。彼时,促销大战如火如荼,优惠券计算服务也成为艺龙促销业务中最重要的服务之一。而优惠券计算服务正是采用当时大名鼎鼎的流式计算框架 Storm。流式计算是
select for update行锁or表锁,20个场景分析,还真得看情况
看到许多写select for update是行锁还是表锁的文章,但每篇文章的结论好像都不太一样。同时,是行锁还是表锁的问题直接影响着系统的性能,所以特意为大家调研一番~
Java应用一键诊断利器-MProfiler
MProfiler是Java应用一键诊断利器,如果有过诊断经验或对Java诊断相关知识熟悉的话,可能会知道业界一些有名的诊断工具,如Arthas、Async-Profiler、MAT、JProfiler等,这些工具做的都不错,可以从各个角度观察Java应用运行的状态,那么还有必要再做一个Java一
设计模式在我工作中的实践
如何让自己从业务中解脱出来找到写代码的乐趣呢,我做过一些尝试,使用设计模式改善自己的业务代码就是其中的一种。
推荐几个我近期排查线上http接口偶发415时用到的工具
近期有一个业务部门的同学反馈说他负责的C工程在小概率情况下SpringMvc会返回415,通过输出的日志可以确定是SpringMvc找不到content-type这个头了,具体为什么找不到了呢?
Redis缓存的特殊用法以及与本地缓存一起构建多级缓存的实现
现在的很多大型高并发系统都是采用的分布式部署方式,而作为高并发系统的基石,缓存是不可或缺的重要环节
【全网首发】MQ系列11:如何保证消息可靠性传输
可靠性传输其实包含两种情况:一种是重复消费的情况,我们上一篇的幂等性消费解决的就是这个问题;另外一种是消息丢失的情况的,要确保我们生产的消息一定最终会得到消费。
刺激,线程池的一个BUG直接把CPU干到100%了。
你好呀,我是歪歪。给大家分享一个关于 ScheduledExecutorService 线程池的 BUG 啊,这个 BUG 能直接把 CPU 给飚到 100%,希望大家永远踩不到。但是,u1s1,一般来说也很难踩到。到底咋回事呢,让我给你细细嗦嗦。Demo老规矩,按照惯例,先搞个 Dem
对 Pulsar 集群的压测与优化
这段时间在做 MQ(Pulsar)相关的治理工作,其中一个部分内容关于消息队列的升级
从指标到洞察力的普罗米修斯监控
为什么需要Prometheus?普罗米修斯官网的首页简单的对普罗米修斯做了定义:从指标到洞察力 。普罗米修斯通过领先的开源监控解决方案为用户的指标和告警提供强大的支持。可以看到普罗米修斯是领先的、开源的、也是一种监控解决方案、支持用户指标和告警等需求。使用普罗米修斯可以有效的解决在云原
单服务并发出票实践
一、背景 项目组上线集团客运站系统,该集团旗下六家客运站,每日出票量在1万~2万张左右(疫情期间票量下滑)。前期系统只能部署在一台单服务器上,应用程序与数据库(mysql)同服。 客运站出票业务有两大特点,一是出票渠道分散(人口窗口、自助设备、线上各分销渠道均支持出票);二是出票时间集中,全天出
Java集合 - ConcurrentHashMap
本篇文章介绍 Java 集合中的 ConcurrentHashMap。 1、CHM 的底层存储结构; 2、CHM 的新增操作的处理逻辑; 3、CHM 的数组扩容机制; 4、CHM 的查询操作的处理逻辑; 5、CHM 的计数;
接口突然超时10宗罪
不知道你有没有遇到过这样的场景:我们提供的某个API接口,响应时间原本一直都很快,但在某个不经意的时间点,突然出现了接口超时。
【全网首发】从源码角度分析一次诡异的类被加载问题
最近有同学在做 APM 链路监控发现了一个诡异的类被加载的问题,没有被调用到的函数里面用到的类,居然触发了类加载,于是结合 JVM 的源码做了一下分析
看我是如何用C#编写一个小于8KB的贪吃蛇游戏的
译者注:这是Michal Strehovský大佬的一篇文章,他目前在微软.NET Runtime团队工作,主要是负责.NET NativeAOT功能的开发。我在前几天看到这篇文章,非常喜欢,虽然它的内容稍微有点过时(还是使用的.NET Core 3.0),不过其中的一些编程技巧和
面对集中式缓存实现上的挑战,Redis交出的是何种答卷?聊聊Redis在分布式方面的能力设计
在前两篇文章中,我们介绍了集中式缓存 Redis的一些主流特性与典型使用场景。现在我们来对比一下,分布式缓存相比于本地缓存,在实现层面需要关注的点有哪些不同~
【全网首发】再议内存布局
对于c++对象的内存布局一直处于似懂非懂似清非清的阶段,没有去深入了解过,所以借着这个机会,一并分析下
MySQL 主从模式采用 GTID 的实践
你好,我是悟空。本文主要内容如下:一、背景为了保证高可用,之前在测试环境部署了一套 MySQL 双主模式,当一个主库服务出现异常,可以将流量切到另外一个主库,两个主库之间相互同步数据。双主模式双主模式的原理图如下:但是经常出现数据冲突的问题,于是我们又把双主模式改为了主从读写分离模式
聊聊Redis的数据过期、数据淘汰以及数据持久化的实现机制
Redis准确的说是一个非关系型数据库,但是由于其超高的并发处理性能,及其对于缓存场景所提供的一系列能力构建,使其成为了分布式系统中的集中缓存的绝佳选择。
多线程引发的惨案直接把年终给干没了
你好,我是坤哥前些日子我们线上出现了一个比较严重的故障,这个故障是多线程使用不当引起的,挺有代表性的,所以分享给大家,希望能帮大家避坑!问题描述先简单介绍一下问题产生的背景,我们有个返利业务,其中有个搜索场景,这个场景是用户在 app 输入搜索关键词,然后 server 会根据这个关键词到各个
高并发系统设计的15个锦囊
记得很久之前,去面试过字节跳动。被三面的面试官问了一道场景设计题目:如何设计一个高并发系统。当时我回答得比较粗糙,最近回想起来,所以整理了设计高并发系统的15个锦囊,相信大家看完会有帮助的。
【全网首发】Linux 中的负载高低和 CPU 开销并不完全对应
负载是查看 Linux 服务器运行状态时很常用的一个性能指标。但是很多同学都没有搞清楚的是,负载高低状态并不是和CPU利用率完全对应的。
虽然是我遇到的一个棘手的生产问题,但是我写出来之后,就是你的了。
这个案例就是一个纯技术的问题导致的,和业务的相关度其实并不大,所以你拿过去直接添油加醋,稍微改改,往自己的服务上套一下,那就是你的了。
【全网首发】一文读懂 Go Http Server 原理
俗话说万事开头难,但用 Go 实现一个 Http Server 真不难,简单到什么程度?起一个 Server,并且能响应请求,算上包名、导入的依赖,甚至空行,也就只要 15 行代码
从一个Demo说起Dubbo3
简介2017年的9月份,阿里宣布重启Dubbo的开发维护,并且后续又将Dubbo捐献给了Apache,经过多年的发展已经发布到3.X版本了,Dubbo重启维护之后是否有值得我们期待的功能呢,下面就来看看吧。Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、流
Redis缓存何以一枝独秀?——从百变应用场景与热门面试题中感受下Redis的核心特性与使用注意点
除却本地缓存之外,在当前分布式、微服务等架构盛行的时代,本地缓存明显无法满足大型系统中的各种缓存诉求,比如前面文章中反复提及的缓存漂移问题、以及单机缓存无法逾越的内存容量瓶颈
【全网首发】Spring集成apollo源码分析
引言为了在项目中用好框架,以及出现问题时候能够快速定位、分析、优化,文章尝试从源码角度分析Spring集成apollo的过程。期望文章能够把以下几个事情描述清楚:apollo通过使用Spring哪些扩展点,完成了与Spring的集成;apollo中的配置如何融入到Spring Environ
内存管理学习笔记
物理内存分配设计有两个重要的评价维度。一方面,物理内存分配器要追求更高的内存资源利用率,即尽可能减少资源浪费。另一方面,物理内存分配器要追求更好的性能,主要是尽可能降低分配延迟和节约CPU资源。
可观测性之Log4j2优雅日志打印
简介对于Log4j2大家应该都不是很陌生,听说最多的应该是2021年年底出现的安全漏洞了,不过最让大家头痛的应该不仅仅是这个安全漏洞的处理,安全漏洞通过升级最新的依赖版本即可快速解决,平时在使用过程中遇到过比较多的问题应该就是日志jar包不知道如何选择?日志jar冲突引起的日志不打印问题,日志配置
JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来3 —— 本地缓存变身分布式集群缓存,打破本地缓存天花板
上一篇文章中,我们知晓了如何在项目中通过不同的方式来集成Ehcache并在业务逻辑中进行使用。作为JAVA本地缓存框架综合实力天花板级别的Ehcache,除了在本地缓存方面具有强悍的实力外,还具有一个其它对手所不具备的特色功能,即Ehcache提供了对于集群能力的支持,这也使得Ehcache不仅仅是
SpringBoot版的低代码开发平台,关联无 SQL,性能高10倍!
今天在逛开源社区的时候,发现了一个基于 Spring Boot 技术体系的低代码开发平台 Diboot 挺有意思的,号称“关联无 SQL,性能高 10 倍”
JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来2 —— Ehcache的各种项目集成与使用初体验
在上一篇文章中,介绍了Ehcache所具有的核心优秀特性,如数据持久化、多级缓存、集群能力等等。所谓纸上得来终觉浅、绝知此事要躬行,接下来我们就一起动手实践下,在项目中集成Ehcache并体验Ehcache的各种常见用法。
开启 | 2023社区【首发计划】原创激励活动
新年好呀!各位创作者大大们~ 2022年我们推出了【首发有礼】原创好文活动,在此期间收到了很多作者大大的欢迎,陆续有越来越多的优秀创作者们入驻社区参与首发~2023我们重新再出发,今年会继续提高社区内容的原创度,同时为了回馈一直支持我们的各位作者,社区2023年【首发计划】原创激
并发编程的原子性 != 事务ACID的原子性
关于原子性,很多人在多个地方都听说过,大家也都背的很熟悉。 在事务的ACID中,有原子性的概念,在并发编程的原子性、可见性、有序性中也有原子性的概念。
CDN是什么?用了CDN就一定比不用更快吗?
对于开发同学来说,CDN这个词,既熟悉又陌生。平时搞开发的时候很少需要碰这个,但却总能听到别人提起。我们都听说过它能加速,也大概知道个原因,但是往深了问。用了CDN就一定比不用更快吗?
海量请求下的接口并发解决方案
设定一个场景,假如一个商品接口在某段时间突然上升,会怎么办?
干货|disk.usage告警,看这一遍就够了
看到有线上ECS磁盘告警持续一天了。问了下,已经处理过,该删都删了,但是告警还是消不掉。目前超的不是太多,就没有再管了。如果一直触发告警,担心影响到处理其它重要告警,就花时间去处理一下
Monorepo 下 Git 工作流的最佳实践
本文从适合小型 Monorepo 的 Feature branch 工作流开始分享,接着分享适用于中大型 Monorepo 的 Trunk-based 工作流,并给出一些选型标准供参考。
为什么不推荐使用BeanUtils属性转换工具
背景之前在专栏中讲过“不推荐使用属性拷贝工
从29.6s优化到33ms,我是如何做到的
案发现场收到用户反馈,功能不好用了:“这个列表是坏了嘛我今天给一下午都点不开” 抓紧在本地复现了下:测试环境是没有问题的。线上的页面打开慢、还会报错:"request timeout"现状去日志中查了下,是查询TableStore时报
Java集合 - HashMap
本篇文章介绍 Java 集合中的 HashMap。 1、HashMap 的底层存储结构; 2、HashMap 的新增操作的处理逻辑; 3、HashMap 的数组扩容机制; 4、HashMap 的查询操作的处理逻辑;
终于弄明白了 RocketMQ 的存储模型
RocketMQ 优异的性能表现,必然绕不开其优秀的存储模型 。 这篇文章,笔者按照自己的理解 , 尝试分析 RocketMQ 的存储
一个慢SQL引发的雪崩
每一次犯错都是成长的机会服务出问题了?这个SQL能把MySQL打满?错哪了?雪崩时,没有一片雪花是无辜的。复盘。Anything that can go wrong will go wrong.改进。升级架构,不能把鸡蛋放在一个篮子里小结。稳定性无小事服务
【全网首发】一种检测线程阻塞的实现思路
背景介绍在过去处理过的服务故障中,有一类比较典型的场景是业务线程被阻塞(造成阻塞的原因也是多种多样),慢慢导致业务线程池中的全部线程被阻塞,最终造成无法对外提供服务(现象则是CPU、Load、内存等指标都比较低,请求接口后响应超时或者没有响应)。典型的案例:【全网首发】记一次socket re
缓存数据丢了,原来是Redis持久化没玩明白
引言我们都知道Redis是微服务架构中重要的基础数据库中
Redis 高可用之切片集群
前言我们在前面的文章里分析了几种 Redis 高可用性的解决方案。包括:「主从模式」、「哨兵机制」以及「哨兵集群」。主从模式:具有读写分离,分担读压力、数据备份,提供多个副本等优点。哨兵机制:在主节点故障后能自动将从节点提升成主节点,不需要人工干预操作就能恢复服务可用。
Redis 高可用之哨兵集群
前言我们在前面的文章中分析了Redis 高可用之主从复制。主从复制奠定了Redis 分布式的基础,但是普通的主从复制并不能满足高可用性。在普通的主从复制模式下,如果主服务器发生宕机,就只能通过人工,手动将从节点切换为主节点后服务才恢复,很显然这种方案并不可取。Redis 官方为了解
线上Bug! Sharing-JDBC第一次查询为什么这么慢?
一、缘起 内部框架发布了新版本,有开发反馈Sharding查询慢。通过一系列对比分析之后解决了问题。本文复盘排查过程,欢迎大家拍砖。(为了面子,本文摒弃了个人所犯低级错误,勿怪) 二、追踪 1、问题复现 @Testpublicvoi
解决缓存和数据库双写数据一致性问题
缓存的作用在公司刚起步,业务量比较小的时候。对于系统的读写请求,我们一般的做法都是直接操作数据库。但是随着业务体量的不断增长,用户请求增多,这时候只用数据库处理业务是不够的,存在着「性能问题」。业内通用做法就是引入「缓存」。缓存可以提升性能,缓解数据库压力,但是使用缓存也会出现「缓存和数据库
聊聊两个Go即将过时的GC优化策略
概述首先我们来简单的看一下 Go GC中做了什么事,以及它里面比较耗时的地方是什么,我们才能对它进行优化。首先对于 GC 来说有这么几个阶段:sweep termination(清理终止):会触发 STW ,所有的 P(处理器) 都会进入 safe-point(安全点);the mark
并发之道:三大问题与JMM 何干?
笔者曾经历过数据规模(每天)在万亿级的监控系统、近
【全网首发】MQ系列10:如何保证消息幂等性消费
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障
Skywalking on the way-千亿级的数据储能、毫秒级的查询耗时
 目录1、开篇2、为什么需要全链路监控3、为什么选择Skywalking4、预研阶段5、POC阶段6、优化阶段7、后续1、开篇自从Skywaling开始在公司推广,时不时会在排查问题的人群中听到这样的话:“你咋还没接Skywalking?接入后,一眼就
透过Redis源码探究Hash表的实现
概述我们在学习 Redis 的 Hash 表的时候难免脑子里会想起其他 Hash 表的实现,然后进行一番对比。通常我们如果要设计一个 Hash 表,那么我们需要考虑这几个问题:有没有并发操作;Hash冲突如何解决;以什么样的方式扩容。对 Redis 来说,首先它是单线程的工作模式,所以
Redis 高可用之哨兵机制
前言在前面的文章中,我们分析了Redis 高可用之主从复制。在这个模式下,如果从库发生故障,客户端可以继续向主库或其他从库发送请求,进行相关的操作。但是如果主库发生故障了,那直接就影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。如果说,客户端发送的都是读操作请求,那
Redis 高可用之主从复制
如何保证 Redis 的可靠性我们在前面 一文读懂Redis持久化机制 中分析了,如果服务器发生宕机,可以通过重新读入 RDB 文件或者回放 AOF 日志的方式恢复数据,进而保证尽量少丢失数据,提升可靠性。这里再次对两种持久化做一个简单的对比:AOF 记录的是每一次写命令,数据
当 xxl-job 遇上 docker → 它晕了,我也乱了!(二)
前情回顾  在 当 xxl-job 遇上 docker → 它晕了,我也乱了!,有两个场景没给大家演示,先补上  executor 和 admin 在同一台宿主机上通过 docker 部署  这里有必要给大家简单讲一下 Docker 的 bridge&
如何设计一个秒杀系统
文章导读前言说起秒杀,我想你肯定不陌生,从每年双 11、618 购物节,再到 12306 抢火车票,秒杀的场景处处可见。我们就要想了:为什么需要秒杀系统?秒杀系统最大的优势是什么?我们知道,电商平台的本质是在线上撮合买卖双方的购销需求,达成交易。虽然是线上交易,但也遵守朴素的
关于缓存异常:缓存雪崩、击穿、穿透的解决方案
前言关于缓存异常,我们常见的有三个问题:缓存雪崩、缓存击穿、缓存穿透。这三个问题一旦发生,会导致大量请求直接落到数据库层面。如果请求的并发量很大,会影响数据库的运行,严重的会导致数据库宕机。为了避免缓存异常带来的损失,我们需要了解每种异常的原因以及解决方案,提高系统的可靠性。 缓
一文读懂Redis持久化机制
 前言我们日常开发中,使用Redis的普遍场景就是用作缓存。也就是把后端数据库的数据存储在内存中,然后从内存读取数据,响应速度会非常的快。并且使用缓存还会降低数据库的访问压力。但是这里也有一个绝对不能忽视的问题:一旦服务器宕机,内存中的数据就会全部丢失。为了保证数据的持久性,Redi
.NET性能优化-ArrayPool同时复用数组和对象
前两天在微信后台收到了读者的私信,问了一个这样的问题,由于私信回复有字数和篇幅限制,我在这里统一回复一下。读者的问题是这样的:大佬您好,之前读了您的文章受益匪浅,我们有一个项目经常占用 7-8GB 的内存,使用了您推荐的ArrayPool以后降低到 4GB 左右,我还想着能不能继续优化,于是 d
动图图解 | UDP就一定比TCP快吗?
话说,UDP比TCP快吗?相信就算不是八股文老手,也会
高性能 Go 日志库 zap 设计与实现
最近我也在学习如何在开发中让代码运行更加高效,然后在浏览各种优秀的日志设计的时候看到 uber 有一个叫 zap 的日志库引起了我的注意,它主要特性是对性能和内存分配都做到了极致的优化。对于我来说,原本在项目中是使用 logrus 来作为日志输出,但是看到 zap 的 benchmark,感觉在
深入 Go 中各个高性能 JSON 解析库
其实本来我是没打算去看 JSON 库的性能问题的,但是最近我对我的项目做了一次 pprof,从下面的火焰图中可以发现在业务逻辑处理中,有一半多的性能消耗都是在 JSON 解析过程中,所以就有了这篇文章。这篇文章深入源码分析一下在 Go 中标准库是如何解析 JSON 的,然后再看看有哪些比较流行的
.NET性能优化-使用内存+磁盘混合缓存
我们回顾一下上一篇文章中的内容,有一个朋友问我这样一个问题:我的业务依赖一些数据,因为数据库访问慢,我把它放在Redis里面,不过还是太慢了,有什么其它的方案吗?其实这个问题比较简单的是吧?Redis其实属于网络存储,我对照下面的这个表格,可以很容易的得出结论,既然网络存储的速度慢,那我们就
【全网首发】MQ系列9:高可用架构分析
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障
数组还是HashSet?
我记得大约在半年前,有个朋友问我一个问题,现在有一个选型:一个性能敏感场景,有一个集合,需要确定某一个元素在不在这个集合中,我是用数组直接Contains还是使用HashSet<T>.Contains?大家肯定想都不用想,都选使用HashSet<T>,毕竟Hash
RabbitMQ、RocketMQ、Kafka延迟队列实现
延迟队列在实际项目中有非常多的应用场景,最常见的比如订单未支付,超时取消订单,在创建订单的时候发送一条延迟消息,达到延迟时间之后消费者收到消息,如果订单没有支付的话,那么就取消订单。那么,今天我们需要来谈的问题就是RabbitMQ、RocketMQ、Kafka中分别是怎么实现延时队列的,以及他们对
Go语言GC实现原理及源码分析
介绍三色标记法三色标记法将对象的颜色分为了黑、灰、白,三种颜色。黑色:该对象已经被标记过了,且该对象下的属性也全部都被标记过了(程序所需要的对象);灰色:该对象已经被标记过了,但该对象下的属性没有全被标记完(GC需要从此对象中去寻找垃圾);白色:该对象没有被标记过(对象垃圾);在垃
请求量太大下游扛不住怎么办?进来学一招
hello,大家好呀,我是小楼。上篇文章《一言不合就重
【全网首发】微服务12:流量策略
★微服务系列微服务1:微服务及其演进史微服务2:微服务全景架构 微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断
编译器优化那些事儿(8):指令调度概述
指令调度简介指令调度是指对程序块或过程中的操作进行排序
毕昇JDK 8 KAEProvider 易用性增强介绍
编者按:毕昇JDK 8u352 版本已发布,其中 KA
Redis的数据复制
本篇文章介绍了Redis的数据复制1. 完整重同步、2. 部分重同步、3. 命令传播、4. 心跳检测、5. 介绍 偏移量 & 积压缓冲区 & 运行ID
【全网首发】C++:从技术实现角度聊聊RTTI
RTTI又称为运行时类型识别,本文从编译器技术实现角度来分析其实现原理
React Streaming SSR 原理解析
React 18 提供了一种新的 SSR 渲染模式: Streaming SSR,实现了Streaming HTML和Selective Hydration的特性,本文将从原理和源码两个方面,对Streaming SSR进行解析
Redis的AOF持久化
本篇文章介绍1.AOF 日志、2.AOF 持久化的实现原理、3.AOF 的写回策略、4.AOF 文件重写
问题排查|为啥RocketMQ广播消费每次启动都会从头开始消费?
现象最近听到有项目反馈,使用公司内部封装的消息sdk,在使用RocketMQ广播消费时,每一次版本发布,消费者重启后,都会从最早位点开始消费,造成严重的消息消费积压,不仅对消息服务的负载产生极大影响,也会让发版本后消息出来不及时。那这是什么原因引起的呢?问题排查熟悉RocketMQ的小伙伴
Redis分布式锁的10个坑
大家好,我是田螺。前言日常开发中,经常会碰到秒杀抢购等业务。为了避免并发请求造成的库存超卖等问题,我们一般会用到Redis分布式锁。但是使用Redis分布式锁,很容易踩坑哦~ 本文田螺哥将给大家分析阐述,Redis分布式锁的10个坑~1. 非原子操作(setnx + expire)
MySQL中这14个小玩意,让人眼前一亮!
大家好,我是苏三,又跟大家见面了。前言我最近几年用M
JDK 线程池使用不当引发的线程饥饿死锁问题
前言使用线程池时会忽略死锁问题, 但是只要代码写的"六"没啥是不可能的文章代码及部分理念引自 线程池使用不当也会死锁[1]什么是死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去此时称系统处于死锁状态或系
让人恶心的多线程代码,性能怎么优化!
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分
从零开始搞监控系统(7)——监控页面奔溃
  页面奔溃包含两种场景,第一种是浏览器在加载网页时遇到问题导致的奔溃,另一种是因为脚本渲染出错导致页面空白无内容的奔溃。  前段时间运营抱怨有张活动页出现了空白(第二种奔溃场景),导致用户无法访问,希望我们能主动监控到这种情况,而不是通过用户的上报。  后面和运维沟通,他那边目前只能监控接口的
解Bug之路-串包Bug
解Bug之路-串包Bug笔者很热衷于解决Bug,同时比较擅长(网络/协议)部分,所以经常被唤去解决一些网络IO方面的Bug。现在就挑一个案例出来,写出分析思路,以飨读者,希望读者在以后的工作中能够少踩点坑。串包Bug现场前置故障Redis超时由于某个系统大量的hget、hset操作将Redi
优化数据访问-如何写出高性能代码(四)
同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员不是只存在于传说中,可能在我们的周围也比比皆是。十倍体现在程序员的方法面面,而代码性能却是其中最直观的
聊聊Redis的数据热点问题
前两天,我们使用的某云厂商服务挂了,而且一挂就是挂大半天,我们的服务强依赖于他们,所以我们也跟着一起挂。然而我们却无能为力,只能等他们恢复。事故原因中听他们提到Redis有个热key,正好我在上家公司负责过部门Redis集群,也处理过很多起Redis数据热点的问题,接下来就一起聊聊什么是Redis热
解Bug之路-中间件"SQL重复执行"
前言我们的分库分表中间件在线上运行了两年多,到目前为止还算稳定。在笔者将精力放在处理各种灾难性事件(例如中间件物理机宕机/数据库宕机/网络隔离等突发事件)时。竟然发现还有一些奇怪的corner case。现在就将排查思路写成文章分享出来。Bug现场应用拓扑应用通过中间件连后端多个数据库,sq
一个关于 Java 的堆内存的小探索
本文重在看一下探索思路,开始吧~我们可以通过 -Xmx 或者 -XX:MaxHeapSize 来指定最大堆内存。如果不指定,它的默认值取决于物理内存大小,通常是 1/4。物理内存大小是多大呢?如果遇到了容器会怎么样呢?我们先来做几个实验。准备一台 8G 物理内存的宿主机,上面启动 5
优化内存回收(GC)-如何写出高性能代码(三)
导语  同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员 不是只存在于传说中,可能在我们的周围也比比皆是。十倍体现在程序员的
品 RocketMQ 源码,学习并发编程三大神器
笔者是 RocketMQ 的忠实粉丝,在阅读源码的过程中,学习到了很多编程技巧。这篇文章,笔者结合 RocketMQ 源码,分享并发编程三大神器的相关知识点。1 CountDownLatch 实现网络同步请求CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够
巧用数据特性-如何写出高性能代码(二)
导语同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员 不是只存在于传说中,可能在我们的周围也比比皆是。十倍体现在程序员的方法面面,而代码性能却是
善用算法和数据结构-如何写出高性能代码(一)
同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员不是只存在于传说中,可能在我们的周围也比比皆是。十倍体现在程序员的方法面面,而代码性能却是其中最直观的
读懂HikariCP一百行代码,多线程就是个孙子!
通常,我在看书的时候一般不写代码,因为我的脑袋被设定成单线程的,一旦同时喂给它不同的信息,它就无法处理。但多线程对电脑来说就是小菜一碟,它可以同时做很多事,看起来匪夷所思。好希望把自己的大脑皮层移植到这些牛x的设备上。用人脑思考电脑正在思考的问题,这本身就是一种折磨。但平常的工作和面试中,又不得
分库分表经典15连问
前言大家好,我是田螺。我们去面试的时候,几乎都会被问到分库分表。田螺哥整理了分库分表的15道经典面试题,大家看完肯定会有帮助的。1.我们为什么需要分库分表在分库分表之前,就需要考虑为什么需要拆分。我们做一件事,肯定是有充分理由的。所以得想好分库分表的理由是什么。我们现在就从两个维度去思考它
可观测性之链路追踪门面Micrometer Tracing
Micrometer Tracing为最流行的链路追踪系统库提供了一个简单的外观。 Micrometer Tracing具有如下特性: 基于JVM: 基于 JVM 的应用程序代码,厂商无关的API。 低开销: 收集数据增加很少甚至没有开销,同时最大限度地提高跟踪工作的可移植性。
【全网首发】架构与思维:再聊缓存击穿,面试是一场博弈
1 介绍在之前的一篇文章《一次缓存雪崩的灾难复盘》中,我们比较清晰的描述了缓存雪崩、穿透、击穿的各自特征和解决方案,想详细了解的可以移步。最近在配合HR筛选候选人,作为大厂的业务方向负责人,招人主要也是我们自己团队在用,而缓存是必不可少的面试选项之一。下面我们就来聊一聊在特定业务场景下缓存击穿和
巧用二进制让性能提升100倍,让存储空间减少100倍
 假设有一个需求是这样的:在200亿个随机整数中找出某个数是否存在其中?要求效率高,而且要节省内存。 我们知道,在Java中,int占4字节,1字节=8 byte,1 byte = 8 bit(位)如果用int存储,那就是200亿个int,因而占用的空间约为 
Spring Boot 引起的 “堆外内存泄漏”,太坑了,快看看你什么版本!
背景为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“-XX:M
【全网首发】万字图文 | 你写的代码是如何跑起来的?
大家好,我是飞哥!今天我们来思考一个简单的问题,一个程
单核 CPU 支持 Java 多线程吗?为什么?
由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。时间片多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU数,然而一颗CPU同
string 性能优化之存储:栈或者堆
你好,我是雨乐!对于C++开发人员来说,string大概是使用最多的标准库数据结构之一,一直以来也就仅限于使用,对于底层实现似懂非懂。所以,最近抽出点时间,大致研究了下string的底层实现。今天,就从内存分配的角度来分析下string的实现机制。直接分配大概在08年的时候,手动实现过stri
面试官问我接口优化:我一口气说了十八种
前言大家好,我是捡田螺的小男孩。之前工作中,遇到一个504超时问题。原因是因为接口耗时过长,超过nginx配置的10秒。然后 真枪实弹搞了一次接口性能优化,最后接口从11.3s降为170ms。本文将跟小伙伴们分享接口优化的一些通用方案。1. 批量思想:批量操作数据库 优化前://for
SQL优化思路+经典案例分析
前言大家好,捡田螺的小男孩。SQL调优这块呢,大厂面试必问的。最近金九银十嘛,所以整理了SQL的调优思路,并且附几个经典案例分析。1.慢SQL优化思路。 慢查询日志记录慢SQLexplain分析SQL的执行计划profile 分析执行耗时Optimizer Trac
内存泄漏-原因、避免以及定位
你好,我是雨乐!作为C/C++开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C++语言的特性引起的。C/C++语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成段错误(segment fault)或者内存泄漏(memory leak)。今
如何保证mongodb和数据库双写数据一致性?
大家好,我是苏三,又跟大家见面了。前言最近在我的技术群里,有位小伙伴问了大家一个问题:如何保证Mongodb和数据库双写的数据一致性?群友们针对这个技术点讨论的内容,引起了我的兴趣。其实我在实际工作中的有些业务场景,也在使用Mongodb,也遇到过双写的数据一致性问题。今天跟大家一起分享一
可观测性神器之Micrometer
Micrometer工具,这里就详细的来介绍下可观测性神器Micrometer,让你在开发时使用它就和使用SLFJ 日志系统一样简单易用,有效的提升系统的健壮性和可靠性。
如何保证数据库和缓存双写一致性?
大家好,我是苏三,又跟大家见面了。前言数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。我很负责的告诉大家,该问题无论在面试,还是工作中遇到的概率非常大,所以非常有必要跟大家一起探讨一下。今天这篇文章我会从浅入深
介绍HTTP
本篇文章主要介绍了HTTP报文、HTTP请求方法、HTTP响应的状态码、Cookie技术
【全网首发】微服务11:熔断、降级的Hystrix实现(附源码)
微服务1:微服务及其演进史微服务2:微服务全景架构微服务3:微服务拆分策略微服务4:服务注册与发现微服务5:服务注册与发现(实践篇)微服务6:通信之网关微服务7:通信之RPC微服务8:通信之RPC实践篇(附源码)微服务9:服务治理来保证高可用微服务10:系统服务熔断、限流1 介绍
多图深入理解 Redis
你好,我是坤哥Redis 现在应该是各大厂标配了
Docker踩坑,又涨知识了
背景 新上线一个批处理功能,基于Docker发布的。上线之后出现一个问题,Docker批处理生成的文件目录,别的应用程序无法访问。之前也在使用Docker,但并未涉及到文件共享的问题,还真没留意到。经过一系列排查,终于找到原因。这篇文章就记录一下排查过程中使用到的技术点,也帮大家重温一下。涉
【全网首发】记一次socket read导致业务线程阻塞的案例分析
问题描述TAM同学反馈某个应用阻塞了:访问应用健康检查URL也访问不通,目前排查了EDAS、SLB及WAF等云产品均没有发现明显问题。我登录到ECS,curl健康检查URL,确实已经访问不通了(建立连接超时)。基本情况流量是从互联网终端请求过来的,最终经过云产品SLB负载均衡到该应用,该应用
后端思维之数据库性能优化方案
1、前言毫不夸张的说咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信能够快速准备解决咱么日常遇到的80%甚至90%的性能问题。从解决问题的角度出发,我们得先
TCP网络包传输的整个过程
承接上文如何排查网络丢包问题上文对于网络问题分析的还不够精细,比如有时候网络资源可能没有达到瓶颈,并且没有丢包产生,但这个时候网络传输速率就是很慢或者是有丢包产生了,但是却无法知道丢的是具体哪个包,没有办法知道整个tcp传输过程的具体情况,所以需要一种更加精细的去看网络包传递过程的方法即抓包。用
JVM专家权威分析字符串常量池(二)
哈喽,我是子牙。十余年技术生涯,一路披荆斩棘从技术小白到技术总监到JVM专家到创业。技术栈如汇编、C语言、C++、Windows内核、Linux内核。特别喜欢研究虚拟机底层实现,对JVM有深入研究。分享的文章偏硬核,很硬的那种。 手撸过JVM、内存池、垃圾回收算法、synchroniz
线程池中线程抛了异常,该如何处理?
1、模拟线程池抛异常在实际开发中,我们常常会用到线程池,但任务一旦提交到线程池之后,如果发生异常之后,怎么处理? 怎么获取到异常信息?在了解这个问题之前,可以先看一下 线程池的源码解析,从链接中我们知道了线程池的提交方式:submit和execute的区别,接下来分别使用他们执行带有异常的任务
如何排查网络丢包问题
要明白一个知识点,首先要快速的对这个知识点建立一个概念模型,有了概念模型之后,再在这个模型上不断的去填充一些细节的东西,会有助于我们把握知识的本质。带宽是什么?带宽是网络被发送的能力,它会受到网卡复制网络包到内核缓冲区或者搬运内核缓冲区的网络包到网卡缓冲区能力的影响,也会受到接收窗口或拥塞窗口的
接口响应延迟案例分析
本文以实际案例介绍下:关于接口响应慢时所要排查的一些角度以及在对程序进行分析系统延迟的时候所用到的一些工具。系统延迟的本质是由于cpu在这段时间里没有去及时的运算你的应用程序代码,导致你的应用程序代码在阻塞之后,再被调度回来的整个时间间隔会过长,从用户的角度看,就会表现为整个接口延迟会过高,响应时
从零开始搞监控系统(6)——较长的白屏时间
一、加载慢  在直播间有一个小时榜的Web页面,经常有用户反映点击小时榜,弹出的页面会有蛮长的一段(3秒上下)时间白屏。    查看性能监控中的白屏时间,发现最多1.6秒,最少0.4秒平均每小时的白屏在1秒左右(有待优化),那么大概还有2秒的时间可能是其他原因造成的。    在页面中会包含
一言不合就重构
hello,大家好呀,我是小楼。前段时间不是在忙么,忙
SQL性能分析
监控有个全局监控的概念,通过全局监控能够知道目前集群或服务器的好坏情况,有了全局监控,再去考虑定点监控,对造成性能下降的具体原因进行分析,有可能是慢查询,也有可能是磁盘问题。全局监控分为两大类:指标信息和日志信息,指标信息指标信息是指普通服务器上面所监控到的一些硬件指标:cpu、内存、磁盘的i
React Server Component: 混合式渲染
Server Component 顾名思义是在服务端渲染的组件,它是如何进行渲染的?和 SSR 又有什么区别?让我们来一起探索它究竟是个什么?
磁盘IO异常排查案例
问题现象服务使用的是golang语言,跟mysql数据库打交道用的是go-mysql-driver,当时系统的测试环境频繁的爆出一个invalid connection的错误,但实际上拿这个sql执行的时候却是正常执行的,也是在正常时间返回的。问题分析首先由于报的是无效连接的错误,首先考虑到是
生产环境MQ集群一个非常诡异的消费延迟排查
问题现象某一天,项目组一个同事向我反馈,他们使用公司的数据同步产品将MySQL数据同步到MQ集群,然后使用消费者将数据再同步到ES,反馈数据同步延迟严重,但对应的消费组确没有积压,但最近最近几分钟的数据都没有同步过来。那问题来了,消费端没有消费积压,而且通过查看数据同步平台该通过任务的同步状态,
【全网首发】TimeZone-改变JVM默认时区是否影响log4j打印日志中的日期时间?
引言在【JVM时区配置-两行代码让我们一帮子人熬了一个通宵】描述了由于代码BUG导致存储到数据库的时间比正常时间少八小时的案例。当时分析的时候发现log4j打印的日志文件中日期时间都是正确的,下面对这个问题进行下验证和分析。测试环境java versionjava version "1.8.
物联网消息中间件 EMQX 调研
EMQ 创始人兼 CEO 李枫表示:「EMQX 5.0 是 MQTT 领域的一个里程碑式的成果。它不仅是全球首个单集群支持 1 亿连接的分布式 MQTT 消息服务器,也是首个将 QUIC 引入 MQTT 的开创性产品。
优先级反转那些事儿
文章主要阐述了优先级反转的一些概念和解决思路,并结合iOS平台的几种锁进行了详细的调研。通过深入的理解,可以去规避一些不必要的优先级反转,从而进一步避免卡死异常。
Spring6正式发布!重磅更新,是否可以拯救Java
简介Spring Framework6和Spring Boot3是一个跨越式的升级整个框架支持的最低JDK版本直接跨越到JDK17,无论框架层还是基础设施层都做了巨大的改变,Spring 6.0新框架具体做了哪些功能的升级与改进,是否有必要升级与使用呢?可以继续看一看。下面可以先看下翻译自Sp
记一次线上RPC超时故障排查及后续GC调优思路
本文记录了一次线上RPC服务调用超时问题的排查流程,排查过程中涉及到 JVM 优化的过程与思路,包括 JVM GC 原理以及问题排查思路,分享出来希望对大家有所帮助。本文概要RPC服务异常和排查过程排查方向问题根因和解决方案JVM GC 原理与优化方案基础排查工具
【全网首发】TimeZone-datetime在JVM时区和MySQL Session时区的转换
引言【JVM时区配置-两行代码让我们一帮子人熬了一个通宵】描述了由于代码BUG导致存储到数据库的时间比正常时间少八小时的案例。案例中对于数据库字段类型是datetime和timestamp的时区转换关系进行了描述,本文试图从代码角度描述以下逻辑:JDBC场景下MySQL Session时区如何
重新认识下JVM级别的本地缓存框架Guava Cache(2)——深入解读其容量限制与数据淘汰策略
对于缓存容器而言,容量限制与数据淘汰是两个基础且核心的关键点,也是实际使用的时候使用频率最高的特性。本篇在上一文基础上深入解读下Guava Cache中的容量限制与数据淘汰策略的实现与使用约束。
【全网首发】MQ系列8:数据存储,消息队列的高可用保障
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费MQ系列7:消息通信,追求极致性能 1 介绍在之前的章节中,我们介绍了消息的发
【全网首发】记一次MySQL CPU被打满的SQL优化案例分析
背景介绍系统中有个公告模块,当用户登录后,根据用户所属机构查询公告列表,同时公告列表中需要展示出该用户对公告的阅读状态及阅读时间。公告(bulletin)、公告接收者(bulletin_receiver)、公告阅读者(bulletin_reader)定义及关联关系如下:应用使用的数据库连接池是
重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来
作为缓存系列专栏内容,秉持着不重复造轮子的理念,本篇文章中我们就开始深入剖析JAVA本地缓存的优秀轮子 —— 来自Google家族的Guava Cache。聊一聊其实现机制、看一看如何使用。
默认数据库主键、外键和唯一键索引策略是什么?
在本文中,我们将了解在使用 Oracle、SQL Server、PostgreSQL 和 MySQL 时默认的数据库主索引、外键索引和唯一键索引策略是什么。因此,如果你想知道在添加主键、外键或唯一键约束时这些顶级关系数据库中的一个是否会创建默认索引,那么本文将为你提供你一直在等待的答案.
C++中前置操作性能一定优于后置操作?
自入行以来,无论是查阅资料、技术博客亦或是同事间的技术交流,都有一个共识:在循环的时候,务必使用前置操作符,因为其性能优于后置操作符,久而久之,这个就像一个不成文的规定,大家都在遵循,久而久之,成为潜移默化的编码习惯。而使得大家持有这个观点的原因就是后置操作会产生临时变量,而后置操作则不会。
【译】SQL递归与CTE查询的原理和应用
介绍在本文中,我们将了解 SQL Recursive WITH CTE(公用表表达式)查询的工作原理,以及我们如何应用它们来处理分层数据模型。
当 xxl-job 遇上 docker → 它晕了,我也乱了!
开心一刻  公交车上,一位老大爷睡着了,身体依靠在背后的一位年轻小伙子身上  小伙子一直保持站姿十几分钟,直到老人下车  这位在校大学生,接受采访时说:”当时就觉得背后这个人很轻盈,以为是个姑娘!“前提准备  对 xxl-job、docker 要有基本的了解  
编写自定义SpringData Repository的最佳方式是什么?
在本文中,我将向你展示编写自定义 Spring Data Repository 的最佳方法。虽然默认JpaRepository方法以及查询方法在许多情况下都非常方便,但有时你可能需要可以利用任何 JPA 提供程序特定功能的自定义 Repository 方法。
Dubbo服务治理之灰度发布方案(版本发布控制影响范围)
方案背景背景:基于Dubbo服务的治理,是否可以支持业务级别的灰度发布、是否基于业务参数的路由转发。例如以GIS为例,当发布一个新版本时,是否可以以按照解析地址或合作伙伴来区分,版本发布之初,只希望地址为:广东省的解析请求发送到新版本,而其他的地址请求还是使用旧版;或者根据合作伙伴例如UCP(优享
原来count(*)是接口性能差的真凶
大家好,我是苏三,又跟大家见面了。前言最近我在公司优化过几个慢查询接口的性能,总结了一些心得体会拿出来跟大家一起分享一下,希望对你会有所帮助。我们使用的数据库是Mysql8,使用的存储引擎是Innodb。这次优化除了优化索引之外,更多的是在优化count(*)。通常情况下,分页接口一般会查询
【全网首发】你的新进程是如何被内核调度执行到的?
大家好,我是飞哥!在前面的文章《Linux进程是如何创建出来的?》 和 《聊聊Linux中线程和进程的联系与区别》 中我们都讲过了,进程和线程在创建出来后会加入运行队列里面等待被调度。但咱们之前提的太笼统了。所谓的运行队列到底长什么样子、新进程是如何被加入进来的、调度是如何选择一个新进程的、新进
【译】MySQL rewriteBatchedStatements 的属性设置
介绍在本文中,我们将了解 MySQL rewriteBatchedStatements 在使用 JDBC、JPA 或 Hibernate 时是如何工作的。
源码分析Dubbo tps过滤器器实现原理
本文将重点分析一下dubbo限流的另外一个方式,tps过滤器。@Activate(group = Constants.PROVIDER, value = Constants.TPS_LIMIT_RATE_KEY)过滤器作用服务调用tps过滤器使用场景对Dubbo服务提供者实现限流(tps
源码分析Dubbo 泛化调用与泛化实现原理
本文将重点分析Dubbo的两个重要特性:泛化调用与泛化实现。泛化引用:通常是服务调用方没有引入API包,也就不包含接口中的实体类,故服务调用方只能提供Map形式的数据,由服务提供者根据Map转化成对应的实体。泛化实现泛化实现,是指服务提供者未引入API包,也就不包含接口用于传输数据的实体
count(*)查询性能很差?用这5招轻松优化
大家好,我是苏三,又跟大家见面了。前言最近我在公司优化过几个慢查询接口的性能,总结了一些心得体会拿出来跟大家一起分享一下,希望对你会有所帮助。我们使用的数据库是Mysql8,使用的存储引擎是Innodb。这次优化除了优化索引之外,更多的是在优化count(*)。通常情况下,分页接口一般会查询
还不懂Java线程池实现原理,看这一篇文章就够了
线程池无论是工作还是面试都是必备的技能,但是很多人对于线程池的实现原理却一知半解,并不了解线程池内部的工作原理,今天一灯就带大家一块剖析线程池底层实现原理。1. 为什么要使用线程池 使用线程池通常由以下两个原因:频繁创建销毁线程需要消耗系统资源,使用线程池可以复用线程。使用线程池
【译】一个提升并发队列性能的专用算法
需要为您的队列创建多个写入线程和一个阅读线程吗?想要比java.util.concurrent.BlockingQueue更好的性能吗?试试这个
有趣的 Go HttpClient 超时机制
hello,大家好呀,我是既写 Java 又写 Go 的
源码分析Dubbo服务提供者、服务消费者并发度控制机制
本文将详细分析<dubbo:service executes=""/>与<dubbo:reference actives = “”/>的实现机制,深入探讨Dubbo自身的保护机制。源码分析ExecuteLimitFilter@Activate(gro
源码分析Dubbo服务调用日志(accesslog参数)实现原理
谈到服务调用日志,大家恐怕第一想到就是如果开启了这个参数,会影响性能。那真实的情况是怎么样了?性能损耗到底有多大呢?在实践中我们如何使用该功能呢?本文将详细分析Dubbo accesslog实现原理。AccessLogFilter概述过滤器作用记录调用日志。使用场景记录服务提供者端
源码分析Dubbo异步调用与事件回调机制
本文将详细分析Dubbo服务异步调用与事件回调机制。异步调用与事件回调机制TTY异步回调事件回调异步调用与事件回调机制在Dubbo中,引入特定的过滤器FutureFilter来处理异步调用相关的逻辑,其定义如下:1@Activate(group = Constants.CO
JAVA系列之类加载机制详解
类的加载机制 ?双亲委派机制 ?什么是类加载器 ?自定义类加载器有哪些应用场景 ?通常,在关于Java的类加载部分会遇到以上疑问,本文将对类加载重要部分做详细介绍,包括重要的基础概念和应用场景,在编写过程中也帮助作者重新熟悉并加固了知识点,希望在看完后对读者能有所帮助。一、类加载过程程序
记一次“雪花算法”造成的生产事故的排查记录
你好,我是悟空。本文主要内容如下:前言最近生产环境遇到一个问题:现象:创建工单、订单等地方,全都创建数据失败。初步排查:报错信息为duplicate key,意思是保存数据的时候,报主键 id 重复,而这些 id 都是由雪花算法生成的,按道理来说,雪花算法生成的 ID 是唯一 ID,不应
计算机网络 | TCP 连接的建立 和 TCP 连接的断开
TCP 连接的建立过程一开始,客户端和服务端都处于 close 状态。先是服务端监听某个端口,此时服务端处于 listen 状态。这个时候客户端就可以发送连接请求报文了。第一次握手客户端会主动发送连接请求报文,随机初始化序列号为 x,并把 SYN 标志位设置为 1,表示 SYN 报文
如何把Java代码玩出花?JVM Sandbox入门教程与原理浅谈
很久没见,甚是想念,大家好啊!很久没写技术文章了,手也会痒呢。本文干货含量高,建议先收藏再看哦!在日常业务代码开发中,我们经常接触到AOP,比如熟知的Spring AOP。我们用它来做业务切面,比如登录校验,日志记录,性能监控,全局过滤器等。但Spring AOP有一个局限性,并不是所有的类都托管
源码分析Dubbo监控中心实现原理
Dubbo监控的基本实现原理就是在服务调用时收集服务调用并发度、服务响应时间,然后以一定频率向监控中心汇报统计数据。MonitorFilter过滤器过滤器作用监控过滤器,向监控中心汇报服务调用数据。使用场景搭建监控中心监控Dubbo服务调用。阻断条件非阻断过滤器。Monito
JAVA缓存规范 —— 虽迟但到的JCache API与天生不俗的Spring Cache
上一章中构建的最简化版本的缓存框架,虽然可以使用,但是也存在一个问题,就是它对外提供的实现接口都是框架根据自己的需要而自定义的。这样一来,项目集成了此缓存框架,后续如果想要更换缓存框架的时候,业务层面的改动会比较大。 —— 因为是自定义的框架接口,无法基于里氏替换原则来进行灵活的更换。
【全网首发】一次想不到的 Bootstrap 类加载器带来的 Native 内存泄露分析
最近我们线上有同学反馈,java 服务在接入了支持预发的 javaagent 以后会出现缓存的内存增长,去掉 agent 启动以后内存增长正常。于是分析了一下这个问题,写了这篇文章。
Dubbo Filter机制概述
从上文可知,在服务的调用或消费端发送请求命令中,Dubbo引入过滤器链机制来实现功能的包装(或扩展)。Dubbo很多功能,例如泛化调用、并发控制等都是基于Filter机制实现的,系统默认的Filter在/dubbo-rpc-api/src/main/resources/META-INF/dubbo/
扒去Spring事件监听机制的外衣,竟然是观察者模式
前言Spring中提供了一套默认的事件监听机制,在容器初始化时便使用了这套机制。同时,Spring也提供了事件监听机制的接口扩展能力,开发者基于此可快速实现自定义的事件监听功能。Spring的事件监听机制是在JDK事件监听的基础上进行的扩展,也是在典型观察者模式上的进一步抽象和改进。所以,结合S
Java注解与原理分析
使用的太多,被忽略的理所当然;一、注解基础注解即标注与解析,在Java的代码工程中,注解的使用几乎是无处不在,甚至多到被忽视;无论是在JDK源码或者框架组件,都在使用注解能力完成各种识别和解析动作;在对系统功能封装时,也会依赖注解能力简化各种逻辑的重复实现;基础接口在Annotatio
【译】如何使用JMeter对Kafka进行负载测试
文章关于如何使用JMeter加载测试您的Apache Kafka设置。
源码分析Dubbo服务调用-服务提供者如何处理请求命令与再谈Invoker
本文将重点剖析服务调用流程,也就是消费端通过网络发起RPC服务调用时,服务提供者是如何进行服务请求响应的。Dubbo服务调用流程了解过Netty网络编程的童鞋们应该知道,netty的命令处理基于ChannelHandler(事件处理链),编码、网络传输、解码、处理等,下面是关于NettyServ
源码分析kryo对象序列化实现原理
本文主要梳理Kryo序列化基本实现。重点剖析Kryo#writeClassAndObject、Kryo#readClassAndObject方法。Kryo对象序列化原理kryo对象序列化入口为Kryo的writeClassAndObject。Kryo#writeClassAndObject
源码分析kryo对java基础数据类型与Stirng类型的序列化反序列化机制
kryo序列化原理用过dubbo的开发人员,在选取序列化时都会根据“经验”来选kryo为序列化,其原因是序列化协议非常高效,超过java原生序列化协议、hessian2协议,那kryo为什么高效呢?序列化协议,所谓的高效,通常应该从两方面考虑:序列化后的二进制序列大小。(核心)序列化、反序
Dubbo序列化概述
Dubbo序列化支持java、compactedjava、nativejava、fastjson、fst、hessian2、kryo,其中默认hessian2。其中java、compactedjava、nativejava属于原生java的序列化。整个Dubbo序列化的类设机机器优雅,职责单一,其
【全网首发】Redis系列11:内存淘汰策略
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
Native Memory Tracking 详解(4):使用 NMT 协助排查内存问题案例
从前面几篇文章,我们了解了 NMT 的基础知识以及 NMT 追踪区域分析的相关内容,本篇文章将为大家介绍一下使用 NMT 协助排查内存问题的案例。
干货,深入剖析ReentrantLock源码,推荐收藏
ReentrantLock和Synchronized都是Java开发中最常用的锁,与Synchronized这种JVM内置锁不同的是,ReentrantLock提供了更丰富的语义。可以创建公平锁或非公平锁、响应中断、超时等待、按条件唤醒等。在某些场景下,使用ReentrantLock更适合,功能更强
【全网首发】日常Bug排查-读从库没有原子性?
前言日常Bug排查系列都是一些简单Bug排查。问题虽小,但经常遇到,了解这些问题,会让我们少走点弯路,提升效率。说不定有些问题你遇到过哦:)Bug现场业务开发同学突然问了笔者一个问题,从库读会不会没有原子性?我下意识的反应怎么可能,只要是遵守MySQL主从Replication协议的原子性至少
升级SpringBoot版本,引出了一个大Bug
前言最近项目组升级了SpringBoot版本,由之前的2.0.4升级到最新版本2.7.5,却引出了一个大Bug。到底是怎么回事呢?1.案发现场有一天,项目组的同事反馈给我说,我之前有个接口在新的测试环境报错了,具体异常是:Missing argment level for method pa
【译】如何用Lightrun堆Java应用程序进行性能调优
在本文中,将展示使用Lightrun分析Java应用程序,以便对当前Java应用程序进行各种性能调优!
Redis Cluster 数据分片
Redis 集群是 Redis 提供的分布式数据库方案, 集群通过分片(sharding) 来进行数据共享, 并提供复制和故障转移功能。
【译】Lightrun - 调试Java程序生产问题的优秀工具
Lightrun易于使用,但功能非常强大,因为我们可以使用指标注入日志、收集快照或检测我们的代码,而无需更改需要重新部署的生产源代码。
源码分析Dubbo编码解码实现原理(Dubbo协议)
本节主要介绍了Dubbo协议的编码方式,涉及协议头、协议体具体的编码规则,默认使用Dubbo协议,其核心类图如下:在Dubbo整个框架中,codec2的可选值为dubbo、thrift,本文将重点分析Dubbo协议的编码解码。本文主要以Dubbo协议为例进行展开,其他通信方式,例如Thrift
硬核剖析AQS源码,深入理解底层架构设计
我们常见的并发锁ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁。上篇文章讲了AQS的加锁流程,这篇文章再一块看一下AQS具体源码实现。先回顾一下AQS的加锁流程1.
源码分析Dubbo网络通信NettyClient实现原理
在源码分析Dubbo通讯篇之网络核心类一文中已给出Dubbo netty client的启动流程,如下图:以Dubbo协议为例,DubboProtocol#refer中,在创建Invoker时,通过getClient方法,开始Client(连接的)创建过程,先重点看一下: 1private
源码分析Dubbo NettyServer与HeaderExchangeServer
本文主要分析一下NettyServer,HeaderExchangeServer实现细节。NettyServerNettyServer整个类图如下:首先从全貌上大概看一下NettyServer对象所持有的属性:AbstractPeer1、private final ChannelHa
软件设计杂谈——性能优化的十种手段(下篇)
索引软件设计杂谈——性能优化的十种手段(上篇),我们总结了六种普适的性能优化方法,包括 索引、压缩、缓存、预取、削峰填谷、批量处理,简单讲解了每种技术手段的原理和实际应用;软件设计杂谈——性能优化的十种手段(中篇),我们简单了解了程序是如何消耗执行时间和内存空间的;软件设计杂谈——性能优化的十
SpringCloudAlibaba 微服务组件 Nacos 之配置中心源码深度解析
大家好,这篇文章跟大家聊下 SpringCloudAlibaba 中的微服务组件 Nacos。Nacos 既能做注册中心,又能做配置中心,这篇文章主要来聊下做配置中心时 client 端的一些设计,主要从源码层面进行分析,相信看完这篇文章你对 Nacos client 端的工作原理应该有比较深刻的
源码分析Dubbo线程池实现原理
本文主要分析Dubbo线程池的构建过程,主要介绍官方文档中有关于ThreadPool的种类:fixed固定大小线程池,启动时建立线程,不关闭,一致持有。(缺省)cached缓存线程池,空闲一分钟,线程会消费,需要时重新创建新线程。limited可伸缩线程池,但池中的线程数只会增长不会收
源码分析Dubbo事件派发机制
本节将主要学习Dubbo是如何使用Netty来实现网络通讯的。从官网我们得知,Dubbo协议是使用单一长连接来进行网络传输,也就是说服务调用方持久与服务提供者建立一条连接,所有的服务调用调用信息通过。一条TCP连接进行传输,在网络层至少要考虑如下问题:服务端,客户端网络通讯模型(线程模型)
Dubbo网络通讯篇概述
从本节开始将深入学习Dubbo网络通讯的底层实现细节,在深入学习Dubbo网络模型时,首先应从整体上了解Dubbo的网络通讯模型、线程模型是怎样的?下图是Dubbo官方给出的线程模型:涉及如下方面:网络调用客户端。网络调用服务端。网络传输,编解码、序列化。下面给出与上述网络模型对应的详
源码分析Dubbo集群策略
前面的文章,已经单独对服务发现(Directory、RegistryDirectory)、路由机制(Router)、负载均衡机制(LoadBalance),本节将重点分析集群容错机制(AbstractClusterInvoker)。整个集群容错中,上述组件扮演的角色见下图所示,本文将重点分析Abst
源码分析Dubbo负载算法
Dubbo支持在服务调用方对服务提供者采用负载均衡算法,LoadBalance接口定义如下: 1@SPI(RandomLoadBalance.NAME) 2public interface LoadBalance { 3 4 /** 5 * select one invoke
Dubbo路由机制概述
上一节我们主要讲解了利用dubbo-admin如何进行参数的动态修改,本节将重点介绍集群实现中另外一个实现细节:路由机制,Dubbo的路由机制主要解决的目的就是服务调用时,从已知的所有服务提供者中根据路由规则刷选服务提供者。Dubbo路由机制概述以下内容来源于官方文档:以上是Dubb
软件设计杂谈——性能优化的十种手段(中篇)
引言上一篇,我们总结了六种普适的性能优化方法,包括 索引、压缩、缓存、预取、削峰填谷、批量处理,简单讲解了每种技术手段的原理和实际应用。在开启最后一篇前,我们先需要搞清楚:在程序运行期间,时间和空间都耗在哪里了?时间都去哪儿了?人眨一次眼大约100毫秒,而现代1核CPU在一眨眼的功夫就可以执行
源码分析Dubbo override实现原理
在上篇在讲解源码分析Dubbo路由注册与发现机制的时候,dubbo管理员可以通过dubbo-admin管理系统在线上修改dubbo服务提供者的参数,最终将存储在注册中心的configurators catalog,然后通知RegistryDirectory更新服务提供者的URL中相关属性,按照最新的
源码分析Dubbo服务注册与发现机制RegistryDirectory)
RegistryDirectory,基于注册中心的服务发现,本文将重点探讨Dubbo是如何实现服务的自动注册与发现。从上篇文章,得知在消息消费者在创建服务调用器(Invoker)【消费者在初始时】时需要根据不同的协议,例如dubbo、registry(从注册中心获取服务提供者)来构建,其调用的方法为
【全网首发】架构与思维:熔断限流的一些应用场景
1 前言在《微服务系列》中,我们讲过很多限流,熔断相关的知识。老生长谈的一个话题,服务的能力终归是有限的,无论是内存、CPU、线程数都是,如果遇到突如其来的峰量请求,我们怎么友好的使用限流来进行落地,避免整个服务集群的雪崩。峰量请求主要有两种场景:1.1 突发高峰照成的服务雪崩如果你的服务
软件设计杂谈——性能优化的十种手段(上篇)
导语:软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、可扩展性、可观测性等等。大部分时候我们需要的是:在业务遇到瓶颈之前,利用常见的技术手段将系统优化到预期水平。
源码分析Dubbo消费端启动流程
通过前面文章详解,我们知道Dubbo服务消费者标签dubbo:reference最终会在Spring容器中创建一个对应的ReferenceBean实例,而ReferenceBean实现了Spring生命周期接口:InitializingBean,接下来应该看一下其afterPropertiesSet
源码分析Dubbo服务提供者启动流程
本节将详细分析Dubbo服务提供者的启动流程,请带着如下几个疑问进行本节的阅读,因为这几个问题将是接下来几篇文章分析的重点内容。什么时候建立与注册中心的连接。服务提供者什么时候向注册中心注册服务。服务提供者与注册中心的心跳机制。从上文中我们得知,服务提供者启动的核心入口为ServiceB
源码分析Dubbo前置篇-寻找注册中心、服务提供者、服务消费者功能入口
本节主要阐述如下两个问题:Dubbo自定义标签实现。dubbo通过Spring加载配置文件后,是如何触发注册中心、服务提供者、服务消费者按照Dubbo的设计执行相关的功能。所谓的执行相关功能如下:注册中心启动,监听消息提供者的注册服务、接收消息消费者的服务订阅(服务注册与发
手写本地缓存实战2—— 打造正规军,构建通用本地缓存框架
作为缓存系列专栏的第四篇文章,我们将在上一篇的基础之上进行升华,一起思考如何构建一个完整且通用的本地缓存框架,并在过程中体会缓存实现的关键点与架构设计的思路。
RabbitMQ 常用知识点总结
基础为什么使用 MQ?1、削峰:在某个模块接收到超过最大承受的并发量时,可以通过 MQ 排队来使这些削减同一时刻处理的消息量。减小并发量。2、解耦:在发送 MQ 处理业务时,可以使业务代码与当前的代码解耦,便于维护和拓展。3、异步:异步使得在调用 MQ 后可以去
where field in(...) 是怎么执行的?
我们日常写 SQL 时,子查询应该算是常客了。MySQL 为子查询执行准备了各种优化策略,接下来我会写子查询各种优化策略是怎么执行的系列文章。本文以包含最简单的 in 条件的查询入手,介绍 where field in (8,18,88,…) 这种值都是常量的 in 条件是怎么执行的。这虽然不是
重大发现,AQS加锁机制竟然跟Synchronized有惊人的相似
在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁。Synchronized是基于JVM实现,而ReentrantLock是基于Java代码层面实现的,底层是继承的AQS。AQS全称AbstractQueuedS
我服了!SpringBoot升级后这服务我一个星期都没跑起来!(上)
最近由于各方面的原因在准备升级 Spring Cloud 和 Spring Boot,经过一系列前置的调研和分析,决定把Spring Boot 相关版本从 2.1.6 升级到 2.7.5,Spring Cloud 相关版本从 Greenwich.SR1 升级为 2021.0.4。升级包含基础的业务
深入理解Linux进程管理
作者简介:程磊,某手机大厂系统开发工程师,阅码场荣誉总编辑,最大的爱好是钻研Linux内核基本原理。目录一、进程基本概念1.1 进程与程序1.2 进程与线程1.3 进程与内核1.4 进程与内存1.5 进程运行状态1.6 进程亲缘关系二、进程的实现2.1 基本原理2.2 进程
【译】什么时候应该给程序上性能监控?为什么,怎么上?
分享在多年程序项目经验中对于“性能监控”的理解,了解性能监控的必要性,可能性已经需要注意的地方。
是什么让.NET7的Min和Max方法性能暴增了45倍?
简介在之前的一篇文章.NET性能系列文章一:.NET7的性能改进中我们聊到Linq中的Min()和Max()方法.NET7比.NET6有高达45倍的性能提升,当时Benchmark代码和结果如下所示:[Params(1000)]public int Length { get; set; }
图解 | 监控系统 Prometheus 的原理
这是悟空的第 171 篇原创文章官网:www.passjava.cn本篇将会以图解的方式剖析 Prometheus 的原理。本文主要内容如下:一、Prometheus 是什么?ELK Stack 日志收集和检索平台想必大家应该比较熟悉,Elasticsearch + Filebeat +
关于SimpleDateFormat线程安全问题根因探究
运营部门反馈使用小程序配置的拉新现金红包活动二维码,在扫码后跳转至404页面。
如何在.NET程序崩溃时自动创建Dump?
今天在浏览张队转载文章的留言时,遇到一个读者问了这样的问题,如下图所示:首先能明确的一点是"程序崩溃退出了是不能用常规的方式dump的",因为整个进程树都已经退出。现场已经无法使用常规的方式读取到。一般来说常规的方法是没办法读取到的,也有一些特殊的方式,比如有关部门在调查取证时,就可以通过一些工
【全网首发】Redis系列10:HyperLogLog实现海量数据基数统计
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
创建.NET程序Dump的几种姿势
当一个应用程序运行的有问题时,生成一个Dump文件来调试它可能会很有用。在Windows、Linux或Azure上有许多方法可以生成转储文件。Windows平台dotnet-dump (Windows)dotnet-dump全局工具是一种收集和分析.NET核心应用程序Dump的方法。安
【译】在Java中创建了100万个线程以后
在我们深入研究创建一百万个线程之前,让我们看看Java线程的历史。自Java 1.0以来,Java线程一直存在,以便在Java应用程序中提供并发性。最初,它们被称为“绿色线程”,主要是完全由JVM管理的线程。这是因为在Java 1.0发布时,CPU大多是单核,当时的操作系统
.NET性能优化-是时候换个序列化协议了
计算机单机性能一直受到摩尔定律的约束,随着移动互联网的兴趣,单机性能不足的瓶颈越来越明显,制约着整个行业的发展。不过我们虽然不能无止境的纵向扩容系统,但是我们可以分布式、横向的扩容系统,这听起来非常的美好,不过也带来了今天要说明的问题,分布式的节点越多,通信产生的成本就越大。网络传输带宽变得越
W3C规范成熟不同阶段的Web性能API参考
绩效是W3C网络性能工作组的一大重点。查看这些API,它们为Web性能和W3C标准提供了参考。
死磕Java面试系列:深拷贝与浅拷贝的实现原理
深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要实现深拷贝,今天一灯就带大家一块深入剖析一下深拷贝与浅拷贝的实现原理,并手把手教你怎么优雅的实现深拷贝。1. 什么是深拷贝与浅拷贝浅
踩了坑:导出功能没做好,差点被投诉
背景:新上线的一个需求,研发期间,大家都做得比较辛苦。同时,收到用户反馈功能功能不好用。问题描述:反馈的问题是,导出的文件名像是乱码,看不懂。比如多导出几次,导出的文件多了,就不容易找到想要的那个。如果下载一个用户再自己重新命名一下,又会影响效率。根据文件名不知道里面的内容这就很烦了,不
【译】那些没有人教你的最重要的Linux命令(高手私藏篇)
这些并非常见的必备20个命令,或者10个基础命令,而是一个高手分享的不常见的一些私家命令列表!
JAVA系列之内存模型(JMM)
Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果。 Java内存模型是不可见的,它并不是一个真实的东西,它只是一个概念、一个规范。
手写本地缓存实战1——各个击破,按需应对实际使用场景
本篇我们一起探讨下项目中本地缓存的各种使用场景与应对实现策略,也通过本篇介绍的几个本地缓存的实现策略与关键特性的支持,体会到本地缓存使用与构建的关注要点。
Redis 的 Sentinel 系统
Sentinel 是 Redis 的高可用性解决方案:由一个或多个 Sentinel 实例组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下
【全网首发】RocketMQ-没有消费者的消息堆积场景分析
背景介绍前面几篇文章分析了几个引起消息堆积的典型场景,分别是:业务逻辑处理慢导致消息堆积的场景,MQ-消息堆积-业务线程阻塞案例分析JDK BUG导致消息堆积的场景,MQ-消息堆积-JDK Bug导致线程阻塞案例分析RocketMQ SDK BUG导致消息堆积的场景,一次RocketMQ
【译】JAVA11功能简单解释
在本文中,我们尝试讨论java11中的一些重要功能。
【全网首发】擦,就加了一个字段还能出事故?
“喂,老陈,走买咖啡去。”“等下,我这有个需求现在得发个版。”“擦,回来再发啊!”“别急嘛 yes,很快的,就新加了个字段,稳的一批,两分钟!”“行吧,就两分钟啊,我咖啡瘾上来了,赶紧的!”…老测试:“老陈,预发验证出错了,你看看。”我:“擦,老陈你个废物,加个字段都能出错?”老陈
【译】 C# 中的排序:OrderBy.OrderBy和OrderBy.ThenBy的性能对比和原因分析
在 C# 中,我们可以在 OrderBy().OrderBy() 或 OrderBy().ThenBy() 的帮助下按多个键对集合进行排序。但是这些调用之间有什么区别?
JDK 19 Virtual Threads 虚拟线程
前言JDK 19 支持了virtual thread(虚拟线程):JEP 425: Virtual Threads (Preview),虚拟线程是 Loom 项目中的一个重要特性。Project LoomLoom 是什么?Loom 项目的目标是提升 Java 的并发性能。Java 自诞生就提
【译】如何使用MySQL来设计分布式锁?
为什么我们需要分布式锁?我们中的许多人可能遇到或听说过这些问题:重试导致的数据损坏:从应用程序UI提交数据,该应用程序用户界面在引擎盖下将数据插入后端MySQL数据库。偶尔用户界面没有响应,因此用户单击了几次提交按钮,这损坏了数据库中的数据。缓存过期:使用Redis作为读透缓存,缓存中的密钥
ElasticSearch这些坑记得避开
Index用不好,麻烦事不会少;一、管理方式ElasticSearch作为最常用的搜索引擎组件,在系统架构中发挥极其重要的能力,可以极大的提升数据的加载和检索效率;但不可否认的是,在长期的应用实践中,也发现很多不好处理的流程和场景;从直观感觉上说,业务中对索引的使用主要涉及如图的几个流程
一文深入分析 ZGC
1、传统的垃圾回收我们在开发 Java 程序时,并不需要显示释放内存,Java 的垃圾回收器会自动帮我们回收。GC 会自动监测对象引用,并释放不可达的对象。GC 需要监测堆内存中对象的状态,如果一个对象不可达,GC 就可以考虑回收这个对象。2、CMS 与 G1 停顿时间瓶颈在介绍 ZGC 之
线上问题排查,一不小心踩到阿里的 arthas坑了
最近帮新来的校招同学排查一个线上问题,问题本身不是很难,但是过程中踩到了一个arthas的坑,挺有意思的。同时,也分享下在排查过程中使用的一些比较实用的工具,包括tcpdump、arthas、simpleHTTPServer等。希望能对大家有所帮助。1.问题描述新开发的一个功能,简单来说,就
夯实Java基础,一篇文章全解析线程问题
1. 线程是什么操作系统支持多个应用程序并发执行,每个应用程序至少对应一个进程 ,彼此之间的操作和数据不受干扰,彼此通信一般采用管道通信、消息队列、共享内存等方式。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程,提高了CPU利用率。有了进程,为什么还要线程?因为进程的成本太高了。启动
【译】关于JVM — JAVA虚拟机的一篇简单科普
JAVA的美丽是JVM。当您使用java时,您可能在某个时候听说过Java虚拟机(JVM)。 背景1995年,James Gosling为Sun Microsystems设计了JAVA,Java是一种多范式(即面向对象类、结构、命令式、泛型、反光、并发)编程语言
死磕面试系列,Java到底是值传递还是引用传递?
Java到底是值传递还是引用传递?这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意。可能很多同学能够很轻松的背出JVM、分布式事务、高并发、秒杀系统、领域模型等高难度问题,但是对于Java基础问题不屑一顾。这种抓大放小的初衷是对的,要是碰
编译器优化那些事儿(7):Cache优化
软件开发人员往往期望计算机硬件拥有无限容量、零访问延迟、无限带宽以及便宜的内存,但是现实却是内存容量越大,相应的访问时间越长;内存访问速度越快,价格也更贵;带宽越大,价格越贵。为了解决大容量、高速度、低成本之间的矛盾,基于程序访问的局部性原理,将更常用数据放在小容量的高速存储器中,多种速度不同的存储
一台机器下,多个Java版本的粗放与精细管理
前言在软件开发过程中,经常会遇到“古老”的项目,这些项目的JDK还处于Java 6、Java 7甚至更早的版本。同时,在学习新的JDK特性时,往往又需要安装最新版本的JDK。鉴于这些情况,我们就需要在在本机环境中安装多个JDK,并且能够方便的切换。本篇文章以Mac OS操作系统为例,演示一下如何
【译】作为程序员应该知道的最基本SQL优化建议
当我们谈论系统性能优化时,除了代码级别的各种有针对性的优化外,还有一个非常重要的手段来优化数据库的性能。在互联网系统中,当系统访问越来越多,数据量越来越多时,数据库的压力将越来越大。如果数据库表结构设计不正确,SQL语句写得不好,代码性能可能极高,但系统会被数据库拖下来。因此,我们程序员有必要了
浅谈Java内存上分配空间和内存分配策略
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。可以说,关于JVM的相关知识,基本是每个Java开发者必学的知识点,也是面试的时候必考的知识点。在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内
面试必备:Java线程池解析
前言掌握线程池是后端程序员的基本要求,相信大家求职面试过程中,几乎都会被问到有关于线程池的问题。我在网上搜集了几道经典的线程池面试题,并以此为切入点,谈谈我对线程池的理解。如果有哪里理解不正确,非常希望大家指出,接下来大家一起分析学习吧。经典面试题面试问题1:Java的线程池说一下,各个参
聊一聊安全且正确使用缓存的那些事 —— 关于缓存可靠性、关乎数据一致性
在分布式系统盛行的今天,缓存充当着扛压屏障的作用,一旦缓存出现问题,对系统影响也是致命的。本文我们一起聊聊如何安全且可靠的使用缓存,聊聊缓存击穿、缓存雪崩、缓存穿透以及数据一致性、热点数据淘汰机制等。
【全网首发】关于RocketMQ Producer某个性能优化点的分析
背景介绍在上一篇文章【一次RocketMQ ons Bug导致消息不断堆积到重试队列的案例分析】,我们有提到为了优化Producer性能问题对Pandora进行了升级,升级后出现了问题。下面我们对Producer的这个优化点进行下分析记录。问题描述SLB(LVS+TEngine)在云平台的重要
【全网首发】一次 Java log4j2 漏洞导致的生产问题
一、问题近期生产在提交了微信小程序审核后(后面会讲到),总会出现一些生产告警,而且持续时间较长。我们查看一些工具和系统相关的,发现把我们的 gateway 差不多打死了。 有一些现象。网关有很多接口处理慢。网关健康检查不通过,发生重启。前面我们提到是微信小程序审核后,为什么我们觉得是和这
我是真没想到,这个面试题居然从11年前就开始讨论了,而官方今年才表态。
大家好,我是歪歪。 这期给大家盘一个面试题啊,就是下面的第二题。
线上kafka消息堆积,consumer掉线,怎么办?
线上kafka消息堆积,所有consumer全部掉线,到底怎么回事?最近处理了一次线上故障,具体故障表现就是kafka某个topic消息堆积,这个topic的相关consumer全部掉线。整体排查过程和事后的复盘都很有意思,并且结合本次故障,对kafka使用的最佳实践有了更深刻的理解。好了,一
【全网首发】Redis系列9:Geo 类型赋能亿级地图位置计算
Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端
利用可挂载内核模块进行高负载处理
概述本程序在谢宝友老师[1]所提供的高负载处理模块的代码[2]基础上,根据5.15版内核的变化,修改出的。本程序是一个内核模块,用于监控系统负载,在平均负载超过4时,打印所有进程的调用栈。本程序分为三个文件:main.c、load.h、Makefile。其中,main.c是本内核模块的主程序;l
深度剖析Java的volatile实现原理,再也不怕面试官问了
上篇文章我们讲了synchronized的用法和实现原理,我们总爱说synchronized是重量级锁,volatile是轻量级锁。为什么volatile是轻量级锁,体现在哪些方面?以及volatile的作用和实现原理是怎样的?本篇带你一块学习一下。1. volatile是什么?volatile
【译】举例说明用NGINX实现负载均衡的几种方法
了解如何利用 NGINX 对多台服务器上的应用程序分布进行负载平衡。
2022双十一筹备:一个细小疏忽差点酿成大祸
大家好,我是威哥,《RocketMQ技术内幕》作者、RocketMQ社区首席布道师、极客时间《中间件核心技术与实战》专栏作者、中通快递基础架构资深架构师,越努力越幸运,唯有坚持不懈,与大家共勉。1、背景最近一周一来,总是有项目组中反馈遇到了消息重复推送的问题,连续出现单条消息短时被多个消费者消费
深入理解Enum(枚举类)
Java 枚举为什么要引入枚举类一个小案例你写了一个小程序,不过好久不用了,突然有一天,你想使用一下它。程序要想正确运行,需要将今天星期几存到数据库里。这个时候,你开始犯难了。当初的你还很年轻,不懂程序界的险恶,设计这个程序的时候,傻不拉几把这个字段设计为int类型的,用0代表周日,1代表
【全网首发】一次RocketMQ ons SDK Bug导致消息不断堆积到重试队列的案例分析
背景介绍系统运行在专有云,应用运行时环境是EDAS Container( EDAS Container是EDAS 平台 HSF 应用运行的基础容器,EDAS Container 包含 Ali-Tomcat 和 Pandora),消息处理使用的是【ons SDK】,消息消费者使用【PUSH】方式【批
Mysql修改、添加、删除字段
1.添加字段1.在末尾添加字段(1)语法ALTER TABLE <表名> ADD <字段名> <数据类型> [约束条件];语法格式的说明:<表名> 为数据表的名字;<字段名> 为所要添加的字段的名字;<数据类型&g
在线pdf请你谨慎打开
本篇其实算之前安全整改话题的一点补充,对之前内容感兴趣的可以走以下快捷通道:安全漏洞整改系列(二)安全漏洞整改系列(一)背景前不久某家客户对我们提供的系统又进行了一轮安全测试,其中有一条我觉得很有意思,也算是刷新了我的认知,那就是“pdf预览存在xss注入”,在此跟大家分享一波,也算是相互提
【译】关于高线程 I/O 密集型 Linux 容器和CPU时间的思考
在 Kubernetes 上运行的高线程 I/O 密集型 Linux 容器将拥有它们所需的所有 CPU 时间——这会成为现实吗?
JAVA系列之JVM内存调优
一、前提JVM性能调优牵扯到各方面的取舍与平衡,往往是牵一发而动全身,需要全盘考虑各方面的影响。在优化时候,切勿凭感觉或经验主义进行调整,而是需要通过系统运行的客观数据指标,不断找到最优解。同时,在进行性能调优前,您需要理解并掌握以下的相关基础理论知识:1、JVM垃圾收集器和垃圾回收算法2、
使用JDK中自带的JVM分析工具解决内存溢出问题
解决常规的JVM异常时,通常依赖JDK中基础工具即可完成问题的定位,从而进行分析和解决,不过这些需要对基础工具熟练使用才行,而很多JDK自身的能力又是经常被忽略的;
如何写出高性能 SQL 语句?
1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认
【译】如何使用 JUnit/Maven 进行简单而准确的性能测试
了解如何利用 JUnit 和 Maven 在各种场景中进行性能和负载测试,例如重用测试代码和并行测试。
【全网首发】SSL Session默认设置导致线程阻塞了几十秒的案例分析
SSLContext sessionCacheSize&sessionTimeout避坑指南,看着社区内还没有类似的案例,分享出来以避免不慎掉坑
字节前端监控SDK体积与性能优化实践
本文以字节前端监控sdk为例,探讨作为三方sdk如何实现性能优化等思路和实操。
Spring IOC 为什么能降低耦合
有同学在学习 Spring 框架中可能会问这样的问题,为什么通过依赖注入就可以降低代码间的耦合呢?我通过 new 生产对象不也可以吗,不就是一行代码的不同,一个是 @Resource 注入,一个是 new 创建,怎么就降低耦合了?今天博主就带大家来一步步剖析这个问题一、传统方式创建对象通
聊一聊作为高并发系统基石之一的缓存,会用很简单,用好才是技术活
在服务端开发中,缓存常常被当做系统性能扛压的不二之选。在实施方案上,缓存使用策略虽有一定普适性,却也并非完全绝对,需要结合实际的项目诉求与场景进行综合权衡与考量,进而得出符合自己项目的最佳实践。
如何修改 Nginx 源码实现 worker 进程隔离
最近我们线上网关替换为了 APISIX,也遇到了一些问题,有一个比较难解决的问题是 APISIX 的进程隔离问题。
一次有趣的 DNS 导致 Node 服务故障问题分析实录
有一个部署 k3s 的边缘节点的机器,切到离线模式以后,有一个前端页面的部分请求接口异常了。node 部分的请求分为两类,一种是纯 node 的处理,一种是需要先 http 请求后端微服务的处理接口。现象是涉及 Node 请求后端 Java 服务的都 block 住了,纯 node 处理的请求都飞快
弱隔离级别 & 事务并发问题
本篇文章主要介绍了 1. 各种隔离级别 2. 事务并发执行时,存在的并发问题 3. 如何防止并发问题
Java多线程:从基本概念到避坑指南
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。多核的机器,现在已经非常常见了。即使是一块手机,也都配备了强劲的多核处理器。通过多进程和多线程的手段,就可以让多个CPU同时工作,来加快任务的执行。多线程,是编程中一个比较高级的话题。由于它涉及到共享资源的操作,所以在
【译】使用ORM/JPA框架时,提升性能的9个优化技巧
本文建议您使用JPA提供商或直接使用ORM框架开发应用程序时的做法。
Native Memory Tracking 详解(3):追踪区域分析(二)
上篇文章 Native Memory Tracking 详解(2):追踪区域分析(一)&n
硬核剖析ThreadLocal源码,面试官看了直呼内行
工作面试中经常遇到ThreadLocal,但是很多同学并不了解ThreadLocal实现原理,到底为什么会发生内存泄漏也是一知半解?今天一灯带你深入剖析ThreadLocal源码,总结ThreadLocal使用规范,解析ThreadLocal高频面试题。1. ThreadLocal是什么Thr
多版本并发控制 MVCC
本篇文章主要介绍了 多版本并发控制(MVCC)在 MySQL 的实现
一次 Redis 事务使用不当引发的生产事故
这是悟空的第 170 篇原创文章官网:www.passjava.cn你好,我是悟空。本文主要内容如下:一、前言最近项目的生产环境遇到一个奇怪的问题:现象:每天早上客服人员在后台创建客服事件时,都会创建失败。当我们重启这个微服务后,后台就可以正常创建了客服事件了
MySQL 连接怎么保活?
多年前开发过一个异步发送订单短信、邮件通知的守护程序,每次程序启动时会创建数据库连接,后续读写数据库操作就一直复用这个连接。某一天,用户反馈下单后收不到通知了,我们登录服务器看到程序还在运行。经过排查确认,发生问题的这天,距离上一次有用户下单超过了 8 小时,MySQL 服务端已经自动断开连接了
MySQL 啥时候用记录锁,啥时候用间隙锁?
大家好,我是树哥。在前面的文章「MySQL 不同隔离级别,都使用了什么锁?」里,我们得出结论:在「读未提交」和「读已提交」隔离级别下,都只会使用记录锁,不会用间隙锁和 Next-Key 锁。而对于「可重复读」隔离级别来说,会使用记录锁、间隙锁和 Next-Key 锁。那么 MySQL 啥时候会用
【全网首发】一步一图带你深入理解 Linux 虚拟内存管理
写在本文开始之前…从本文开始我们就正式开启了 Linux 内核内存管理子系统源码解析系列,笔者还是会秉承之前系列文章的风格,采用一步一图的方式先是详细介绍相关原理,在保证大家清晰理解原理的基础上,我们再来一步一步的解析相关内核源码的实现。有了源码的辅证,这样大家看得也安心,理解起来也放心,最起码可
【全网首发】浅谈长连接负载均衡
hello,大家好,我是小楼,终于忙完了一阵,今天来更新一篇长连接的负载均衡问题。 首先说明下,长连接我不是专业的,只是在工作上有一点点的接触,分享也是基于一点点的经验和一些思考,如有出入,欢迎私聊。
【译】Java并发编程之可见性错误详解
了解什么是可见性错误,为什么会发生,以及如何在并发Java应用程序中查找难以捉摸的可见性错误。
【全网首发】盘点低延时网络架构中使用的那些黑科技!
大家好,我是飞哥!最近我简单研究了一下低延迟网络架构,今天和大家分享分享。谈到优秀的低延时网络架构,大家首先可能想到的是各家互联网大厂,比如腾讯阿里字节,总会觉得大厂做的肯定最好。但其实在在一般的互联网应用中,用户虽然也讨厌卡顿,但整体上来对延迟其实并不算太敏感,只要按钮点下后一秒之内能响应,用户
本地事务-以mysql为例
事务特性事务一般是指逻辑上的一组操作,或者作为单个逻辑执行单元的一系列操作。同属于一个事务的操作会作为一个整体交给系统,这些操作要么全部执行成功要么全部执行失败。事务存在的意义是为了保证系统中所有的数据都是符合期望的,且相互关联的数据之间不会产生矛盾,即数据状态之间的一致性(Consistenc
【全网首发】稳定运行了多年的网关,偏偏让我掉进了坑
背景介绍在服务刚启动的时候,服务的运行状态并没有达到最佳,如果一下子将流量提升到日常运行的状态,会存在大量的请求超时。为什么服务刚启动的时候,服务不是最佳状态呢?Java应用类加载是按需加载的,在服务刚启动的时候,只会加载启动过程中需要的类;当服务接口被调用的时候,才会加载、初始化接口用到的
Spring 核心概念
Spring 核心概念引言本文主要介绍 Spring 源码中使用到的一些核心类1. BeanDefinitionBeanDefinition表示Bean定义,BeanDefinition 中存在很多属性用来描述一个Bean的特点。比如:class,表示Bean类型scope,表示
事务的ACID特性
本篇文章主要介绍事务机制: 1. 对事务进行控制 2. 事务的ACID特性
从零开始搞监控系统(5)——小程序监控
  公司目前在线上运行着一款小程序,为了能监控小程序的运行情况,自行开发了一个参数搜集的SDK,名称为 shin.js,放置在 utils 目录中。  目前只搜集了打印、通信和错误,其中打印不是 console.log() 而是 shin.log()。  在小程序的管理后台,开发管理中,目前也有
Java程序员必会Synchronized底层原理剖析
synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。 但不可否认的是synchronized依然是并发首选工具,连volatile、CAS、ReentrantLock
【全网首发】抛砖系列之redis监控命令
分享几个我最近掌握的redis监控工具,希望能给你带来一些帮助
【全网首发】记一次应用访问Redis超时的案例分析
问题描述某产品线应用访问Redis出现超时(超时时间配置的是2000ms),异常信息:分析过程查看监控数据通过监控数据,了解应用运行状态以确定应用出现问题时间点、是否过载、依赖服务是否过载等基本信息。系统监控指标CPU、内存、Load、磁盘指标数据都是正常的,所以系统资源是足够的。
记一次接口分析
使用Arthas trace分析接口调用慢原因
【译】对比多种MySQL高可用解决方案的优缺点
确保数据库高可用性的关键选项有哪些?它们对比后孰优孰劣?
【全网首发】聊聊那些年遇到过的奇葩代码
引言无论是开发新需求还是维护旧平台,在工作的过程中我们都会接触到各种样式的代码,有时候会碰到一些优秀的代码心中不免肃然起敬,但是更多的时候我们会遇到很多奇葩代码,有的时候骂骂咧咧的吐槽一段奇葩代码后定睛一看作者,居然是几个月以前自己的写的,心中难免浮现曹操的那句名言:不可能,绝对不可能。很多同学可
Java 中的线程池
本文主要介绍了线程池框架 Executor,ThreadPoolExecutor 的「构造参数」和「工作行为」,线程池的生命周期,Executors 提供的线程池
Redis源码简洁剖析15—客户端
整体概述Redis 一个服务器可以和多个客户端建立网络连接,每个客户端都可以向服务器发送命令请求,服务器接收客户端的命令,处理后将结果返回给客户端。Redis 的文件事件处理器使用 I/O 多路复用,Redis 使用单线程单进程处理命令请求,与多个客户端进行网络通信。每个连接了 Redis
Redis源码简洁剖析16—服务器、复制和哨兵
命令请求的过程Redis 服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据。Redis 服务器中的 serverCron 函数默认每隔 100 毫秒执行一次,负责管理服务器的资源,并保持服务器自身的良好运转。整体流程都在下面的两张图里了~
【译】ExecutorService、RxJava、Disruptor 和Akka等并发框架的对比
几年前NoSQL 流行时,就像其他团队一样,我们的团队也对新的东西充满热情,于是计划在其中一个程序中试一试。但当深入到实现的细节时,意识到了一句话——“魔鬼在细节”。事实证明NoSQL 并不是解决所有问题的灵丹妙药。对于 NoSQL VS RDMS
同事改Bug飞快,原来掌握了这些代码Debug技巧
引言代码Debug调试是研发工程师日常工作中必不可少的重要组成部分。进行代码Debug调试的目的无非就两个,一个是自我检查代码逻辑是否有问题,便于自己将Bug消灭在测试介入之前;另一个是进行线上问题排查定位,找到实际在跑业务的过程中出现的Bug。但是无论是哪个目的,高效率的进行代码Debug调试必
Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这篇文章就来聊下 Tomcat 调优,重点介绍下线程池调优及 TCP 半连接、全连接队列调优。To
图解 | 聊聊 MyBatis 缓存
你好,我是悟空。本文主要内容如下:一、MyBatis 缓存中的常用概念MyBatis 缓存:它用来优化 SQL 数据库查询的,但是可能会产生脏数据。SqlSession:代表和数据库的一次会话,向用户提供了操作数据库的方法。MappedStatement:代表要发往数据库执行的指令,可
不允许还有Java程序员不了解BlockingQueue阻塞队列的实现原理
我们平时开发中好像很少使用到BlockingQueue(阻塞队列),比如我们想要存储一组数据的时候会使用ArrayList,想要存储键值对数据会使用HashMap,在什么场景下需要用到BlockingQueue呢?1. BlockingQueue的应用场景当我们处理完一批数据之后,需要把这批数据
寻找已经发生高上下文切换问题的原因
作者介绍:张子恒,西安邮电大学研一在读,导师陈莉君老师,刚刚踏入Linux内核学习的小白一枚。段落引用背景介绍:问题:vmstat只能实时统计进程上下文切换的次数,具有一定的局限性,如果已经发生了高上下文切换的情况,那么该如何找到高上下文切换问题的原因在哪?想法:进程切换最核心的地方就
Redis源码简洁剖析14 —AOF
AOF 是什么Append Only File,通过保存 Redis 服务器所执行的命令来记录数据库状态。AOF 持久化的实现命令追加服务器在执行完一个写命令后,会以协议格式将被执行的写命令追加到服务器状态的 aof_buf 缓冲区的末尾:struct redisServer {
Redis源码简洁剖析13—Redis 持久化
Redis 持久化方式主要参考 Redis 官方文档:Redis Persistence。共有 4 种持久化方式:RDB (Redis Database):以指定的时间间隔执行数据在某个时间点的快照。AOF (Append Only File):AOF 持久化记录服务器接收到的每个写操作。R
【全网首发】MQ系列7:消息通信,高效和稳定性保障
MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ 架构分析MQ系列4:NameServer 原理解析MQ系列5:RocketMQ消息的发送模式MQ系列6:消息的消费1、介绍前面的章节我学习了 NameServer的原理,消息的生产发送,以及消息
Redis源码简洁剖析12—RDB 文件
RDB 是什么Redis *.rdb 是内存的二进制文件,通过 *.rdb 能够完全回复 Redis 的运行状态。RDB 文件格式详细信息可参考:Redis RDB Dump File Format。HeaderRDB 文件的头部占用 9bytes,前 5bytes 为 Magic
Redis源码简洁剖析11—一条命令的处理过程
命令的处理过程Redis server 和一个客户端建立连接后,会在事件驱动框架中注册可读事件——客户端的命令请求。命令处理对应 4 个阶段:命令读取:对应 readQueryFromClient 函数命令解析:对应 processInputBuffer 函数命令执行:对应 process
Redis源码简洁剖析10—主 IO线程及 Redis 6.0 多 IO 线程
Redis 到底是不是单线程的程序?Redis 只有在处理「客户端请求」时,是单线程的;整个 Redis server 不是单线程的,还有后台线程在辅助处理任务。Redis 选择单线程处理请求,是因为 Redis 操作的是「内存」,加上设计了「高效」的数据结构,所以操作速度极快,利用 IO 多路
Redis 源码简洁剖析9—aeEventLoop 及事件
aeEventLoopRedis 事件驱动框架对应的数据结构,在 ae.h 中定义,记录了运行过程信息,有 2 个记录事件的变量:IO 事件:aeFileEvent 类型的指针 *events时间事件:aeTimeEvent 类型的指针 *timeEventHead,按照一定时间周期触发的事
Redis 源码简洁剖析8—Reactor 模型
Reactor 模型网络服务器端,用了处理高并发网络 IO请求的一种编程模型。处理 3 类事件:连接事件:客户端→服务器的连接请求,对应服务端的连接事件写事件:客户端→服务器的读请求,服务端处理后要写回客户端,对应服务端的写事件读事件:服务端要从客户端读取请求内容,对应服务端的读事件
Redis 源码简洁剖析6—main函数启动
前言main 函数是 Redis 整个运行程序的入口。源码主要在 server.c 文件中。问题Redis server 启动后具体会做哪些初始化操作?Redis server 初始化时有哪些关键配置项?Redis server 如何开始处理客户端请求?阶段 1:基本初始化基本的初
Redis 源码简洁剖析5—quicklist 和 listpack
quicklist为什么要设计 quicklistziplist 有两个问题,参考 Redis 源码简洁剖析 05 - ziplist 压缩列表:不能保存过多的元素,否则访问性能会下降不能保存过大的元素,否则容易导致内存重新分配,甚至引起连锁更新特点quicklist 的设计,其实是
Redis 源码简洁剖析4— ziplist 压缩列表
ziplist 是什么压缩列表,内存紧凑的数据结构,占用一块连续的内存空间。一个 ziplist 可以包含多个节点(entry), 每个节点可以保存一个长度受限的字符数组(不以 \0 结尾的 char 数组)或者整数, 包括:字符数组长度小于等于 63 (2^6-1)字节的字符数组长度

有开始,就会有进​步!

在追求性能的道路上,记录每一刻的成长!源码解读,编程技巧,外文翻译,技术实践,线上案例等等,记录自己,启发他人!

专家作者推荐

巡山小汪

关注微信公众号《解Bug之路》,有问题请在公众号中咨询:) 无论多么艰苦的时刻,都不要忘记,辉煌的未来,在你的眼中闪耀!

飞哥开发内功

《深入理解Linux网络》作者,腾讯搜狗十年工程师,公众号「开发内功修炼」作者!

踩刀诗人

聊聊技术,唠唠段子,偶尔做菜写诗,欢迎关注我的公众号 踩刀诗人

Brand

搜索关注微信公众号【架构与思维】:撰稿者为bat、字节的几位高阶研发/架构,专注技术分享。

专题推荐

该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单、高性能兼容Redis协议的数据库的经历。
首先这个"Redis"是非常简单的实现,但是他在优化这个简单"Redis"路程很有趣,也能给我们在从事性能优化工作时带来一些启示。
原作者:Ayende Rahien
6篇文章13826阅读量
JDK1.6 版本之后,Java 对 Synchronized 同步锁做了充分的优化,甚至在某些场景下,它的性能已经超越了 Lock 同步锁。这一讲我们就来看看 Synchronized 同步锁究竟是通过了哪些优化,实现了性能地提升。
7篇文章16762阅读量