V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
feng32
V2EX  ›  程序员

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

  •  
  •   feng32 · Feb 7, 2021 · 1192 views
    This topic created in 1906 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    table server: resource = 100

    首先从库存里扣,扣成功了再插入一个 task,如果扣成功了,但是 task 插入失败了,回滚库存
    siweipancc
        3
    siweipancc  
       Feb 9, 2021 via iPhone
    @feng32 多机的话,我的建议是用 redis 队列,看下官网的 list 文档说明
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1398 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 17:07 · PVG 01:07 · LAX 10:07 · JFK 13:07
    ♥ Do have faith in what you're doing.