- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在创建一个新服务,为此我有一个包含状态字段的数据库条目 (Mongo),我需要根据当前时间更新该字段,例如,开始时间设置为两点几个小时后,我需要在数据库中将状态从 CREATED -> STARTED 更改,并且可以有多个这样的状态。
我想到的方法:
继续查询 <= 当前时间的数据库条目,然后相应地更改它们的状态。这会导致无缘无故的额外读取和一半时间的空读取,并且随着更多状态的进入,它会很快变得复杂。
我编写了一个作业调度程序(我正在使用 go,所以这并不难),并安排所有作业,但如果出现 panic /崩溃,我可能会丢失队列数据。
我使用 celery 等产品,找到了一个 go 实现 https://github.com/gocelery/gocelery
我发现的另一个任务调度程序在 Google Cloud 上 https://cloud.google.com/solutions/reliable-task-scheduling-compute-engine ,但我不想陷入专有技术。
我想为此使用一些 PubSub 服务,但找不到有延迟消息的服务(如果有的话)。我的问题主要是无法找到此问题的实际名称,以便能够正确搜索它,我什至尝试过搜索 Microsoft 文档。如果有人能给我指明正确的方向,或者如果我写的任何方法是我应该使用的方法,请告诉我,那将是一个很大的帮助!
更新:针对同样的问题,找到了 Netflix 的另一种解决方案 https://medium.com/netflix-techblog/distributed-delay-queues-based-on-dynomite-6b31eca37fbc
最佳答案
我认为您是对的,您要解决的问题是作业或任务调度问题。
许多公司使用的一种方法是您提议的系统:将作业插入到数据存储中并指定执行时间,然后可以轮询该数据存储以查找要运行的作业。有一些优化可以防止额外的读取,比如定期轮询数据库和使用指数退避。该系统的优点是可以容忍节点故障,缺点是增加了系统的复杂性。
环顾四周,除了您链接的那个 ( https://github.com/gocelery/gocelery ) 还有这个模型的其他实现 ( https://github.com/ajvb/kala 或 https://github.com/rakanalh/scheduler 是我在快速搜索后找到的)。
您描述的另一种方法“安排正在进行的作业”在 go 中非常简单,因为停放的 goroutines 非常便宜。只需廉价地为您的工作生成一个 goroutine 就很简单。这很简单,但缺点是如果进程挂掉,工作就会丢失。
go func() {
<-time.After(expirationTime.Sub(time.Now()))
// do work here.
}()
我见过但不推荐的最后一种方法是回调模型(类似于 https://gitlab.com/andreynech/dsched )。这是您的服务调用另一个服务(通过 http、grpc 等)并在特定时间安排回调的地方。优点是如果您有多个不同语言的服务,它们可以使用相同的调度程序。
总的来说,在您决定解决方案之前,我会考虑一些权衡:
祝你好运!希望对您有所帮助。
关于go - 安排任务/消息以供以后处理/交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52242316/
我必须在 Python 中分析/可视化模拟(Simulink、EES)的结果。 平均我必须从结果文件中导入 40-100 个变量(每个变量是一个包含多个 thausend 行的向量):每个变量在 re
我有一个使用 glKit 运行的游戏,我想在每一帧渲染后使用着色器添加一些后期处理效果。 是否可以在 glKit 下执行此操作? 最佳答案 这是可能的。 您需要创建自己的屏幕外帧缓冲区对象和相关纹理。
我是 GPS 世界的新手。我需要知道如何使用 DGPS 进行后处理。我在网上找到了关于 DGPS、后处理等的定义,但是,找不到关于如何实际进行 DGPS 后处理的明确步骤。在搜索提供商时,我发现 CO
我正在研究从 Apache 切换到 Nginx 作为后端 Grails 应用程序前面的反向代理。我正在玩一些 URL 重写并且遇到了从我的后端发回的响应的问题。我可以处理位置 header 重写,但我
如何在 Assimp 中加载网格、编辑顶点,然后让 assimp 重新计算顶点并进行其他后处理? 导入器可以导入场景并支持一些标志,其中包括生成法线的标志。然而,在我加载网格之后,我稍微编辑了网格(添
我正在尝试实现来自 http://www.aftek.com/afteklab/aftek-RTMP-library.shtml 的库从 red5 服务器流式传输实时视频。 在服务器上,我正在使用 s
我在 Godot 中有一个项目可以在敌人上方渲染广告牌四边形。四边形(网格实例)是敌人节点的子节点。我只想将四边形渲染到视口(viewport)以进行后处理,但四边形需要在屏幕上具有与敌人相同的位置(
我正在设置一个服务器来使用 tesseract 进行大量自动 OCR,并且我想对结果进行一些后处理。 在理论方面有很多关于此的资源,但在实践方面我没有找到太多资源。 我想你可以做一些基本的事情,比如:
假设我有一个函数fancyParse,旨在获取服务器返回的响应并将其转换为其他内容。如果响应毫无意义,或者设置了特殊的“内部错误”标志,则该函数将抛出异常。 我想将此函数链接到 $.post 调用中以
我有一个带有 knockout 值的基本输入字段: 但是,我想在收到“mytext”的值后对我的 View 模型执行一些逻辑。最初我想到了某种后处理事件ala“valueUpdate”,但基本上我只
将 PostProcessEffectRenderer 的实现添加到 Unity 后处理堆栈后,该效果在 Unity 编辑器中完美运行,但未在构建的游戏中显示。 对构建质量的更改没有效果,使用最高质量
我有一堆相当冗长的 xml 文件,它们以某种方式命名,例如“verbosefile_*.xml”。我有一对 python 脚本,可以将这些 xml 文件转换为紧凑的 json 格式,反之亦然。目前我的
我需要对从包(包是共享对象文件)导入的函数进行多次调用。但是,每次我从这个包中调用函数时,我都需要执行一些预处理/后处理步骤。像这样的事情: import xyz prepare() xyz.foo(
我需要对从包(包是共享对象文件)导入的函数进行多次调用。但是,每次我从这个包中调用函数时,我都需要执行一些预处理/后处理步骤。像这样的事情: import xyz prepare() xyz.foo(
我的问题是是否有一种方法可以简单地发布处理 wicket HTML 响应? 我想做的是使用 Rhino (http://www.mozilla.org/rhino/) 和 jQuery 将一些 DOM
这是我要存储在我的 Realm 数据库中的类。在构建应用程序时,它会抛出 “错误:如果声明了自定义构造函数,则必须声明不带参数的默认公共(public)构造函数。” 但在使用 realm 之前没问题
我正在尝试组合 SMAA和 SSAO在我的 THREE.EffectComposer 中,如下所示: this.composer = new THREE.EffectComposer(this.ren
我正在尝试为我的应用程序开发直接文件上传到 S3。我正在关注 github 教程,一切都差不多,但是在尝试进行后期处理时收到错误消息。 我做了以下事情: 我有一个名为 clip.rb 的 active
我已经开始使用 C++ 并在 projecteuler.net 上摆弄一些问题。 我在回答问题 #4,这是我的代码: 判断数字是否为回文的算法: bool forwardCheck(long posP
我是一名优秀的程序员,十分优秀!