基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易

这篇文章旨在详细说明我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目。 该项目的目标(即众所周知的复杂事件处理(CEP))旨在实现对流数据的实时决策,例如在IoT用例中。

经过大量的写作,我决定将文章分为两部分。 在第一部分中,我将重点介绍什么是CEP,为什么有用,并解释体系结构解决方案以及为什么我们认为对于许多有用的生产用例来说,这是一个好主意。

在第二篇文章中,我将展示一个基于道路交通监控系统的具体示例,并尽可能详细地说明其制作方式。

因此,事不宜迟,继续第1部分!

总览

根据Gartner Inc.的数据,截至2015年,全球企业应用软件市场价值约为1500亿美元。这是一个巨大的市场,其中最常见的应用程序类型之一就是围绕将某种业务逻辑应用于从各个方面生成的数据这生意。

如今,现代企业应用程序需要连接到更多类型的数据源,随数据大小和用户数量扩展,可靠并快速执行。 随着业务需求和条件的变化,长达一年或更长的自定义应用程序开发周期不具有吸引力,因此甚至在应用程序投入生产之前就已过时。

在大型,全国性,区域性或全球性组织中,或在金融,医疗保健或IT等行业中使用大量数据的组织中,需求保持不变,但必须使用大数据技术来满足。 这带来了一系列全新的难题,这些难题使大规模开发企业应用程序的成本变得极为昂贵,并且在IT基础结构和专有技术要求方面也设置了很高的障碍。

因此,需要一种方法来对各种来源收集的数据运行业务逻辑,这可能是非常大规模的,理想情况下是实时的,例如物联网类型的应用程序。

了解复杂事件处理(CEP)

顾名思义,复杂事件处理(简称CEP)并不那么复杂。 从根本上讲,CEP是关于将业务规则应用于流事件数据。 事件数据只是带有时间戳字段的数据。 此类数据的示例可能是Web服务器的日志条目,购买收据或传感器数据,所有这些都可以视为恒定的事件流。 在此流数据上应用规则使响应时可以采取有用的操作。

这是一个智能家居的示例,该智能家居的门口有传感器,智能WiFi路由器和房间移动探测器。 通过CEP将所有数据流式传输到家庭服务器中,用户可以制定如下规则:

  1. 如果是白天,并且门关着并且没有电话连接到WiFi,请将房屋设置为“没人回家”
  2. 如果没有人在家并且门已解锁,则锁上门并打开警报器
  3. 如果没有人在家并且是冬天,请将房屋温度降低到18C
  4. 如果没有人在家并且是夏天,请关闭空调
  5. 如果没有人在家并且门被家庭成员打开,则关闭警报并将房屋设置为“人们在家”

拥有一堆这样的简单规则,确实会很快使一个聪明的家庭加起来。 实际上,在一些竞争性智能家居“集线器”设备中已经可以购买到这种功能,这些设备使用通用协议从房屋周围的兼容传感器设备中读取信息,然后在满足某些规则时将操作推回去。

这种示例可以轻松地移植到许多其他域。 例如,在零售中,购买历史记录和信标可用于生成个性化,位置敏感的消息或优惠券。 在工业应用中,可以使用相对简单的逻辑规则(例如,“如果该机器的红色按钮点亮,则必须停止它”)组合起来,更容易操作和维护许多机床。

CEP规则引擎与手动编码

到目前为止,阅读这些信息的工程师可能不会留下深刻的印象,因为流事件适用简单的规则。 诸如上述的智能家居用例可以很容易地(很好地说)完全通过使用Python进行手工编码并在旧用途的PC或Raspberry Pi上运行来处理。

这类项目有哪些部分?

  1. 数据提取
  2. 定义数据规则
  3. 执行规则
  4. 满足条件时从规则中采取措施。

好的软件体系结构要求尝试使最容易更改的部分易于更改,但要付出使其他部分更加困难的代价。 最需要改变的部分是什么? 数据摄取仅在添加新传感器时才会更改,但是给定传感器的数据不会突然更改。 摘要中的执行规则始终相同; 变化的是规则本身。 编码并可以执行的动作并没有真正改变,但是随着时间的推移添加新动作应该很容易。

当用例开始扩展并且规则数量增加时,规则处理引擎的效率开始变得重要。 此外,当规则数量增加时,使规则易于编辑不仅是“必备”功能,而且是核心要求。

另一个经常使用的论点是业务逻辑与SDLC的分离。 业务需要比软件开发更快。 通过使用规则引擎,两个流在很大程度上可以独立移动。

CEP被“植入”物联网应用

CEP几乎是任何种类的物联网应用程序的要求,例如智能家居,智能农业,工业4.0或电信数据。 从某种意义上说,这是一项要求,即抛开功能的实现方式,物联网需要将规则应用于流事件数据。 无论是在单个私人住宅中进行小规模生产,还是在遍布全球的数家工厂中进行大规模生产,都是如此。

根据我们刚刚描述的内容,理想的设计会反对手动编码的解决方案,并使用所谓的“业务规则处理引擎”。 开源世界中存在着几种,最著名的是Drools。

Drools:开源业务规则引擎

Drools是在开源项目的JBoss框架下开发的一个开源项目。 这是一个具有长期活跃开发历史的项目,当前版本为6.5.0。最终版本为Beta 7。 它相当现代,因为它支持Java 8大大改进的API。

Drools具有我们正在寻找的所有特征,其中包括规则引擎,定义良好的DSL定义规则以及基于RETE算法的规则引擎,该引擎经过了优化和非常快速。 此外,文档非常详尽,并且有大量书籍可以学习有关如何使用此强大框架的所有知识。

最后,Drools带有一个称为Workbench的GUI,它使我们可以可视地创建和编辑规则,而无需编写代码。 这是一项致命功能,它将规则的功能置于业务分析的范围之内。

流传输架构为大数据启用CEP

流架构是CEP的关键组件。 CEP的全部重点是通过流数据(近)实时做出决策,而不是像批处理那样对历史数据进行分析来采取行动。

CEP涉及敏捷性,并且由于大量简单规则的相互作用而导致潜在的复杂行为,这些规则都实时应用于内存中的数据。 基于微服务的流式传输体系结构正成为现代大规模体系结构的标准。

奥德利(O'Reilly)出版的Ted Dunning和埃伦·弗里德曼(Ellen Friedman)的《流传输体系结构》一书详细探讨了流体系结构的优点,该书可免费在线获得 。 我还在2016年新加坡Strata大会上就这一主题发表了演讲。 请去Slideshare看一看 。

一般而言,解决方案将类似于上图。 收集数据源(例如传感器,收银机或日志),并使用轻型ETL将其添加到流中。 然后,数据将被程序使用,该程序将事实数据直接传递到Drools KieSession中。 这是内存中的工作空间,规则引擎使用模式匹配来根据内存中存在的事实查看可以触发哪些规则。

在我们提出的体系结构中,规则驻留在Drools Workbench中,它是一个GUI规则编辑器,还可以用作版本控制和要部署到生产中的规则的存储库。

这种方法的主要好处是将维护应用程序本身的过程与编辑为业务创造价值的规则的过程完全独立。 工程师的任务很明确,即确保系统性能良好且稳定,而业务方面则可以专注于规则。

在上图中,我们可以看到使用MapR集群的实现可能看起来更具体。 对于该特定应用程序,在其位置使用Kafka集群同样有效,尽管这样做会导致出现新用例的可能性降低,并增加系统管理的负担。 这样做的原因是,Kafka集群严格限于支持流传输,而使用聚合集群则允许在同一集群上存在其他用例,无论是操作还是分析用例。

这里的一个关键点是从CEP引擎的第二个箭头回去流。 它说明了将流用于输入和输出的重要概念,这是流体系结构的核心。 这也是为什么显示企业IT系统也从流中获取其数据的原因。

数据流如下所示:

数据从数据源流到事件生产者,后者只是一个流生产者,或者使用新的Kafka REST Proxy调用REST端点。 新发行的MapR Ecosystem Pack 2.0中的 MapR Streams也支持REST代理。

CEP引擎可以从流中读取数据,并从Drools Workbench获取其规则。 从流架构的角度来看,Drools Workbench和CEP Engine是一个单元,可以说是一个微服务,因为它们是完全独立的,并且没有任何外部依赖性。

当规则在规则处理算法中触发时,将需要采取一些外部动作。 这些操作可能是在公司数据库中插入或更新表,索引到Elasticsearch以将数据提供给Kibana仪表板,发送通知。 但是,我们不是通过直接从CEP Engine到外部系统进行调用来将系统紧密耦合在一起,而是将CEP Engine的数据输出回流中的另一个主题。 另一个微服务或应用程序(例如Cask.co或Streamsets )将处理该流。

结论

复杂事件处理已经存在了很长一段时间,但是现在终于有了它。 在硬件方面,具有大量内存的服务更为普遍。 在软件方面,有可能完全在OSS之外创建有用的生产级CEP系统,而无需诉诸昂贵的,自定义编码的流应用程序。

将Kafka风格的流消息传递系统与Drools结合在一起,为组织提供了非常需要的敏捷性,以区分非常不同的任务,以创建和维护企业流应用程序,以及定义和编辑业务逻辑以进行实时决策。

在下一篇博客文章中,我们将介绍一个具体的用例,将所有这些都付诸实践,并说明如何仅使用Java,MapR集群和在Wildfly应用程序服务器上运行的Drools Workbench即可实现这种系统。

翻译自: https://www.javacodegeeks.com/2017/01/better-complex-event-processing-scale-using-microservices-based-streaming-architecture-part-1.html

使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)相关推荐

  1. 基于docker微服务架构_使用基于微服务的流架构更好地进行大规模的复杂事件处理(第1部分)...

    基于docker微服务架构 基于微服务的流架构与开源规则引擎相结合,使实时业务规则变得容易 这篇文章旨在详细介绍我将OSS业务规则引擎与Kafka风格的现代流消息传递系统集成在一起的项目. 该项目的目 ...

  2. 应对海量并发请求,首席布道师谈微服务的应用架构设计

    何李石 七牛云首席布道师 <Go语言程序设计>译者,Go语言/容器虚拟化技术布道师.实践者. 5年以上互联网创业经验和企业级产品研发.运营经验,同时也是互联网产品基础架构解决方案专家. 随 ...

  3. 阿里P8 “布道师”,谈微服务的应用架构设计(附微服务教程)

    本次分享基于微服务的应用架构设计,内容涉及如何构建一个微服务应用,服务注册与发现,微服务测试和典型的微服务架构设计模式,以及微服务架构在七牛的实践案例. 目录 构建一个微服务应用 服务注册与发现 微服 ...

  4. 【2017年第3期】交通大数据:一种基于微服务的敏捷处理架构设计

    杜圣东, 杨燕, 滕飞 西南交通大学信息科学与技术学院,四川 成都 610031 摘要:面对智慧交通广泛的大数据应用场景和技术需求,一般大数据系统难以适应多种处理情况并做出快速响应.针对这一问题,首次 ...

  5. 基于微服务架构,改造企业核心系统之实践

    2019独角兽企业重金招聘Python工程师标准>>> 1. 背景与挑战 随着公司国际化战略的推行以及本土业务的高速发展,后台支撑系统已经不堪重负.在吞吐量.稳定性以及可扩展性上都无 ...

  6. re.containerbase.startinternal 子容器启动失败_微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)...

    走过路过不要错过 点击蓝字关注我们 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件 ...

  7. 基于微服务和Docker的PaaS云平台架构设计

    基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件.数据服务.云服务器等资源,开发人员 ...

  8. 基于微服务和Docker容器技术的PaaS云平台架构设计

    本文讲的是基于微服务和Docker容器技术的PaaS云平台架构设计[编者的话]在系统架构上,PaaS云平台主要分为微服务架构.Docker容器技术.DveOps三部分,这篇文章重点介绍微服务架构的实施 ...

  9. 基于微服务架构的云平台总体设计

    正好这段时间我们在封闭研发我们的新一代数字化云平台(theplatform),借此机会和大家分享一下我们的总体设计及思路: theplatform是一款基于微服务架构的DevOps容器云平台,设计主体 ...

最新文章

  1. (资源)OpenStack IRC资源
  2. MyBatis-22MyBatis缓存配置【一级缓存】
  3. 软件工程课程学生信息
  4. 算法中分类与聚类的区别?
  5. P4630-[APIO2018]Duathlon铁人两项【圆方树】
  6. 怎么在电脑上录制qq音乐
  7. 如何从云桌面(远程桌面)拷贝文件
  8. Octotree:一款超实用的GitHub可视化代码树插件
  9. Javascript汉字转拼音,中文转拼音
  10. win7 去除快捷方式小箭头
  11. s11 day103 luffy项目结算部分+认证+django-redis
  12. 为什么用python画图_怎么用python画图
  13. 美股网页表格数据爬虫设计
  14. java 上传图片到图片服务器
  15. 【无标题】C语言连续输出输入语句执行跳过的问题
  16. 360提示证书风险问题
  17. 全干工程师神器 - Jmeter 06 - Jmeter后置处理器
  18. 分享我的公众号留言功能迁移成功的故事
  19. 传说中让理科生沉默,让文科生落泪的文史综合题
  20. 人口学特征或个人因素适合做结构方程模型的潜变量吗?

热门文章

  1. Vue 阻止事件冒泡
  2. Oracle入门(十四.4)之在PL / SQL中使用变量
  3. Spring Enable*高级应用及原理
  4. Maven精选系列--发布jar包到Nexus私库
  5. Spring中的Bean配置、属性配置、装配内容详细叙述
  6. springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
  7. 解决获取请求参数的乱码问题
  8. 2019蓝桥杯省赛---java---C---9(等差数列)
  9. Mybatis主要内容
  10. android之微信分享音频