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

news2025/1/17 0:12:15

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

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 应该在您要研究的工具列表中 — — 特别是因为它跨越了应用程序开发、平台工程和系统管理之间的界限。

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

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

相关文章

使用拖拽生成活动海报(vue项目)

<template><div class"poster-editor"><div class"toolbar" v-if"edit 1"><div style"text-align: center;font-size: 14px;font-weight: 700;margin-bottom: 10px;">工具栏</div><div class"…

WPF组件的自定义模板和触发器全面解析

Windows Presentation Foundation&#xff08;WPF&#xff09;是微软提供的一个用于构建桌面客户端应用程序的UI框架。其依赖于XAML&#xff08;Extensible Application Markup Language&#xff09;进行用户界面设计&#xff0c;提供了一套强大的控件和组件模型。在WPF开发中&…

C++ 的存储类型与新的 thread_local

1 C 的存储类型 1.1 存储周期&#xff08;Storage duration&#xff09; 存储周期表示一个变量的存储空间持续的时间&#xff0c;它应该与对象的语义生命周期一致&#xff08;或至少不小于对象的语义生命周期&#xff09;。C 98从 C 继承了三种存储周期&#xff0c;分别是静态…

【黑马点评】项目知识点及面经整理

【黑马点评】项目知识点及面经整理 1 短信登录&#xff08;Session&#xff0c;Redis&#xff0c;JWT验证&#xff09;1.1 JWT和Session的区别1.2 Session1.3 Redis1.3.1 基于Redis实现登录验证1.3.2 登录拦截 1.4 JWT1.4.1 JWT的有效验证1.4.2 JWT定义 2 热点数据缓存2.1 缓存…

区块链-智能合约Solidity编程

文章目录 一、ubuntu安装二、FISCO BCOS安装五、 WeBASE安装5.1 WeBASE简介5.2 节点前置服务搭建5.3 调用HelloWorld合约 七、Solidity极简入门7.1. 值类型7.2. 变量数据存储和作用域7.3. 函数7.4 控制流7.5 数组&映射7.6 结构体7.7 修饰符7.8 事件7.9 面向对象7.10 抽象合…

SoC芯片中Clock Gen和Reset Gen的时钟树综合

社区目前已经开设了下面列举的前四大数字后端实战课程&#xff0c;均为直播课&#xff0c;且均是小编本人亲自授课&#xff01;遇到项目问题&#xff0c;都可以远程一对一指导解决具体问题。小编本人是一线12年后端经验的数字后端工程师。想找一线IC后端技术专家亲自带你做后端…

Java Fork-Join框架学习

概述 Fork/Join是Java7提供的一个用于并行执行任务的框架&#xff0c;是一个把大任务分割成若干个小任务&#xff0c;最终汇总每个小任务结果后得到大任务结果的框架。Fork负责把一个大任务切分为若干并行执行的子任务&#xff0c;Join负责合并这些子任务的执行结果&#xff0…

Ubuntu系衍生版手动修改配置网卡的配置总结

一、Ubuntu系的IP地址配置文件的目录&#xff1a; sudo vim /etc/network/interfaces 二、以DHCP方式配置网卡&#xff1a; 在以上配置文件中添加以下两行&#xff1a; auto enp3s0 iface enp3s0 inet dhcp 三、为网卡配置静态IP地址&#xff1a; 在以上配置文件中添…

实验3,网络地址转换

实验3&#xff1a;网络地址转换 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握NAT技术的工作原理&#xff0c;了解三种不同类型NAT技术的主要作用以及各自的主要应用环境。能够完成静态NAT和复用NAT技术的应用&#xff0c;并熟练掌握NAT技术相关的配置命令。 实验设…

el-date-picker选择时间后标准时间少1小时问题

问题 前端开发中发现Element的时间组件el-date-picker在选择选择部分时间后js对象的标准时间少1小时&#xff0c;如果选择的小时为0&#xff0c;会导致部分转换条件下结果少1天。 比如组件中选择的本地时间为&#xff1a; 1988-08-01 00:00:00 而js对象获取到是标准时间是&am…

ubuntu 安装kali命令补全功能

输入命令时&#xff0c;之前的命令会以阴影显示&#xff0c;按下右键或 Tab 键可以直接补全 安装zsh-autosuggestions sudo apt install zsh-autosuggestions编辑 ~/.zshrc环境变量 if [ -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh ]; then. /usr/share/zs…

【从零开始的LeetCode-算法】945. 使数组唯一的最小增量

给你一个整数数组 nums 。每次 move 操作将会选择任意一个满足 0 < i < nums.length 的下标 i&#xff0c;并将 nums[i] 递增 1。 返回使 nums 中的每个值都变成唯一的所需要的最少操作次数。 生成的测试用例保证答案在 32 位整数范围内。 示例 1&#xff1a; 输入&am…

【Hadoop】HDFS基本操作

参考&#xff1a;3.HDFS基本操作_哔哩哔哩_bilibili 创建目录 hadoop fs -mkdir -p /training/qiang查看当前根目录下文件 hadoop fs -ls /hadoop fs -ls /training/目录授权 hadoop fs -chmod -R 777 /training/qm777是最大权限&#xff0c;读写 4、2、1 上传文件 先创…

YZ系列工具之YZ09:VBA_Excel之读心术

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…

Python自动化脚本裁剪图片为1:1比例

一、创建输入文件夹&#xff08;in&#xff09;和输出文件夹&#xff08;out&#xff09;&#xff0c;将原始图片放在输入文件夹&#xff08;in&#xff09;里 二、 安装对应的Python库 pip install Pillow 三、编写自动化脚本代码 import os from PIL import Imagedef crop…

Axure RP电商系统商城PC+app+后台买家卖端高保真原型模板及元件库

AxureRP电商商城PCapp后台买家卖端高保真原型模板本套包含三份原型图素材 APP买家端原型简介&#xff1a; 包含了用户中心、会员成长、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。 本模板由…

Spring中ApplicationEvent事件的实现

1&#xff09;简介 Spring Event (接口名为Aplication Event) 观察者设计模式&#xff0c;由事件发起者publisher发布事件&#xff08;指定事件名&#xff09;&#xff0c;事件监听者监听事件&#xff08;指定事件名&#xff09;。 好比&#xff0c; A 说了一句话&#xff0c…

安卓14无法安装应用解决历程

客户手机基本情况&#xff1a; 安卓14&#xff0c;对应的 targetSdkVersion 34 前天遇到了安卓14适配问题&#xff0c;客户发来的截图是这样的 描述&#xff1a;无法安装我们公司的B应用。 型号&#xff1a;三星google美版 解决步骤&#xff1a; 1、寻找其他安卓14手机测试…

从源码到平台:使用视频美颜SDK构建高性能直播美颜系统详解

本文将深入探讨如何从源码出发&#xff0c;借助视频美颜SDK构建一套高性能的直播美颜系统&#xff0c;涵盖技术架构、核心功能的实现以及性能优化等方面的详解。 一、视频美颜SDK的作用与选择 视频美颜SDK是开发直播美颜系统的基础&#xff0c;它能够提供实时美颜处理功能&am…

STM32的GPIO片上外设

一、STM32的片上外设 片上外设是集成在 MCU 芯片内部的硬件模块&#xff0c;它们通过片内总线与 CPU 直接通信&#xff0c;而不是通过外部引脚或接口连接的设备。 片上外设&#xff1a; 包括 UART、I2C、SPI、ADC、定时器、GPIO、DMA、RTC 等集成在 MCU 内部的模块。这些外设…