首页 后端开发 Golang 每个周期的类似事件重复数据删除

每个周期的类似事件重复数据删除

Sep 06, 2024 pm 10:30 PM

Similar Event De-duplication per Period

活动方向很棒!

无论您使用的是 GCP Pub/Sub、Kafka、Kinesis、RabbitMQ、NATS JetStream、Redis Pub/Sub 还是任何无数的替代方案,您学到的模式都适用于它们。

每个周期的相似事件重复数据删除

即使您享受一次性交付,您仍然会遇到类似的事件,而您并不想多次对其做出反应。

一个很好的例子就是可操作的警报。当第一次发现问题时,最好升级以引起某人的注意,需要采取行动。第700次只是噪音。

如果您要发送事件,您有字段(无论是 JSON/protobuf/struct 等),您只需要确定按哪些字段对事物进行分组,以便将它们分类到您的时间段的同一个存储桶中。

您可以获取这些事件字段的任意集合的哈希值,并计算它们的哈希值,作为某些持久性源(键值存储、SQL 等)的关键,例如,在 Go 中:https://go。 dev/play/p/Ain8FIJiDit

然后将该哈希值与过期时间戳一起存储。如果您在过期时间戳之前遇到任何更多“类似”事件,请忽略它们,因为它们已经引起了某人的注意。

现实生活中的例子

在工作中,我们与学区打交道,他们向我们提供他们的名册,并定期(每晚)同步。但有时学区的人会犯错误,比如不小心删除了名册中的所有学生。哎呀!不过,如果他们没有解决问题,我们其实不需要多次继续提醒。

学区以及我们无法对其进行排班的原因是复合唯一键。

每当我们提交 JIRA 票证(或向 Slack 发送警报)时,我们首先计算这两个键的哈希值,并查看是否已发送匹配的哈希值,如果是,则最后一个警报是否已过期 (24小时或其他),然后发送新的并更换旧的。例如,一个学区的名册失败可能会有一些通用的内容:

v := map[string]any{
        "district":  "00be2b9c-ef18-4c27-8fa9-087dd5f39f27",
        "attention": "rosterops",
        "reason": "roster change exceeds threshold",
    }

直到第二天你才会听说该学区未能再次进行轮班。但是,如果有人手动尝试同步,并且该地区发生了不同类型的故障(现在重新运行会给出“服务不可用”,而不是超过更改容忍阈值:

v := map[string]any{
        "district":      "00be2b9c-ef18-4c27-8fa9-087dd5f39f27",
        "attention": "rosterops",
        "reason": "roster provider is unavailable",
    }

同样,我们可以对这些字段的任意集合进行哈希处理,并将其设为警报实体上的索引数据存储字段。 https://go.dev/play/p/Ain8FIJiDit

额外奖金

如果您还保留了另一个字段,例如“状态”,您可以查看是否有人已经在处理它,并将其成为任何任意警报系统的一个不错的操作项跟踪器。

以上是每个周期的类似事件重复数据删除的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

Rimworld Odyssey温度指南和Gravtech
1 个月前 By Jack chen
初学者的Rimworld指南:奥德赛
1 个月前 By Jack chen
PHP变量范围解释了
4 周前 By 百草
撰写PHP评论的提示
3 周前 By 百草
在PHP中评论代码
3 周前 By 百草

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1604
29
PHP教程
1509
276
进行音频/视频处理 进行音频/视频处理 Jul 20, 2025 am 04:14 AM

音视频处理的核心在于理解基本流程与优化方法。1.其基本流程包括采集、编码、传输、解码和播放,每个环节均有技术难点;2.常见问题如音画不同步、卡顿延迟、声音噪音、画面模糊等,可通过同步调整、编码优化、降噪模块、参数调节等方式解决;3.推荐使用FFmpeg、OpenCV、WebRTC、GStreamer等工具实现功能;4.性能管理方面应注重硬件加速、合理设置分辨率帧率、控制并发及内存泄漏问题。掌握这些关键点有助于提升开发效率和用户体验。

如何在GO中构建Web服务器 如何在GO中构建Web服务器 Jul 15, 2025 am 03:05 AM

搭建一个用Go编写的Web服务器并不难,核心在于利用net/http包实现基础服务。1.使用net/http启动最简服务器:通过几行代码注册处理函数并监听端口;2.路由管理:使用ServeMux组织多个接口路径,便于结构化管理;3.常见做法:按功能模块分组路由,并可用第三方库支持复杂匹配;4.静态文件服务:通过http.FileServer提供HTML、CSS和JS文件;5.性能与安全:启用HTTPS、限制请求体大小、设置超时时间以提升安全性与性能。掌握这些要点后,扩展功能将更加容易。

使用默认情况选择 使用默认情况选择 Jul 14, 2025 am 02:54 AM

select加default的作用是让select在没有其他分支就绪时执行默认行为,避免程序阻塞。1.非阻塞地从channel接收数据时,若channel为空,会直接进入default分支;2.结合time.After或ticker定时尝试发送数据,若channel满则不阻塞而跳过;3.防止死锁,在不确定channel是否被关闭时避免程序卡住;使用时需注意default分支会立即执行,不能滥用,且default与case互斥,不会同时执行。

在GO中开发Kubernetes运营商 在GO中开发Kubernetes运营商 Jul 25, 2025 am 02:38 AM

编写KubernetesOperator的最有效方式是使用Go语言结合Kubebuilder和controller-runtime。1.理解Operator模式:通过CRD定义自定义资源,编写控制器监听资源变化并执行调和循环以维护期望状态。2.使用Kubebuilder初始化项目并创建API,自动生成CRD、控制器和配置文件。3.在api/v1/myapp_types.go中定义CRD的Spec和Status结构体,运行makemanifests生成CRDYAML。4.在控制器的Reconcil

去休息API示例 去休息API示例 Jul 14, 2025 am 03:01 AM

如何快速实现一个Go编写的RESTAPI示例?答案是使用net/http标准库,按照以下三个步骤即可完成:1.设置项目结构并初始化模块;2.定义数据结构和处理函数,包括获取所有数据、根据ID获取单个数据、创建新数据;3.在main函数中注册路由并启动服务器。整个过程无需第三方库,通过标准库即可实现基本的RESTAPI功能,并可通过浏览器或Postman进行测试。

如何在Go中提出HTTP请求 如何在Go中提出HTTP请求 Jul 14, 2025 am 02:48 AM

在Go语言中发起HTTP请求的方法如下:1.使用http.Get()发起最简单的GET请求,记得处理错误并关闭Body;2.使用http.Post()或http.NewRequest() http.Client.Do()发送POST请求,可设置JSON数据或表单数据;3.设置超时、Header和Cookie,通过Client控制Timeout、Header.Set添加自定义头,以及使用CookieJar自动管理Cookie;4.注意事项包括必须关闭Body、不可复用req对象、设置User-Ag

Go PostgreSQL/MySQL的查询优化技术 Go PostgreSQL/MySQL的查询优化技术 Jul 19, 2025 am 03:56 AM

TooptimizeGoapplicationsinteractingwithPostgreSQLorMySQL,focusonindexing,selectivequeries,connectionhandling,caching,andORMefficiency.1)Useproperindexing—identifyfrequentlyqueriedcolumns,addindexesselectively,andusecompositeindexesformulti-columnquer

解释说明 解释说明 Jul 14, 2025 am 02:57 AM

defer的核心作用是推迟执行函数调用直到当前函数返回,常用于资源清理。具体包括:1.确保文件、网络连接、锁等资源及时释放;2.执行顺序为后进先出(LIFO),最后定义的defer最先执行;3.参数在defer定义时即确定,非执行时求值,若需捕获变量变化可用闭包或指针;4.避免在循环中滥用defer,防止资源累积未及时释放。

See all articles