微软的 Drasi:一种轻量级的事件驱动编程方法

微软的开源数据变化处理平台有望提供一种全新的方式来构建和管理可产生持续事件流的云应用程序。

Microsoft Azure 孵化团队是微软超大规模云中比较有趣的组成部分之一。它介于传统软件开发团队和研究组织之间,致力于构建大规模分布式系统问题的解决方案。

这些解决方案可能是Kubernetes的扩展,例如 KEDA(Kubernetes 事件驱动自动扩展)系统,或Dapr和Radius等开发工具。他们最新的公开版本是系统管理工具和新应用程序平台的混合体。

Drasi 是什么?

Azure 首席技术官 Mark Russinovich在最近的一篇博客文章中宣布,Drasi 是一种用于检测关键事件并立即做出响应的工具。如果出现硬件或软件故障,该响应可能是重新配置平台架构,也可能是在工业物联网系统中触发关键警报,例如,当传感器检测到化学过程中的问题时,超压运行甚至触发响应。

大多数 Microsoft Azure 孵化项目都是开源的,Drasi 也不例外。它已经提交给云原生计算基金会 (CNCF),拥有 Apache 2.0 许可证和GitHub 存储库。您可以在其文档站点上找到更多详细信息。

像这样的事件驱动架构是分布式系统中相对常见的设计模式。与其他分布式开发模型一样,它们也有自己的问题,尤其是在规模上。当您每分钟收到数十或数百个事件时,很容易检测并响应您要查找的消息。但是,当您的应用程序或服务在全球平台上增长到数十万甚至数百万条消息时,在较小系统上有效的方法很可能会在这种新负载下崩溃。

随着规模的扩大,事件驱动系统变得复杂。消息和事件以多种不同的形式传递,并存储在独立的孤岛中,这使得它们难以提取和处理,并且通常需要复杂的查询机制。同时,消息队列系统变得缓慢而拥塞,增加了延迟甚至让消息超时。当您需要快速响应事件时,这种脆弱的状态变得难以使用和管理。

这就是 Drasi 的作用所在。它提供了一种更好的方法来自动化检测和响应相关事件的过程,微软将这种方法描述为“智能反应的自动化”。它旨在成为一个轻量级工具,不需要复杂的集中式事件数据存储,而是利用分散化来在日志文件和更改源中查找靠近事件源的事件。

Drasi 如何处理变化?

尽管数据是分散的并以多种不同的格式存储,Drasi 仍允许您使用熟悉的开发技术来构建查询并设置触发器以响应这些查询结果的变化。此过程的核心是三个概念:来源、连续查询和反应。

Drasi 应用程序中的源是所有整理数据和观察变化的地方。这些可以是日志文件、数据库更新或通过发布和订阅工具(如 Azure Event Grid)传递的事件,甚至是 Azure Function 的输出。

连续查询以 Cypher 查询语言 (CQL) 编写,用于监控源数据的变化,充当由变化触发的开关。一旦触发查询,系统就会发送反应。

反应可以像警报一样简单,也可以是触发一组预配置流程的输入。这些流程取决于您使用 Drasi 的目的。如果它在工业物联网系统中,反应可能会对一组硬件控制起作用,以关闭失控的工业流程。在系统管理支持场景中,反应可能会启动到灾难恢复站点或数据库副本的故障转移过程。Drasi 反应可以根据您的需要简单或复杂。

将所有活动整合在一起

Drasi 事件驱动计算方法最有趣的地方可能在于它支持过去许多不同的事件管理工具。单个 Drasi 实例可以处理手动更新的数据和实时遥测数据。例如,Drasi 可能能够读取一组机床的维护日志以及来自同一设备的实时遥测数据。查询可以监控计划的维护窗口和指示可能存在问题的已知遥测数据(这本身可能是使用声音检测问题的机器学习应用程序引发的事件)。

Drasi 不是单独的警报,而是将所有这些不同的系统整合在一起的粘合剂。与许多 Azure 工具一样,它具有很强的可扩展性,能够从单个站点或跨全球组织提供结果。它附带一个命令行工具,可将其各种 API 包装成一种管理 Drasi 资源的方式。由于所有管理都是通过 API 进行的,因此您可以构建自己的管理工具。

Drasi 应用程序的核心是一组连续查询。这是一种与传统查询截然不同的数据处理方式。通过连续运行查询,Drasi 可以实时构建其底层数据源变化的映射,能够获取即时结果以及动态源,该动态源在概念上类似于 SQL Server 的更改源,无需复杂的 ETL 即可将数据传送到 Azure Synapse 分析。

使用 CQL 构建变更查询

使用多个源并尝试从中获取更改数据与使用图形数据库非常相似,因此 Drasi 使用Neo4J 的 Cypher 图形数据库查询语言 (CQL) 版本来构建其连续查询也就不足为奇了。如果您熟悉 SQL,CQL 支持许多类似的构造来构建其查询。您可以使用 MATCH 查找路径、WITH 和 WHERE 子句以及常见的数据类型和属性。由于您使用的是一组相对受限的数据源,因此构建查询所需的大部分内容都在这里。

目的是使用 CQL 查询来描述您在数据中寻找的更改。由于它支持在查询中构建逻辑,因此您可以构建一个查询,该查询既封装了您正在查看的数据,又封装了它与所有来源中其余数据的关系。由于 CQL 将所有来源视为一个互连图,因此无需编写复杂的连接来将来源整合在一起。它们都是同一 n 维事件空间的一部分,可以根据需要将其填充得丰富或稀疏。

微软已将自己的 Drasi 特定扩展添加到 CQL。其中包括一些有趣的功能,可让您以不同的方式查看数据 - 这在考虑连续查询时非常重要。其中一个功能是微软所谓的 Future 函数,它超越了现有的时间功能,为数据设置了未来边界。它们包括设置时间并检查特定布尔值在该点是否为真或在该点之前是否为真。

这些函数相对简单,但可以让您为事件添加新的边界。您可以构建一组查询表达式,这些表达式求值为布尔值,然后使用该结果根据系统随时间的变化触发未来事件。您可以将这些函数与时间函数一起使用,时间函数可以让您查看过去特定时间点的值。使用 Drasi,您现在可以查看关键数据随时间的变化情况,而无需编写复杂的代码,只需将其全部构建到 CQL 查询中的函数中即可。

微软提供了一组 PostgreSQL 数据集形式的示例数据来帮助您开始使用 CQL,但我们仍然缺少开发工具。Visual Studio Code 扩展将有助于构建和测试查询,同时降低出错风险。目前,最好使用来自各种事件源的示例数据和一组预期输出。使用列表和基于时间的操作需要一些时间来适应,特别是如果您打算使用 Future 函数。

向世界传递反应

Drasi 输出反应,这些反应基于连续查询的结果而起作用。反应可以从多个查询中获取数据,使您可以从相对简单的查询组合中提供复杂的行为。目前,反应类型数量有限,但它们应该可以覆盖大多数场景。一个关键选项是 Azure Event Grid,它为您提供了更多后续操作。其他人使用基于 Web 的 SignalR 协议或与 Microsoft 的 Dataverse 业务线数据平台合作。

最后一种反应类型 Debut提供了持续更新的持续查询结果表,让您可以探索查询如何针对数据源进行。这不是用于生产的工具;相反,它是一种帮助开发人员了解持续查询如何工作以及如何围绕其输出构建事件处理的方法。

变化的事物因多种原因而引人注目,而 Drasi 的设计初衷就是捕捉这些变化的细节并将其传递出来,以便这些信息可以指导行动。在某些情况下,Drasi 可能会帮助我们快速解决问题,对硬件或软件进行预防性维护。在其他情况下,它可能会提前警告我们入侵和其他安全漏洞。如何使用它取决于你。

处理变更数据的轻量级框架是您在它出现之前不知道需要的东西之一。这是一件好事,因为 Drasi 提供了一种看起来真正新颖和创新的方式来处理生成持续事件流的系统,以便您可以识别真正重要的事件。

如果您正在大规模构建云基础设施和应用程序,那么 Drasi 应该在您要研究的工具列表中 — — 特别是因为它跨越了应用程序开发、平台工程和系统管理之间的界限。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kettle9.4支持Clickhouse数据源插件开发以及性能测试

前言 最近业务这边有个指标需要用到大数据这边的列式数据库进行处理,由于kettle不支持clickhouse数据源驱动,这里查了一下网上的相关资料,发现了一些别人开发好的驱动包,下载下来后使用效果不尽人意。总结下来有以下几个问题&…

【C++】string类(接口使用详解 下)

我们接着【C】string类(接口使用详解 上)-CSDN博客 继续介绍string的使用。 1.string类对象的修改操作 我们就说一下用的比较多的接口。 1.1 operator 这个接口可以尾插一个字符,或者一个字符串,或者一个对象。 string s1(&qu…

回归测试内容多,时间紧,人还少,怎么办?

问答网站上看到一个提问: 项目进入测试,但回归测试内容多,发布时间紧迫,人还少,要怎么做? 标准答案应该是自动化测试 回归测试主要关注的是历史功能,如果自动化测试覆盖率达到一定程度的话&…

lazyLoad

//1.通过React的lazy函数配合import()函数动态加载路由组件 > 路由组件代码会被分开打包 const Login lazy(()>import(/pages/Login)) //2.通过<Suspense>指定在加载得到路由打包文件前显示一个自定义loading界面 <Suspense fallback{<h1&…

探索Spring Cloud Config:构建高可用的配置中心

目录 认识Spring Cloud ConfigConfig Server读取配置文件步骤1&#xff1a;&#xff08;1&#xff09;创建config-server项目&#xff08;2&#xff09;在config-server中开启Config Server功能&#xff08;3&#xff09;在config-server配置文件进行相关配置&#xff08;4&…

计算机毕业设计Python深度学习房价预测 房源可视化 房源爬虫 二手房可视化 二手房爬虫 递归决策树模型 机器学习 深度学习 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 房地产是促进我国经济持续增…

征程 6E DISPLAY 功能介绍及上手实践

01 功能概述 本文将带大家一起实现单路、多路 MIPI CSI TX 输出、IDU 回写、IDU oneshot 模式、绑定输出 VPS 数据等功能&#xff0c;此处主要介绍各 sample 的实现与使用方法。 02 软件架构说明 本文中绑定 VPS 输出功能基于 libvio API 实现&#xff0c;调用 libvio 提供的…

Ubuntu16.04安装openssl库

Ubuntu16.04安装openssl库 Chapter1 Ubuntu16.04安装openssl库 Chapter1 Ubuntu16.04安装openssl库 原文链接&#xff1a;https://blog.csdn.net/weixin_36584476/article/details/107321893 记录一下省得忘了 1.首先去openssl官网下载源码www.openssl.org/source/&#xff0…

西瓜书书本内容杂谈

西瓜书书本内容杂谈 把圈子变小&#xff0c;把语速放缓&#xff0c;把心放宽&#xff0c;把生活打理好 只能说快速过了一遍&#xff0c;花了一个多星期吧&#xff0c;然后后边的内容是一点也看不懂了&#xff08;能发现前面记得比较详细&#xff0c;到了后边是看不懂一点了&a…

音视频基础知识分享

音视频基础知识分享 RKMedia的各个组件及其交互 首先上图&#xff1a; 考虑到公司业务主要是相机&#xff0c;所以&#xff0c;主要去关注图像数据流&#xff0c;对于音频数据流直接忽略。 图像数据流向&#xff1a; Camera Sensor将光信号转换成电信号&#xff08;Raw数据&…

基于语音识别的停车共享小程序(lw+演示+源码+运行)

目 录 1 绪论1 1.1 课题研究背景1 1.2 研究现状1 1.3 论文结构安排1 2 系统关键技术2 2.1 微信小程序2 2.2 微信Web开发者工具2 2.3 JavaScript简介2 2.4 微信小程序API接口2 2.5 MYSQL数据库2 3 系统分析1 3.1 可行性分析1 3.1.1 技术可行性1 3.1.2 经济可行性1…

如何查看公众号真实粉丝数,2024年还有哪些粉丝百万以上的大号?

如何查看公众号真实粉丝数&#xff1f;很简单&#xff0c;写了个脚本一键获取&#xff0c;看看2024年还有哪些粉丝百万以上的大号&#xff1f; 猫笔刀这个号2018-2024年的所有历史文章&#xff0c;共1168篇&#xff0c;导出的excel文章数据包含文章日期&#xff0c;文章标题&a…

bean的实例化2024年10月17日

跟不上为基础 1.你的java学习路线 2. 3.课程 注解的装配 contoller调用service用的是注解装配

【Linux】解答:为什么创建目录文件,硬链接数是2;创建普通文件时,硬链接数是1?(超详细图文)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

我在自动化测试方面犯过的3个大错误

每个人都会犯错误&#xff0c;但不管错误看起来有多糟糕&#xff0c;你都可以恢复过来&#xff0c;更重要的是&#xff0c;从错误中学习。 在软件开发过程的任何领域&#xff0c;从编码到测试&#xff0c;我们都会时不时地犯一些错误。通常&#xff0c;这些错误都很小&#xf…

从零开始学PHP之安装开发环境

前言 不整那些虚的&#xff0c;直接开始上干货&#xff0c;争取让小白也看得懂 环境选择 php开发环境一般分为集成环境和编译环境&#xff0c;由于编辑环境费时费力&#xff08;我没搞明白&#xff09;直接使用集成环境&#xff0c;市面上php的集成环境很多我这里用的是phps…

Java—类和对象习题讲解

如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 目录 习题一&#xff1a; 习题二&#xff1a; 习题三&#xff1a;.import static 能够导入一些静态方法 习题四&#xff1a; 习题五&#xff1a; 习题六&#xff1…

IDEA如何用maven打包(界面和命令两种方式)

前言 我们在使用IDEA开发时&#xff0c;如果是springboot项目的话&#xff0c;一般是用maven来管理我们的依赖的。然后&#xff0c;当我们开发完成之后&#xff0c;就需要打包部署了。 那么&#xff0c;我们应该如何打包呢&#xff1f; 如何打包&#xff08;jar包&#xff09…

智慧医疗,为健康护航

智能医院是一种利用先进的信息技术和智能设备&#xff0c;在提升医疗管理、服务水平和病人体验方面进行改造的现代化医疗机构。智能医院注重集成运维、智能照明和安全调度等关键方面&#xff0c;在医院运营和服务方面提供全方位的支持和保障。 集成运维是智慧医院的基石&#x…

C++初阶——入门

目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…