分享一种集群生成日志唯一编号的方法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 分享一种集群生成日志唯一编号的方法

产生背景


随着业务体量的增大,以及对系统高可用的要求,集群部署是现在非常常见的部署方式,这个时候需要保证记录日志的编号是唯一的.


核心代码

public static final int nextValue(){
   ATOMIC_INTEGER.compareAndSet(1000000, 100000);
       return ATOMIC_INTEGER.getAndIncrement();
   }
public static final String get() {
   return String.valueOf(System.currentTimeMillis()) + App.ID + nextValue();
}

代码分析


ATOMIC_INTEGER 是线程安全的类,调用getAndIncrement 方法来实现线程安全的自增长,其底层用的是 CAS自旋锁来保证线程安全. 但是只有这一句代码是不够的,如果服务器不重启的话,那么他会一直自增下去,导致超出范围使程序报错,所以我们需要调用 compareAndSet 方法 设置一个自增的最大值,如果超过该最大值,则从指定的数值开始.


如果是单台机器的话,已经没有问题了,但是如果是多台机器,还是有可能会出现相同的编号的,我们可以给每台机器去单独制定一个id,这样就能保证编号是唯一的了.


最终生成日志的算法变为 时间戳 + appid + 自增值,这样就可以保证唯一了.


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
27天前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
28天前
|
消息中间件 Kubernetes API
在K8S中,如何收集k8s集群日志?
在K8S中,如何收集k8s集群日志?
|
1月前
|
数据可视化 应用服务中间件 Apache
优化集中式日志记录的方法:添加 Logstash 过滤器
优化集中式日志记录的方法:添加 Logstash 过滤器
19 1
|
27天前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
|
2月前
|
监控
查看服务器/IIS日志、log、访问信息基本方法
除了手动查看,你也可以使用日志分析工具,如Log Parser、AWStats等,这些工具可以帮助你更方便地分析日志数据。
276 1
|
1月前
|
Java API 开发工具
日志记录当前类和当前方法
公司原有日志记录需手动输入类名与方法名,繁琐且易错。目标是开发工具类简化此过程。调研发现`Thread.currentThread().getStackTrace()`可获取调用栈信息,0号索引为该方法自身。在被调用的方法内,可通过访问1号索引获取所在类及方法名。为此,创建`CurClassAndMethodUtil`工具类,其`getCurClazzAndMethod`方法返回调用者的类名与方法名,解决手动输入问题。实际应用中,因多一层工具方法调用,需访问2号索引。最终实现自动化获取记录信息,提高效率。
|
2月前
|
Kubernetes 关系型数据库 流计算
实时计算 Flink版产品使用问题之如何解决Flink集群在nativeKubernetes部署方式下日志无法映射到宿主机并容易丢失的问题
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
支付系统34----支付成功异步通知,处理重复通知,我们在我们程序当中找到处理订单的processOrder方法,我们要在更新订单状态和记录日志之前,先处理重复通知
支付系统34----支付成功异步通知,处理重复通知,我们在我们程序当中找到处理订单的processOrder方法,我们要在更新订单状态和记录日志之前,先处理重复通知
|
3月前
|
数据库 监控 关系型数据库
|
3月前
|
设计模式 Java 关系型数据库
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息
Spring的配置文件,如何配置端口号,,properties,yml获取配置项等方法,外观模式及其优缺点,日志代表的信息