簡體   English   中英

尋找資源管理/分配系統

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM