CloudEvents—云原生事件规范
我们的系统中或多或少都会用到如下两类业务技术:
异步任务,用于降低接口时延或削峰,提升用户体验,降低系统并发压力;
通知类RPC,用于微服务间状态变更,用户行为的联动等场景;
以上两种场景,都十分适合使用事件驱动来实现。
但是对于事件的描述,现在还缺乏一种统一描述,服务使用方和提供方往往要花费大量的时间沟通字段定义,凭直觉设计事件属性,并在将来的使用过程中会因为新增或修改事件的属性而增加很大的额外工作量。
随着云原生的到来,急需一种统一的事件定义和描述规范,以提供跨服务、跨平台的交互能力,而这就是CloudEvents项目的诞生背景。
CloudEvents是一个用通用格式描述事件数据的规范,以提供跨服务、跨平台和跨系统的互操作性。目前得到了大量的行业关注,从主要的云提供商到流行的SaaS公司都有。CloudEvents由云原生计算基金会(CNCF)主办,于2018年5月15日获批为云原生沙盒级项目。
https://github.com/cloudevents 概要地描述其标准如下:
Event描述
Event: 描述Occurrence的数据,包括data和context。
Data:最主要的业务数据,由使用者定义。
Context:上下文属性,可以理解成发送event时候的环境信息。用来标识事件与系统或其他事件之间的关系。
Data描述
业务相关的信息都封装在数据属性中,由业务方自行约定,
一般来说,都是业务model,比如protobuf,这样可以更好的管理。
data: {"metadata": {"name": "event-display.15a0a2b54007189b","namespace": "default","selfLink": "/api/v1/namespaces/default/events/event-display.15a0a2b54007189b","uid": "9195ff11-7b9b-11e9-b1f1-00163f005e02","resourceVersion": "18070551","creationTimestamp": "2019-05-21T07:39:30Z"},"involvedObject": {"kind": "Route","namespace": "default","name": "event-display","uid": "31c68419-675b-11e9-a087-00163e08f3bc","apiVersion": "serving.knative.dev/v1alpha1","resourceVersion": "9242540"},"reason": "InternalError","message": "Operation cannot be fulfilled on clusteringresses.networking.internal.knative.dev \"route-31c68419-675b-11e9-a087-00163e08f3bc\": the object has been modified; please apply your changes to the latest version and try again","source": {"component": "route-controller"},"firstTimestamp": "2019-05-21T07:39:30Z","lastTimestamp": "2019-05-26T07:10:51Z","count": 5636,"type": "Warning","eventTime": null,"reportingComponent": "","reportingInstance": ""} Context描述
必选(REQUIRED)参数:
id:事件唯一编号,如UUID
source:数据源信息,用来区别发送方
specversion:使用的cloudEvents规范版本,如0.2
type:发送方定义的事件类型,可以用来过滤和转发,通常此属性用于路由、监控、安全策略等
可选(OPTIONAL)参数:
datacontentencoding:数据属性的编码格式
datacontenttype:数据属性的解析方式,从json扩展到其他可选类型
schemaurl:数据的schema地址
subject:事件的主题,类似MQ里的topic
time:事件发生的时间戳
extions:扩展能力,在实现中是个List<Extension>样式,Extension是个接口由使用方实现
示例
官方目前提供了9种语言的SDK,极大方便开发人员进行集成开发。在业界,已有包括谷歌、AWS、微软、阿里云、腾讯云等开始使用CloudEvents规范向用户提供云平台内的事件通知。
下面使用sdk-go进行简单的使用示范。
事件接收端:
func Receive(event cloudevents.Event) {fmt.Printf("event info: %v", event)
}func main() {c, err := cloudevents.NewDefaultClient()if err != nil {log.Fatalf("failed to create client, %+v", err)}log.Fatal(c.StartReceiver(context.Background(), Receive));
}
事件发送端:
func main() {t, err := cloudevents.NewHTTPTransport(cloudevents.WithTarget("xxx"),cloudevents.WithEncoding(cloudevents.HTTPBinaryV02),)if err != nil {log.Fatal("failed to create transport, err: %+v ", err)}c, err := cloudevents.NewClient(t)if err != nil {log.Fatal("failed to create client, err: %+v", err)}event := cloudevents.NewEvent()event.SetID("11111")event.SetType("com.cloudevents.ts.test")event.SetSource("xxx")data := NewXXX()event.SetData(data)if err := c.Send(ctx, event); err != nil {log.Fatal("failed to send cloudevent, err: %+v", err)}
}
相关文章:
CloudEvents—云原生事件规范
我们的系统中或多或少都会用到如下两类业务技术: 异步任务,用于降低接口时延或削峰,提升用户体验,降低系统并发压力;通知类RPC,用于微服务间状态变更,用户行为的联动等场景; 以上两种…...
神经网络基础-神经网络补充概念-51-局部最优问题
概念 局部最优问题是在优化问题中常见的一个挑战,特别是在高维、非凸、非线性问题中。局部最优问题指的是算法在优化过程中陷入了一个局部最小值点,而不是全局最小值点。这会导致优化算法在某个局部区域停止,而无法找到更好的解。 解决方案…...
深度学习中,什么是batch-size?如何设置?
什么是batch-size? batch-size 是深度学习模型在训练过程中一次性输入给模型的样本数量。它在训练过程中具有重要的意义,影响着训练速度、内存使用以及模型的稳定性等方面。 以下是 batch-size 大小的一些影响和意义: 训练速度:较大的 bat…...
[保研/考研机试] KY26 10进制 VS 2进制 清华大学复试上机题 C++实现
题目链接: 10进制 VS 2进制http://www.nowcoder.com/share/jump/437195121691738172415 描述 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。 例如对于十进制…...
JSP-学习笔记
文章目录 1.JSP介绍2 JSP快速入门3 JSP 脚本3.1 JSP脚本案例3.2 JSP缺点 4 EL表达式4.1 快速入门案例 5. JSTL标签6. MVC模式和三层架构6.1 MVC6.2 三层架构 7. 案例-基于MVC和三层架构实现商品表的增删改查 1.JSP介绍 概念 JSP(JavaServer Pages)是一种…...
Golang协程,通道详解
进程、线程以及并行、并发 关于进程和线程 进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一…...
unity 之 Vector 数据类型
文章目录 Vector 1Vector 2Vector 3Vector 4 Vector 1 在Unity中,Vector1 并不是一个常见的向量类型。 如果您需要表示标量(单个值)或者只需要一维的数据,通常会直接使用浮点数(float)或整数(in…...
私密数据采集:隧道爬虫IP技术的保密性能力探究
作为一名专业的爬虫程序员,今天要和大家分享一个关键的技术,它能够为私密数据采集提供保密性能力——隧道爬虫IP技术。如果你在进行敏感数据采集任务时需要保护数据的私密性,那么这项技术将是你的守护神。 在进行私密数据采集任务时ÿ…...
使用git rebase 之后的如何恢复到原始状态
我们常常喜欢使用git rebase去切换分支提交代码,操作流程就是: 先切换分支:比如当前是master 我们修改了一堆代码产生一个commit id :5555555567777 那么我们常常比较懒就直接切换了:git checkout dev 然后呢?使用命令git rebase 5555555567777,想把这笔修改提交到d…...
matlab相机标定知识整理
matlab相机标定知识整理 单目相机标定 单目相机标定 内参矩阵:cameraParams.Intrinsics.K 或者 cameraParams.K旋转矩阵:cameraParams.RotationMatrices 有待确定 cameraParams.RotationVectors平移矩阵:cameraParams.TranslationVectors径向…...
win11安装ubuntu 子系统安装过程及注意事项
第一步 :安装系统必须组件 由于子系统是系统自带组件,需要安装软件支持 第二步:应用商店安装 ubuntu 编辑 编辑 这个时候打开会报错 第三步,运行linux子系统 选择Windows PowerShell 以管理员身份运行) 输入&#…...
torch.cat((A,B),dim=1)解析
官方说明torch.cat 引用自:Pytorch中的torch.cat()函数 torch.cat(tensors, dim0, *, outNone) → Tensor # 连接给定维数的给定序列的序列张量。所有张量要么具有相同的形状(除了连接维度),要么为空。示例 输入: import torch a torch.Tens…...
apache配置安全证书https踩坑记录
apache配置安全证书有如下几步 一、申请证书 这个网上有很多免费的,我用的是阿里云的服务器,在阿里云后台就可以申请免费证书。 二、上传证书 申请好证书后,根据服务器用的什么软件,是apache还是ngnix,下载相应的证书…...
SQL Server Express 自动备份方案
文章目录 SQL Server Express 自动备份方案前言方案原理SQL Server Express 自动备份1.创建存储过程2.设定计划任务3.结果检查sqlcmd 参数说明SQL Server Express 自动备份方案 前言 对于许多小型企业和个人开发者来说,SQL Server Express是一个经济实惠且强大的数据库解决方…...
Docker资源控制
目录 一、CPU 资源控制 1.设置CPU使用率上限 2.设置CPU资源占用比(设置多个容器时才有效) 3.设置容器绑定指定的CPU 二、对内存使用的限制 三、对磁盘IO配额控制(blkio)的限制 一、CPU 资源控制 cgroups,是一个非常强…...
微服务中间件-分布式缓存Redis
分布式缓存 a.Redis持久化1) RDB持久化1.a) RDB持久化-原理 2) AOF持久化3) 两者对比 b.Redis主从1) 搭建主从架构2) 数据同步原理(全量同步)3) 数据同步原理(增量同步) c.Redis哨兵1) 哨兵的作用2) 搭建Redis哨兵集群3) RedisTem…...
java面试强基(16)
目录 clone方法的保护机制 Java中由SubString方法是否会引起内存泄漏? Java中提供了哪两种用于多态的机制? 程序计数器(线程私有) 如何判断对象是否是垃圾? clone方法的保护机制 clone0方法的保护机制在Object中是被声明为 protected的。以User…...
Python可视化在量化交易中的应用(13)_Seaborn直方图
Seaborn中带核密度的直方图的绘制方法 seaborn中绘制直方图使用的是sns.histlot()函数: sns.histplot(data,x,y,hue,weights,stat‘count’,bins‘auto’,binwidth,binrange,discrete,cumulative,common_bins,common_norm,multiple‘layer’,element‘bars’,fill,…...
NOIP 2006 普及组 第二题 开心的金明
开心的金明 说明 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。 更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超…...
「UG/NX」Block UI 指定点SpecifyPoint
✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#...
从零开始:用QGIS和PostgreSQL构建交通路线空间数据库(含Python脚本自动化技巧)
从零开始:用QGIS和PostgreSQL构建交通路线空间数据库(含Python脚本自动化技巧) 在交通规划与智慧城市建设的浪潮中,空间数据的高效管理成为技术团队的核心挑战。传统文件存储方式难以应对大规模交通网络数据的实时查询与分析需求&…...
基于粒子群优化算法的永磁同步电机PMSM参数辨识:‘粒子群迭代‘至‘再次循环或结束
基于粒子群优化算法的永磁同步电机PMSM参数辨识 关键词:永磁同步电机 粒子群优化算法 参数辨识 ① 粒子群迭代 ②更新速度并对速度进行边界处理 ③更新位置并对位置进行边界处理 ④进行自适应变异 ⑤进行约束条件判断并计算新种群各个个体位置的适应度 ⑥新适应度与…...
VSCode里藏着的绘图神器:Live Preview搭配Mermaid插件,边写代码边出图真香了
VSCode绘图革命:用Mermaid实现代码与图表无缝协同 在IDE里切换窗口查看流程图的日子该结束了。作为每天与代码打交道的开发者,我们早已厌倦了在Visio、ProcessOn和代码编辑器之间反复横跳的繁琐操作。Mermaid语法配合VSCode的实时预览功能,正…...
终极指南:如何从零开始打造你的第一台六足机器人
终极指南:如何从零开始打造你的第一台六足机器人 【免费下载链接】hexapod 项目地址: https://gitcode.com/gh_mirrors/hexapod5/hexapod 你是否梦想过亲手制作一台能够灵活行走、稳定爬行的六足机器人?想要体验机器人制作的乐趣,却担…...
vLLM-v0.17.1详细步骤:vLLM + Triton Ensemble实现多模型协同推理
vLLM-v0.17.1详细步骤:vLLM Triton Ensemble实现多模型协同推理 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,以其出色的吞吐量和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发,现在已…...
LibreHardwareMonitor:5分钟掌握免费开源硬件监控的终极指南
LibreHardwareMonitor:5分钟掌握免费开源硬件监控的终极指南 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor, home of the fork of Open Hardware Monitor 项目地址: https://gitcode.com/GitHub_Trending/li/LibreHardwareMonitor 想要实时…...
二进制入门及其运算
二进制,十进制以及它们之间的转换- 十进制:我们日常生活中最常用的计数系统是\它的基数是10,使用0 - 9这十个数字来表示数。每个数位的权重是10的幂次方,从右往左依次是10⁰、10、10等。例如,数字234可以表示为210 310 410⁰。- 二进制:是计算机科学中广泛使用的计数系统。它的…...
零基础快速上手:免费开源H5编辑器h5maker完全指南
零基础快速上手:免费开源H5编辑器h5maker完全指南 【免费下载链接】h5maker h5编辑器类似maka、易企秀 账号/密码:admin 项目地址: https://gitcode.com/gh_mirrors/h5/h5maker 想要轻松制作专业级H5页面却苦于技术门槛?h5maker作为一…...
IntelliJ IDEA突然无法启动的快速修复指南
1. IntelliJ IDEA突然无法启动的常见原因 作为一名常年与IntelliJ IDEA打交道的开发者,我遇到过无数次IDE突然罢工的情况。最让人头疼的是,明明昨天还用得好好的,今天双击图标却毫无反应。这种情况通常由以下几个原因导致: 首先是…...
nli-distilroberta-base惊艳案例:自动识别合同补充协议与主协议的潜在矛盾条款
nli-distilroberta-base惊艳案例:自动识别合同补充协议与主协议的潜在矛盾条款 1. 项目概述 在合同审查工作中,补充协议与主协议之间的条款一致性检查是法律从业者最头疼的问题之一。传统的人工比对方式不仅耗时费力,还容易遗漏关键矛盾点。…...
