高性能持久消息

總覽

盡管有許多可用于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.pswp.cn/news/370266.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370266.shtml
英文地址,請注明出處:http://en.pswp.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;任何對資源進行增刪改查的操作都要…