2022年CORBA服務(wù)_第1頁(yè)
2022年CORBA服務(wù)_第2頁(yè)
2022年CORBA服務(wù)_第3頁(yè)
2022年CORBA服務(wù)_第4頁(yè)
2022年CORBA服務(wù)_第5頁(yè)
已閱讀5頁(yè),還剩100頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第6章 CORBA服務(wù)6.1 概述核心服務(wù)對(duì)象定位:命名服務(wù)和交易對(duì)象服務(wù)對(duì)象消息:事件服務(wù)和通知服務(wù)安全數(shù)據(jù)庫(kù)與事務(wù)處理對(duì)象存儲(chǔ)對(duì)象關(guān)系事務(wù)處理并發(fā)控制其他對(duì)象查找機(jī)制對(duì)象目錄:存儲(chǔ)對(duì)象及其關(guān)聯(lián)的數(shù)據(jù)命名服務(wù):存儲(chǔ)對(duì)象引用與一個(gè)名字的關(guān)聯(lián)交易對(duì)象服務(wù):存儲(chǔ)對(duì)象引用與一系列相關(guān)屬性之間的關(guān)聯(lián)客戶程序?qū)ο髮?shí)現(xiàn)1 發(fā)布2 查找3 使用name1name2nameNOOO6.2 命名服務(wù)定義:給對(duì)象實(shí)例提供一個(gè)名稱,便于用戶通過(guò)其來(lái)獲取對(duì)象實(shí)例作用:是ORB上對(duì)象找到其他對(duì)象的基本機(jī)制名字聯(lián)便:名字對(duì)象(標(biāo)記)關(guān)聯(lián)可創(chuàng)建命名分層結(jié)構(gòu)來(lái)自不同域的名字語(yǔ)言環(huán)境可以一起使用,為對(duì)象創(chuàng)建聯(lián)合命名服務(wù) 6.2

2、.1 層次結(jié)構(gòu)節(jié)點(diǎn)都是對(duì)象,分為兩類環(huán)境對(duì)象:命名環(huán)境(naming context),空心節(jié)點(diǎn),可以是節(jié)點(diǎn)和葉子應(yīng)用對(duì)象:應(yīng)用程序的對(duì)象,只能是葉子弧:表示對(duì)象引用,且用該對(duì)象在context中出現(xiàn)的名字標(biāo)識(shí)可根據(jù)對(duì)象名字通過(guò)遍歷的方式找到目的對(duì)象的對(duì)象引用aaeebbccddffgg名字服務(wù):Naming Context:Naming Context:Naming Context:StockWatch:StockWatch:PManager“StockWatch”“PortfolioManager”“NASDAQ”“NYSE”“MainAdmin”6.2.2 對(duì)象的命名內(nèi)容 Corba對(duì)象

3、的句柄定義成如URL(統(tǒng)一資源定位)的形式,從而允許ORB來(lái)調(diào)用基于Corba的服務(wù)或者遠(yuǎn)程O(píng)RB上的對(duì)象實(shí)例上下文對(duì)象:任何一個(gè)廠商的ORB都可以通過(guò)配置客戶端的ORB來(lái)初始化根命名服務(wù)的上下文對(duì)象(NamingContext)對(duì)于Corba對(duì)象的復(fù)合命名。定義一個(gè)標(biāo)準(zhǔn)的語(yǔ)法規(guī)則。這樣服務(wù)器端和客戶端就可以通過(guò)相同的格式來(lái)進(jìn)行讀寫(xiě)消息。 Corba對(duì)象的統(tǒng)一資源定位(URL):Corbaloc 通常的做法是把一個(gè)Corba的服務(wù)器放在一臺(tái)有指定域名地址和端口的機(jī)器上。Corba的服務(wù)器要為許多的Corba對(duì)象服務(wù)。一般我們需要在對(duì)象實(shí)例 的URL地址后加上特定的對(duì)象健值(Object Key

4、 ID)或?qū)ο竺?,這些對(duì)象的名字或健值就指明了我們所需要的特定的服務(wù)。如下所示:Corbaloc:/NameService Corbaloc URL的完整格式 IIOP:1.:2809/pub/nameservice 6.2.3 名字服務(wù)模型名字服務(wù)器客戶服務(wù)器OA對(duì)象1、對(duì)象注冊(cè)2、名字解析3、遠(yuǎn)程方法引發(fā)名稱上下文(Name Context)可利用其接口中的bind函數(shù)將自己的名稱與對(duì)象引用聯(lián)系起來(lái)客戶使用resolve函數(shù)來(lái)按對(duì)象名稱查找對(duì)象引用命名服務(wù)具有分布式優(yōu)點(diǎn),在整個(gè)CORBA環(huán)境中都可訪問(wèn)到名稱服務(wù)所存儲(chǔ)的對(duì)象引用附錄1 名字服務(wù)器編程6.2.4 名字服務(wù)編程要素module

5、 CosNaming./struct NameComponent string id;/用戶的字符串標(biāo)識(shí)符 string kind;/擴(kuò)展名/描述信息,如編碼,版本 ; typedef sequence Name; NameComponet對(duì)象的名字由一系列NameComponet順序串接而成只有一個(gè)NameComponet的名字成為簡(jiǎn)單名多個(gè)復(fù)合名復(fù)合名最后一個(gè)是簡(jiǎn)單名,表示應(yīng)用對(duì)象其他都是環(huán)境名復(fù)合名由若干環(huán)境名和一個(gè)簡(jiǎn)單名串接而成enum BindingType nobject, ncontext; struct Binding Name binding_name; BindingTyp

6、e binding_type; ; typedef sequence BindingList; interface NamingContext void bind(in Name n, in Object obj); void rebind(in Name n, in Object obj); void bind_context(in Name n, in NamingContext nc); void rebind_context(in Name n, in NamingContext nc); Object resolve (in Name n); void unbind(in Name

7、n); NamingContext new_context();/命名環(huán)境的創(chuàng)建 NamingContext bind_new_context(in Name n); void destroy( );/命名環(huán)境的刪除 void list (in unsigned long how_many, /命名環(huán)境的列表 out BindingList bl, out BindingIterator bi); ; 綁定Bind()在當(dāng)前命名環(huán)境中命名一個(gè)對(duì)象如對(duì)象ee與名為aa的環(huán)境對(duì)象綁定Bind_context():在當(dāng)前命名環(huán)境中命名一個(gè)命名環(huán)境在當(dāng)前名為dd的環(huán)境對(duì)象中綁定另一個(gè)名為gg的環(huán)境對(duì)象

8、aaeebbccddffgghh解析從一個(gè)名字得到一個(gè)與之綁定的對(duì)象的操作復(fù)合名所定義的就是一條解析各個(gè)環(huán)境名的路徑,直至到達(dá)簡(jiǎn)單名Object solve(in Name n)返回的對(duì)象可能是一個(gè)被綁定的應(yīng)用對(duì)象或命名環(huán)境,要將其narrow到合適對(duì)象類型 命名環(huán)境的列表void list (in unsigned long how_many, out BindingList bl, out BindingIterator bi);列出當(dāng)前命名環(huán)境中下一級(jí)所有綁定的名字 迭代器 interface BindingIterator boolean next_one(out Binding b)

9、; boolean next_n(in unsigned long how_many, out BindingList bl); void destroy(); ; 附錄1 END6.2.5 名字服務(wù)編程啟動(dòng)名字服務(wù)器實(shí)例化服務(wù)對(duì)象服務(wù)對(duì)象在名字服務(wù)器上注冊(cè)客戶在名字服務(wù)器上按名查找對(duì)象客戶引發(fā)對(duì)象的方法支持無(wú)連接的,事件驅(qū)動(dòng)的C/S通信方式事件服務(wù)定義了組件間消息傳輸?shù)目蚣?.3.1 事件服務(wù)體系結(jié)構(gòu)suppliersupplierConsumerConsumerConsumerEvent ChannelPULLPULLPUSHPUSHPUSH提供者:負(fù)責(zé)生產(chǎn)事件數(shù)據(jù)(發(fā)布者)消費(fèi)者:接收和

10、處理事件數(shù)據(jù)(訂閱者)事件通道:中轉(zhuǎn)媒介,可實(shí)現(xiàn)多個(gè)消費(fèi)者和提供者的異步通信兩種事件數(shù)據(jù)傳送模型:推push模型:事件的提供者起帶頭作用,發(fā)起事件的傳送;拉pull模型:事件的消費(fèi)者起帶頭作用,向提供者請(qǐng)求事件數(shù)據(jù)。6.3.2 事件服務(wù)push模型事件通道推消費(fèi)者推消費(fèi)者推提供者推提供者Push()Push()通知人事件服務(wù)pull模型事件通道拉消費(fèi)者拉消費(fèi)者拉提供者拉提供者Pull()Pull()獲取者事件服務(wù)混合push/pull模型事件通道拉消費(fèi)者拉消費(fèi)者推提供者推提供者Push()Pull()隊(duì)列事件服務(wù)混合pull/push模型事件通道推消費(fèi)者推消費(fèi)者拉提供者拉提供者Pull()Pu

11、sh()智能代理6.3.3 事件服務(wù)結(jié)構(gòu)事件通道消費(fèi)者提供者提供者代理消費(fèi)者代理事件服務(wù)push模型事件通道推消費(fèi)者 #1推消費(fèi)者 #2推消費(fèi)者 #3磁盤(pán)滿磁盤(pán)滿磁盤(pán)滿推提供代理 #1推提供代理#2推提供代理#3磁盤(pán)滿事件提供者磁盤(pán)滿推消費(fèi)代理 事件服務(wù)pull模型事件通道拉模式代理事件消費(fèi)者 拉模式事件消費(fèi)者拉模式代理事件提供者事件提供者正常服務(wù)器正常嗎?連接服務(wù)器:正常正常連接6.3.6 模型使用步驟在事件通道一側(cè):從名字服務(wù)中獲得事件通道工廠使用事件通道工廠創(chuàng)建事件通道將事件通道注冊(cè)到名字服務(wù)中模型使用步驟在提供者一側(cè):從名字服務(wù)中獲得事件通道創(chuàng)建一個(gè)供應(yīng)者管理器從事件通道中為對(duì)端消費(fèi)者

12、在本地創(chuàng)建一個(gè)消費(fèi)者代理將提供者與消費(fèi)者代理連接,即向通道注冊(cè)創(chuàng)建一個(gè)消息,并將消息推給消費(fèi)者模型使用步驟在消費(fèi)者一側(cè):從名字服務(wù)中獲得事件通道創(chuàng)建一個(gè)消費(fèi)者管理器從事件通道中獲取一個(gè)提供者的代理將消費(fèi)者連接到提供者代理,表示向同一通道注冊(cè)附錄2 事件服務(wù)編程6.3.4 事件服務(wù)Event channelSupplierAdminProxyPushConsumerPushSupplierProxyPullConsumerPullSupplierConsumerAdminProxyPushSupplierPushConsumerProxyPullSupplierPullConsumer6.3.5

13、 接口push模型接口module CosEventComm interface PushConsumer void push (in any data);void disconnect_push_consumer(); ; interface PushSupplier void disconnect_push_supplier(); ; pull模型接口module CosEventComm interface PullSupplier any pull ();any try_pull (out boolean has_event);void disconnect_pull_supplier

14、(); ; interface PullConsumer void disconnect_pull_consumer(); ;事件通道接口 module CosEventChannelAdmin interface EventChannel ConsumerAdmin for_consumers();SupplierAdmin for_suppliers();void destroy(); ; interface EventChannelFactory EventChannel create_eventchannel (); ;事件服務(wù) interface SupplierAdmin Prox

15、yPushConsumer obtain_push_consumer();ProxyPullConsumer obtain_pull_consumer(); ; interface ConsumerAdmin ProxyPushSupplier obtain_push_supplier();ProxyPullSupplier obtain_pull_supplier(); ;事件服務(wù) interface ProxyPushSupplier: CosEventComm:PushSupplier void connect_push_consumer(in PushConsumer push_con

16、sumer);interface ProxyPushConsumer: CosEventComm: PushConsumer void connect_push_supplier( in PushSupplierpush_supplier); ;事件服務(wù)interface ProxyPullSupplier: CosEventComm: PullSupplier void connect_pull_consumer(in PullConsumer pull_consumer); interface ProxyPullConsumer: CosEventComm: PullConsumer vo

17、id connect_pull_supplier( in PullSupplier pull_supplier);推模型1.對(duì)于一個(gè)推模型的推提供者來(lái)講,基本的事件序列如下:(1)綁定到ORB和事件信道上:org.omg.CORBA.ORB orb= org.omg.CORBA.ORB.init(agrs,null);EventChannel eventChannel= EventChannelHelper.bin(orb);(2) 從事件信道中獲取一個(gè)推消費(fèi)者代理:SupplierAdmin admin= eventChannel.for_suppliers(); / 對(duì)應(yīng)Push事件腳本的

18、第一步ProxyPushConsumer pushConsumer = admin .obtain_push_consumer();/ 對(duì)應(yīng)圖中Push事件腳本的第二步(3) 創(chuàng)建一個(gè)推提供者:MySupplier pushSupplier=new MySupplier(); (4)將提供者連接到事件信道:pushConsumer.connect_push_supplier(pushSupplier);/對(duì)應(yīng)圖中Push事件腳本的第三步 (5)創(chuàng)建一個(gè)CORBA消息:HelloImplementation msg=new HelloImplementation()(6)利用CORBA消息創(chuàng)建一

19、個(gè)Any事件對(duì)象: Org.omg.CORBA.Any pushMessage=orb.create_any();PushMessage.insert_Object(msg);(7) 將消息推給消費(fèi)者:pushConsumer.push(pushMessage); 2. 對(duì)于一個(gè)推模型的推消費(fèi)者來(lái)講,基本的事件序列如下:(1)綁定到ORB和事件信道上:org.omg.CORBA.ORB orb= org.omg.CORBA.ORB.init(agrs, null);EventChannel eventChannel= EventChannelHelper.bin(orb);(2) 從事件信道中

20、獲取一個(gè)推提供者代理:ConsumerAdmin admin= eventChannel.for_consumers();/ 對(duì)應(yīng)圖中Push事件腳本的第四步ProxyPushSupplier pushSupplier = admin .obtain_push_supplier();/ 對(duì)應(yīng)圖中Push事件腳本的第五步(3) 創(chuàng)建一個(gè)推消費(fèi)者:MyConsumer pushConsumer=new MyConsumer ();(4) 將消費(fèi)者連接到事件信道:pushSupplier.connect_push_consumer(pushConsumer); / 對(duì)應(yīng)圖中Push事件腳本的第六步(

21、5) 在一個(gè) push()實(shí)現(xiàn)中被接收:public void push(Any pushMsg) / 對(duì)應(yīng)圖中Push事件腳本的第七步org.omg.CORBA.Object object=pushMsg.extract_Object();Hello msg=HelloHeper.narrow(object); 附錄2 END6.4 交易器服務(wù)概述基本概念互連機(jī)制小結(jié)事件服務(wù)定義了組件間消息傳輸?shù)目蚣苌a(chǎn)者與消費(fèi)者通過(guò)標(biāo)準(zhǔn)的CORBA對(duì)象通道進(jìn)行異步的事件通信推模式和拉模式缺點(diǎn)無(wú)服務(wù)質(zhì)量的規(guī)定:未定義如何保證事件的可靠傳輸事件服務(wù)不處理事件通道的高層信息:事件生產(chǎn)者不知是否有消費(fèi)者對(duì)其事件感

22、興趣,消費(fèi)者無(wú)法知道生產(chǎn)者能提供哪些事件只提供在事件通道級(jí)別上區(qū)別事件的方法:共用同一事件通道的消費(fèi)者將接收該通道中所以事件,而對(duì)事件的過(guò)濾只能在客戶端進(jìn)行,增加了網(wǎng)絡(luò)和客戶的資源消耗6.4.1 概述功能:類似黃頁(yè),可向其他對(duì)象發(fā)布它們所能提供的服務(wù)或查找所需服務(wù)Export:向交易器給出服務(wù)的描述以及服務(wù)所在接口的位置(服務(wù)輸出)Import:對(duì)象要求交易器提供符合一定條件的服務(wù)(服務(wù)輸入)import與Export實(shí)現(xiàn)了服務(wù)的動(dòng)態(tài)查找和延后綁定如果需求超過(guò)分區(qū)能力,則直接訪問(wèn):用戶直接與該服務(wù)區(qū)的交易器交互間接訪問(wèn):用戶僅與一個(gè)交易器交互,并且此交易器再與其他交易器交互TraderClie

23、ntServer1 Export2 Import3 服務(wù)交互多樣性和伸縮性包含大量服務(wù)易獲得性包含少量服務(wù)性能包含包含所有輸出服務(wù)的位置包含其他服務(wù)區(qū)信息連接的交易器可以跨越域邊界交易服務(wù)是一種聯(lián)邦系統(tǒng),可跨越多個(gè)域策略,約束,優(yōu)先選擇通過(guò)策略,約束,優(yōu)先選擇可以使交易器裁減其搜索策略:告訴交易器如何完成搜索。決定交易器的行為約束:指明一種搜索標(biāo)準(zhǔn)優(yōu)先選擇:指明匹配的服務(wù)應(yīng)被返回的優(yōu)先順序基本概念Exporter(輸出方):服務(wù)提供者或代表其他服務(wù)提供者發(fā)布服務(wù)Importer(輸入方):通過(guò)交易器查找符合條件的服務(wù)。是潛在的服務(wù)客戶或代表其他客戶輸入所要求的服務(wù)服務(wù)類型:描述一個(gè)服務(wù)所需信息

24、接口類型:零個(gè)或多個(gè)命名的屬性類型服務(wù)類型用于描述一個(gè)服務(wù),包含提供這個(gè)服務(wù)的接口類型以及一系列用于描述該服務(wù)的特征類型每個(gè)特征類型都有一個(gè)的三元組與之聯(lián)系特征模式:用于表明特征類型是否是必需,只讀服務(wù)類型模型服務(wù)類型之間可以繼承自多個(gè)服務(wù)類型,被繼承的服務(wù)類型稱為基服務(wù)類型接口類型必須同基類型的接口類型相同或繼承而來(lái)Mandatory:輸出服務(wù)供應(yīng)時(shí)服務(wù)類型實(shí)例必須為該類型提供適當(dāng)?shù)闹礡eadonly:輸出服務(wù)供應(yīng)時(shí)如該屬性已被賦值,則該屬性不能被后面的Register:modify()操作改變Service :,*interface ; mandatoryreadonly property

25、;*;廣告類型名:建筑物廣告接口:Building特征:建筑物名稱 字符串 必需且只讀地址 字符串 必須且只讀開(kāi)發(fā)商 字符串 可選且只讀承建單位 字符串 可選且只讀工程等級(jí) 整數(shù) 可選且只讀每平米價(jià)格 整數(shù) 必需且可修改建議用途 字符串 可選且可修改廣告類型:住宅建筑物廣告接口:DwellingHouse特征:售房許可證號(hào) 整數(shù) 必需只讀最小戶型面積 整數(shù) 可選只讀最大戶型面積 整數(shù) 可選只讀ServiceTypeNameInterfacePROM_MANDATORY_READONLYPROM_READONLYPROM_NORMALServiceTypeNameDwellingHouse繼承自

26、BuildingPROM_MANDATORY_READONLYPROM_READONLY服務(wù)供應(yīng)(service offer)服務(wù)類型的實(shí)例化按照服務(wù)類型給出自己的特征取值和滿足這些特征取值的接口實(shí)例必須提供服務(wù)類型名所有特征模式為必需的特征的取值接口類型的引用廣告類型名:建筑物廣告接口:Building特征:建筑物名稱 字符串 必需且只讀地址 字符串 必須且只讀開(kāi)發(fā)商 字符串 可選且只讀承建單位 字符串 可選且只讀工程等級(jí) 整數(shù) 可選且只讀每平米價(jià)格 整數(shù) 必需且可修改建議用途 字符串 可選且可修改實(shí)例:xingFuBuilding特征:建筑物名稱 “幸福大廈”地址 “學(xué)院路10號(hào)”開(kāi)發(fā)商

27、“陽(yáng)光開(kāi)發(fā)集團(tuán)”承建單位 “市一建公司”工程等級(jí) 1每平米價(jià)格 3000建議用途 “辦公”一個(gè)服務(wù)供應(yīng)被提交給交易器后,交易器會(huì)向出口者返回一個(gè)通告標(biāo)識(shí)OfferId供出口者檢驗(yàn),撤回或修改這個(gè)服務(wù)通告,OfferId在一個(gè)交易器中可以唯一標(biāo)識(shí)一個(gè)服務(wù)供應(yīng)服務(wù)供應(yīng)的選擇交易器使用策略來(lái)確定需要查找的服務(wù)供應(yīng)集S1在S1上通過(guò)服務(wù)類型和約束條件來(lái)確定滿足服務(wù)類型和約束條件的集合S2在把返回service offer給輸入方前根據(jù)優(yōu)先選擇條件來(lái)確定最后的service offer策略(Policies)用值名對(duì)表示兩類限制搜索范圍確定操作功能潛在服務(wù)供應(yīng)被考慮的服務(wù)供應(yīng)已匹配的服務(wù)供應(yīng)已排序的服務(wù)

28、供應(yīng)被返回的服務(wù)供應(yīng)搜索策略匹配策略返回策略聚集匹配返回N1N2N3N4N5滿足服務(wù)類型和約束條件具一致性服務(wù)類型優(yōu)先選擇條件用于決定返回匹配的服務(wù)供應(yīng)的順序優(yōu)先選擇串Max: 降序返回Min:升序With:約束表達(dá)式(真在假前)Random: 隨機(jī)First:發(fā)現(xiàn)順序交易服務(wù)的描述提供三個(gè)IDL模塊:CosTradingRepos, CosTrading, CosTradingDynamicCosTradingRepos:定義,檢驗(yàn)和刪除服務(wù)類型的功能ServiceTypeRepository:存放服務(wù)類型描述,7種操作,主要使用add_type, list_type, descirbe_t

29、ype(獲得細(xì)節(jié)信息)CosTrading:創(chuàng)建,查找服務(wù)供應(yīng),創(chuàng)建代理服務(wù)供應(yīng),修改交易聯(lián)盟,配置交易功能Loopup:查詢所需服務(wù)Register:登記供應(yīng)者發(fā)布的服務(wù),主要使用export(公告服務(wù)), describe(獲得所需服務(wù)供應(yīng)的詳細(xì)信息)交易流程1Add_type2 export3 describe4 List_type5 Describe_type6 query7 調(diào)用服務(wù)CosTradingRepos:ServiceTypeRepositoryCosTrading:RegistorCosTrading:Lookup交易器管理環(huán)境交易器核心環(huán)境Importerexporte

30、r1 登記新服務(wù)類型。Exporter調(diào)用ServiceTypeRepository接口中的add_type操作,將準(zhǔn)備發(fā)布的服務(wù)類型存放到服務(wù)類型庫(kù)中2 發(fā)布新服務(wù)。Exporter調(diào)用Register中的export操作,將新的服務(wù)以規(guī)定的服務(wù)供應(yīng)格式進(jìn)行注冊(cè),供應(yīng)內(nèi)容包括服務(wù)類型名,申請(qǐng)登記服務(wù)的對(duì)象引用以及已賦值的服務(wù)特性返回:唯一的服務(wù)供應(yīng)標(biāo)識(shí)3 檢查已登記的服務(wù)供應(yīng)。Exporter給出指定的供應(yīng)標(biāo)識(shí)(OfferId),調(diào)用Register的describe操作,可得到與該標(biāo)識(shí)對(duì)應(yīng)的服務(wù)供應(yīng)4 請(qǐng)求服務(wù)類型列表。Importer調(diào)用list_type,得到服務(wù)類型清單5 請(qǐng)求服務(wù)類

31、型的描述。Importer從服務(wù)類型列表清單中選出所需的服務(wù)類型,用相應(yīng)的服務(wù)類型名調(diào)用describe_type方法,獲取以下信息:接口名字,特征類型,所繼承的基服務(wù)類型名6 查詢指定服務(wù)類型的全部實(shí)例。Importer根據(jù)給定的某種服務(wù)類型以及前面的查詢參數(shù),調(diào)用lookup接口中的query操作,得到滿足查詢條件的,對(duì)應(yīng)于該服務(wù)類型的全部服務(wù)通告,使進(jìn)口者獲得所有能提供這些服務(wù)的對(duì)象引用7 調(diào)用服務(wù)。Importer給出服務(wù)的對(duì)象引用,調(diào)用對(duì)應(yīng)服務(wù),完成一個(gè)交易周期互連機(jī)制連接遍歷控制聯(lián)邦查詢實(shí)例代理服務(wù)供應(yīng)連接遍歷控制交易器連接的彈性容許任意連接交易器問(wèn)題每個(gè)交易器可能不止一次被訪問(wèn),

32、因?yàn)橐粋€(gè)交易器可以出現(xiàn)在不同路徑上。源交易器為每個(gè)查詢操作產(chǎn)生一個(gè)RequestID查詢始發(fā)者生成Requestid,并以字節(jié)流方式放入request_id策略中,一個(gè)交易者可記下自己處理過(guò)的Requestid,若發(fā)現(xiàn)有相同requestid,表明已處理過(guò),可不處理可能產(chǎn)生循環(huán)。 hop_count用于限制查詢被傳遞的深度聯(lián)邦查詢實(shí)例一個(gè)交易器可以與其他交易器連接,使其他交易者的信息對(duì)自己同樣有用一個(gè)register可提供resolve()操作來(lái)獲得其他的register,其輸入可以是直接與該register連接的交易者的名字,也可是間接與該register連接的交易者的名字間接方式下,要將所

33、有中間經(jīng)過(guò)的交易器的名字都串接,形成一個(gè)序列Trader ATrader BTrader DTrader CTrader EA.resolve(B,D)A.resolve(B,D)Query.hop_count=4Def_follow_ploicy=alwaysMax_hop_count=5Query.hop_count=3Max_hop_count=1Def_follow_ploicy=alwaysQuery.hop_count=0Def_follow_ploicy=alwaysMax_hop_count=4Service offerLinkTrader AttributeT1T2T3T4R

34、equest_id1 一個(gè)查詢請(qǐng)求以輸入方hop_count=4的值被調(diào)用,T1的范圍搜索限制策略中的max_hop_count=5,所以最終用于搜索的hop_count=42 假定在T1中未找到一個(gè)合適的匹配而跟隨策略為always,則T1將請(qǐng)求傳遞給T3,輸入方的hop_count3,作為T(mén)3的查詢輸入值。T3的本地max_hop_count=1,且產(chǎn)生request_id以避免對(duì)同一交易器的重復(fù)搜索。這樣用于T3查詢的hop_count=1且T3_request_id被保存3 假定T3未找到一個(gè)合適的匹配而跟隨策略為always,則T4的策略輸入?yún)?shù):hop_count=0, reque

35、st_id=T3_request_id4 假定在T4中未找到一個(gè)合適匹配,此時(shí)即使T4的max_hop_count=4,搜索也不會(huì)繼續(xù)被傳遞。搜索失敗將返回給T3,T1,直至T1的使用者查詢操作是否在其余交易器上被傳遞取決于連接跟隨策略,若為always,查詢將到達(dá)所有滿足hop_count策略的交易器小結(jié)交易服務(wù)CORBA的命名服務(wù)提供了基本的名稱到對(duì)象引用的解析功能,但對(duì)于基于對(duì)象屬性和特征的對(duì)象查詢則無(wú)能為力交易對(duì)象服務(wù)基于服務(wù)類型(Service Type)的概念每個(gè)服務(wù)類型都包含一個(gè)IDL接口標(biāo)識(shí)符和一些定義特征的附加數(shù)據(jù)各對(duì)象通過(guò)交易器完成對(duì)象特征的發(fā)布和匹配管理員使用add_ty

36、pe定義某個(gè)對(duì)象類型及其特征數(shù)據(jù)和類型對(duì)象使用export按所定義的類型輸出其對(duì)象引用和特征客戶使用query提交所需對(duì)象的特征交易服務(wù)在其交易空間中匹配并返回結(jié)果在聯(lián)邦交易環(huán)境中,多個(gè)相連的交易器可以協(xié)同工作完成對(duì)象交易服務(wù)6.5 負(fù)載均衡可提高系統(tǒng)性能,可靠性和可用性應(yīng)用程序分區(qū)復(fù)制定位機(jī)制遷徙狀態(tài)管理6.5.1 應(yīng)用程序分區(qū)把應(yīng)用程序分割成一定數(shù)量的獨(dú)立的服務(wù)組件,它們提供應(yīng)用程序整體功能中的特定子集,所有分區(qū)功能的總和等于整個(gè)應(yīng)用程序的功能兩種模式:水平應(yīng)用程序分區(qū):按系統(tǒng)功能切分APP;每個(gè)服務(wù)器只提供系統(tǒng)功能的一個(gè)子集垂直應(yīng)用程序分區(qū):基于數(shù)據(jù)切分,每個(gè)服務(wù)器提供系統(tǒng)全部功能,但只

37、能訪問(wèn)數(shù)據(jù)一個(gè)子集水平應(yīng)用程序分區(qū)垂直應(yīng)用程序分區(qū)。數(shù)據(jù)數(shù)據(jù)數(shù)據(jù) 分區(qū)的問(wèn)題實(shí)現(xiàn)合理分布困難靜態(tài)性質(zhì)使得對(duì)選定分區(qū)進(jìn)行修改困難:要求對(duì)IDL進(jìn)行基礎(chǔ)性的修改要求:使分區(qū)對(duì)客戶機(jī)盡可能透明,客戶機(jī)代碼不應(yīng)知道分區(qū)6.5.2 復(fù)制定義:相同服務(wù)器有多個(gè)實(shí)例,每個(gè)實(shí)例提供相同功能,并訪問(wèn)相同的數(shù)據(jù)對(duì)象集特點(diǎn):客戶機(jī)請(qǐng)求可指向當(dāng)前有效的服務(wù)器中任一個(gè)進(jìn)行服務(wù)器之間的同步操作作用:支持某種性能和吞吐量的服務(wù)質(zhì)量考慮:對(duì)象定位:采用多代理,對(duì)象組,選擇器模式遷徙:何時(shí)選取一個(gè)服務(wù)器對(duì)象狀態(tài)管理:采用緩存同步和數(shù)據(jù)庫(kù)復(fù)制 定位機(jī)制多代理:在每個(gè)客戶機(jī)上緩存一些有效服務(wù)器對(duì)象引用,重定向到不同服務(wù)器對(duì)象組:將

38、一個(gè)名字映射到多個(gè)對(duì)象引用選擇器:將新客戶機(jī)指派給負(fù)載最輕的服務(wù)器.1 多代理模式命名服務(wù)器綁定。對(duì)象服務(wù)器1對(duì)象服務(wù)器2對(duì)象服務(wù)器3Client緩存IOR按策略選擇一個(gè)服務(wù)器agent1 多代理被實(shí)現(xiàn)為客戶機(jī)端的封裝類2 客戶機(jī)啟動(dòng)與命名服務(wù)連接,獲得各服務(wù)器對(duì)象引用,并緩存3 緩存后不再與命名服務(wù)聯(lián)系4 客戶機(jī)發(fā)請(qǐng)求時(shí),按預(yù)定的定位策略選擇目標(biāo)對(duì)象.2 對(duì)象組模式允許多個(gè)對(duì)象以相同名字在命名服務(wù)中注冊(cè)客戶請(qǐng)求時(shí),命名服務(wù)按照當(dāng)前定位策略從對(duì)象組中選擇一個(gè)對(duì)象.3 選擇器模式通過(guò)一個(gè)選擇器從它管轄下的復(fù)制服務(wù)器收集負(fù)載信息,用此信息作為選擇算法的輸入,用于平衡負(fù)載 遷移機(jī)制遷移策略:用于決定

39、一個(gè)新的服務(wù)器對(duì)象何時(shí)被選中,通常與定位機(jī)制一起提供完整的負(fù)責(zé)平衡方案LOCATION_FORWARD機(jī)制:基于POA的ORB可以允許服務(wù)器把客戶機(jī)請(qǐng)求重定向到另一個(gè)服務(wù)器對(duì)象集中器模式:由一個(gè)中間層負(fù)責(zé)轉(zhuǎn)發(fā)客戶機(jī)請(qǐng)求集中器封裝了系統(tǒng)所有負(fù)載平衡邏輯LOCATION_FORWARD服務(wù)器服務(wù)器客戶機(jī)1 由服務(wù)器控制遷徙2 復(fù)制服務(wù)器協(xié)作管理整個(gè)應(yīng)用程序負(fù)載3 服務(wù)器自己維護(hù)同組負(fù)載信息或采用獨(dú)立監(jiān)視器服務(wù)器服務(wù)器客戶機(jī)監(jiān)視器集中器模式:服務(wù)器服務(wù)器客戶機(jī)中間層 狀態(tài)管理問(wèn)題:有狀態(tài)的服務(wù)器在內(nèi)存中保存了對(duì)象持久屬性的值多服務(wù)器用于負(fù)載平衡時(shí),會(huì)引起不同客戶機(jī)只看到不同數(shù)據(jù)需要考慮服務(wù)器同步問(wèn)題管理方法協(xié)調(diào):在多代理的緩存中的任何數(shù)據(jù)項(xiàng)都有一個(gè)一致的值驗(yàn)證:在允許客戶機(jī)讀/寫(xiě)前檢驗(yàn)緩存6.6 容錯(cuò)目標(biāo):當(dāng)故障發(fā)生時(shí)提供確定的服務(wù)級(jí)別故障:災(zāi)難性性能相關(guān)的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論