加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 乐观缓存并发设计模式

发布时间:2020-12-14 16:29:38 所属栏目:Java 来源:网络整理
导读:我有一个在一组服务器上运行的Web服务.该网络服务进行一些内部处理,然后可以拨打外部服务来收取费用. 我想放入一些缓存,以便如果我收到相同的服务请求(这是保证发生的话),那么我不必重复处理,节省了处理时间/功耗,同时也节省了外部部分的成本的服务电话. 但
我有一个在一组服务器上运行的Web服务.该网络服务进行一些内部处理,然后可以拨打外部服务来收取费用.

我想放入一些缓存,以便如果我收到相同的服务请求(这是保证发生的话),那么我不必重复处理,节省了处理时间/功耗,同时也节省了外部部分的成本的服务电话.

但是,当我遇到以下限制时,我正在努力找出如何管理缓存

>该服务正在多个Web服务器上运行,以实现高可用性和可扩展性
>请求可能需要5秒钟的时间来响应,但同时我可能已经收到了两个或三个其他相同的请求.

在分布式环境中工作时,如何执行其他服务调用,直到第一个响应(缓存中可用)才能执行.

我已经考虑在代理中建立一个前端代理模式并构建一个相同请求的队列,这样当第一个返回时,它也可以向其他方返回相同的响应.这是正确的模式,还是有更好的并发模式来处理这种情况?

解决方法

你可以

>计算请求的密码散列
>查看结果是否已经存在于数据库中,如果是这样,返回它
>将数据库中的哈希存储为“结果等待”状态
>调用Web服务并使用结果更新数据库中的行.

在步骤2中,如果散列已经在数据库中,并且具有“结果待处理”状态,则可以每X毫秒轮询数据库,最后在结果返回结果之后.

恶魔在细节当然是因为你必须决定你做什么,以防发生错误:

>您是否为所有后续相同请求返回错误?>你是否导致等待的线程重试调用Web服务?>你是否返回一个错误,但只有一段时间,然后重试?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读