【发布时间】:2020-06-27 06:08:25
【问题描述】:
背景:
我正在开发一个使用 Spring MVC 和 Angular 构建的基于 Web 的应用程序。我们有一个帮助台模块,座席用来为客户服务工作。该应用程序部署在单个服务器上。我们有一个工单锁定机制,即当一个代理打开一个工单开始处理它时,工单被锁定到该代理,这样其他代理就不能同时处理同一个工单。一旦代理关闭票证,其他代理就可以在需要时打开和更新。为了锁定票证以避免过多的数据库调用,我们实现了ConcurrentHashMap,这样每个人都可以使用相同的地图更新锁定票证,这绝对可以正常工作。
问题:
现在应用程序部署在两台不同的服务器上,这个ConcurrentHashMap 不起作用,因为 MAP 由每台服务器维护。如果用户正在使用节点 1 锁定票证,并且如果第二个用户的请求转到节点 2,则此方法将不起作用。为了避免这种情况,我们计划更改流程,以便我们可以避免此类问题。同时,我们不希望将此锁定细节直接保存到 DB 以避免 DB IO,因为它是应用程序非常频繁使用的区域。
选项 在进行了一些研发之后,我得到了我们可以实施的以下选项,同时牢记持久性。
- 我们可以使用 MSSQL 或 Redis 实现 In-Memory 表概念
- RabbitMQ
- 我们可以实现一个将部署在单个节点上的 API,我们的两个服务器都将使用它来维护锁定票证,但我们仍然有两个问题,这个调用 API 会花费时间,第二个是它没有持久化数据,如果服务器重新启动,我们将丢失数据。
任何人都可以告诉我哪种方法应该适合上述情况以及如何实施它。我只需要一个启动。
提前致谢。
【问题讨论】: