[英]Looking for resource management/allocation system
我需要的是一个系统,我可以在上面定义简单的对象(例如,一个“服务器”,可以有一个“操作系统”和“版本”字段,以及其他元数据(IP、MAC 地址等))。
我希望能够以安全的方式从系统请求对象,例如,如果我定义了一个“服务器”,可以由 3 个客户端同时使用,那么如果 4 个客户端同时请求一个服务器时间,人们将不得不等到服务器被释放。
此外,我需要能够以某种查询样式执行请求,例如allocate(type=System, os='Linux', version=2.6)
。
语言并不重要,但 Python 是一个优势。
过去几天我一直在谷歌上搜索这样的东西,但一无所获,也许我不知道这种系统有一个更好的名字。
有什么建议吗?
谢谢!
并发应用程序中的资源限制——比如“最多 3 个客户端”的例子——通常是通过使用信号量(或更准确地说,计数信号量)来实现的。
您通常使用一些“计数”来初始化信号量 - 这是对该资源的最大并发访问数 - 并且每次客户端开始使用该资源时都会减少此计数器,并在客户端使用完该资源时增加它。 信号量的实现保证了“递增”和“递减”操作将是原子的。
您可以在 Wikipedia 上阅读有关信号量的更多信息。 我对 Python 不太熟悉,但我认为这两个链接可以提供帮助:
对于 Java,有一个非常好的标准库具有此功能:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html
只需创建一个带有 Semaphore 字段的类:
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
”),将所选服务器标记为已使用,最后取消标记,提交事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.