[英]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.