企業(yè)應用架構模式之標識映射
標識映射也是一種對象-關系行為模式,其定義如下:通過在映射中保存已加載的對象,確保每個對象只加載一次;當要訪問他們的時候,通過映射來查找它們。標識映射的主要目的是保持一致性,而不是提高性能。
一般而言,為了達到確保每個對象只加載一次的目的,可以引入對象池來保存已加載的對象。當客戶端需要使用對象時,先根據(jù)映射鍵在對象池中查找,如果對象池中沒有,就從數(shù)據(jù)庫里加載。
資源池(resource pool)是管理與共享系統(tǒng)資源的一種緩存機制。系統(tǒng)在建立一個資源池時,通常會預先創(chuàng)建一定數(shù)量的資源放入池中;當某一客戶程序申請資源時,資源池可將這些預先創(chuàng)建的資源分配給客戶程序;當資源使用完畢后,資源池再將這些資源回收并可分配給其他客戶程序。在面向?qū)ο笤O計的背景下,資源池所管理的各類資源均可抽象為對象,資源池中存放的都是資源對象的實例,故資源池亦稱對象池(object pool)。
用對象池(也被稱為資源池)的話需要考慮以下問題:(1)鍵的選擇,要選擇一個對象屬性來作為其唯一標識;(2)對象池的大小與策略。
對于問題1,通??梢圆捎糜脭?shù)據(jù)庫主鍵來作為對象標識;而對象池的大小則取決于設備的內(nèi)存狀況,對于內(nèi)存大的設備不妨將對象池設置大一點,以保證系統(tǒng)的實時響應性。但對于內(nèi)存較少的設備,只能在一定程度上犧牲響應性。系統(tǒng)的內(nèi)存與速度永遠是矛盾的兩個方面,設計者要做的的是根據(jù)實際情況作出權衡。
資源池的具體策略如下:
1. 資源創(chuàng)建策略
資源創(chuàng)建策略用于定制資源池創(chuàng)建新資源實例的行為。最簡單的策略是只允許在建立資源池時創(chuàng)建資源,但這種策略缺乏靈活性,僅適合那些資源數(shù)目十分有限的應用。另一種策略是為資源池設置池中資源數(shù)目的上限與下限閾值,在資源池建立后池中資源實例的數(shù)量可動態(tài)地在限定范圍之內(nèi)浮動;當池中無可用資源供客戶程序使用時,資源池可在上限閾值限定范圍內(nèi)創(chuàng)建并返回一個新的資源實例。
2. 資源分配策略
當客戶程序提出資源申請而資源池中無可用資源時,資源分配策略決定了資源池的不同處理方式。最簡單的策略是立即返回一個空值或報告一個異常,通知客戶程序無法分配資源。另一種策略是阻塞客戶程序并讓客戶程序進入一個隊列中等待,直至資源池回收了新的可用資源;該策略還可配合使用超時限制,等待時間過長則向客戶程序報告異常。
3. 負載均衡策略
負載均衡策略用于指示資源池如何將資源使用任務平均分配給池中的資源實例。資源池在分配資源時,對資源實例的選取可采取循環(huán)策略(round-robin),即依次分配池中的所有資源實例;也可采取隨機策略,即從池中隨機地選取一個資源實例;也可采取最少使用策略,即將池中使用次數(shù)最少的資源實例分配給客戶程序;也可采取最近使用策略,即將池中剛回收的資源實例分配給客戶程序。
4. 資源恢復策略
正在使用的資源實例可能因網(wǎng)絡連接、磁盤耗盡等原因?qū)е沦Y源不再可用,倘若這些資源不加處理即回收到資源池中,還會影響下一客戶程序?qū)Y源的使用,從而降低系統(tǒng)的可靠性。資源恢復策略用于指示資源池如何發(fā)現(xiàn)資源實例的錯誤,并設法將這些資源修復到正常狀態(tài)。
發(fā)現(xiàn)資源錯誤時可采取兩種不同的策略:一種策略是由客戶程序發(fā)現(xiàn)資源異常后主動通知資源池,另一種策略是由資源池主動對回收的資源實例進行正確性校驗。資源池執(zhí)行的校驗以及修復工作適宜由一個后臺監(jiān)控線程定期執(zhí)行,而不是在資源出現(xiàn)故障時立即執(zhí)行修復工作,以避免降低資源池處理資源請求的響應性能。
5. 資源回收策略
在正常情況下,客戶程序使用資源完畢后會顯式地將資源歸還資源池。但有時可能出現(xiàn)客戶程序?qū)Y源的不合理使用(例如長期占用資源而導致其他客戶程序無法使用),也可能因網(wǎng)絡連接中斷導致客戶程序無法顯式地歸還資源,這會給有限的系統(tǒng)資源造成嚴重浪費。資源回收策略用于指示資源池在收回分配給客戶程序使用的資源時采取的行為。一種改進的策略是由資源池控制資源實例的生存期,而不是由客戶程序直接操縱資源實例的對象引用。該策略的實現(xiàn)通常采用代理設計模式為資源對象引入包裝對象,客戶程序只對包裝對象進行操作。倘若客戶程序在規(guī)定時間內(nèi)未操作資源對象或出現(xiàn)其他超時條件,則可將資源對象從包裝對象中剝離出來,歸還資源池以供其他客戶程序使用;原客戶程序再次通過包裝對象訪問資源對象時,須由代理對象重新向資源池申請資源。有狀態(tài)資源對象的剝離比較復雜,必須保存這些資源的狀態(tài)以備包裝對象重新申請時恢復狀態(tài)。資源池實施這些策略時,控制過程對客戶程序而言是透明的。
6. 資源清除策略
資源清除策略用于定制資源池撤銷資源實例的行為。當資源池中出現(xiàn)較多空閑的資源實例時,有必要清除一些資源以騰出更多內(nèi)存空間供資源池以外的其他應用程序使用。最簡單的策略是在出現(xiàn)客戶程序申請或釋放資源等系統(tǒng)事件時刪除多余資源,但這可能導致資源池的響應性能下降。一種常見策略是為每一資源關聯(lián)一個時間戳,記錄該資源創(chuàng)建或最近使用的時間,從而可根據(jù)最近最少使用策略、最舊策略、超時策略等不同策略決定哪些資源將被清除。另一種策略是使用后臺監(jiān)控線程定期檢查資源池中的資源總數(shù)、空閑資源數(shù)量、空閑資源未被使用的時間等,以決定是否刪除部分資源實例。
原文鏈接:http://blog.csdn.net/luoxinwu123/article/details/8045692