java 本地 持久化队列_GitHub - cheeseleng/cockburst: 一个高性能,可靠,异步的本地持久化队列实现;重启JVM、重启服务器、或者强制KILL进程时,队列里的数据不丢失...

cockburst

一个高性能,可靠,异步的本地持久化队列;可以做到重启JVM、重启服务器、或者强制KILL进程时,队列里的数据不丢失,下次启动应用时,仍可以继续消费;当然,天有不测风云,在机器由于不可抗拒的原因---例如断电,地震,机房着火,网管跑路,也是会有丢数据的风险的;

背景

很多时候,我们都会通过blockqueue来提高系统的吞吐量,解耦流程---也就是生产者,消费者模式;但因为blockqueue是非持久化的,一旦应用重新部署或者重启,队列中还有未消费完的数据,数据就没了;老王说“不能让贫穷限制了我们的想象”,这句话还是非常靠谱的,所以我们就写了这么个玩意,“cockburst” 即可以在保证性能情况下又可以解决在服务器重启时数据丢失的问题;原理就是---通过MMAP读写文件时,JAVA进程直接建立起某一段虚拟地址空间和文件对象的关联映射关系,实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,对文件的读写就像在内存中读写一样。这样就算应用抽风DOWN掉或者重启,操作系统依然会帮你把数据force到磁盘上;

队列设计

小时候最害怕两样东西,一个警察,一个是大灰狼;那时候就祈愿发誓,长大了一定要成为至少两样中的一样,结果哪样都没成;想事情不能太极端,程序设计也一样;队列读写性能和数据的完整性和安全性都要兼顾,不能捡了这个扔那个;队列的实现比较简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值