Pulsar3.0 升级指北

2023-12-25
阅读 7 分钟
437
如图所示,LTS 版本会最长支持到 36 个月,而 Feature 版本最多只有六个月;类似于我们使用的 JDK11,17,21 都是可以长期使用的;所以也推荐大家都升级到 LTS 版本。
封面图

升级到 Pulsar3.0 后深入了解 JWT 鉴权

2023-11-20
阅读 4 分钟
424
最近在测试将 Pulsar 2.11.2 升级到 3.0.1的过程中碰到一个鉴权问题,正好借着这个问题充分了解下 Pulsar 的鉴权机制是如何运转的。
封面图

云原生背景下如何配置 JVM 内存

2023-05-15
阅读 2 分钟
3.8k
背景前段时间业务研发反馈说是他的应用内存使用率很高,导致频繁的重启,让我排查下是怎么回事;在这之前我也没怎么在意过这个问题,正好这次排查分析的过程做一个记录。首先我查看了监控面板里的 Pod 监控:发现确实是快满了,而此时去查看应用的 JVM 占用情况却只有30%左右;说明并不是应用内存满了导致 JVM 的 OOM,...

一个诡异的 Pulsar InterruptedException 异常

2023-02-24
阅读 7 分钟
3.6k
今天收到业务团队反馈线上有个应用往 Pulsar 中发送消息失败了,经过日志查看得知是发送消息时候抛出了 java.lang.InterruptedException 异常。

面试的时候别再说你不会设计模式了

2022-12-27
阅读 4 分钟
4k
最近在设计一个对某个中间件的测试方案,这个测试方案需要包含不同的测试逻辑,但相同的是需要对各个环节进行记录;比如统计耗时、调用通知 API 等相同的逻辑。

分享一个 SpringCloud Feign 中所埋藏的坑

2022-05-23
阅读 3 分钟
2.3k
前段时间同事碰到一个问题,需要在 SpringCloud 的 Feign 调用中使用自定义的 URL;通常情况下是没有这个需求的;毕竟都用了 SpringCloud 的了,那服务之间的调用都是走注册中心的,不会需要自定义 URL 的情况。
封面图

Pulsar 也会重复消费?

2022-03-18
阅读 3 分钟
1.8k
背景许久没有分享 Java 相关的问题排查了,最近帮同事一起排查了一个问题:在使用 Pulsar 消费时,发生了同一条消息反复消费的情况。排查当他告诉我这个现象的时候我就持怀疑态度,根据之前使用的经验 Pulsar 在官方文档以及 API 中都解释过:只有当设置了消费的 ackTimeout 并超时消费时才会重复投递消息,默认情况下是...

Go channel VS Java BlockingQueue

2021-07-05
阅读 6 分钟
4.3k
最近在实现两个需求,由于两者之间并没有依赖关系,所以想利用队列进行解耦;但在 Go 的标准库中并没有现成可用并且并发安全的数据结构;但 Go 提供了一个更加优雅的解决方案,那就是 channel。
封面图

一文搞懂参数传递原理

2021-01-12
阅读 6 分钟
3.7k
最近一年多的时间陆续接触了一些对我来说陌生的语言,主要就是 Python 和 Go,期间为了快速实现需求只是依葫芦画瓢的撸代码;并没有深究一些细节与原理。

一个小时学会用 Go 创建命令行工具

2020-12-08
阅读 6 分钟
3.3k
前言最近因为项目需要写了一段时间的 Go ,相对于 Java 来说语法简单同时又有着一些 Python 之类的语法糖,让人大呼”真香“。但现阶段相对来说还是 Python 写的多一些,偶尔还得回炉写点 Java ;自然对 Go 也谈不上多熟悉。于是便利用周末时间自己做个小项目来加深一些使用经验。于是我便想到了之前利用 Java 写的一个博...

不同语言对单例模式的不同实现

2020-10-09
阅读 5 分钟
1.6k
前言前段时间在用 Python 实现业务的时候发现一个坑,准确的来说是对于 Python 门外汉容易踩的坑;大概代码如下: {代码...} 首先定义了一个 Mom 的类,它包含了一个字符串类型的 name 与列表类型的 sons 属性;在使用时首先创建了该类的一个实例 m1 并往 sons 中写入一个列表数据;紧接着又创建了一个实例 m2 ,也往 so...

撸了一个 Feign 增强包

2020-07-30
阅读 4 分钟
2.4k
最近准备将公司的一个核心业务系统用 Java 进行重构,大半年没写 Java ,JDK 都更新到 14 了,考虑到稳定性等问题最终还是选择的 JDK11。

动态代理与RPC

2020-04-28
阅读 3 分钟
2.3k
前言 随着最近关注 cim 项目的人越发增多,导致提的问题以及 Bug 也在增加,在修复问题的过程中难免代码洁癖又上来了。 看着一两年前写的东西总是怀疑这真的是出自自己手里嘛?有些地方实在忍不住了便开始了漫漫重构之路。 前后对比 在开始之前先简单介绍一下 cim 这个项目,下面是它的架构图: 简单来说就是一个 IM 即...

动态代理的实际应用

2020-03-30
阅读 3 分钟
1.4k
最近在用 Python 的 SQLAlchemy 库时(一个类似于 Hibernate 的 ORM 框架),发现它的 Events 事件还挺好用。

手写一个词法分析器

2020-03-23
阅读 5 分钟
9.8k
最近大部分时间都在撸 Python,其中也会涉及到将数据库表转换为 Python 中 ORM 框架的 Model,但我们并没有找到一个合适的工具来做这个意义不大的”体力活“,所以每次新建表后大家都是根据自己的表结构手写一遍 Model。

设计一个全局异常处理器

2019-07-15
阅读 4 分钟
2.1k
前言 最近稍微闲了一点于是把这个半年都没更新的开源项目 cicada 重新捡了起来。 一些新关注的朋友应该还不知道这项目是干啥的?先来看看官方介绍吧(其实就我自己写的😀) cicada: 基于 Netty4 实现的快速、轻量级 WEB 框架;没有过多的依赖,核心 jar 包仅 30KB。 针对这个轮子以前也写过相关的介绍,感兴趣的可以再翻...

What?一个 Dubbo 服务启动要两个小时!

2019-07-05
阅读 3 分钟
2.5k
前言 前几天在测试环境碰到一个非常奇怪的与 dubbo 相关的问题,事后我在网上搜索了一圈并没有发现类似的帖子或文章,于是便有了这篇。 希望对还未碰到或正在碰到的朋友有所帮助。 现象 现象是这样的,有一天测试在测试环境重新部署一个 dubbo 应用的时候发现应用“启动不起来”。 但过几个小时候之后又能自己慢慢恢复,并...

常见的集合容器应当避免的坑

2019-07-04
阅读 5 分钟
2.3k
前言 前不久帮同事一起 review 一个 job 执行缓慢的问题时发现不少朋友在撸码实现功能时还是有需要细节不够注意,于是便有了这篇文章。 ArrayList 踩坑 {代码...} 首先大家看看这段代码有什么问题嘛? 其实在大部分情况下这都是没啥问题,无非就是循环的往 ArrayList 中写入数据而已。 但在特殊情况下,比如这里的 getDa...

再一次生产 CPU 高负载排查实践

2019-06-18
阅读 3 分钟
3.5k
前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨。 其实早在去年我也处理过类似的问题,并记录下来:《一次生产 CPU 100% 排查优化实践》 不过本次问题产生的原因却和上次不太一样,大家可以接着往下看。 <!--more--> 问题分析 收到邮件后我...

分表后需要注意的二三事

2019-06-13
阅读 3 分钟
1.9k
前言 本篇是上一篇《一次分表踩坑实践的探讨》,所以还没看过的朋友建议先看上文。 还是先来简单回顾下上次提到了哪些内容: 分表策略:哈希、时间归档等。 分表字段的选择。 数据迁移方案。 而本篇文章的背景是在我们上线这段时间遇到的一些问题并尝试解决的方案。 问题产生 之前提到在分表应用上线前我们需要将原有表...

线程池没你想的那么简单(续)

2019-06-06
阅读 5 分钟
2.4k
前言 前段时间写过一篇《线程池没你想的那么简单》,和大家一起撸了一个基本的线程池,具备: 线程池基本调度功能。 线程池自动扩容缩容。 队列缓存线程。 关闭线程池。 这些功能,最后也留下了三个待实现的 features 。 执行带有返回值的线程。 异常处理怎么办? 所有任务执行完怎么通知我? 这次就实现这三个特性来看...

线程池没你想的那么简单

2019-05-20
阅读 8 分钟
2.4k
原以为线程池还挺简单的(平时常用,也分析过原理),这次是想自己动手写一个线程池来更加深入的了解它;但在动手写的过程中落地到细节时发现并没想的那么容易。结合源码对比后确实不得不佩服 Doug Lea 。

图床失效了?也许你应该试试这个工具

2019-05-09
阅读 2 分钟
1.8k
前言 经过几个小伙伴的提醒,发现个人博客中的许多图片都裂了无法访问;原因就不多说,既然出现问题就得要解决。 原本我的处理方式非常简单粗暴:找到原有的图片重新下载下来上传到新的可用图床再把图片地址替换。 这样搞了一两篇之后我就绝望了。。。 之前为了代码能在公众号里也有好的阅读体验,所以能截图的我绝不贴...

『并发包入坑指北』之向大佬汇报任务

2019-04-29
阅读 5 分钟
1.5k
前言 在面试过程中聊到并发相关的内容时,不少面试官都喜欢问这类问题: 当 N 个线程同时完成某项任务时,如何知道他们都已经执行完毕了。 这也是本次讨论的话题之一,所以本篇为『并发包入坑指北』的第二篇;来聊聊常见的并发工具。 <!--more--> 自己实现 其实这类问题的核心论点都是:如何在一个线程中得知其他...

一次分表踩坑实践的探讨

2019-04-16
阅读 4 分钟
2k
前言 之前不少人问我“能否分享一些分库分表相关的实践”,其实不是我不分享,而是真的经验不多?;和大部分人一样都是停留在理论阶段。 不过这次多少有些可以说道了。 先谈谈背景,我们生产数据库随着业务发展量也逐渐起来;好几张单表已经突破亿级数据,并且保持每天 200+W 的数据量增加。 而我们有些业务需要进行关联查...

『并发包入坑指北』之阻塞队列

2019-04-10
阅读 5 分钟
1.7k
较长一段时间以来我都发现不少开发者对 jdk 中的 J.U.C(java.util.concurrent)也就是 Java 并发包的使用甚少,更别谈对它的理解了;但这却也是我们进阶的必备关卡。

线程池中你不容错过的一些细节

2019-03-26
阅读 3 分钟
2k
背景 上周分享了一篇《一个线程罢工的诡异事件》,最近也在公司内部分享了这个案例。 无独有偶,在内部分享的时候也有小伙伴问了之前分享时所提出的一类问题: 这其实是一类共性问题,我认为主要还是两个原因: 我自己确实也没讲清楚,之前画的那张图还需要再完善,有些误导。 第二还是大家对线程池的理解不够深刻,比如...

一个线程罢工的诡异事件

2019-03-13
阅读 5 分钟
2.2k
背景 事情(事故)是这样的,突然收到报警,线上某个应用里业务逻辑没有执行,导致的结果是数据库里的某些数据没有更新。 虽然是前人写的代码,但作为 Bug maker&killer 只能咬着牙上了。 <!--more--> 因为之前没有接触过出问题这块的逻辑,所以简单理了下如图: 有一个生产线程一直源源不断的往队列写数据。 ...

一致性 Hash 算法的实际应用

2019-03-01
阅读 7 分钟
3k
前言 记得一年前分享过一篇《一致性 Hash 算法分析》,当时只是分析了这个算法的实现原理、解决了什么问题等。 但没有实际实现一个这样的算法,毕竟要加深印象还得自己撸一遍,于是本次就当前的一个路由需求来着手实现一次。 背景 看过《为自己搭建一个分布式 IM(即时通讯) 系统》的朋友应该对其中的登录逻辑有所印象。 ...

利用策略模式优化过多 if else 代码

2019-01-30
阅读 2 分钟
5.4k
前言 不出意外,这应该是年前最后一次分享,本次来一点实际开发中会用到的小技巧。 比如平时大家是否都会写类似这样的代码: {代码...} 条件少还好,一旦 else if 过多这里的逻辑将会比较混乱,并很容易出错。 比如这样: 摘自 cim 中的一个客户端命令的判断条件。 刚开始条件较少,也就没管那么多直接写的;现在功能多...