java
文章平均质量分 84
胖当当技术
携程coder,致力于架构设计、解决方案分析、底层原理剖析、开源工具创作
展开
-
idea插件开发(二)经验分享
在开发合并检查插件的时候,作者也遇到了不少问题,主要是自己摸索,没有其他人的经验。不过这种从0到1的技术研究对个人还是有好处的,就像作者之前自己捣鼓了一个微信小程序和到huggingface研究AI一样,虽然很麻烦,但是可以说很少有东西作者自己研究不了的。 言归正传,接下来分享一些作者觉得会绕弯路的经验。原创 2024-09-05 10:00:34 · 4211 阅读 · 0 评论 -
idea插件开发(一)合并检查
由于代码合并冲突的时候,代码丢失的情况频发,作者研究idea的VFS虚拟文件系统和Git4ide源码,创作idea插件检测代码合并丢失可以区分主动删除与被动丢失,比如本地或者删除一段代码,合并之后不会被认为是丢失原创 2024-08-28 19:18:48 · 4274 阅读 · 0 评论 -
生产问题(十八)FullGC排查
最近服务发生fullgc,响应时长大幅增长原创 2024-08-15 09:44:58 · 732 阅读 · 0 评论 -
生产问题(十七)静态变量导致NoClassDefFoundError
最近线上出现了java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class com.**.Util,导致详情查询出现问题。这个问题其实之前也出现过,找了框架的排查没有查到结果,不过之前作者不知道这个事情。这次一看到这种报错,作者就知道一定是静态变量或者static块导原创 2024-07-26 09:47:17 · 4337 阅读 · 0 评论 -
架构(十七)翻译监控
作者最近做的一个功能是需要监控一个翻译转换,根据国家和语言进行分组,然后定时把监控情况放到ck里面。为什么是分组和定时监控呢?因为调用比较高的系统的qps在单机一万多,70台机器,可怕的高频调用注定他不能实时分析。原创 2024-05-29 13:07:11 · 1299 阅读 · 0 评论 -
问题(十五)性能分析组件类加载问题
最近作者在做性能分析服务的agent,有个功能是在代理启动的时候加载配置中心,拿到具体哪些目录下的类需要增强,这里碰到了类加载失败的问题。原创 2024-04-30 13:04:37 · 883 阅读 · 0 评论 -
架构(十六)本地方法缓存
作者需要在底层公共包里面加一个方法反射的工具类,看起来很简单的事,问题也不少,这里讲讲过程。在结合同事的思维误区聊聊本地加锁块的问题。原创 2024-03-06 11:45:20 · 3706 阅读 · 0 评论 -
架构(十五)Java字节码增强
一般如果需要做增强类的架构工具会使用SpringBoot提供的切面,但是这逃不开两个问题:1、使用方需要加注解代码;2、版本更新导致的发布。 所以java还提供了字节码层面的增强方案,对使用的系统是无感的。原创 2024-02-27 09:46:20 · 10461 阅读 · 0 评论 -
架构(十三)动态本地锁
加锁大家都知道,但是目前提供动态锁的基本都是分布式锁,根据订单或者某个收费款项进行加锁。比如这个1订单要收刷卡费用,那就OREDER_1做为key丢到redis进行分布式加锁。这也是当下分布式锁最流行的方式。 但是对于平台项目或者一些并发程度低的场景,分布式锁就没有必要了,本地锁更加方便。但是本地锁只有synchronized、ReentrantLock之类的方式,想动态的加锁只用他们是实现不了的。原创 2024-02-06 18:52:15 · 2012 阅读 · 0 评论 -
生产问题(十三)谷歌Protobuf误修改系统全局时区
最近其他组出了个线上问题,导致用户的时间出现问题,影响用户出行,后来才发现是谷歌的Protobuf会更改系统全局时区。不过有一说一,感觉jdk的问题更大。原创 2023-12-25 12:38:14 · 26582 阅读 · 0 评论 -
生产问题(十)Log4j-tag丢失
最近有个线上日志丢失tag的问题,是组内封装了后置请求的拦截器把请求的响应结果存到ClickHouse里面去,但是日志总有一些tag丢失,作者提出父级线程的threadlocal被清空,同事认为可能是threadlocal的弱引用在gc的时候被回收。两种想法其实都是有可能的,那就要一个个验证。这里要感谢ld和cbc的共同排查、讨论,最后锁定原因是父级线程的MDC被组件清空。原创 2023-10-31 10:11:51 · 10867 阅读 · 0 评论 -
架构(七)热点探测-HotKey在物联网可以做什么
博主今天聊一聊物联网领域的热点探测,讲一讲架构和源码,主要是京东武伟峰的HotKeyhotkey: 京东App后台中间件,毫秒级探测热点数据,毫秒级推送至服务器集群内存,大幅降低热key对数据层查询压力核心功能:热数据探测并推送至集群各个服务器,适用于许多第三方存储的热点探测。说起来有点显得官方,具体看一下这个中间件在物联网、资产领域可以使用到的场景,然后介绍一下它的实现原理,便于搭建和二次开发。原创 2023-05-23 14:37:34 · 22699 阅读 · 6 评论 -
跟chatGpt 聊聊发布的时候老节点的线程池会怎么样
今天同事提了一个问题,每次系统发布的时候在老的节点服务里面的线程池会怎么样,队列里面的任务会被执行完毕吗? 博主一直认为优雅退出一定是会等执行完才退出的,结果跟chatGpt聊了聊,一波三折。原创 2023-05-17 20:30:22 · 7568 阅读 · 0 评论 -
架构(六)系统架构设计
最近拜读了携程一位大牛:Gavin的文章,干货 | 携程商旅订单系统架构设计和优化实践,里面谈及许多架构分层的理念,读后感悟很多,结合博主自己在系统开发过程中的经验聊一聊架构设计。原创 2023-05-16 18:43:03 · 52997 阅读 · 0 评论 -
会出现Mysql提交事务之后Spring以为没有成功吗
最近有人用博主的Redis回滚工具的时候提出了一个问题,这个工具是根据事务过程中的异常进行回滚,从而保证DB与redis的一致性。 那么如果在事务提交的时候Mysql成功了,但是Spring以为没有成功抛出异常,这时候redis回滚工具失效,那么不就变成了mysql有数据,redis没有了吗? 这位同学明显对于spring和mysql的事务交互还不是那么理解。原创 2023-04-28 17:23:22 · 796 阅读 · 0 评论 -
并发限流与计算限流的使用与比较
最近有并发较高影响服务稳定性,之前博主分享过自己封装的计算限流工具,github地址:GitHub - SongTing0711/count-limit主要是针对计算资源如:CPU、内存等,使用的其实是加权计数器的限流算法,对于并发流量比较高的场景,其实可以用。但是在计数的过程中要进行资源数量的扣减和归还,这个其实在高并发的时候是多了一层逻辑处理的。如果并发场景消耗的资源比较少其实直接使用滑动窗口、令牌桶等限流算法更加适合,也就是只用于高并发和原创 2023-04-24 18:44:20 · 7609 阅读 · 0 评论 -
架构(五)数据批处理加速(GC收集器->安全点->线程池)
有个数据镜像系统每天0点会进行批量处理生成日表,随着数据量不断增大,处理时间从之前的一个小时,目前每天需要接近两小时,一旦继续延迟会影响BI、库存等很多任务。领导让博主进行优化提速。博主从GC收集器、可数循环的安全点放置、CPU与线程搭配等多个方向进行分析实践。原创 2023-02-07 09:46:38 · 14096 阅读 · 0 评论 -
Java类加载
最近社区讨论了一个比较有趣的类初始化代码public class Test2 { public Test2() { s1++; s2++; } private static Test2 test2 = new Test2(); private static int s1; private static int s2 = 3;}这里涉及的知识其实非常底层,只依靠java知识和开发经验是不行的,必须对jvm有深入的了解才能分析清楚。原创 2023-01-18 14:31:50 · 8192 阅读 · 0 评论 -
生产问题(五)TCP丢包解决
接上篇TCP丢包排查_tingmailang的博客-CSDN博客,丢包的排查确认在环境、网络链路层,对于后续的排查以及解决方案博主全程跟踪,这里再分享下原创 2022-09-06 09:37:13 · 54340 阅读 · 0 评论 -
生产问题(五)TCP丢包排查
线上出现了服务之间调用存在延时,从链路追踪可以看到X服务发出请求,1s左右Y服务才收到请求,虽然最终排查出是TCP丢包重试,但是过程中还是有许多阶段性排查方向的,而且最终确定结论的抓包实验也挺有意思。原创 2022-09-02 09:59:00 · 24623 阅读 · 0 评论 -
Mybatis拼接sql出错及源码解析
项目里写了一条查询sql在入参没有的情况下多拼接了一个条件,看了一会儿都感觉不出来哪里不对,一个惊讶的猜想浮现,在foreach设置的别名mybatis是不是给设置进去了。原创 2022-07-21 15:27:05 · 15456 阅读 · 0 评论 -
生产问题(四)RocketMQ积压排查
有个接收订单mq进行数据实时分析汇总的服务出现了积压,很明显是处理速度跟不上订单下单速度,要排查的重点就是影响节点处理速度的因素,下面分析一下博主的排查过程。原创 2022-07-06 10:04:42 · 2806 阅读 · 0 评论 -
并发导致java对象错乱
不同线程持有堆中该对象的应用,而该对象的门店id在被主线程不断改变,如果是子线程刚开始使用就改变只是相当于重复计算,但是一旦使用门店得到机器信息计算出结果之后,再拿门店和结果组合推送就会产生问题。...原创 2022-06-24 09:46:34 · 2456 阅读 · 0 评论 -
开源工具(三)计算限流
在项目中使用博主自己封装的计算限流工具已经很久了,慢慢发展已经比较完善通用,现在开源共享。gitee地址:https://gitee.com/tingmailang/count-limit.git 相比较博主之前在java计算限流工具_tingmailang的博客-CSDN博客_限流工具封装的工具,开源的工具除了支持本地锁、本地存储之外还支持spring redis、redisson等进行加锁或者存储,注解配置更为灵活,可以看出工具演变的过程。...原创 2022-06-14 09:48:38 · 24256 阅读 · 0 评论 -
java防重防频繁工具
开发过程中有些接口的跑动比较耗时耗资源,比如计算销售手底下所有门店的商品,点击过于频繁就会导致大量资源消耗,因此博主在项目中封装了一套防重放频繁的工具。由于是分布式,所以需要依赖redis,单体服务其实可以使用本地缓存。...原创 2022-06-08 09:43:55 · 8168 阅读 · 0 评论 -
开源工具(二)分布式代理锁
在项目中使用封装的分布式代理锁已经很久了,想着做的更完善通用一点开源共享。gitee地址:https://gitee.com/tingmailang/distributed-proxy-lock开源的工具除了支持redisson之外还支持spring redis加锁,通过参数获取锁后缀的方式也更加灵活,可以看出工具演变的过程。原创 2022-05-23 18:44:08 · 8196 阅读 · 0 评论 -
PageHelper导致接口超时
服务有个分页接口超1s告警了,兜兜转转发现是这块老代码使用了pageHelper,这个工具在查询数据分页的同时进行了总数查询,以前的研发不知道设置不进行count查询,这种情况下会导致两次数据库IO,执行时间就增加了,所以有些时候导致了接口超时。原创 2022-05-13 09:51:22 · 3035 阅读 · 2 评论 -
java计算限流工具
针对越来越大容量、并发高的接口或者其他计算方法,同一时间在运行的计算维度进行限制,比要计算门店设备,服务最多支持10000个门店同时在计算,相当于把资源到计算的对象维度。基于这个原因,作者编写了一个计算限流工具。原创 2022-05-07 11:07:14 · 8743 阅读 · 0 评论 -
生产问题(三)排查OOM
同事的服务OOM重启了,一般组内技术工具和问题研究都是由作者去做的,这次当然也不例外。顺带着把之前经历过的内存溢出、内存泄漏也讲一下。这次和之前的k8s内存溢出记一次特殊的K8S内存溢出_tingmailang的博客-CSDN博客_java k8s 内存溢出不同,监控上很明显是jvm的内存溢出。原创 2022-04-28 11:50:47 · 8152 阅读 · 0 评论 -
架构(三)分布式事务seata使用
微服务的环境下,数据库隔离,数据不一致的情况越来越多,要么建立补偿机制要么手动刷数据. 这时候就需要分布式事务,有问题上下游一起回滚,但是数据的可见性、链路时长还有其他很多原因说明链路不适宜拉的过长。原创 2022-04-25 10:45:39 · 15983 阅读 · 0 评论 -
生产问题(二)MongoDb链接失效
线上MongoDB出现了如下图所示的报错,服务端链接失败,查询资料得知Linux会销毁服务器上五分钟未使用的Socket通信链接。原创 2022-04-19 10:03:11 · 20731 阅读 · 0 评论 -
架构(二)Spring异步发布监听的使用
开发过程中一般使用mq进行功能解耦,但是当主业务上开启许多分支功能,不可能为每一个分支功能开启各自的mq,因此使用Spring的ApplicationEventPublisher进行发布监听。同时大多数情况下分支功能与主业务需要解耦,因此发布的事件需要异步处理。原创 2022-04-18 10:13:21 · 25125 阅读 · 0 评论 -
架构(一)Mybatis之通用Mapper动态表名及其原理
单表增删改查的重复书写相当冗余,目前为了避免这样的冗余我们会使用通用mapper,但是当遇到表名动态变化的时候,比如按年、月、天分表就需要写常规的增删改查sql,这时候就会失去通用mapper单表不用写sql的优势。此时可以使用通用Mapper动态拦截器操作表名。原创 2022-04-15 10:14:55 · 56006 阅读 · 0 评论 -
开源工具(一)Redis事务回滚
github地址:GitHub - SongTing0711/redis-transaction 开发过程中redis与db的数据不一致经常令人头痛,因为在Mysql遇到异常回滚之后redis不会变化,对业务功能产生影响,本文基于AOP和栈开发redis的事务回滚机制,保证数据一致性!原创 2022-04-14 10:02:17 · 13693 阅读 · 0 评论 -
Redis分布式代理锁的两种实现
基于Redission通过两种方式实现代理分布式锁:1、ThreadLocal线程缓存 + AOP切面2、AOP切面 + 入参固定原创 2022-04-12 18:10:06 · 25145 阅读 · 0 评论