如何用 Mybatis 实现服务器资源配额管理 (悲观锁/乐观锁)

2021-02-07 17:33:48 +08:00
 feng32

为了简化问题,假设只有一台服务器,这台服务器有 100 份计算资源

这台服务器上最多可以同时运行 100 个任务

create table task (
   id       int,
   resource int, /* 1-10 */
   varchar  status
);

用户可以创建一个计算请求,并指定需要的资源量 POST /createTask {"resouce":10} 任务执行完成后,状态由 running 变为 finished,此时资源就被释放

如何使用 Java+Mybatis 实现可靠的资源配额呢? Mybatis 支持乐观锁和悲观锁的实现吗?

828 次点击
所在节点    程序员
3 条回复
siweipancc
2021-02-08 09:08:30 +08:00
1. 单机环境下不应该用表,jdk 的信号量足够。
2. 乐观锁要手写插件: https://github.com/Dreamroute/locker
feng32
2021-02-08 21:09:24 +08:00
@siweipancc 实际上有多机,所以还是要用数据库实现

请教一下,我是不是少设计了一张表?是不是应该有一张表记录服务器库存

table server: resource = 100

首先从库存里扣,扣成功了再插入一个 task,如果扣成功了,但是 task 插入失败了,回滚库存
siweipancc
2021-02-09 11:18:49 +08:00
@feng32 多机的话,我的建议是用 redis 队列,看下官网的 list 文档说明

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/752140

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX