摘要: 背景: 在大型分布式系统中,线程池的使用非常普遍,但缺乏统一管理会导致一系列问题: 创建随意:各业务模块各自创建线程池,参数设置凭经验,有的核心线程数设得过大导致资源浪费,有的队列容量不足频繁拒绝任务 追踪断裂:分布式追踪中,主线程的 traceId 无法传递到异步线程,导致链路追踪不完整,问题排查 阅读全文
posted @ 2025-07-21 21:52 难得 阅读(52) 评论(0) 推荐(0)
摘要: 在业务不断发展变化的当下,系统的更新换代、扩展延伸已成常态。当新业务需要依托旧业务的历史数据,且这种情况并非个例,可能在多个场景中反复出现时,一套通用的数据迁移工具就成为了支撑业务顺畅过渡的关键。今天,我们不妨跳出具体的代码实现,从更宏观的角度聊聊数据迁移工具设计的那些事儿。​ 一、为何需要数据迁移 阅读全文
posted @ 2025-07-21 21:39 难得 阅读(23) 评论(0) 推荐(0)
摘要: 背景:该业务场景常见于促销活动通知,有时候运营配置某些活动后,要全量的通知给用户。在该项目中,push通知链路共有三个阶段,伴随用户量和业务复杂度的上升,不断地对该链路进行优化。 阶段一:初期,滚动拉取用户数据,采用线程池或for循环,调用推送接口。进行模板组装和SDK调用 瓶颈: 性能效率方面: 阅读全文
posted @ 2025-07-21 21:38 难得 阅读(19) 评论(0) 推荐(0)
摘要: 软件系统就像一座不断生长的建筑,随着业务的迭代、用户量的增长,最初的设计往往会逐渐 “变形”。代码里藏着越来越多的 “补丁”,新增功能变得举步维艰,甚至改一个小 bug 都可能引发连锁反应。这时,“重构” 就成了绕不开的话题。从最初工作对大函数按业务节点做拆分、某一业务模块运用设计模块进行解耦,实现 阅读全文
posted @ 2025-07-21 21:38 难得 阅读(37) 评论(0) 推荐(0)
摘要: MAT分析Dump文件: 1、设置MemoryAnalyzer.ini中的-Xmx为需要用的大小,否则会遇到打开dump文件报错。。 2、dump文件导出配置:在节点配置中增加dump导出 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/ 阅读全文
posted @ 2025-07-21 21:30 难得 阅读(158) 评论(0) 推荐(0)
摘要: 背景: 某一数据表用于记录sku的多次业务操作,要求同一sku在不同状态下是唯一的,数据库针对sku_status建立唯一索引。链路的大致流程如下: 在生产端,同一sku会并发的产生多个消息,但同一时刻只允许有一个状态位数据存在,故在insert和update都加了同一个redis锁,并在执行完成后 阅读全文
posted @ 2025-07-21 16:10 难得 阅读(16) 评论(0) 推荐(0)