it编年史

总览

我正在看Typesafe的Rolan Kuhn在介绍React流方面的精彩演讲,乍一看似乎与《纪事报》有一些相似的目标,但是当您深入研究细节时,很明显我有一些关键的假设根本不同。

关键假设

《纪事》设计的主要假设是
  • 低延迟是您的问题,而不是吞吐量。 数据来自微突发,您希望在下一次微突发活动之前尽快处理。
  • 如果您忙碌,则不能暂停交流/制作人。 (或暂停最终用户不是一种选择)
  • 您的信息具有很高的价值,详细记录每个事件的时间非常有价值。 记录所有事件是了解微爆的关键。
  • 您希望能够检查过去发生的任何事件。

低延迟至关重要

纪事报旨在帮助您解决的关键问题是一致的低延迟。 它假设如果延迟足够低,那么吞吐量就不会有问题。 许多基于Web的系统都是为吞吐量而设计的,只要最终用户看不到延迟,延迟就不会成为问题。 对于软实时系统,大多数时候您都需要低延迟,而最坏情况下的延迟则要适中,这要比人类看到的要快得多。

你无法阻止世界

另一个关键假设是流量控制不是一种选择。 如果您运行缓慢,则无法对交易所及其所有用户说,请等我一会儿再等。 这意味着生产者永远不会被消费者放慢脚步。
降低生产者速度实际上与增加延迟时间相同,但是此延迟时间很容易隐藏。 如果您等到生产者为事件加上时间戳记,这会使您的延迟看起来更好。 如果您想采取更现实的措施,则应使用时间戳记,事件应该由生产者发送 ,并且不会延迟。

您需要记录所有内容以便重播

重放对于在一定条件下测试应用程序很有用。 例如,您可以更改您的应用程序,不仅可以看到它的行为正确,而且可以及时运行。 对于定量分析,他们将需要一组数据来调整其策略。

实时重播旧事件。

您可以记住它的索引,而不用复制事件的副本,而稍后可以参考该事件,您可以稍后重播该事件。 这样可以节省堆中的内存,或仅在情况下复制数据。

微爆发对于理解系统至关重要。

一些系统的性能以每天的交易为特征。 这意味着,如果在前23个小时内没有完成任何事务,而所有事务都在最后一个小时内完成,那么您仍将每天执行这么多事务。 经常引用每天的交易是因为它的数量更高,但就我而言,整天简化工作量听起来很奢侈。
某些系统可能以每秒的事务数为特征。 这可能意味着这些事务可以在一秒钟内开始并完成,但并非总是如此。 如果您有1000笔交易,并且每毫秒进行一次交易,那么您将获得均匀的响应时间。 我发现更有趣的是一天中最忙的一秒钟的交易数量。 这样可以指示系统应该能够处理的流速。

检查微脉冲

考虑一个系统,该系统在相同的100微秒内获得30个事件,而这些突发相距100毫秒。 这看起来可能是每秒(30 / 0.1)300个事务,这听起来相对容易,如果我们需要做的只是跟上进度,但是如果我们希望尽快做出响应,则短期/突发吞吐量为100中的30微秒或每秒300,000个事件。
换句话说,要尽可能快地处理微脉冲,您将需要一个系统,该系统可以处理的吞吐量比您在几秒钟,几分钟或一天内预期的吞吐量高出多个数量级。 理想情况下,系统的吞吐量将是一天中最忙的一秒钟的100倍。 在不减慢对这些数据突发的处理速度的情况下,每秒处理最繁忙的10毫秒所需的时间。

编年史如何改善微爆的处理

低垃圾率

最小化垃圾是避免GC暂停的关键。 为了有效地使用L1和L2高速缓存,您需要保持非常低的垃圾率。 如果您没有有效地使用这些缓存,则您的应用程序速度可能会慢2-5倍。
Chronicle中的垃圾非常低,您可以处理一百万个事件,而无需jstat检测到您创建了任何垃圾。 jstat仅在分配了新的TLAB时显示4 KB的倍数。 编年史确实会产生垃圾,但是它非常低。 即每百万个事件进程几个对象。
一旦将GC暂停设置为可管理或不存在,您就开始看到系统中的其他延迟源。 拿走巨石,您开始看到岩石。 拿走岩石,您开始看到鹅卵石。

支持全部写入模型。

众所周知,如果保持DEBUG级别登录,则可能会严重降低应用程序的速度。 在记录您以后可能想要知道的一切与对您的应用程序的影响之间存在紧张关系。
编年史设计得足够快,您可以记录所有内容。 如果替换系统中的队列和IPC连接,则可以提高性能,并且可以免费甚至更好地“记录所有内容”。
能够记录所有内容意味着您可以在系统的每个阶段添加跟踪时间,然后监视系统,还可以深入了解系统中最糟糕的1%延迟。 这不是您可以使用剖析器为您提供平均值的方法。
通过编年史,您可以回答以下问题: 系统的哪些部分负责一天中最慢的20个事件?

记事本与操作系统的交互最少。

系统调用速度很慢,如果可以避免调用操作系统,则可以节省大量的延迟。
例如,如果在回送时通过TCP发送消息,则在写入和读取数据之间可能会增加10微秒的延迟。 您可以写入编年史,这是对内存的简单写操作,也可以从编年史中读取,这也是从内存中读取的内容,延迟为0.2微秒。 (正如我之前提到的,您也会获得持久性)

无需担心堆满。

无限制队列的常见问题,这使用了一个开放式堆。
Chronicle通过不使用堆来存储数据,而是使用内存映射文件来解决此问题。 通过使数据更紧凑,可以提高内存利用率,但也意味着1 GB的JVM一天可以流处理1 TB的数据,而不必担心堆或您拥有多少主内存。 在这种情况下,无界队列变得更易于管理。

结论

通过基于不同的假设,Chronicle解决了其他解决方案可以避免的问题,例如对流控制或使用消息(删除已处理消息)的需求。
Chronicle旨在更有效地利用您的硬件,因此您不需要说30个服务器的云即可每秒处理大约一百万个事件(如许多基于云的解决方案所声称的那样),您可以与开发人员联系以达到此事件率笔记本电脑。

翻译自: https://www.javacodegeeks.com/2014/05/chronicle-and-low-latency-in-java.html

it编年史

it编年史_Java的编年史和低延迟相关推荐

  1. 程序语言编年史_Java的编年史和低延迟

    程序语言编年史 总览 我正在观看Typesafe的Rolan Kuhn在介绍React流方面的精彩演讲,乍一看似乎与<纪事报>有一些相似的目标,但是当您深入研究细节时,我很清楚有一些关键假 ...

  2. Java的编年史和低延迟

    总览 我正在看Typesafe的Rolan Kuhn在介绍反应流方面的出色演讲,乍一看似乎与<纪事报>有一些相似的目标,但是当您深入研究细节时,对我来说显然有一些关键假设是根本不同. 关键 ...

  3. lambda 延迟执行_Java Lambdas和低延迟

    lambda 延迟执行 总览 有关在Java和低延迟中使用Lambda的主要问题是: 他们会产生垃圾吗,您能做些什么吗? 背景 我正在开发一个支持不同有线协议的库. 这个想法是,您可以描述要写入/读取 ...

  4. java fix_Java中的低延迟FIX引擎

    java fix 总览 Chronicle FIX是我们的Low Latency FIX引擎和Java数据库. 是什么使它与众不同? 是为Java中的超低GC *设计的. 支持字符串和日期时间的方式可 ...

  5. java低延迟_像Java这样的C ++具有低延迟

    java低延迟 总览 以前,我写过一篇有关Java之类的C的文章. 这是我以前遇到的术语. 但是,经过思考,我认为像Java这样的C ++是一个更好的术语,因为您仍在使用OOP惯例(不是C惯例),但是 ...

  6. Java中的低延迟FIX引擎

    总览 Chronicle FIX是我们的Low Latency FIX引擎和Java数据库. 是什么使它与众不同? 是为Java中的超低GC *设计的. 支持字符串和日期时间的方式可以最大程度地减少垃 ...

  7. 像Java这样的C ++具有低延迟

    总览 以前,我写过一篇有关Java之类的C的文章. 这是我以前遇到的术语. 但是,经过思考,我认为像Java这样的C ++是一个更好的术语,因为您仍在使用OOP做法(不是C风格的),但是您需要自己进行 ...

  8. 将深度学习低延迟推理性能提高一倍

    将深度学习低延迟推理性能提高一倍 JetPack 3.1 Doubles Jetson's Low-Latency Inference Performance NVIDIA发布了JetPack 3.1 ...

  9. Jdk11,Jdk12的低延迟垃圾收集器ZGC

    https://wiki.openjdk.java.net/display/zgc/Main Z垃圾收集器,也称为ZGC,是一种可扩展的低延迟垃圾收集器,旨在实现以下目标: 暂停时间不超过10毫秒 暂 ...

最新文章

  1. java 过滤器Filter
  2. 在Ubuntu 14.04 64bit上安装Markdown和绘图软件Haroopad
  3. Struts2学习小结
  4. 华北赛区,我们来啦!
  5. Bellman_Ford算法
  6. Knative Serverless 之道:如何 0 运维、低成本实现应用托管?
  7. java创建activity视图_java-动态创建的视图id始终为null-findviewbyid不起作用
  8. leetcode542. 01 矩阵(bfs/dp)
  9. 访问权限修饰符( public,protected,default,private )的使用对象和作用域
  10. 机器学习基础(六十二)—— 白化
  11. 内容分发网络(CDN)关键技术、架构与应用(一)
  12. ​阿里云SAE助力百富旅行实现Serverless+微服务完美结合
  13. TCP/UDP调试工具
  14. JAVA中ResourceBundle使用详解
  15. steamcom启动服务:443端口被占用,请关闭占用该端口的进程后再点击启动服务!
  16. 已知两点和弧长lisp_CAD插件——已知两点和弧长如何画圆弧?
  17. 无向图的邻接矩阵平方的实际意义解释
  18. gwt - inherit module问题
  19. python可视化3d柱状图_「Python实现数据可视化」创建3D柱状图
  20. JDK8 源码包 外加注释

热门文章

  1. 【2018.3.24】模拟赛之五-ssl1864 得分【dp,贪心】
  2. ssl1127-方程的解数【HASH,dfs】
  3. Java多线程:线程安全和非线程安全的集合对象
  4. “老师,弃了吧,做个别的……”“笑话,都到这个份上了,怎么能弃掉呢?”...
  5. idea新建module 后 mapper老是说mapper和xml没有绑定
  6. 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...
  7. 服务器 ha linux,Linux 高可用(HA)集群之Heartbeat详解
  8. php打印 二维数组,PHP中遍历二维数组_以不同形式的输出操作实例
  9. php滚动公告源码,好用的滚动公告HTML代码
  10. date转timestamp格式_技术分享 | MySQL:timestamp 时区转换导致 CPU %sys 高的问题