解决类加载冲突和pandora

解决类加载冲突和pandora

项目开发中,我们会引入框架、工具类、SDK等依赖,这些依赖的包也会有依赖,层层嵌套。一个比较关键的问题是,如果不同依赖,都引用相同的一个底层依赖,但是是不同版本,就会出现引用冲突。

如下图,一个项目引入了Diamond 2.3.4HSF 1.2.3FastJson 1.2.0共3个组件。Diamond组件引入FastJson 1.1.0,HSF组件引入FastJson 1.0.0。当我们使用com.alibaba.fastjson.JSON.toJSONString(data)方法的时候,到底调用的是FastJson 1.0.0的方法、FastJson 1.1.0的方法,还是FastJson 1.2.0的方法呢?

import_confict.png

阅读更多
kafka分层时间轮实战和分析

kafka分层时间轮实战和分析

之前分析了定时任务的数据结构演进,其中终极方案就是kafka的分层时间轮。现在实际编写一下kakfa的分层时间轮,并分析数据。

代码说明

代码部分,直接按kafka 0.11.0版本进行编写,给关键语句都加了自己的注释。

java scala
Poller kafka.utils.timer.TimerTest
SystemTimer kafka.utils.timer.SystemTimer(Timer里)
Timer kafka.utils.timer.Timer(trait Timer)
TimerTask kafka.utils.timer.TimerTask(trait TimerTask)
TimerTaskEntry kafka.utils.timer.TimerTaskEntry(TimerTaskList里)
TimerTaskList kafka.utils.timer.TimerTaskList
TimingWheel kafka.utils.timer.TimingWheel
阅读更多
定时任务演进和schedulerx

定时任务演进和schedulerx

在很多业务场景下,都需要定时任务,比如”定时推送消息”、”定时计算报表”、”定时清理数据”等等。通常业务都是集群化的,定时任务通常不能每个机器单机执行,需要有个分布式协调器感知到集群,然后选中1台机器执行,所以出现了很多定时任务平台帮助处理定时任务。

定时任务有个核心的问题:如何知道时间到了?

阅读更多
二级缓存设计

二级缓存设计

本文根据阿里开源的JetCache和大佬同事用kotlin写的MutilCacheManager两个框架,来分析二级缓存应该如何设计。

我们一般的缓存有2种用法:

  1. 纯缓存。例如预算加减、分布式锁、配置信息。
  2. 多级缓存+数据库/外部接口调用。一般一级或者二级就够用了。

二级缓存通常是指:为了获取查询耗时较长的数据,以本地缓存+远程统一存储缓存,构建的两个层级的缓存。

multi_level_cache.png

阅读更多
Skywalking原理分析