高性能持久消息

总览

尽管有许多可用于Java的高性能消息传递系统,但大多数都避免引用基准,包括持久消息传递和消息的序列化/反序列化。 这样做有很多原因。 1)您并不总是需要或想要持久消息2)您希望使用自己的序列化选项。 避免使用它们的一个重要原因是,这两种方法都会使消息传递速度降低多达10倍,看起来并不那么好。 大多数消息传递基准测试都会突出显示传递原始字节而没有持久性的性能,因为这提供了最高的数字。 有些还引用了持久消息编号,但是这些编号通常要慢得多。

如果您需要高效地对实际数据进行序列化和反序列化,并且即使您已学会了不使用这些数据,也想记录和重播消息该怎么办。

更高的性能序列化和耐用性

我已经写了一个库,试图解决更多的问题,正如我所看到的,以便为您提供更好的整体解决方案。 它不是可用的最快消息传递,但是它是持久的,并且包括序列化和反序列化时间。 正如我已经指出的那样,这可能比传输序列化数据的成本高10倍,因此在实际应用中,该解决方案可以更快。

示例:发送价格

在此测试InProcessChronicleTest .testPricePublishing()中,我发送价格事件,该事件包括一个较长的时间戳,一个符号,一个出价价格/数量和要价/数量。 写入数据的时间为0.4 µS(0.0004毫秒),通过TCP连接接收数据的时间为1.8 µS。

注意:此连接在两端都是持久的,因此您可以查看哪些数据已排队发送和已接收。 如果连接丢失,即使服务器不可用(例如,重新启动客户端),它也可以从原来的位置继续播放,或者可以选择播放客户端已经收到的任何消息。

为了发送和接收500万条消息,我使用了-Xmx32m -verbosegc标志,该标志表明只需要很少的堆,并且在此测试过程中没有发生任何GC。 这意味着该库对您的其余应用程序影响很小。

与外部化对象进行比较。

为了说明这一点,我将其与在InProcessChronicleTest中序列化和反序列化包含相同数据的对象所需的时间进行了比较。 testSerializationPerformance()。 PriceUpdate对象是可外部化的,并且该基准测试 “比较JVM平台上序列化库的各个方面”表明,可外部化对象可以是可用的最快序列化之一。 在同一台计算机上花费的时间是2.7 µS进行序列化和7.5 µS进行反序列化。 注意:这不包括消息传递或持久性,仅用于序列化和反序列化。

序列化 运输 写作时间 时间阅读
Java纪事 TCP和持久性 0.4微秒 1.8微秒
可外部化 没有 2.7微秒 7.5微秒
可序列化 没有 3.8微秒 13.2微秒

结论

在对消息传递进行基准测试时,您应该包括发送和接收真实消息所花费的时间,而不仅是byte [],还包括持久性(如果需要)。

参考:我们的JCG合作伙伴 Peter Lawrey在Vanilla Java博客上的高性能持久消息 。

翻译自: https://www.javacodegeeks.com/2013/02/high-performance-durable-messaging.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python去掉重复内容并按原来次序输出元素_在Python中,从列表中删除重复项以使所有元素在保留顺序时都是唯一的最快的算法是什么?...

饮歌长啸使用方法:lst [8, 8, 9, 9, 7, 15, 15, 2, 20, 13, 2, 24, 6, 11, 7, 12, 4, 10, 18, 13, 23, 11, 3, 11, 12, 10, 4, 5, 4, 22, 6, 3, 19, 14, 21, 11, 1, 5, 14, 8, 0, 1, 16, 5, 10, 13, 17, 1, 16, 17, 12, 6, 10, 0, 3, 9, 9, 3, 7, 7, 6, 6, 7, 5, 1…

Lucene –快速添加索引和搜索功能

什么是Lucene? Apache LuceneTM是完全用Java编写的高性能,功能齐全的文本搜索引擎库。 它是一项适用于几乎所有需要全文搜索的应用程序的技术,尤其是跨平台的应用程序。 Lucene可以纯文本,整数,索引PDF,Of…

td 双击 编辑 php,双击表格td进行编辑

$(function(){//隔行换色// $("tbody tr:odd").css("background-color","#eee");var numId $(".tbody td");numId.dblclick(function(){var tdIns $(this);var tdpar $(this).parents("tr");//tdpar.remove();//current_…

前端开发之基础知识-HTML(一)

1.1 html概述和基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言,这种语言由一个个的标签组成,用…

nodejs的async异步编程

函数有: series waterfall parallel parallelLimit … series函数 串行执行 它的作用就是按照顺序一次执行。 async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { conso…

《深入理解Java虚拟机》读书笔记3--垃圾回收算法

转载:http://blog.csdn.net/tjiyu/article/details/53983064 下面先来了解Java虚拟机垃圾回收的几种常见算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法、火车算法,介绍它们的算法思路,有什么优点和缺点,…

python常用函数中文_【python】python常用函数

urlencode与urldecode当url中包含中文或者参数包含中文,需要对中文或者特殊字符(/、&)做编码转换。urlencode的本质:把字符串转为gbk编码,再把\x替换成%。如果终端是utf8编码的,需要把结果再转成utf8输出,否则会乱…

带有批注的Spring硒测试

这篇文章描述了如何在Java中实现Selenium测试。 它的灵感来自Alex Collins的帖子,并带有注释。 该代码可在GitHub的Spring-Selenium-Test目录中找到。 一些替代方法和更轻巧的技术可用于对Spring MVC应用程序进行单元测试。 要进行单元测试服务,请参见此…

sizeof运算符

sizeof是一个单目运算符&#xff0c;它的运算对象是变量或数据类型&#xff0c;运算结果为一个整数。运算的一般形式如下: sizeof(<类型或变量名>) 它只针对数据类型&#xff0c;而不针对变量&#xff01; 若运算对象为变量&#xff0c;则所求的结果是这个变量占用的内存…

oracle 日志切换太频繁,诊断一次Oracle日志切换频繁的问题

日志切换&#xff0c;就是生成的日志太大&#xff0c;数据块的变化太频繁。Snap IdSnap TimeSessionsCursors/SessionBegin Snap:1456009-Dec-15 04:00:48594.5End Snap:1456109-Dec-15 05:00:59544.6Elapsed:60.19 (mins)DB Time:82.47 (mins)1s产生2M的日志。Per SecondPer T…

Flex布局(一)flex-direction

采用Flex布局的元素&#xff0c;被称为Flex容器(flex container)&#xff0c;简称"容器"。其所有子元素自动成为容器成员&#xff0c;成为Flex项目(Flex item)&#xff0c;简称"项目" Flex-direction调整主轴方向&#xff08;默认为水平方向&#xff09;包…

【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】...

原文地址&#xff1a;http://www.yxxrui.cn/article/179.shtml 未经许可请勿转载&#xff0c;如有疑问&#xff0c;请联系作者&#xff1a;yxxrui163.com 我遇到的问题&#xff1a;公司的网络没有固定的公网IP地址&#xff0c;但是需要能够保证的是&#xff0c;每次动态分配的I…

Java管理扩展

什么是JMX&#xff1f; Java管理扩展&#xff08;JMX&#xff09;是一种API&#xff0c;用于管理或监视各种资源&#xff0c;例如应用程序&#xff0c;设备&#xff0c;服务&#xff0c;当然还有JVM。 通过Java社区流程&#xff08;JCP&#xff09;开发&#xff0c;JMX技术被构…

登录网页后要弹出一个新标签_连永久链接都不会,还做什么新媒体?

上次给主编大大发的预览链接失效了&#xff0c;被骂得狗血淋头。大部分运营人可能都遇到过这种情况&#xff0c;忽视了预览生成的链接只是临时的&#xff0c;在12小时后或超过500阅读量后就会失效。一个疏忽&#xff0c;给自己带来了不必要的麻烦&#xff0c;耽误工作&#xff…

混频通信的matlab仿真,基于MATLAB的扩频通信系统仿真研究—上海交通大学

基于MATLAB 的扩频通信系统仿真研究范伟 翟传润 战兴群(上海交通大学电子信息与电气工程学院&#xff0c;200030&#xff0c;上海)摘要 本文阐述了扩展频谱通信技术的理论基础和实现方法&#xff0c;利用MATLAB 提供的可视化工具Simulink 建立了扩频通信系统仿真模型&#xff0…

static_cast与dynamic_cast转换

static_cast与dynamic_cast转换   一 C语言中存在着两种类型转换&#xff1a; 隐式转换和显式转换 隐式转换&#xff1a;不同数据类型之间赋值和运算&#xff0c;函数调用传递参数……编译器完成 char ch;int i ch; 显示转换&#xff1a;在类型前增加 &#xff1a;&#xff…

vue使用iview Timeline 时间轴不显示问题

vue Timeline 时间轴不显示渲染的效果 官网代码 <Timeline pending><TimelineItem>发布1.0版本</TimelineItem><TimelineItem>发布2.0版本</TimelineItem><TimelineItem>发布3.0版本</TimelineItem><TimelineItem><a href…

python 重置索引_python pandas 对series和dataframe的重置索引reindex方法

reindex更多的不是修改pandas对象的索引&#xff0c;而只是修改索引的顺序&#xff0c;如果修改的索引不存在就会使用默认的None代替此行。且不会修改原数组&#xff0c;要修改需要使用赋值语句。series.reindex()import pandas as pdimport numpy as npobj pd.Series(range(4…

Java EE 6 Web配置文件。 在云上。 简单。

Java SE还可以。 Java EE是邪恶的。 这就是我一直想的。 好吧&#xff0c;现在不再了。 让我分享我的经验。 几周前&#xff0c;我开始考虑将旧版spring hibernate tomcat应用程序移植到新平台上&#xff1a; SAP NetWeaver云 。 我知道您在极客那里的想法&#xff1a;…

Kubernetes核心概念总结

1、基础架构 1.1 Master Master节点上面主要由四个模块组成&#xff1a;APIServer、scheduler、controller manager、etcd。 APIServer。APIServer负责对外提供RESTful的Kubernetes API服务&#xff0c;它是系统管理指令的统一入口&#xff0c;任何对资源进行增删改查的操作都要…