版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第6章 CORBA服務(wù)6.1 概述核心服務(wù)對象定位:命名服務(wù)和交易對象服務(wù)對象消息:事件服務(wù)和通知服務(wù)安全數(shù)據(jù)庫與事務(wù)處理對象存儲對象關(guān)系事務(wù)處理并發(fā)控制其他對象查找機(jī)制對象目錄:存儲對象及其關(guān)聯(lián)的數(shù)據(jù)命名服務(wù):存儲對象引用與一個名字的關(guān)聯(lián)交易對象服務(wù):存儲對象引用與一系列相關(guān)屬性之間的關(guān)聯(lián)客戶程序?qū)ο髮?shí)現(xiàn)1 發(fā)布2 查找3 使用name1name2nameNOOO6.2 命名服務(wù)定義:給對象實(shí)例提供一個名稱,便于用戶通過其來獲取對象實(shí)例作用:是ORB上對象找到其他對象的基本機(jī)制名字聯(lián)便:名字對象(標(biāo)記)關(guān)聯(lián)可創(chuàng)建命名分層結(jié)構(gòu)來自不同域的名字語言環(huán)境可以一起使用,為對象創(chuàng)建聯(lián)合命名服務(wù) 6.2
2、.1 層次結(jié)構(gòu)節(jié)點(diǎn)都是對象,分為兩類環(huán)境對象:命名環(huán)境(naming context),空心節(jié)點(diǎn),可以是節(jié)點(diǎn)和葉子應(yīng)用對象:應(yīng)用程序的對象,只能是葉子?。罕硎緦ο笠茫矣迷搶ο笤赾ontext中出現(xiàn)的名字標(biāo)識可根據(jù)對象名字通過遍歷的方式找到目的對象的對象引用aaeebbccddffgg名字服務(wù):Naming Context:Naming Context:Naming Context:StockWatch:StockWatch:PManager“StockWatch”“PortfolioManager”“NASDAQ”“NYSE”“MainAdmin”6.2.2 對象的命名內(nèi)容 Corba對象
3、的句柄定義成如URL(統(tǒng)一資源定位)的形式,從而允許ORB來調(diào)用基于Corba的服務(wù)或者遠(yuǎn)程ORB上的對象實(shí)例上下文對象:任何一個廠商的ORB都可以通過配置客戶端的ORB來初始化根命名服務(wù)的上下文對象(NamingContext)對于Corba對象的復(fù)合命名。定義一個標(biāo)準(zhǔn)的語法規(guī)則。這樣服務(wù)器端和客戶端就可以通過相同的格式來進(jìn)行讀寫消息。 Corba對象的統(tǒng)一資源定位(URL):Corbaloc 通常的做法是把一個Corba的服務(wù)器放在一臺有指定域名地址和端口的機(jī)器上。Corba的服務(wù)器要為許多的Corba對象服務(wù)。一般我們需要在對象實(shí)例 的URL地址后加上特定的對象健值(Object Key
4、 ID)或?qū)ο竺郑@些對象的名字或健值就指明了我們所需要的特定的服務(wù)。如下所示:Corbaloc:/NameService Corbaloc URL的完整格式 IIOP:1.:2809/pub/nameservice 6.2.3 名字服務(wù)模型名字服務(wù)器客戶服務(wù)器OA對象1、對象注冊2、名字解析3、遠(yuǎn)程方法引發(fā)名稱上下文(Name Context)可利用其接口中的bind函數(shù)將自己的名稱與對象引用聯(lián)系起來客戶使用resolve函數(shù)來按對象名稱查找對象引用命名服務(wù)具有分布式優(yōu)點(diǎn),在整個CORBA環(huán)境中都可訪問到名稱服務(wù)所存儲的對象引用附錄1 名字服務(wù)器編程6.2.4 名字服務(wù)編程要素module
5、 CosNaming./struct NameComponent string id;/用戶的字符串標(biāo)識符 string kind;/擴(kuò)展名/描述信息,如編碼,版本 ; typedef sequence Name; NameComponet對象的名字由一系列NameComponet順序串接而成只有一個NameComponet的名字成為簡單名多個復(fù)合名復(fù)合名最后一個是簡單名,表示應(yīng)用對象其他都是環(huán)境名復(fù)合名由若干環(huá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)境中命名一個對象如對象ee與名為aa的環(huán)境對象綁定Bind_context():在當(dāng)前命名環(huán)境中命名一個命名環(huán)境在當(dāng)前名為dd的環(huán)境對象中綁定另一個名為gg的環(huán)境對象
8、aaeebbccddffgghh解析從一個名字得到一個與之綁定的對象的操作復(fù)合名所定義的就是一條解析各個環(huán)境名的路徑,直至到達(dá)簡單名Object solve(in Name n)返回的對象可能是一個被綁定的應(yīng)用對象或命名環(huán)境,要將其narrow到合適對象類型 命名環(huán)境的列表void list (in unsigned long how_many, out BindingList bl, out BindingIterator bi);列出當(dāng)前命名環(huán)境中下一級所有綁定的名字 迭代器 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ù)編程啟動名字服務(wù)器實(shí)例化服務(wù)對象服務(wù)對象在名字服務(wù)器上注冊客戶在名字服務(wù)器上按名查找對象客戶引發(fā)對象的方法支持無連接的,事件驅(qū)動的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)多個消費(fèi)者和提供者的異步通信兩種事件數(shù)據(jù)傳送模型:推push模型:事件的提供者起帶頭作用,發(fā)起事件的傳送;拉pull模型:事件的消費(fèi)者起帶頭作用,向提供者請求事件數(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磁盤滿磁盤滿磁盤滿推提供代理 #1推提供代理#2推提供代理#3磁盤滿事件提供者磁盤滿推消費(fèi)代理 事件服務(wù)pull模型事件通道拉模式代理事件消費(fèi)者 拉模式事件消費(fèi)者拉模式代理事件提供者事件提供者正常服務(wù)器正常嗎?連接服務(wù)器:正常正常連接6.3.6 模型使用步驟在事件通道一側(cè):從名字服務(wù)中獲得事件通道工廠使用事件通道工廠創(chuàng)建事件通道將事件通道注冊到名字服務(wù)中模型使用步驟在提供者一側(cè):從名字服務(wù)中獲得事件通道創(chuàng)建一個供應(yīng)者管理器從事件通道中為對端消費(fèi)者
12、在本地創(chuàng)建一個消費(fèi)者代理將提供者與消費(fèi)者代理連接,即向通道注冊創(chuàng)建一個消息,并將消息推給消費(fèi)者模型使用步驟在消費(fèi)者一側(cè):從名字服務(wù)中獲得事件通道創(chuàng)建一個消費(fèi)者管理器從事件通道中獲取一個提供者的代理將消費(fèi)者連接到提供者代理,表示向同一通道注冊附錄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.對于一個推模型的推提供者來講,基本的事件序列如下:(1)綁定到ORB和事件信道上:org.omg.CORBA.ORB orb= org.omg.CORBA.ORB.init(agrs,null);EventChannel eventChannel= EventChannelHelper.bin(orb);(2) 從事件信道中獲取一個推消費(fèi)者代理:SupplierAdmin admin= eventChannel.for_suppliers(); / 對應(yīng)Push事件腳本的
18、第一步ProxyPushConsumer pushConsumer = admin .obtain_push_consumer();/ 對應(yīng)圖中Push事件腳本的第二步(3) 創(chuàng)建一個推提供者:MySupplier pushSupplier=new MySupplier(); (4)將提供者連接到事件信道:pushConsumer.connect_push_supplier(pushSupplier);/對應(yīng)圖中Push事件腳本的第三步 (5)創(chuàng)建一個CORBA消息:HelloImplementation msg=new HelloImplementation()(6)利用CORBA消息創(chuàng)建一
19、個Any事件對象: Org.omg.CORBA.Any pushMessage=orb.create_any();PushMessage.insert_Object(msg);(7) 將消息推給消費(fèi)者:pushConsumer.push(pushMessage); 2. 對于一個推模型的推消費(fèi)者來講,基本的事件序列如下:(1)綁定到ORB和事件信道上:org.omg.CORBA.ORB orb= org.omg.CORBA.ORB.init(agrs, null);EventChannel eventChannel= EventChannelHelper.bin(orb);(2) 從事件信道中
20、獲取一個推提供者代理:ConsumerAdmin admin= eventChannel.for_consumers();/ 對應(yīng)圖中Push事件腳本的第四步ProxyPushSupplier pushSupplier = admin .obtain_push_supplier();/ 對應(yīng)圖中Push事件腳本的第五步(3) 創(chuàng)建一個推消費(fèi)者:MyConsumer pushConsumer=new MyConsumer ();(4) 將消費(fèi)者連接到事件信道:pushSupplier.connect_push_consumer(pushConsumer); / 對應(yīng)圖中Push事件腳本的第六步(
21、5) 在一個 push()實(shí)現(xiàn)中被接收:public void push(Any pushMsg) / 對應(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)者通過標(biāo)準(zhǔn)的CORBA對象通道進(jìn)行異步的事件通信推模式和拉模式缺點(diǎn)無服務(wù)質(zhì)量的規(guī)定:未定義如何保證事件的可靠傳輸事件服務(wù)不處理事件通道的高層信息:事件生產(chǎn)者不知是否有消費(fèi)者對其事件感
22、興趣,消費(fèi)者無法知道生產(chǎn)者能提供哪些事件只提供在事件通道級別上區(qū)別事件的方法:共用同一事件通道的消費(fèi)者將接收該通道中所以事件,而對事件的過濾只能在客戶端進(jìn)行,增加了網(wǎng)絡(luò)和客戶的資源消耗6.4.1 概述功能:類似黃頁,可向其他對象發(fā)布它們所能提供的服務(wù)或查找所需服務(wù)Export:向交易器給出服務(wù)的描述以及服務(wù)所在接口的位置(服務(wù)輸出)Import:對象要求交易器提供符合一定條件的服務(wù)(服務(wù)輸入)import與Export實(shí)現(xiàn)了服務(wù)的動態(tài)查找和延后綁定如果需求超過分區(qū)能力,則直接訪問:用戶直接與該服務(wù)區(qū)的交易器交互間接訪問:用戶僅與一個交易器交互,并且此交易器再與其他交易器交互TraderClie
23、ntServer1 Export2 Import3 服務(wù)交互多樣性和伸縮性包含大量服務(wù)易獲得性包含少量服務(wù)性能包含包含所有輸出服務(wù)的位置包含其他服務(wù)區(qū)信息連接的交易器可以跨越域邊界交易服務(wù)是一種聯(lián)邦系統(tǒng),可跨越多個域策略,約束,優(yōu)先選擇通過策略,約束,優(yōu)先選擇可以使交易器裁減其搜索策略:告訴交易器如何完成搜索。決定交易器的行為約束:指明一種搜索標(biāo)準(zhǔn)優(yōu)先選擇:指明匹配的服務(wù)應(yīng)被返回的優(yōu)先順序基本概念Exporter(輸出方):服務(wù)提供者或代表其他服務(wù)提供者發(fā)布服務(wù)Importer(輸入方):通過交易器查找符合條件的服務(wù)。是潛在的服務(wù)客戶或代表其他客戶輸入所要求的服務(wù)服務(wù)類型:描述一個服務(wù)所需信息
24、接口類型:零個或多個命名的屬性類型服務(wù)類型用于描述一個服務(wù),包含提供這個服務(wù)的接口類型以及一系列用于描述該服務(wù)的特征類型每個特征類型都有一個的三元組與之聯(lián)系特征模式:用于表明特征類型是否是必需,只讀服務(wù)類型模型服務(wù)類型之間可以繼承自多個服務(wù)類型,被繼承的服務(wù)類型稱為基服務(wù)類型接口類型必須同基類型的接口類型相同或繼承而來Mandatory:輸出服務(wù)供應(yīng)時服務(wù)類型實(shí)例必須為該類型提供適當(dāng)?shù)闹礡eadonly:輸出服務(wù)供應(yīng)時如該屬性已被賦值,則該屬性不能被后面的Register:modify()操作改變Service :,*interface ; mandatoryreadonly property
25、;*;廣告類型名:建筑物廣告接口:Building特征:建筑物名稱 字符串 必需且只讀地址 字符串 必須且只讀開發(fā)商 字符串 可選且只讀承建單位 字符串 可選且只讀工程等級 整數(shù) 可選且只讀每平米價格 整數(shù) 必需且可修改建議用途 字符串 可選且可修改廣告類型:住宅建筑物廣告接口:DwellingHouse特征:售房許可證號 整數(shù) 必需只讀最小戶型面積 整數(shù) 可選只讀最大戶型面積 整數(shù) 可選只讀ServiceTypeNameInterfacePROM_MANDATORY_READONLYPROM_READONLYPROM_NORMALServiceTypeNameDwellingHouse繼承自
26、BuildingPROM_MANDATORY_READONLYPROM_READONLY服務(wù)供應(yīng)(service offer)服務(wù)類型的實(shí)例化按照服務(wù)類型給出自己的特征取值和滿足這些特征取值的接口實(shí)例必須提供服務(wù)類型名所有特征模式為必需的特征的取值接口類型的引用廣告類型名:建筑物廣告接口:Building特征:建筑物名稱 字符串 必需且只讀地址 字符串 必須且只讀開發(fā)商 字符串 可選且只讀承建單位 字符串 可選且只讀工程等級 整數(shù) 可選且只讀每平米價格 整數(shù) 必需且可修改建議用途 字符串 可選且可修改實(shí)例:xingFuBuilding特征:建筑物名稱 “幸福大廈”地址 “學(xué)院路10號”開發(fā)商
27、“陽光開發(fā)集團(tuán)”承建單位 “市一建公司”工程等級 1每平米價格 3000建議用途 “辦公”一個服務(wù)供應(yīng)被提交給交易器后,交易器會向出口者返回一個通告標(biāo)識OfferId供出口者檢驗(yàn),撤回或修改這個服務(wù)通告,OfferId在一個交易器中可以唯一標(biāo)識一個服務(wù)供應(yīng)服務(wù)供應(yīng)的選擇交易器使用策略來確定需要查找的服務(wù)供應(yīng)集S1在S1上通過服務(wù)類型和約束條件來確定滿足服務(wù)類型和約束條件的集合S2在把返回service offer給輸入方前根據(jù)優(yōu)先選擇條件來確定最后的service offer策略(Policies)用值名對表示兩類限制搜索范圍確定操作功能潛在服務(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ù)的描述提供三個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ù)類型庫中2 發(fā)布新服務(wù)。Exporter調(diào)用Register中的export操作,將新的服務(wù)以規(guī)定的服務(wù)供應(yīng)格式進(jìn)行注冊,供應(yīng)內(nèi)容包括服務(wù)類型名,申請登記服務(wù)的對象引用以及已賦值的服務(wù)特性返回:唯一的服務(wù)供應(yīng)標(biāo)識3 檢查已登記的服務(wù)供應(yīng)。Exporter給出指定的供應(yīng)標(biāo)識(OfferId),調(diào)用Register的describe操作,可得到與該標(biāo)識對應(yīng)的服務(wù)供應(yīng)4 請求服務(wù)類型列表。Importer調(diào)用list_type,得到服務(wù)類型清單5 請求服務(wù)類
31、型的描述。Importer從服務(wù)類型列表清單中選出所需的服務(wù)類型,用相應(yīng)的服務(wù)類型名調(diào)用describe_type方法,獲取以下信息:接口名字,特征類型,所繼承的基服務(wù)類型名6 查詢指定服務(wù)類型的全部實(shí)例。Importer根據(jù)給定的某種服務(wù)類型以及前面的查詢參數(shù),調(diào)用lookup接口中的query操作,得到滿足查詢條件的,對應(yīng)于該服務(wù)類型的全部服務(wù)通告,使進(jìn)口者獲得所有能提供這些服務(wù)的對象引用7 調(diào)用服務(wù)。Importer給出服務(wù)的對象引用,調(diào)用對應(yīng)服務(wù),完成一個交易周期互連機(jī)制連接遍歷控制聯(lián)邦查詢實(shí)例代理服務(wù)供應(yīng)連接遍歷控制交易器連接的彈性容許任意連接交易器問題每個交易器可能不止一次被訪問,
32、因?yàn)橐粋€交易器可以出現(xiàn)在不同路徑上。源交易器為每個查詢操作產(chǎn)生一個RequestID查詢始發(fā)者生成Requestid,并以字節(jié)流方式放入request_id策略中,一個交易者可記下自己處理過的Requestid,若發(fā)現(xiàn)有相同requestid,表明已處理過,可不處理可能產(chǎn)生循環(huán)。 hop_count用于限制查詢被傳遞的深度聯(lián)邦查詢實(shí)例一個交易器可以與其他交易器連接,使其他交易者的信息對自己同樣有用一個register可提供resolve()操作來獲得其他的register,其輸入可以是直接與該register連接的交易者的名字,也可是間接與該register連接的交易者的名字間接方式下,要將所
33、有中間經(jīng)過的交易器的名字都串接,形成一個序列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 一個查詢請求以輸入方hop_count=4的值被調(diào)用,T1的范圍搜索限制策略中的max_hop_count=5,所以最終用于搜索的hop_count=42 假定在T1中未找到一個合適的匹配而跟隨策略為always,則T1將請求傳遞給T3,輸入方的hop_count3,作為T3的查詢輸入值。T3的本地max_hop_count=1,且產(chǎn)生request_id以避免對同一交易器的重復(fù)搜索。這樣用于T3查詢的hop_count=1且T3_request_id被保存3 假定T3未找到一個合適的匹配而跟隨策略為always,則T4的策略輸入?yún)?shù):hop_count=0, reque
35、st_id=T3_request_id4 假定在T4中未找到一個合適匹配,此時即使T4的max_hop_count=4,搜索也不會繼續(xù)被傳遞。搜索失敗將返回給T3,T1,直至T1的使用者查詢操作是否在其余交易器上被傳遞取決于連接跟隨策略,若為always,查詢將到達(dá)所有滿足hop_count策略的交易器小結(jié)交易服務(wù)CORBA的命名服務(wù)提供了基本的名稱到對象引用的解析功能,但對于基于對象屬性和特征的對象查詢則無能為力交易對象服務(wù)基于服務(wù)類型(Service Type)的概念每個服務(wù)類型都包含一個IDL接口標(biāo)識符和一些定義特征的附加數(shù)據(jù)各對象通過交易器完成對象特征的發(fā)布和匹配管理員使用add_ty
36、pe定義某個對象類型及其特征數(shù)據(jù)和類型對象使用export按所定義的類型輸出其對象引用和特征客戶使用query提交所需對象的特征交易服務(wù)在其交易空間中匹配并返回結(jié)果在聯(lián)邦交易環(huán)境中,多個相連的交易器可以協(xié)同工作完成對象交易服務(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ū)功能的總和等于整個應(yīng)用程序的功能兩種模式:水平應(yīng)用程序分區(qū):按系統(tǒng)功能切分APP;每個服務(wù)器只提供系統(tǒng)功能的一個子集垂直應(yīng)用程序分區(qū):基于數(shù)據(jù)切分,每個服務(wù)器提供系統(tǒng)全部功能,但只
37、能訪問數(shù)據(jù)一個子集水平應(yīng)用程序分區(qū)垂直應(yīng)用程序分區(qū)。數(shù)據(jù)數(shù)據(jù)數(shù)據(jù) 分區(qū)的問題實(shí)現(xiàn)合理分布困難靜態(tài)性質(zhì)使得對選定分區(qū)進(jìn)行修改困難:要求對IDL進(jìn)行基礎(chǔ)性的修改要求:使分區(qū)對客戶機(jī)盡可能透明,客戶機(jī)代碼不應(yīng)知道分區(qū)6.5.2 復(fù)制定義:相同服務(wù)器有多個實(shí)例,每個實(shí)例提供相同功能,并訪問相同的數(shù)據(jù)對象集特點(diǎn):客戶機(jī)請求可指向當(dāng)前有效的服務(wù)器中任一個進(jìn)行服務(wù)器之間的同步操作作用:支持某種性能和吞吐量的服務(wù)質(zhì)量考慮:對象定位:采用多代理,對象組,選擇器模式遷徙:何時選取一個服務(wù)器對象狀態(tài)管理:采用緩存同步和數(shù)據(jù)庫復(fù)制 定位機(jī)制多代理:在每個客戶機(jī)上緩存一些有效服務(wù)器對象引用,重定向到不同服務(wù)器對象組:將
38、一個名字映射到多個對象引用選擇器:將新客戶機(jī)指派給負(fù)載最輕的服務(wù)器.1 多代理模式命名服務(wù)器綁定。對象服務(wù)器1對象服務(wù)器2對象服務(wù)器3Client緩存IOR按策略選擇一個服務(wù)器agent1 多代理被實(shí)現(xiàn)為客戶機(jī)端的封裝類2 客戶機(jī)啟動與命名服務(wù)連接,獲得各服務(wù)器對象引用,并緩存3 緩存后不再與命名服務(wù)聯(lián)系4 客戶機(jī)發(fā)請求時,按預(yù)定的定位策略選擇目標(biāo)對象.2 對象組模式允許多個對象以相同名字在命名服務(wù)中注冊客戶請求時,命名服務(wù)按照當(dāng)前定位策略從對象組中選擇一個對象.3 選擇器模式通過一個選擇器從它管轄下的復(fù)制服務(wù)器收集負(fù)載信息,用此信息作為選擇算法的輸入,用于平衡負(fù)載 遷移機(jī)制遷移策略:用于決定
39、一個新的服務(wù)器對象何時被選中,通常與定位機(jī)制一起提供完整的負(fù)責(zé)平衡方案LOCATION_FORWARD機(jī)制:基于POA的ORB可以允許服務(wù)器把客戶機(jī)請求重定向到另一個服務(wù)器對象集中器模式:由一個中間層負(fù)責(zé)轉(zhuǎn)發(fā)客戶機(jī)請求集中器封裝了系統(tǒng)所有負(fù)載平衡邏輯LOCATION_FORWARD服務(wù)器服務(wù)器客戶機(jī)1 由服務(wù)器控制遷徙2 復(fù)制服務(wù)器協(xié)作管理整個應(yīng)用程序負(fù)載3 服務(wù)器自己維護(hù)同組負(fù)載信息或采用獨(dú)立監(jiān)視器服務(wù)器服務(wù)器客戶機(jī)監(jiān)視器集中器模式:服務(wù)器服務(wù)器客戶機(jī)中間層 狀態(tài)管理問題:有狀態(tài)的服務(wù)器在內(nèi)存中保存了對象持久屬性的值多服務(wù)器用于負(fù)載平衡時,會引起不同客戶機(jī)只看到不同數(shù)據(jù)需要考慮服務(wù)器同步問題管理方法協(xié)調(diào):在多代理的緩存中的任何數(shù)據(jù)項(xiàng)都有一個一致的值驗(yàn)證:在允許客戶機(jī)讀/寫前檢驗(yàn)緩存6.6 容錯目標(biāo):當(dāng)故障發(fā)生時提供確定的服務(wù)級別故障:災(zāi)難性性能相關(guān)的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年手機(jī)行業(yè)退貨三包服務(wù)規(guī)范合同樣本3篇
- 2025年物流運(yùn)輸掛靠車輛運(yùn)輸合同范本3篇
- 砌塊工程施工方案
- 2025年行政訴訟上訴狀編寫規(guī)范:全面指導(dǎo)版3篇
- 二零二五版科技園區(qū)研發(fā)樓租賃續(xù)約4篇
- 二零二五版門店合伙人風(fēng)險管理與責(zé)任承擔(dān)合同4篇
- 2024年中級經(jīng)濟(jì)師考試題庫含答案(輕巧奪冠)
- 浮筏施工方案
- 2025年度養(yǎng)老產(chǎn)業(yè)項(xiàng)目貸款擔(dān)保合同范文3篇
- 2025年度個人網(wǎng)絡(luò)安全服務(wù)買賣合同(數(shù)據(jù)保護(hù))4篇
- 《健康體檢知識》課件
- 部編版語文五年級下冊 第一單元 專項(xiàng)訓(xùn)練課外閱讀(含答案)
- 蘇少版七年級美術(shù)下冊 全冊
- 名表買賣合同協(xié)議書
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
評論
0/150
提交評論