多线程读日志文件程序热备设计

2024-03-18 12:32

本文主要是介绍多线程读日志文件程序热备设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个程序设计场景主要设计三个问题

1多线程共享日志文件资源的设计实现

2为了调高安全性能,进行的热备实现

3读取日志的速度快于写入日志的速度,这样会导致读不到内容,需要对程序进行优化,考虑这种情况的发生。


1.有两种方式实现共享资源的访问synchronize和重入锁reentrantlock

Reentrantlock提供了更灵活的锁机制,有竞争锁等。但是很容易使用不当出问题,比如

try语句里lock,再finally里要解锁。

synchronize是jvm底层进行所的调度。

我是使用了reentrantlck进行资源的同步,一个线程在进行对文件的读取时,先把资源锁住,读取完一行在进行解锁。

这样就可以实现共享文件资源的同步问题。


2.热备的实现是使用一个单独的线程定时检测状态来实现的,具体就是

每一行的日志文件有一列是cdn号,它是上游程序在写日志的时候递增的,

读日志程序在每次读取完一条记录时候,往数据库更新一条记录。

热备的实现是在上述的基础上实现的,部署两套一样的程序,它们共享同一个数据库表记录

备份程序有一个单独的监控线程,定时的读取数据库的这个表记录看有没有更新,根据业务当发现10分钟没有更新时,

备份程序获得目标文件的读取位置,开始继续读取日志,把数据库表的对应字段变为备份程序表示,主程序sleep。

当主程序可以继续工作后,备份程序sleep。



3.读和写速度跟不上时候的设计

日志的结构大致是这样的


读取完日志,其中有文件号和key值,通过他们可以去磁盘上去读到这个数据的详细报文。

有可能会有读日志文件程序读到了key值,去磁盘上取数据的时候,磁盘还没有写完这条数据,

这种情况的解决是同过一个延迟队列处理的,读取磁盘的结果为空时,把日志的这条记录发送到一个消息中间件q中,

等过3s中再次从q中取出报文,从磁盘load数据。

这篇关于多线程读日志文件程序热备设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822338

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c