【问题标题】:Looking for resource management/allocation system寻找资源管理/分配系统
【发布时间】:2011-01-01 13:16:47
【问题描述】:

我需要的是一个可以在其上定义简单对象的系统(例如,一个“服务器”,它可以具有“操作系统”和“版本”字段,以及其他元数据(IP、MAC 地址等))。 我希望能够以安全的方式从系统请求对象,例如,如果我定义一个“服务器”,可以由 3 个客户端同时使用,那么如果 4 个客户端同时请求一个服务器时间,必须等到服务器被释放。
此外,我需要能够以某种查询样式执行请求,例如allocate(type=System, os='Linux', version=2.6)

语言无关紧要,但 Python 是一个优势。

过去几天我一直在谷歌上搜索类似的东西,但一无所获,也许这种系统有一个更好的名字,我不知道。

有什么建议吗?

谢谢!

【问题讨论】:

  • “系统”是什么意思? Python 的库/框架或完全独立的应用程序(例如 DB)?
  • 一个独立的系统,或者一个已经处理了除了配置之外的所有事情的框架。我认为任何低于此的内容都不值得,我会自己写。

标签: resources allocation


【解决方案1】:

并发应用程序中的资源限制(例如“最多 3 个客户端”示例)通常通过使用信号量(或更准确地说,计数信号量)来实现。

您通常使用一些“计数”来初始化信号量 - 这是对该资源的最大并发访问次数 - 每次客户端开始使用该资源时都会减少此计数器,并在客户端完成使用时增加它。信号量的实现保证了“递增”和“递减”操作是原子的。

您可以阅读有关semaphores on Wikipedia 的更多信息。我对 Python 不太熟悉,但我认为这两个链接可以提供帮助:

【讨论】:

  • 谢谢。我知道信号量。我正在寻找一个已经为我工作的系统。
【解决方案2】:

对于 Java,有一个非常好的标准库具有此功能:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

只需创建一个带有信号量字段的类:

 class Server {
   private static final MAX_AVAILABLE = 100;
   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
   // ... put all other fields (OS, version) here...
   private Server () {}

   // add a factory method
   public static Server getServer() throws InterruptedException {
     available.acquire();
     //... do the rest here
   }

 }

编辑:

如果您希望事情更“可配置”,请考虑使用 AOP 技术,即创建基于信号量的同步方面。

编辑:

如果您想要完全独立的系统,我想您可以尝试使用任何支持行级锁定作为信号量的现代数据库(例如 PostgreSQL)系统。例如,为每个代表一个服务器创建 3 行,如果它们空闲(例如“select * from server where is_used = 'N' for update”),则使用锁定选择它们,将所选服务器标记为已使用,最后取消标记,提交事务。

【讨论】:

  • 是的,您在 DB 解决方案中描述的内容几乎是在编写我自己的解决方案...无论如何,谢谢
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 2017-12-10
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
相关资源
最近更新 更多