微云 linux_编年史与微云

微云 linux

总览

我面临的一个常见问题是: 如果是单个作者,多个读者,如何缩放基于Chronicle的系统。 尽管有解决此问题的方法,但很有可能根本不会有问题。

微云

这是我用来描述单个线程来完成当前由多个服务器完成的工作的术语。 (或与将单个应用程序部署到多台计算机的趋势相反)

假设扩展系统的唯一方法是分区或具有多个副本。 除非您同时拥有多个系统,否则这种扩展并不总是那么好。 所有这些都增加了系统开发,部署和维护的复杂性。 我看到的一个常见问题是,开发人员不再能够在其工作站或单元/功能测试中测试端到端系统

基于编年史的处理引擎具有不同的方法。 它们通常旨在处理您所能承受的最大负载。 即瓶颈在其他地方,例如与外部系统,网关和数据库的接触点。 基于Chronicle的处理引擎每秒可以处理100,000至1,000,000入站和出站事件,延迟介于1到10微秒之间。 这比网关可以向引擎输入/输出数据的速率高得多,因此从来没有一个很好的分区用例。 这是一个选择,但您不应该认为这是您需要的选择。

这样做的好处是您拥有一个确定性系统,该系统在体系结构上非常简单。 该系统具有确定性,因为您记录了每个入站和出站消息,这些记录可能具有微秒级的计时,并且系统的行为是完全可复制的(并且可重新启动的)。 注意:其后果之一是,仅重新启动失败的服务将无济于事。 如果基于特定消息的特定方式失败一次,则每次重新启动时都应以完全相同的方式失败。 这使得重现问题和测试变得更加容易。

为什么这么快?

一个线程中的一个单线程处理引擎具有

  • 无锁
  • 没有TCP延迟
  • 可以锁定到内核或CPU,以改善缓存行为。
    也就是说,它永远不会上下文切换或放弃CPU。
  • 可重用的可变对象更加实用,因此您可以避免用垃圾搅乱缓存,从而使内存访问速度提高5倍。 (有了奖金,您将不再具有GC暂停)

避免产生垃圾的真正原因

大多数Java应用程序中的一个常见问题是GC暂停时间。 您通常希望将其最小化。 我主张减少产生的垃圾,但是我不担心GC暂停,因为我还没有编写一个可以在交易四年后暂停的系统。 我通过使Eden大小大于一天中产生的垃圾量来做到这一点,并在维护窗口中进行System.gc()处理(视情况在深夜或周末)。 在低延迟的应用程序中避免垃圾的主要原因是创建垃圾会导致缓存的滚动或刷新。 如果您有一个系统(套接字上的所有JVM)产生200 MB / s的垃圾,并且有20 MB的L3高速缓存,则您每隔0.1秒就会有效地用垃圾填充高速缓存。 对L3高速缓存的内存访问可以比对主内存的访问快5倍。

注意: L3缓存在套接字的所有内核之间共享,因此,如果要在所有内核上实现可伸缩性,则要使用L1缓存(通常为32 KB),并且如果有繁忙的线程在创建32 MB / s的垃圾,这是每毫秒就会充满垃圾。

结论

因此,我开始使用术语“微云”。 即在一个线程中完成整个云的工作。 我有几个这样做的客户。 跨一个系统的许多JVM所做的工作只能通过一个非常快的线程来完成。 显然,在一个工作站上测试一个线程要容易得多,并且在生产中占用数据中心的机架空间要少得多。

参考: Vanilla Java博客上的JCG合作伙伴 Peter Lawrey撰写的编年史和微云 。

翻译自: https://www.javacodegeeks.com/2013/02/chronicle-and-the-micro-cloud.html

微云 linux

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

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

相关文章

H3C 计算子网内可用主机地址数

转载于:https://www.cnblogs.com/fanweisheng/p/11153665.html

mysql中两次排序_MySQL中的两种排序方式: index和filesort

index :通过有序索引顺序扫描直接返回有序数据,不需要额外的排序,操作效率较高。filesort:通过对返回数据进行排序,filesort 并不代表通过磁盘文件排序,而是说明进行了一个排序操作,至于排序操作…

Java命令行界面(第2部分):args4j

在上一篇文章中 ,我研究了如何使用Apache Commons CLI在Java应用程序中解析命令行参数。 在本文中,我将使用另一个库args4j进行相同的操作。 args4j采用了一种不同于Commons CLI的方式来指定Java应用程序应期望的命令行参数。 尽管Commons CLI期望代表选…

mysql my.cnf在哪里_my.cnf配置文件在哪

my.cnf配置文件在linux上是位于路径“/etc/my.cnf”下,在window上则位于安装目录的根目录下;可以使用命令“mysql --help”查看关于MYSQL对应配置文件“my.cnf”搜索顺序。一般linux上都放在 /etc/my.cnf ,window 上安装都是默认可能按照上面的路径还是没…

深入学习Mybatis框架(二)- 进阶

1.动态SQL 1.1 什么是动态SQL&#xff1f; 动态SQL就是通过传入的参数不一样,可以组成不同结构的SQL语句。 这种可以根据参数的条件而改变SQL结构的SQL语句,我们称为动态SQL语句。使用动态SQL可以提高代码重用性。 1.2 XML方式的实现 1.2.1 需要使用到的标签 <if> 用于判…

近似线性依靠matlab_不要仅仅依靠单元测试

近似线性依靠matlab当您构建一个复杂的系统时&#xff0c;仅仅测试组件是不够的。 这很关键&#xff0c;但还不够。 想象一下一家汽车厂生产和进口最高质量的零件&#xff0c;但组装好汽车后再也没有启动发动机。 如果您的测试用例套件几乎不包含单元测试&#xff0c;那么您将永…

戏说 .NET GDI+系列学习教程(三、Graphics类的方法的总结)

转载于:https://www.cnblogs.com/WarBlog/p/11157395.html

从关系数据库到Elasticsearch的索引数据– 1

Elasticsearch提供强大的搜索功能&#xff0c;并支持数据的分片和复制。 因此&#xff0c;我们希望将数据库中可用的数据索引到Elasticsearch中。 有多种方法可以将数据索引到Elasticsearch中&#xff1a; 使用Logstash将源设置为DB&#xff0c;将接收器设置为Elasticsearch&…

mysql 求bit 某位为1_mysql按位的索引判断值是否为1

DELIMITER $$DROP FUNCTION IF EXISTS value_of_bit_index_is_true$$/*计算某个数字的某些索引的位的值是否都为1&#xff0c;索引类似1,2,3,4*/CREATE FUNCTION value_of_bit_index_is_true(number INT, idxies VARCHAR(50)) RETURNS INT(11)BEGIN/*将1,2,3,4,5,6这样的字符串…

python math.asin

import mathmath.asin(x) x : -1 到 1 之间的数值。如果 x 是大于 1&#xff0c;会产生一个错误。 #!/usr/bin/pythonimport math print "asin(0.64) : ", math.asin(0.64)print "asin(0) : ", math.asin(0)print "asin(-1) : ", math.asin(-1)p…

消息队列mysql redis那个好_Redis与RabbitMQ作为消息队列的比较

简要介绍RabbitMQRabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种&#xff0c;最初起源于金融系统&#xff0c;用于在分布式系统中存储转发消息&#xff0c;在易用性、扩展性、高可用性等方面表现不俗。消息中间件主要用于组件之间的解耦&#xff0c;消息的发送者无需…

mysql 添加远程连接_为 mysql 添加远程连接账户

1、以管理员身份登录mysqlmysql -u root -p2、选择mysql数据库use mysql3、创建用户并设定密码create user [email protected] identified by ‘123456‘4、使操作生效flush privileges5、使操作生效flush privileges6、用新用户登录mysql -u test -p允许用户从远程访问数据库的…

包装类型与包装类别_包装的重要性

包装类型与包装类别我记得大约15年前开始学习Java的时候。 我读到了很多有关“包装”和“命名空间”的东西&#xff0c;但我完全不了解。 可悲的是&#xff1a;虽然包装的某些方面几乎为行业中的每个人所了解&#xff0c;但其他方面却不是。 因此&#xff0c;让我们看一下哪些软…

isinstance和issubclass

目录 一、isinstance与type二、issubclass一、isinstance与type 在游戏项目中&#xff0c;我们会在每个接口验证客户端传过来的参数类型&#xff0c;如果验证不通过&#xff0c;返回给客户端“参数错误”错误码。 这样做不但便于调试&#xff0c;而且增加健壮性。因为客户端是可…

animation动画不生效_你可能不知道的Animation动画技巧与细节

引言在 web 应用中&#xff0c;前端同学在实现动画效果时往往常用的几种方案&#xff1a;css3 transition / animation - 实现过渡动画setInterval / setTimeout - 通过设置一个间隔时间来不断的改变图像的位置requestAnimationFrame - 通过一个回调函数来改变图像位置&#xf…

eclipse查看jar包源代码

方法一&#xff1a;将jd-gui集成在Eclipse中 https://jingyan.baidu.com/article/b24f6c8275536686bfe5daed.html 下载2个反编译文件&#xff0c;实际操作未解决 https://www.cnblogs.com/jianshuai520/p/9267273.html 反编译器的位置&#xff0c;发生改变 方法二&#xf…

微服务系列:MicroProfile和Apache TomEE

介绍 MicroProfile是一项由知名供应商于2016年9月发起的举措&#xff0c;目的是基于JEE平台构建微服务架构。 任务是针对微服务架构优化Enterprise Java 。 开发人员可以利用这种体系结构&#xff0c;通过Enterprise Java平台以标准化的方式构建和开发微服务应用程序。 API构建…

crash recovery mysql_InnoDB crash recovery 完整过程

mysql Innodb在发生意外宕机&#xff0c;重启之后&#xff0c;要经历哪些过程&#xff0c;以下是详细过程。• Tablespace discoveryTablespace discovery is the process that InnoDB uses to identify tablespaces that require redo log application. See Tablespace Discov…

Java –远景JDK 8

世界正在缓慢但肯定地发生变化。 在进行了更改之后&#xff0c;使Java有了JDK 7的全新外观&#xff0c;Java社区期待JDK 8以及JDK 9附带的其余改进。 JDK 8的目标目的是填补JDK 7实施中的空白-该实施中剩下的部分难题&#xff0c;应该在2013年底之前为广大读者所用&#xff0c…

python三大结构、顺序结构_Python学习笔记3——三大结构:顺序,分支,循环3

顺序自上而下&#xff0c;依次执行分支分支的基本语法if 条件表达式&#xff1a;语句1语句2语句3......条件表达式就是计算结果必须为布尔值的表达式表达式后面的冒号不能少注意if后面的出现的语句&#xff0c;如果属于if语句块&#xff0c;则必须同一个锁紧等级条件表达式结果…