摘要: 背景: 在大型分布式系统中,线程池的使用非常普遍,但缺乏统一管理会导致一系列问题: 创建随意:各业务模块各自创建线程池,参数设置凭经验,有的核心线程数设得过大导致资源浪费,有的队列容量不足频繁拒绝任务 追踪断裂:分布式追踪中,主线程的 traceId 无法传递到异步线程,导致链路追踪不完整,问题排查 阅读全文
posted @ 2025-07-21 21:52 难得 阅读(52) 评论(0) 推荐(0)
摘要: 背景:该业务场景常见于促销活动通知,有时候运营配置某些活动后,要全量的通知给用户。在该项目中,push通知链路共有三个阶段,伴随用户量和业务复杂度的上升,不断地对该链路进行优化。 阶段一:初期,滚动拉取用户数据,采用线程池或for循环,调用推送接口。进行模板组装和SDK调用 瓶颈: 性能效率方面: 阅读全文
posted @ 2025-07-21 21:38 难得 阅读(19) 评论(0) 推荐(0)
摘要: 软件系统就像一座不断生长的建筑,随着业务的迭代、用户量的增长,最初的设计往往会逐渐 “变形”。代码里藏着越来越多的 “补丁”,新增功能变得举步维艰,甚至改一个小 bug 都可能引发连锁反应。这时,“重构” 就成了绕不开的话题。从最初工作对大函数按业务节点做拆分、某一业务模块运用设计模块进行解耦,实现 阅读全文
posted @ 2025-07-21 21:38 难得 阅读(37) 评论(0) 推荐(0)
摘要: Redis扩展数据存储量: 纵向扩展:升级单个redis实例资源配置,包括增加内存容量、磁盘容量、高配置PCU。 优缺点:实施简单、直接。但是单个实例数据量大,RDB持久化时,fork子进程可能会阻塞一定时间,不考虑持久化还能接受。其次硬件容量跟成本是有限制的,不能无限扩。 横向扩展:横向增加当前R 阅读全文
posted @ 2025-04-16 18:15 难得 阅读(123) 评论(0) 推荐(0)
摘要: Buffer Pool: 数据库内存组件,缓存了磁盘上的真实数据,系统对数据库执行的增删改操作,主要就是对这个内存数据结构中的缓存数据执行的。然后数据库中有定时的IO线程,将该内存中的数据刷导磁盘,减少了磁盘IO的次数。 Buffer Pool本质是一片内存数据结构,默认是128M,实际生产时通过i 阅读全文
posted @ 2025-04-16 17:18 难得 阅读(326) 评论(0) 推荐(0)
摘要: YGC风险和调优:一般的应用服务器的配置是2C4G或4C8G,E区内存分配在1G左右,正常的YGC耗时最多几十毫秒,然后E区增速不快,YGC频率不高,用户使用时是无感知的。 风险: 机器升级:很多系统在流量大后,低配置机器无法满足性能要求。会升级到大机器,类似于数据计算的系统对于内存要求高,如32C 阅读全文
posted @ 2025-04-16 17:10 难得 阅读(69) 评论(0) 推荐(0)
摘要: ​前言: 文章内容:线程与进程、线程生命周期、线程中断、线程常见问题总结 本文章内容来源于笔者学习笔记,内容可能与相关书籍内容重合 偏向于知识核心总结,非零基础学习文章,可用于知识的体系建立,核心内容复习,如有帮助,十分荣幸 相关文献:并发编程实战、计算机原理 CPU多级缓存架构 要学习多级缓存架构 阅读全文
posted @ 2022-08-30 10:07 难得 阅读(717) 评论(0) 推荐(1)
摘要: 在业务不断发展变化的当下,系统的更新换代、扩展延伸已成常态。当新业务需要依托旧业务的历史数据,且这种情况并非个例,可能在多个场景中反复出现时,一套通用的数据迁移工具就成为了支撑业务顺畅过渡的关键。今天,我们不妨跳出具体的代码实现,从更宏观的角度聊聊数据迁移工具设计的那些事儿。​ 一、为何需要数据迁移 阅读全文
posted @ 2025-07-21 21:39 难得 阅读(23) 评论(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)
摘要: Nacos:支持CP或AP,同时包括了雪崩保护、自动注销实例、监听支持、多数据中心、跨注册中心同步、springCloud基础、dubbo集成、k8s集成 原理: 原理: nacos集成到springCloud,nacos client中实现了NacosServiceRegistry,实现了regi 阅读全文
posted @ 2025-04-16 19:02 难得 阅读(8) 评论(0) 推荐(0)
摘要: 服务故障引起的雪崩: 多个微服务之间调用时,A调用B和C,B和C又调用其他服务,这就是所谓扇出,如果链路上某个微服务由于网络或自身原因导致服务响应时间过长或不可用,对A的调用就会占用越来越多的系统资源,进而引起系统崩溃。 对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟 阅读全文
posted @ 2025-04-16 19:02 难得 阅读(27) 评论(0) 推荐(0)
摘要: Feign解决什么: Feign旨在使编写JAVA HTTP客户端变得更加容易,Feign简化了RestTemplate代码,实现了Ribbon负载均衡,使代码变得更加简洁,也少了客户端调用的代码,使用Feign实现负载均衡是首选方案,只需要你创建一个接口,然后在上面添加注解即可。 Feign是声明 阅读全文
posted @ 2025-04-16 19:00 难得 阅读(25) 评论(0) 推荐(0)
摘要: 基于HTTP和TCP的客户端负载均衡工具,主要负责请求分发,服务之间通讯基于Http Restful。SpringCloud服务调用方式有Rribbon+RestTemplate和Feign。当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表 阅读全文
posted @ 2025-04-16 18:59 难得 阅读(15) 评论(0) 推荐(0)