我正在设计一个处理外部web服务的系统。服务限制了在一段时间内可以提出的请求的数量(T)。该系统允许对一定数量的请求(R)进行批处理。服务支持一定数量的操作(O)。
我的代码将处理来自用户的未知数量的请求(目前我真的不知道,可能是每天一个请求,可能是每秒数千个请求,但我需要以每秒数千个的假设构建它)。这些结果将在数据库中缓存一段时间。当数据库记录过期时,系统将需要再次从web服务请求数据。
我只能通过一个IP地址访问web服务,只有一个帐户(没有欺骗和每种操作类型获得一个帐户,或者每种操作类型有一台机器)。系统将(希望)全部运行在一台服务器上。
我所要做的(几个星期来一直在思考这个问题,却没有任何我喜欢的结果)是想出了一个系统:
H 19以相同的顺序处理用户请求(除了处理相同类型的用户请求之后,H 210F 211)。
例如,T是1秒,R是3,O是2。
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一旦处理了副本,就会得到以下内容:
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这些请求应按以下顺序处理:
T1 Request 1, Request 2, Request 8
T2 Request 4, Request 11
T3 Request 9, Request 10, Request 7我想可能会有3-7种手术类型。一些操作类型会比其他操作类型有更多的请求。系统请求的数量可能比用户请求的数量更多。
是否有共同的方法来处理这类问题?一种模式或技术?我是不是想得太多了(不幸的是,在统计数据启动运行之后,我甚至无法合理地猜出它们将是什么)?
我想要避免的主要事情是:
通过用户请求处理系统请求(系统请求可以等待数周,用户请求必须尽快进行处理)在数据库中缓存数据的期间不进行两次相同的请求。
发布于 2009-02-28 07:37:42
我可以通过两个队列来解决这个问题:一个用于用户,另一个用于系统请求。将每个队列设计为一个按字典顺序排列的集合,其中包含一个元组(操作类型、数据、到达时间);这假设您可以定义对数据片段的排序。有序设置允许通过部分键进行搜索,因此可以在两个队列中检查重复请求,并允许将系统提升为用户请求。不过,我不太明白T变量的作用。
https://stackoverflow.com/questions/597659
复制相似问题