首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多级队列设计

多级队列设计
EN

Stack Overflow用户
提问于 2009-02-28 06:51:11
回答 1查看 824关注 0票数 2

我正在设计一个处理外部web服务的系统。服务限制了在一段时间内可以提出的请求的数量(T)。该系统允许对一定数量的请求(R)进行批处理。服务支持一定数量的操作(O)。

我的代码将处理来自用户的未知数量的请求(目前我真的不知道,可能是每天一个请求,可能是每秒数千个请求,但我需要以每秒数千个的假设构建它)。这些结果将在数据库中缓存一段时间。当数据库记录过期时,系统将需要再次从web服务请求数据。

我只能通过一个IP地址访问web服务,只有一个帐户(没有欺骗和每种操作类型获得一个帐户,或者每种操作类型有一台机器)。系统将(希望)全部运行在一台服务器上。

我所要做的(几个星期来一直在思考这个问题,却没有任何我喜欢的结果)是想出了一个系统:

  • 重复请求被合并(重复表示它们具有相同的请求数据)
  • 用户请求比系统请求
  • 具有优先级,系统请求可以更改为用户请求(数据库更新在队列中,用户正在请求相同的数据),如果没有针对特定操作的R用户请求,则从系统请求

H 19以相同的顺序处理用户请求(除了处理相同类型的用户请求之后,H 210F 211)。

例如,T是1秒,R是3,O是2。

代码语言:javascript
运行
复制
Request 1,  user,   operation A, data 1
Request 2,  user,   operation A, data 2
Request 3,  user,   operation A, data 1 <- duplicate of request 1
Request 4,  system, operation B, data 3
Request 5,  system, operation A, data 1 <- duplicate of request 3
Request 6,  user,   operation B, data 3 <- duplicate of Request 4
Request 7,  system, operation A, data 4
Request 8,  user,   operation A, data 5
Request 9,  user,   operation A, data 6
Request 10, user,   operation A, data 7
Request 11, user,   operation B, data 8

一旦处理了副本,就会得到以下内容:

代码语言:javascript
运行
复制
Request 1,  user,   operation A, data 1 
Request 2,  user,   operation A, data 2 
Request 4,  user,   operation B, data 3 <- promoted to user from system (msg 6)    
Request 7,  system, operation A, data 4 
Request 8,  user,   operation A, data 5 
Request 9,  user,   operation A, data 6 
Request 10, user,   operation A, data 7 
Request 11, user,   operation B, data 8

这些请求应按以下顺序处理:

代码语言:javascript
运行
复制
T1 Request 1, Request 2, Request 8
T2 Request 4, Request 11
T3 Request 9, Request 10, Request 7

我想可能会有3-7种手术类型。一些操作类型会比其他操作类型有更多的请求。系统请求的数量可能比用户请求的数量更多。

是否有共同的方法来处理这类问题?一种模式或技术?我是不是想得太多了(不幸的是,在统计数据启动运行之后,我甚至无法合理地猜出它们将是什么)?

我想要避免的主要事情是:

  • 通过用户请求处理系统请求(系统请求可以等待数周,用户请求必须尽快进行处理)
  • 在数据库

中缓存数据的期间不进行两次相同的请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-02-28 07:37:42

我可以通过两个队列来解决这个问题:一个用于用户,另一个用于系统请求。将每个队列设计为一个按字典顺序排列的集合,其中包含一个元组(操作类型、数据、到达时间);这假设您可以定义对数据片段的排序。有序设置允许通过部分键进行搜索,因此可以在两个队列中检查重复请求,并允许将系统提升为用户请求。不过,我不太明白T变量的作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/597659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档