V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
feng32
V2EX  ›  程序员

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

  •  
  •   feng32 · 2021-02-07 17:33:48 +08:00 · 907 次点击
    这是一个创建于 1386 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    table server: resource = 100

    首先从库存里扣,扣成功了再插入一个 task,如果扣成功了,但是 task 插入失败了,回滚库存
    siweipancc
        3
    siweipancc  
       2021-02-09 11:18:49 +08:00 via iPhone
    @feng32 多机的话,我的建议是用 redis 队列,看下官网的 list 文档说明
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 06:34 · PVG 14:34 · LAX 22:34 · JFK 01:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.