事件驱动程序设计

总览

开发人员经常询问系统或其代码的性能或效率。 这到底是什么意思?

  • 我的代码是如此高效,只有编码神能理解它的工作原理。
  • 我的代码确实很聪明,但是却难以维护。 下一位开发人员将继续重写它。
  • 我的代码对机器确实很有效,但对开发人员却没有效率。
  • 我的代码很容易理解,这意味着开发人员会更高效,并且代码不仅足够快而且容易修复(如果没有的话)。

因此,与其问自己可以编写代码有多快以及可以放入多少技巧,不如问自己。 我能做得多么简单,而且仍然足够快?

简单的事件处理。

对我来说,最简单的事件处理是不返回任何内容的方法调用。 这很容易转换为异步消息传递,例如

public interface EventProcessor {void event(MyEventData data);void eventTwo(MyEventData2 data);
}

这非常简单,一个组件通过调用方法来生成事件,另一个组件通过提供实现来使用或处理该事件。

有多简单?

您可以使用一个按钮从调试器中的生产者组件升级到消费者组件。

与生产者(称为消费者)建立单元测试需要两行代码。

MyConsumer mc = new MyEventProcessor();
MyProducer mp = new MyProducer(mc);

您可以使用任何模拟工具模拟事件处理器,并检查生产者是否创建了您期望的事件。 您可以通过在单元测试中调用使用者上的方法来模拟生产者。

效果如何?

您可能会认为这几乎没有开销,一个组件只调用另一个。 但是,即使方法调用也有开销,这就是JIT支持内联的原因。 这可能意味着开销是名义上的,甚至比将这些方法一起优化时的开销要少(即,这可能比两种方法的总和要快得多)

我想念什么吗?

实际上确实有很多遗漏,但与业务需求无关;

  • 运输工具。
  • 监控
  • 序列化
  • 故障转移
  • 服务发现
  • 安全

这些是单独的问题,通常不是应用程序本质复杂性的一部分。

我可以使用哪种交通工具?

有很多选择,不可能知道将来所有情况下都适用。 因此,运输的选择(或缺乏运输)应为配置详细信息。 设计的唯一基本部分应该是,可以轻松更换运输装置,而不必触碰您的业务逻辑。

运输的一个例子?

低延迟,高吞吐量的解决方案是使用Chronicle Queue。 重复自己; 您只需要在合理的情况下使用它,否则就可以使用任何其他交通工具。

编年史队列做什么;

  • 保留每条消息的重播功能并检查错误修复。
  • 低延迟序列化,支持模式更改,并具有可读性以进行验证
  • 记录和监视。

最后一点很重要。 如果您已经坚持了组件要执行的每个动作以及每个状态都发生变化,则在正常操作中不需要任何其他日志记录。 任何下游组件都可以重新创建其感兴趣的状态,而无需接触产生该信息的组件。

编年史队列如何做到这一点?

编年史队列使用两个组件;

  • 实现您的界面的作家。 每个方法调用都会写入一条消息。
  • 一个读取器,调用您的接口的实现。 每个消息都调用相应的方法。

注意:这种策略几乎可以用于任何运输。 编年史队列为您提供的是低延迟记录或用于重播和替换日志的所有消息。

这一切表现如何?

如果您使用诸如YAML,Binary YAML或JSON之类的灵活序列化,并且您的组件没有做太多事情,那么您可以期望获得每秒100,000条消息的吞吐量,而无需进行大量调整。 如果使用较低级别的二进制协议,短消息和多个线程,则每秒可以获得超过1000万条消息。

您可以选择免费使用所有这些GC,但这会使您的设计复杂化,因此您很可能会创建一些垃圾,但是您可以选择根据需要减少垃圾。

其他值得注意的交通工具。

Aeron是一种基于UDP的低延迟传输。

Chronicle Queue Enterprise支持通过TCP进行复制和远程访问。

Chronicle Websocket Jetty支持通过websocket访问JSON,消息速率约为100K / s

结论

您应该开始设计和测试,着重于实际需要的关键组件。 您应该允许您的设计适用于任何运输方式,并可以选择用一种替代另一种。

在单元测试和调试中,不进行传输以表明组件仍可以以最小的复杂度运行是很有用的。

我们能帮你什么吗?

Chronicle Software在现场研讨会上运行了一个星期,我们会训练/指导您的团队使用这些设计方法来构建原型系统。 解决方案的选择取决于您,因此这可能是启动新项目并进行培训的好方法,这将立即有用。 有关更多详细信息,请联系sales@chronicle.software 。

翻译自: https://www.javacodegeeks.com/2016/03/simple-event-driven-design.html

事件驱动程序设计

事件驱动程序设计_简单的事件驱动设计相关推荐

  1. Java中事件驱动程序设计_【JAVA语言程序设计基础篇】--事件驱动程序设计--鼠标事件...

    点击文字 鼠标拖动 文字会随鼠标拖动 package chapter16; import java.awt.BorderLayout; import java.awt.Graphics; import ...

  2. java 事件驱动原理_浅谈事件驱动机制

    事件驱动机制是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积.在计算机编程.公共关系.经济活动等领域均有应 ...

  3. java大作业设计_Java程序设计_大作业.doc

    Java程序设计_大作业.doc Java程序设计_大作业 专业:计算机科学与技术专业 学号:1245713131 姓名: 2014年12月10日 目录 作业内容:2 1.IPublisherDao接 ...

  4. 简单的新闻发布网站设计模板_如何创建简单有效的设计模板

    简单的新闻发布网站设计模板 How to create simple and effective design template Today we are going to use jQuery mo ...

  5. 极端原理_为极端而设计

    极端原理 *You can also read this article in German here. *您也可以 在此处 阅读 德语文章 . In this article I'm going t ...

  6. c语言课程设计之简易计算器,简易计算器课程设计 帮忙写简单计算器课程设计...

    帮忙写简单计算器课程设计书繁华若真如一梦,过而无痕多好,人就不必失意,只当醉了一场,醒来仍过平淡的生活. 程序 #include #include //定义atlf函数 #include 简介下的 要 ...

  7. soul框架简单介绍与设计模式分析

    soul框架简单介绍与设计模式分析 1. 初识 1.1 查看官网文档了解 1.2. 目标: 2. 分析源码 2.1. 网关的实现原理 2.1.1. 跨域请求问题 2.1.2. 网关请求处理 2.1.3 ...

  8. “程序设计与算法训练”课程设计“二值图像数字水印技术的实践”

    数据结果课程设计(题目抄袭自某牛逼985高校). github项目地址(含报告等) 课程编号:0521733B                                              ...

  9. 简单算法的举例c语言,计算机科学与技术系C语言程序设计22简单算法举例.PPT

    计算机科学与技术系C语言程序设计22简单算法举例 第2章 程序的灵魂--算法 本章主要介绍算法的思想及算法的表示方法. 2.0 绪论 2.1 算法的概念 2.2 简单算法举例 2.3 算法的特性 2. ...

最新文章

  1. eclipse中测试Hibernate异常报 ORA-00926: 缺失 VALUES 关键字
  2. SpringMVC_数据校验
  3. 【云炬大学生创业基础笔记】第1章第1节 测试
  4. linux 下source命令
  5. “An exception has been raised that is likely due to a transient failure. Consider enabling transient
  6. org.apache.catalina.loader.StandardClassLoader@1af33d6
  7. 微服务架构 | 配置中心 - [Config]
  8. ATmega128A 串口问题
  9. 【FPGA】 基于FPGA分频,倍频设计实现
  10. Hive实战之视频网站数据分析
  11. 最长上升子序列 CSU - 1047 ( LIS LCS )
  12. sqlserver中计算日期差
  13. ZOJ 3703 Happy Programming Contest 0-1背包 DP
  14. 找工作再也不愁之面试题全覆盖-微服务篇
  15. 播放assets文件里视频文件的问题
  16. 【多数据中心】分布式数据同步设计方案
  17. 一日一技|Stata筛选出字符串中非数字的行
  18. 数据库原理及应用期末复习小结
  19. 艺赛旗(RPA) Python 科学计算:matplotlib (精华博文)
  20. 小学英语中常见的英语反义词

热门文章

  1. YBTOJ:伞兵空降(二分图匹配)
  2. P5643-[PKUWC2018]随机游走【min-max容斥,dp】
  3. P3705-[SDOI2017]新生舞会【0/1分数规划,费用流】
  4. P3387-【模板】缩点【tarjan,强联通分量,DAGdp】
  5. NOIP2018-普及参赛总结
  6. 基于消息中间件RabbitMQ实现简单的RPC服务
  7. Hadoop生态Flume(三)拦截器(Interceptor)介绍与使用(1)
  8. 阿里P9谈程序员程序员的青春饭
  9. MySQL 的索引是什么?怎么优化?
  10. Shell入门(六)之算术运算