自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

念念不忘,必有回响

微信:weihubeats。个人公众号:小奏技术,专注于技术分享

  • 博客(572)
  • 收藏
  • 关注

原创 图文并茂分析Skywalking dubbo上下午传递源码

总的来说dubbo这一快的上下文传递还是很简单的。总结为如下几个步骤是否需要增强如果是则判断是Provider还是Consumer如果是Consumer则将上下文放入skywalking上下文中如果是如果是Provider则从dubbo上下文中获取Consumer的上下文恢复到skywalking上下文中如果我们看其他实现trace传递的dubbo增强也是类似的实现原理,比如Tlog,感兴趣可以去看看,这里就不分析了。

2024-04-13 18:25:32 341

原创 RocketMQ 5.x消息不丢失核心配置allAckInSyncStateSet详解

总的来说开启最多会在master宕机后15s内集群写入不可用,等异常的broker被移出后就可以继续正常写入了。实际比如有三个集群broker-abroker-bbroker-c一个集群比如broker-a在15s内不可写入也是可以接受的,因为还有两个集群可以写入,product也是有消息重试的。所以如果不开启。一条消息写入master后还没来得及同步给slave就宕机,消息丢失的风险还是太大,线上还是推荐开启。

2024-04-10 09:45:00 676

原创 从面到点俯瞰RocketMQ存储模型

RocketMQ的消息文件主要存储在commitLog,为了保证高性能的读写,commitLog采用顺序写入,文件名按偏移量命名,这样通过二分查找消息的效率非常高。由于订阅模型是基于topic的所以为了提高性能又引入了类似commitLog的索引,并不会直接存储消息,只存储了消息的物理偏移量,这样可以很方便的通过定位到commitLog为了支持按key查找,RocketMQ又引入了索引文件IndexFile,用来支持按key的查询。索引文件主要是利用hash,通过对。

2024-04-03 09:30:00 683

原创 结合idea聊聊System.getProperty和System.getenv()的区别

总的来说主要还是用的多。主要用于启动参数的获取。当然也可以通过获取到一些系统的参数比如等但是如果是利用kubernetes进行环境变量标签传递就需要额外处理,单独使用是获取不到的。

2024-03-13 09:45:00 309

原创 PostgreSQL数组查询是否存在某个值

【代码】PostgreSQL数组查询是否存在某个值。

2024-03-11 20:45:43 245

原创 图文+源码分析实现dubbo 3.x灰度(附源码)

总得来说dubbo实现流量灰度还是非常简单的,官方提供了原生的扩展我们直接使用就好。如果需要实现dubbo服务的动态标签就需要结合使用。

2024-03-07 09:30:00 978

原创 apisix实现http流量灰度方案的演进

总的来说基于apisix实现灰度发布还是比较简单的,实现方式有多种,区别主要还是kubernetes中是多个service还是单个service相对来说多service是apisix更推荐的做法,也能更精准控制流量。但是相对于java传统的比如和dubbo这些服务发现框架来说都是单service的元数据管理不太一样所以后续要实现全链路灰度可能会有比较大的不同。

2024-03-05 09:45:00 769

原创 你们团队是否有RocketMQ创建Topic、GID创建规范呢

早期在使用RocketMQ的时候,系统和开发人员不算多。所以topic的创建会非常随意,各种千奇百怪的topic

2024-03-02 20:27:16 344

原创 BitSet在阿里面试和RocketMQ中的应用

简单理解就是位图,类似BitMap。用来存储二进制位的类总的来说BitSet在一些特定场景使用还是非常节省内存高效的。

2024-03-02 09:45:00 238

原创 PostgreSQL解决序列(自增id)自动增长冲突

但是如果我们在插入一些数据的时候手动指定id,那么自增序列不会跟随我们手动设置的id增长。就会出现下次不设置id的时候自增到我们手动指定的id导致主键冲突bug。如果我们插入数据不指定id。自动生成的id就还是4,从而导致主键冲突。xiaozou_id_seq是序列名,xiaozou是表名。一般表的id主键我们都是设置为自增序列。如果不知道序列名可以通过如下方式查询。实际我们的id自增序列还停留在3。设置自增序列为当前id的最大值+1。现在我们手动插入数据比如。这时候我们的数据变成。

2024-02-04 16:51:16 620

原创 Linux定时删除log

【代码】Linux定时删除log。

2024-02-01 17:31:23 287

原创 基于Javassist字节码增强实现本地公参传递

这里是,觉得文章不错可以关注公众号,文章首发。拒绝营销号,拒绝标题党。

2024-01-30 21:04:19 376

原创 用Go写一个小玩意-git定时push、commit

总得来说使用goland写一些工具类啥的还是很方便的,api和打包非常轻量。比如文件的读取写入只需要一行代码搞定。

2024-01-30 20:45:00 550

原创 RocketMQ源码分析之消息重试(真相竟然是延时消息)

普通消息重试默认是16次,顺序消息默认是,消息消费失败会以延时消息的方式投递到broker,超过延时消息的最大值则以2小时为重试间隔。现在提供了不同的重试策略,默认是如果broker投递失败则会在本地再次消费该消息.重试次数的元数据存储在重试次数的增加有两种发送到broker后在broker进行+1(broker重试)如果发送broker失败则在本地消费进行+1(client重试)

2024-01-27 10:15:58 664

原创 RocketMQ 5.x pop消费详解

popRebalance在broker实现,方便多语言client实现维护.更符合云原生单个客户端消费所有queue,避免单个client假死造成消息堆积避免出现因为queue不足导致的扩展consumer提升消费能力异常避免消息队列数量与consumer数量比例不均衡时导致的某些consumer承担过多的消息后续有机会再分析下pop消费时间的源码以及更多细节。

2024-01-24 20:40:11 408

原创 APISIX限流实战

总的来说apisix提供的插件功能给我提供了非常丰富的扩展组件。我们在对每个路由进行配置的时候只需要启动这些插件即可,非常简单。

2024-01-23 20:04:55 491

原创 RocketMQ源码分析之消费进度查询(附带pop消费进度查询坑处理)

总得来说官方dashboard对于pop的消息查询存在bug。因为获取broker的地址信息是通过查询重试topic的路由信息获取到的,如果没有重试topic就查询不到broker消费进度。因为pop的重试队列规则修改了。旧版本的dashboard没有兼容所有会查询不到。

2024-01-23 09:45:00 1045

原创 如何实现一个好用的全链路多测试环境(HTTP篇)

总得来说我们基于服务编排、流量染色、动态自定义路由实现了http的多测试环境。如果我们要实现全链路,还需要实现MQxxl-job等三方中间件的多测试环境隔离。

2024-01-15 15:10:02 891

原创 github action初体验实现maven项目自动ci test

GitHub Actions是GitHub提供的一种持续集成/持续交付(CI/CD)工具,它可以帮助开发者自动化软件开发流程中的各种任务,如构建、测试、部署等。通过在代码仓库中配置和定义工作流程(Workflow),GitHub Actions可以在特定的事件触发时执行一系列的操作这么解释有点官方。最简单只直观的解释就是我们每次提交一些大型开源项目的时候,就会有一个这个玩意就是你定义一些规则,比如在给master 提交代码或者pr的时候就触发一些单元测试之类的ci等。

2023-12-27 09:45:00 1111

原创 linux Systemd为裸机goLand应用保驾护航

总的来说使用systemctl去部署一些简单服务还是比较不错的,挂了可以自动拉取,也可以配置log信息等。

2023-12-25 21:39:40 451

原创 聊聊kafka client性能调优及kafka最佳实践

其实可以看到producer的batch.size和linger.ms就是借鉴了tcp/ip的网络发送算法。tcp/ip的Nagle算法大致的规则如下如果包长度达到MSS,则允许发送如果包含FIN,则允许发送如果设置了TCP_NODELAY,则允许发送未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送上述条件都未满足,但发生了超时(一般为200ms),则立即发送。elseelseend ifend ifend if总得来说主要是四个参数。

2023-12-23 09:30:00 1028

原创 Kakka dashboard技术选型及实战Know Streaming

这里是,觉得文章不错可以关注公众号,文章首发。拒绝营销号,拒绝标题党。

2023-12-22 09:00:00 916

原创 手把手教你skywalking二开之扩展logback日志%tid

接下来真正的实现当然是放在agent里面去做的首先去继承/*** issue.* *//***/@Override/***/@Override/***/@Override@Override@Override@Override这里主要定义agent要增强哪个类、哪个方法。比如这里就通过定义增强类,定义增强的方法之后再配置类中添加这个类拦截class就是配置我们下面要写的也就是真正的实现类。

2023-12-20 09:56:35 837 2

原创 RocketMQ消息消费中长轮训的应用

总的来说消息拉取这一块的源码还是非常复杂的,我们只能走马观花查看整体流程。没办法一一俱到分析所有的细节,不然我们会迷失在复杂的源码海洋中。我们先理清整理逻辑即可。这里我们再总结下我们分析到的流程client向broker发送消息拉取请求broker如果没有消息则会将请求挂起挂起的请求有几个处理机会a. 默认会有定时5s去轮训处理这些暂存的请求b.会每隔1毫秒去检查是否有消息到来,如果有则分发新的消息到来,其中就包括处理hold住的请求。

2023-12-18 09:00:00 893

原创 记一次RocketMQ线上broker内存持续升高问题排查(下篇)

所以总结来说JKD8 G1在经历一次Full GC后就会归还内存给操作系统的前提是-Xms和-Xmx参数设置大小不一致才会归还。如果设置一样大即使经历Full GC也不会归还给到操作系统至于验证下次有机会在线上再验证下吧,网上也有很多人都验证了,这里就不验证了。

2023-12-15 21:51:00 538

原创 RocketMQ如何像德芙那样丝滑缩容

总的来说缩容还是比较简单的,就是broker停写,然后等broker上面的消息都消费完成后即可下线。下线的时候先下线slave,然后是master。避免出现主从自动切换。

2023-12-13 21:38:49 415

原创 spring data Redis整合spring cache实战(附源码及源码分析)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党。

2023-12-06 09:58:17 444

原创 记一次RocketMQ线上broker内存持续升高问题排查

进程在申请内存的时候,不是直接分配物理内存,分配一块虚拟空间,等到堆真正使用这块虚拟空间才会发生缺页去分配物理内存。

2023-11-25 21:13:34 934

原创 记一次spring cloud gateway Netty线程性能优化(附带压测)

可以看到增加线程数配置 可以明显减少error错误,即减少。目前是在mac测试数据,预计至少有20%左右的QPS提升其次还有一个可配置参数,默认为cpu核数,最大为4如果cpu核数够多也可以增加该线程数,由于本机线程数有限,增加该线程数性能提升不明显。

2023-11-23 09:30:00 2571 1

原创 都dubbo3了,别再用xml了配置dubbo服务了

我们用基于和Zookeeper注册中心快速入门使用了dubbo3。可以看到dubbo3并不需要像以前那样配置xml比如这样-- 定义应用名 --> < dubbo: application name = " demo-provider " /> < dubbo: registry address = " zookeeper://127.0.0.1:2181 " />

2023-11-15 10:35:23 198

原创 Spring EL表达式原来都是配合这些类一起使用的

本次我们详细的分析了Spring EL表达式中的一些核心用法。以及实际使用中是如何结合和去使用的。简单实现了一个EL表达式的工具类,也结合模块的EL表达式进行了简单的源码分析。让大家对Spring EL表达式有全面的了解。

2023-11-14 09:55:35 180

原创 图文加多个测试带你彻底搞懂Netty ChannelPipeline的执行顺序(附源码)

从上面大量的用例我们可以看出如下规律是双向链表结构,包含和两种处理器.也有处理器既是又是,但是也属于这两种只会从当前的handler位置开始,往前找outbound执行与会从tail的位置开始,往前找outbound执行的执行顺序一般是从上到下的执行顺序一般是从下到上,

2023-11-10 09:50:19 332

原创 线上Kafka集群如何调整消息存储时间

总的来说Kafka的配置分broker级别和Topic级别。如果我们要修改消息的存储时间,最好是通过修改Topic的存储时间来修改,因为不用重启broker。不过在部署Kafka集群的时候我们也建议设置合理的消息存储时间,避免每个Topic都要定制化配置,才能最大化利用磁盘,避免磁盘浪费其次从Kafka的这种配置设计来说,我们后续做技术设计的时候也可以采用这种优秀的方式,提供全局+局部的配置,局部配置优先级高于全局,其实如果开源软件使用的多的话,我们会发现大多开源软件的配置都采用这种设计思路。

2023-11-04 09:40:01 1071

原创 RocketMQ sql92的使用及原理简单分析附源码

本次我们对RocketMQ sql92过滤消息进行了简单的使用以及少量的源码分析,并没有完整的从整个流程进行分析,因为本篇并不是源码分析偏。sql92在实际的项目中的相对来说较少,偶尔如果做RocketMQ消息的多册环境或者灰度,可能是一个方案,但不是最佳的。

2023-11-02 09:37:24 231

原创 聊聊RocketMQ中的broker的TPS和QPS为何相差巨大,是如何统计的

总的来说一般一条消息会被多个业务方消费,所以QPS都是会大于TPS的。TPS主要是统计写消息量QPS主要是统计读(消费)消息量主要注意的是官方目前的统计是有一个小bug的统计的一些QPS、TPS改成统计的是TPM。所以如果要修复这个bug可以参考这个pr相关讨论可以参考这个issues。

2023-10-21 10:20:56 586

原创 RocketMQ读写分离实战

总的来说开启读写分离有明显的QPS性能提升,但是会耗费额外的内存,但是每条消息的平均耗时变高了。

2023-10-18 10:07:38 314

原创 结合源码聊一聊为何线上RocketMQ偶尔出现system busy

本次我们结合源码分析了出现的四种情况broker中消息发送线程池()处理任务超时OS page cache is busy,开始清理送线程池()中的queue任务消息发送线程池()队列容量满了(默认1w)如何缓解这几种异常呢?本质都是broker的压力太大了,处理不过来。最好的解决方式就是提升broker的处理速度,即RocketMQ的 QPS。有以下几种方式开启读写分离(即transientStorePoolEnable = true)扩容broker集群优化broker。

2023-10-13 09:58:43 334

原创 Kafka KRaft线上集群部署实战(broker、controller分离部署)

这里是,觉得文章不错可以关注公众号,文章首发。拒绝营销号,拒绝标题党。

2023-10-09 09:57:24 324 1

转载 Dapper,大规模分布式系统的跟踪系统

当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。Dapper–Google生产环境下的分布式跟踪系统,应运而生。那么我们就来介绍一个大规模集群的跟踪系统,它是如何满足一个低损耗、应用透明的、大范围部署这三个需求的。

2023-09-27 16:41:53 170

原创 Spring boot整合Skywalking实现线程池无侵入Tid传递及简单源码分析

总的来说如果线程池我们要支持无缝tid传递,需要将中的插件移动到我们的agent中,才会生效。但是仅仅支持线程池,即。

2023-09-27 10:06:21 937

空空如也

空空如也

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

TA关注的人

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