Ice筆記---Ice Run Time詳述(二)

來源:互聯網
上載者:User

                                                               Servant定位器

   之前 介紹了ASM表(servant活動映射表)的作用。不過他也會有一些限制,因為如果是使用適配器的ASM來把Ice對象映射到servents,那麼會有一些影響:(1)每個Ice對象都有一個不同的servant代表。(2)所有Ice對象的所有servants都永久性的出在記憶體中。如果有大量的上servant對象的話,那麼伺服器將會承受大的壓力,或許是記憶體不夠,或許是初始化所有servants的時間很長。

1.       locator綜述

Servant定位器是一種本機物件,我們負責實現它,並把它息道對象適配器上。適配器一旦有了servant定位器,它可以和平常一樣查詢ASM,對servant進行定位。如果ASM上能找到相對應的servant,請求就會指派給這個servant。如果找不到的話,對象適配器就會回調servant定位器,它為該請求提供servant。Servant定位器會做一下事情中的一件:

 --初始化一個servant,把它傳給Ice run time,這種情況下,請求會被指派到這個新執行個體化的servant。

 --servant定位器告訴Ice run time,他沒有找到相應的servant。這種情況下,客戶會受到ObjectNotExistException的異常。

採用這種簡單的機制,我們的伺服器能讓我們訪問數量不限的Ice對象:伺服器不必為每一個現有的Ice對象執行個體化一個單獨的servant。提供資料庫訪問的伺服器常常使用servant定位器:資料庫中的條目數通常遠遠大於伺服器在記憶體中能夠儲存的條目數。用於進程式控制制或網路管理的伺服器也常常會使用servant定位器。

2.       Servant定位器介面

module Ice {

local interface ServantLocator {

Object locate( Current curr,out LocalObject cookie);

void finished( Current curr,Object servant,LocalObject cookie);

void deactivate();

};

};

ServantLocator是一個本地介面。為了建立實際的servant定位器實現,我們必須定義一個從Ice::ServantLocator派生的類,並實現locate,finised以及deactivate操作。

locate:只要有請求到達,而且他在ASM中沒有對應的條目,Ice run time就會調用locate。

finished:一旦請求完成,Ice run time就會調用finished,把完成了操作的servant、該請求的Current對象以及locate在一開始建立的cookie傳給它。這意味著,每一個locate都會有一個對應的finished。 

Deactivate:當servant定位器所屬的對象適配器接解除啟用時,Ice run time會調用deactivate操作。

3.  針對Servant定位器的線程保證

在必要時,我們必須使用互斥原語,在locate和finished中對共用資料進行保護。 

4.       Servant定位器的註冊

對象適配器不會自動的瞭解到一個servant定位器,我們要顯式地向對象適配器註冊servant定位器。

module Ice {

local interface ObjectAdapter {

// ...

void addServantLocator(ServantLocator locator,

string category);

ServantLocator findServantLocator(string category);

// ...

};

};

      由上可以看出對象適配器允許我們增加和尋找servant定位器。以下是servant定位器的簡易功能流程示意圖:

5.  使用cookies

有時,我們需要在locate與finished之間傳遞資訊。例如,locate的實現可以根據負載或可用性,從多種資料庫後端選取一種;同時,為了適當執行結束工作,finished的實現可能需要知道locate使用的是哪一種資料庫;在操作調用完成之後,Ice run time會把這個cookie的值傳給finished。

Cookie必須從Ice::LocalObject派生,可以容納任何對我們的實現有用的狀態和成員函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.