为了简化问题,假设只有一台服务器,这台服务器有 100 份计算资源
这台服务器上最多可以同时运行 100 个任务
create table task (
id int,
resource int, /* 1-10 */
varchar status
);
用户可以创建一个计算请求,并指定需要的资源量 POST /createTask {"resouce":10} 任务执行完成后,状态由 running 变为 finished,此时资源就被释放
如何使用 Java+Mybatis 实现可靠的资源配额呢? Mybatis 支持乐观锁和悲观锁的实现吗?
1
siweipancc 2021-02-08 09:08:30 +08:00 via iPhone
1. 单机环境下不应该用表,jdk 的信号量足够。
2. 乐观锁要手写插件: https://github.com/Dreamroute/locker |
2
feng32 OP @siweipancc 实际上有多机,所以还是要用数据库实现
请教一下,我是不是少设计了一张表?是不是应该有一张表记录服务器库存 table server: resource = 100 首先从库存里扣,扣成功了再插入一个 task,如果扣成功了,但是 task 插入失败了,回滚库存 |
3
siweipancc 2021-02-09 11:18:49 +08:00 via iPhone
@feng32 多机的话,我的建议是用 redis 队列,看下官网的 list 文档说明
|