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

微软的 Drasi:一种轻量级的事件驱动编程方法
微软的开源数据变化处理平台有望提供一种全新的方式来构建和管理可产生持续事件流的云应用程序。 Microsoft Azure 孵化团队是微软超大规模云中比较有趣的组成部分之一。它介于传统软件开发团队和研究组织之间,致力于构建大规模分布式系统问题的解决方案。 这些解决…...

vue3 笔记-插槽
结构类似的模块,我们可以考虑用插槽,以便后续复用: 代码: 1.插槽 <script setup> defineProps({title: {required: true,type: String},number: {required: true,type: Number} }) </script><template><d…...

C# 字符串常用方法
文章目录 Length:获取字符串中字符的个数(不包括末尾的空字符)ToLower() 和 ToUpper():将字符串转换为小写或大写形式Substring(int startIndex, int length):从指定索引开始截取指定长度的子字符串Remove(int startIn…...

字节跳动青训营——入营考核解答(持续更新中~~~)
考核内容: 在指定的题库中自主选择不少于 15 道算法题并完成解题,其中题目难度分配如下: 简单题不少于 10 道中等题不少于 4 道困难题不少于 1 道 解答代码 8.进制求和转换(难) 代码实现: import jav…...

JavaWeb合集15-Apache POI
十五、Apache POI Apache POI是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用POI在Java 序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI都是用于操作Excel文件。 使用场景:银行网银系统导出交…...

Threejs 实现3D 地图(01)创建基本场景
"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" <script setup> import { onMounted,ref } from vue import * as THREE from three import * as d3 from "d3"; //莫开托坐标 矫正地图…...

snmpdelta使用说明
1.snmpdelta介绍 snmpdelta命令是用来获取下一个节点的OID的值。 2.snmpdelta安装 1.snmpdelta安装 命令: yum -y install net-snmp net-snmp-utils [root@logstash ~]# yum -y install net-snmp net-snmp-utils Loaded plugins: fastestmirror Loading mirror speeds f…...

Hadoop集群安装
集群规划 node01node02node03角色主节点从节点从节点NameNode√DataNode√√√ResourceManager√NodeManager√√√SecondaryNameNode√Historyserver√ 上传安装包到node01 解压到指定目录 tar -zxvf /bigdata/soft/hadoop-3.3.3.tar.gz -C /bigdata/server/ 创建软链接 cd…...

VuePress集成到Vue项目的方法
VuePress 可以作为一个独立的静态站点生成器来使用,也可以集成到现有的 Vue 项目中。以下是将 VuePress 集成到 Vue 项目的几种方法: 1. 作为本地依赖集成 如果你想在现有的 Vue 项目中使用 VuePress 来管理文档,你可以将 VuePress 安装为本…...

【ROS】ROS局域网下多机通讯方法
最近工作中需要用到多机通讯,这里稍微总结一下使用方法。 目录 一、网络配置 二、修改两个设备的hosts文件 三、修改两个ros设备的.bashrc 四、launch文件中给节点设定运行的设备 一、网络配置 首先确保两个ros设备连接到同一局域网下,然后查询两个…...

linux 系统怎么使用
Linux系统的使用涉及多个方面,包括文件管理、目录操作、用户管理、进程管理、网络配置等。以下是对Linux系统基础使用的详细介绍: 一、文件管理 查看文件和目录 ls:列出当前目录的内容。ls -l:以长格式列出当前目录的内容&#x…...

Java线程池知识点梳理
Java线程池知识点梳理 什么是线程池? 线程在系统中创建的成本是相对比较高的,所以使用”池化“的思想,设计线程池,有大量任务需要执行时,可以直接从线程池中使用已经创建好的线程直接去执行。减少线程的创建和销毁带…...

SFT、RLHF、DPO、IFT —— LLM 微调的进化之路_如何搭建自己的dpo
TL;DR • SFT、RLHF 和 DPO 都是先估计 LLMs 本身的偏好,再与人类的偏好进行对齐; • SFT 只通过 LLMs 生成的下一个单词进行估计,而 RLHF 和 DPO 通过 LLMs 生成的完整句子进行估计,显然后者的估计会更准确; • 虽然…...

CSS 选择器简单回顾
引言 当我们探讨网页设计和开发时, CSS(层叠样式表) 无疑是一个不可或缺的技术, 它使我们能够精确控制网页的外观和布局, 为用户创造出独特的视觉体验、以及良好的交互体验!! 而一个完整的 CSS 规则则是由两个主要部分组成: 选择器和声明块 那么今天我们就来盘点下常见的几种选…...

uniapp配置微信小程序分包(分包优化)
1.manifest.json中 源码视图中找到mp-weixin,新增代码"optimization":{"subPackages":true},如下图所示 "optimization" : {"subPackages" : true } 2.pages.json中 分包内静态文件示例 "subPackages&…...

MySQL-10.DML-添加数据insert
一.DML(INSERT) -- DDL:数据操作语言 -- DML:插入数据 - insert -- 1.为tb_emp表的username,name,gender字段插入值 insert into tb_emp (username,name,gender) values (wuji,无忌,1); -- 这样会报错,因为create_ti…...

ARM/Linux嵌入式面经(四八):tp-link联洲国际
文章目录 1. **模电基础**:请解释共射电路的工作原理,并描述如何计算其放大倍数。工作原理放大倍数计算面试官追问及回答2. **DCDC损耗**:有哪些方法可以降低DCDC转换器的损耗?3. **示波器使用**:如何用示波器正确测量DCDC的开关纹波?4. **IIC通信**:IIC通信协议中是否需…...

代码实践篇四 形状检测与规则重建
本节内容主要涉及形状检测(Shape Detection)与形状重建(Shape Reconstruction),具体算法步骤会在后续章节介绍。CGAL在6.0重点更新了形状重建部分的一些模块——动态空间分割与动态形状重建等,也会在后续详…...

JVM(HotSpot):GC之垃圾回收阶段
文章目录 前言一、标记清除算法(Mark Sweep)二、标记整理算法(Mark Compact)三、复制算法(Copy) 前言 标记出垃圾对象之后,就要进行清理。 那么,如何清理? 这里也有相应的算法。 主要有三种。 一、标记清除算法(Mark Sweep) 原理说明&…...

Go 项目如何集成类似mybatisPlus插件呢?GORM走起!!
导读: 在 Go 项目中,虽然没有像 MyBatis Plus 这样特定的 ORM 插件,但可以使用功能相似的 Go ORM 框架,比如 GORM,它支持链式查询、自动迁移、预加载等功能,与 MyBatis Plus 有相似之处。通过一些插件或扩…...

《深度学习》Dlib库 CNN卷积神经网络 人脸识别
目录 一、如何实现CNN人脸识别 1、CNN核心概念 1)卷积层 2)池化层 3)激活函数 4)全连接层 2、步骤 1)加载预训练的人脸识别模型 2)读取图像并检测人脸 3)提取人脸特征向量 4…...

滚雪球学Redis[7.1讲]:Redis实战案例
全文目录: 🎉前言🚦1. 使用Redis实现会话管理在Web应用中使用Redis管理会话会话过期与刷新策略安全性考虑与优化 🧩2. 使用Redis实现缓存系统缓存的基本原理Redis缓存的应用场景缓存失效策略与雪崩预防 ✨3. Redis在排行榜系统中的…...

WordPress外部图片本地化插件
一款用于本地化文章的外部图片的插件,支持如下功能: 文章发布前通过编辑器插件本地化 文章手动发布时自动本地化 文章定时发布时自动本地化 针对已发布的文章批量本地化。 源码下载:https://download.csdn.net/download/m0_66047725/898963…...

Linux基础-shell的简单实现
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux基础-shell的简单实现 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1, 全局变…...

Tomcat日志文件详解及catalina.out日志清理方法
目录 前言1. Tomcat日志文件详解1.1 catalina.out1.2 localhost_access_log1.3 catalina.<date>.log1.4 host-manager.<date>.log 和 manager.<date>.log1.5 localhost.<date>.log 2. catalina.out文件管理与清理方法2.1 为什么不能直接删除catalina.o…...

react 中的hooks中的useState
(1). State Hook让函数组件也可以有state状态, 并进行状态数据的读写操作 (2). 语法: const [xxx, setXxx] React.useState(initValue) (3). useState()说明:参数: 第一次初始化指定的值在内部作缓存返回值: 包含2个元素的数组, 第1个为内部当前状态值, 第2个为更新状态值的…...

STM32学习笔记---DMA
目录 一、什么是DMA 1、DMA是什么 2、DMA的工作流程 3、DMA控制器与外设控制器 二、如何配置DMA 1、DMA框图 2、功能说明 2.1 通道选择 2.2 仲裁器 2.3 源、目标和传输模式 2.4 指针递增 2.5 循环模式 2.6 DMA流控制器和外设流控制器 3、程序设计 三、具体使用DMA…...

Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质)
Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质) 核心代码完整代码在线示例Cesium 给实体对象(Entity)提供了很多实用的样式,基本满足普通项目需求; 但是作为 WebGL 引擎,肯定不够丰富,尤其是动态效果样式。 对于实体对象(Entity),可以通过自定义材质,实现各种…...

进程间关系与守护进程
一、进程组 1.1、什么是进程组 提到进程的概念, 其实每一个进程除了有一个进程 ID(PID)之外 还属于一 个进程组。进程组是一个或者多个进程的集合, 一个进程组可以包含多个进程。 每一 个进程组也有一个唯一的进程组 ID(PGID), 并且这个 PG…...

金山翻译接口逆向
网址(加密后):aHR0cHM6Ly93d3cuaWNpYmEuY29tL3RyYW5zbGF0ZQ 文章目录 抓包sign值结果加密 逆向sign值第一步第二步1.2.3. 解密content第一步1.2.3. 抓包 F12 -> 翻译框输入spider -> 点击Fetch/XHR -> 找到接口 index.php? 开头的…...