




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 CORBA服务6.1 概述核心服务对象定位:命名服务和交易对象服务对象消息:事件服务和通知服务安全数据库与事务处理对象存储对象关系事务处理并发控制其他对象查找机制对象目录:存储对象及其关联的数据命名服务:存储对象引用与一个名字的关联交易对象服务:存储对象引用与一系列相关属性之间的关联客户程序对象实现1 发布2 查找3 使用name1name2nameNOOO6.2 命名服务定义:给对象实例提供一个名称,便于用户通过其来获取对象实例作用:是ORB上对象找到其他对象的基本机制名字联便:名字对象(标记)关联可创建命名分层结构来自不同域的名字语言环境可以一起使用,为对象创建联合命名服务 6.2
2、.1 层次结构节点都是对象,分为两类环境对象:命名环境(naming context),空心节点,可以是节点和叶子应用对象:应用程序的对象,只能是叶子弧:表示对象引用,且用该对象在context中出现的名字标识可根据对象名字通过遍历的方式找到目的对象的对象引用aaeebbccddffgg名字服务:Naming Context:Naming Context:Naming Context:StockWatch:StockWatch:PManager“StockWatch”“PortfolioManager”“NASDAQ”“NYSE”“MainAdmin”6.2.2 对象的命名内容 Corba对象
3、的句柄定义成如URL(统一资源定位)的形式,从而允许ORB来调用基于Corba的服务或者远程ORB上的对象实例上下文对象:任何一个厂商的ORB都可以通过配置客户端的ORB来初始化根命名服务的上下文对象(NamingContext)对于Corba对象的复合命名。定义一个标准的语法规则。这样服务器端和客户端就可以通过相同的格式来进行读写消息。 Corba对象的统一资源定位(URL):Corbaloc 通常的做法是把一个Corba的服务器放在一台有指定域名地址和端口的机器上。Corba的服务器要为许多的Corba对象服务。一般我们需要在对象实例 的URL地址后加上特定的对象健值(Object Key
4、 ID)或对象名字,这些对象的名字或健值就指明了我们所需要的特定的服务。如下所示:Corbaloc:/NameService Corbaloc URL的完整格式 IIOP:1.:2809/pub/nameservice 6.2.3 名字服务模型名字服务器客户服务器OA对象1、对象注册2、名字解析3、远程方法引发名称上下文(Name Context)可利用其接口中的bind函数将自己的名称与对象引用联系起来客户使用resolve函数来按对象名称查找对象引用命名服务具有分布式优点,在整个CORBA环境中都可访问到名称服务所存储的对象引用附录1 名字服务器编程6.2.4 名字服务编程要素module
5、 CosNaming./struct NameComponent string id;/用户的字符串标识符 string kind;/扩展名/描述信息,如编码,版本 ; typedef sequence Name; NameComponet对象的名字由一系列NameComponet顺序串接而成只有一个NameComponet的名字成为简单名多个复合名复合名最后一个是简单名,表示应用对象其他都是环境名复合名由若干环境名和一个简单名串接而成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();/命名环境的创建 NamingContext bind_new_context(in Name n); void destroy( );/命名环境的删除 void list (in unsigned long how_many, /命名环境的列表 out BindingList bl, out BindingIterator bi); ; 绑定Bind()在当前命名环境中命名一个对象如对象ee与名为aa的环境对象绑定Bind_context():在当前命名环境中命名一个命名环境在当前名为dd的环境对象中绑定另一个名为gg的环境对象
8、aaeebbccddffgghh解析从一个名字得到一个与之绑定的对象的操作复合名所定义的就是一条解析各个环境名的路径,直至到达简单名Object solve(in Name n)返回的对象可能是一个被绑定的应用对象或命名环境,要将其narrow到合适对象类型 命名环境的列表void list (in unsigned long how_many, out BindingList bl, out BindingIterator bi);列出当前命名环境中下一级所有绑定的名字 迭代器 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 名字服务编程启动名字服务器实例化服务对象服务对象在名字服务器上注册客户在名字服务器上按名查找对象客户引发对象的方法支持无连接的,事件驱动的C/S通信方式事件服务定义了组件间消息传输的框架6.3.1 事件服务体系结构suppliersupplierConsumerConsumerConsumerEvent ChannelPULLPULLPUSHPUSHPUSH提供者:负责生产事件数据(发布者)消费者:接收和
10、处理事件数据(订阅者)事件通道:中转媒介,可实现多个消费者和提供者的异步通信两种事件数据传送模型:推push模型:事件的提供者起带头作用,发起事件的传送;拉pull模型:事件的消费者起带头作用,向提供者请求事件数据。6.3.2 事件服务push模型事件通道推消费者推消费者推提供者推提供者Push()Push()通知人事件服务pull模型事件通道拉消费者拉消费者拉提供者拉提供者Pull()Pull()获取者事件服务混合push/pull模型事件通道拉消费者拉消费者推提供者推提供者Push()Pull()队列事件服务混合pull/push模型事件通道推消费者推消费者拉提供者拉提供者Pull()Pu
11、sh()智能代理6.3.3 事件服务结构事件通道消费者提供者提供者代理消费者代理事件服务push模型事件通道推消费者 #1推消费者 #2推消费者 #3磁盘满磁盘满磁盘满推提供代理 #1推提供代理#2推提供代理#3磁盘满事件提供者磁盘满推消费代理 事件服务pull模型事件通道拉模式代理事件消费者 拉模式事件消费者拉模式代理事件提供者事件提供者正常服务器正常吗?连接服务器:正常正常连接6.3.6 模型使用步骤在事件通道一侧:从名字服务中获得事件通道工厂使用事件通道工厂创建事件通道将事件通道注册到名字服务中模型使用步骤在提供者一侧:从名字服务中获得事件通道创建一个供应者管理器从事件通道中为对端消费者
12、在本地创建一个消费者代理将提供者与消费者代理连接,即向通道注册创建一个消息,并将消息推给消费者模型使用步骤在消费者一侧:从名字服务中获得事件通道创建一个消费者管理器从事件通道中获取一个提供者的代理将消费者连接到提供者代理,表示向同一通道注册附录2 事件服务编程6.3.4 事件服务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 (); ;事件服务 interface SupplierAdmin Prox
15、yPushConsumer obtain_push_consumer();ProxyPullConsumer obtain_pull_consumer(); ; interface ConsumerAdmin ProxyPushSupplier obtain_push_supplier();ProxyPullSupplier obtain_pull_supplier(); ;事件服务 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); ;事件服务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) 从事件信道中获取一个推消费者代理:SupplierAdmin admin= eventChannel.for_suppliers(); / 对应Push事件脚本的
18、第一步ProxyPushConsumer pushConsumer = admin .obtain_push_consumer();/ 对应图中Push事件脚本的第二步(3) 创建一个推提供者:MySupplier pushSupplier=new MySupplier(); (4)将提供者连接到事件信道:pushConsumer.connect_push_supplier(pushSupplier);/对应图中Push事件脚本的第三步 (5)创建一个CORBA消息:HelloImplementation msg=new HelloImplementation()(6)利用CORBA消息创建一
19、个Any事件对象: Org.omg.CORBA.Any pushMessage=orb.create_any();PushMessage.insert_Object(msg);(7) 将消息推给消费者:pushConsumer.push(pushMessage); 2. 对于一个推模型的推消费者来讲,基本的事件序列如下:(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();/ 对应图中Push事件脚本的第四步ProxyPushSupplier pushSupplier = admin .obtain_push_supplier();/ 对应图中Push事件脚本的第五步(3) 创建一个推消费者:MyConsumer pushConsumer=new MyConsumer ();(4) 将消费者连接到事件信道:pushSupplier.connect_push_consumer(pushConsumer); / 对应图中Push事件脚本的第六步(
21、5) 在一个 push()实现中被接收:public void push(Any pushMsg) / 对应图中Push事件脚本的第七步org.omg.CORBA.Object object=pushMsg.extract_Object();Hello msg=HelloHeper.narrow(object); 附录2 END6.4 交易器服务概述基本概念互连机制小结事件服务定义了组件间消息传输的框架生产者与消费者通过标准的CORBA对象通道进行异步的事件通信推模式和拉模式缺点无服务质量的规定:未定义如何保证事件的可靠传输事件服务不处理事件通道的高层信息:事件生产者不知是否有消费者对其事件感
22、兴趣,消费者无法知道生产者能提供哪些事件只提供在事件通道级别上区别事件的方法:共用同一事件通道的消费者将接收该通道中所以事件,而对事件的过滤只能在客户端进行,增加了网络和客户的资源消耗6.4.1 概述功能:类似黄页,可向其他对象发布它们所能提供的服务或查找所需服务Export:向交易器给出服务的描述以及服务所在接口的位置(服务输出)Import:对象要求交易器提供符合一定条件的服务(服务输入)import与Export实现了服务的动态查找和延后绑定如果需求超过分区能力,则直接访问:用户直接与该服务区的交易器交互间接访问:用户仅与一个交易器交互,并且此交易器再与其他交易器交互TraderClie
23、ntServer1 Export2 Import3 服务交互多样性和伸缩性包含大量服务易获得性包含少量服务性能包含包含所有输出服务的位置包含其他服务区信息连接的交易器可以跨越域边界交易服务是一种联邦系统,可跨越多个域策略,约束,优先选择通过策略,约束,优先选择可以使交易器裁减其搜索策略:告诉交易器如何完成搜索。决定交易器的行为约束:指明一种搜索标准优先选择:指明匹配的服务应被返回的优先顺序基本概念Exporter(输出方):服务提供者或代表其他服务提供者发布服务Importer(输入方):通过交易器查找符合条件的服务。是潜在的服务客户或代表其他客户输入所要求的服务服务类型:描述一个服务所需信息
24、接口类型:零个或多个命名的属性类型服务类型用于描述一个服务,包含提供这个服务的接口类型以及一系列用于描述该服务的特征类型每个特征类型都有一个的三元组与之联系特征模式:用于表明特征类型是否是必需,只读服务类型模型服务类型之间可以继承自多个服务类型,被继承的服务类型称为基服务类型接口类型必须同基类型的接口类型相同或继承而来Mandatory:输出服务供应时服务类型实例必须为该类型提供适当的值Readonly:输出服务供应时如该属性已被赋值,则该属性不能被后面的Register:modify()操作改变Service :,*interface ; mandatoryreadonly property
25、;*;广告类型名:建筑物广告接口:Building特征:建筑物名称 字符串 必需且只读地址 字符串 必须且只读开发商 字符串 可选且只读承建单位 字符串 可选且只读工程等级 整数 可选且只读每平米价格 整数 必需且可修改建议用途 字符串 可选且可修改广告类型:住宅建筑物广告接口:DwellingHouse特征:售房许可证号 整数 必需只读最小户型面积 整数 可选只读最大户型面积 整数 可选只读ServiceTypeNameInterfacePROM_MANDATORY_READONLYPROM_READONLYPROM_NORMALServiceTypeNameDwellingHouse继承自
26、BuildingPROM_MANDATORY_READONLYPROM_READONLY服务供应(service offer)服务类型的实例化按照服务类型给出自己的特征取值和满足这些特征取值的接口实例必须提供服务类型名所有特征模式为必需的特征的取值接口类型的引用广告类型名:建筑物广告接口:Building特征:建筑物名称 字符串 必需且只读地址 字符串 必须且只读开发商 字符串 可选且只读承建单位 字符串 可选且只读工程等级 整数 可选且只读每平米价格 整数 必需且可修改建议用途 字符串 可选且可修改实例:xingFuBuilding特征:建筑物名称 “幸福大厦”地址 “学院路10号”开发商
27、“阳光开发集团”承建单位 “市一建公司”工程等级 1每平米价格 3000建议用途 “办公”一个服务供应被提交给交易器后,交易器会向出口者返回一个通告标识OfferId供出口者检验,撤回或修改这个服务通告,OfferId在一个交易器中可以唯一标识一个服务供应服务供应的选择交易器使用策略来确定需要查找的服务供应集S1在S1上通过服务类型和约束条件来确定满足服务类型和约束条件的集合S2在把返回service offer给输入方前根据优先选择条件来确定最后的service offer策略(Policies)用值名对表示两类限制搜索范围确定操作功能潜在服务供应被考虑的服务供应已匹配的服务供应已排序的服务
28、供应被返回的服务供应搜索策略匹配策略返回策略聚集匹配返回N1N2N3N4N5满足服务类型和约束条件具一致性服务类型优先选择条件用于决定返回匹配的服务供应的顺序优先选择串Max: 降序返回Min:升序With:约束表达式(真在假前)Random: 随机First:发现顺序交易服务的描述提供三个IDL模块:CosTradingRepos, CosTrading, CosTradingDynamicCosTradingRepos:定义,检验和删除服务类型的功能ServiceTypeRepository:存放服务类型描述,7种操作,主要使用add_type, list_type, descirbe_t
29、ype(获得细节信息)CosTrading:创建,查找服务供应,创建代理服务供应,修改交易联盟,配置交易功能Loopup:查询所需服务Register:登记供应者发布的服务,主要使用export(公告服务), describe(获得所需服务供应的详细信息)交易流程1Add_type2 export3 describe4 List_type5 Describe_type6 query7 调用服务CosTradingRepos:ServiceTypeRepositoryCosTrading:RegistorCosTrading:Lookup交易器管理环境交易器核心环境Importerexporte
30、r1 登记新服务类型。Exporter调用ServiceTypeRepository接口中的add_type操作,将准备发布的服务类型存放到服务类型库中2 发布新服务。Exporter调用Register中的export操作,将新的服务以规定的服务供应格式进行注册,供应内容包括服务类型名,申请登记服务的对象引用以及已赋值的服务特性返回:唯一的服务供应标识3 检查已登记的服务供应。Exporter给出指定的供应标识(OfferId),调用Register的describe操作,可得到与该标识对应的服务供应4 请求服务类型列表。Importer调用list_type,得到服务类型清单5 请求服务类
31、型的描述。Importer从服务类型列表清单中选出所需的服务类型,用相应的服务类型名调用describe_type方法,获取以下信息:接口名字,特征类型,所继承的基服务类型名6 查询指定服务类型的全部实例。Importer根据给定的某种服务类型以及前面的查询参数,调用lookup接口中的query操作,得到满足查询条件的,对应于该服务类型的全部服务通告,使进口者获得所有能提供这些服务的对象引用7 调用服务。Importer给出服务的对象引用,调用对应服务,完成一个交易周期互连机制连接遍历控制联邦查询实例代理服务供应连接遍历控制交易器连接的弹性容许任意连接交易器问题每个交易器可能不止一次被访问,
32、因为一个交易器可以出现在不同路径上。源交易器为每个查询操作产生一个RequestID查询始发者生成Requestid,并以字节流方式放入request_id策略中,一个交易者可记下自己处理过的Requestid,若发现有相同requestid,表明已处理过,可不处理可能产生循环。 hop_count用于限制查询被传递的深度联邦查询实例一个交易器可以与其他交易器连接,使其他交易者的信息对自己同样有用一个register可提供resolve()操作来获得其他的register,其输入可以是直接与该register连接的交易者的名字,也可是间接与该register连接的交易者的名字间接方式下,要将所
33、有中间经过的交易器的名字都串接,形成一个序列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的值被调用,T1的范围搜索限制策略中的max_hop_count=5,所以最终用于搜索的hop_count=42 假定在T1中未找到一个合适的匹配而跟随策略为always,则T1将请求传递给T3,输入方的hop_count3,作为T3的查询输入值。T3的本地max_hop_count=1,且产生request_id以避免对同一交易器的重复搜索。这样用于T3查询的hop_count=1且T3_request_id被保存3 假定T3未找到一个合适的匹配而跟随策略为always,则T4的策略输入参数:hop_count=0, reque
35、st_id=T3_request_id4 假定在T4中未找到一个合适匹配,此时即使T4的max_hop_count=4,搜索也不会继续被传递。搜索失败将返回给T3,T1,直至T1的使用者查询操作是否在其余交易器上被传递取决于连接跟随策略,若为always,查询将到达所有满足hop_count策略的交易器小结交易服务CORBA的命名服务提供了基本的名称到对象引用的解析功能,但对于基于对象属性和特征的对象查询则无能为力交易对象服务基于服务类型(Service Type)的概念每个服务类型都包含一个IDL接口标识符和一些定义特征的附加数据各对象通过交易器完成对象特征的发布和匹配管理员使用add_ty
36、pe定义某个对象类型及其特征数据和类型对象使用export按所定义的类型输出其对象引用和特征客户使用query提交所需对象的特征交易服务在其交易空间中匹配并返回结果在联邦交易环境中,多个相连的交易器可以协同工作完成对象交易服务6.5 负载均衡可提高系统性能,可靠性和可用性应用程序分区复制定位机制迁徙状态管理6.5.1 应用程序分区把应用程序分割成一定数量的独立的服务组件,它们提供应用程序整体功能中的特定子集,所有分区功能的总和等于整个应用程序的功能两种模式:水平应用程序分区:按系统功能切分APP;每个服务器只提供系统功能的一个子集垂直应用程序分区:基于数据切分,每个服务器提供系统全部功能,但只
37、能访问数据一个子集水平应用程序分区垂直应用程序分区。数据数据数据 分区的问题实现合理分布困难静态性质使得对选定分区进行修改困难:要求对IDL进行基础性的修改要求:使分区对客户机尽可能透明,客户机代码不应知道分区6.5.2 复制定义:相同服务器有多个实例,每个实例提供相同功能,并访问相同的数据对象集特点:客户机请求可指向当前有效的服务器中任一个进行服务器之间的同步操作作用:支持某种性能和吞吐量的服务质量考虑:对象定位:采用多代理,对象组,选择器模式迁徙:何时选取一个服务器对象状态管理:采用缓存同步和数据库复制 定位机制多代理:在每个客户机上缓存一些有效服务器对象引用,重定向到不同服务器对象组:将
38、一个名字映射到多个对象引用选择器:将新客户机指派给负载最轻的服务器.1 多代理模式命名服务器绑定。对象服务器1对象服务器2对象服务器3Client缓存IOR按策略选择一个服务器agent1 多代理被实现为客户机端的封装类2 客户机启动与命名服务连接,获得各服务器对象引用,并缓存3 缓存后不再与命名服务联系4 客户机发请求时,按预定的定位策略选择目标对象.2 对象组模式允许多个对象以相同名字在命名服务中注册客户请求时,命名服务按照当前定位策略从对象组中选择一个对象.3 选择器模式通过一个选择器从它管辖下的复制服务器收集负载信息,用此信息作为选择算法的输入,用于平衡负载 迁移机制迁移策略:用于决定
39、一个新的服务器对象何时被选中,通常与定位机制一起提供完整的负责平衡方案LOCATION_FORWARD机制:基于POA的ORB可以允许服务器把客户机请求重定向到另一个服务器对象集中器模式:由一个中间层负责转发客户机请求集中器封装了系统所有负载平衡逻辑LOCATION_FORWARD服务器服务器客户机1 由服务器控制迁徙2 复制服务器协作管理整个应用程序负载3 服务器自己维护同组负载信息或采用独立监视器服务器服务器客户机监视器集中器模式:服务器服务器客户机中间层 状态管理问题:有状态的服务器在内存中保存了对象持久属性的值多服务器用于负载平衡时,会引起不同客户机只看到不同数据需要考虑服务器同步问题管理方法协调:在多代理的缓存中的任何数据项都有一个一致的值验证:在允许客户机读/写前检验缓存6.6 容错目标:当故障发生时提供确定的服务级别故障:灾难性性能相关的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法律行业合同法与知识产权试题集
- 大规模数据分析与应用实战指南
- 孵化器房屋租赁合同
- 管道衬胶施工方案
- 南通环保槽钢施工方案
- 包柱广告施工方案
- 平面夯实施工方案
- 带电开挖电缆施工方案
- 旋挖咬合桩施工方案
- 部分区县一模数学试卷
- 现代家政导论-课件 6.1.2认识家政职业道德
- Unit+6+the+admirable+Lesson+2+History+Makers+说课高中英语北师大版(2019)必修第二册+
- 中医医院医疗质控手册
- 《廉颇蔺相如列传》教案 2023-2024学年高教版(2023)中职语文基础模块下册
- 为别人生小孩协议书模板
- JGJ 111-2016 建筑与市政工程地下水控制技术规范
- NB-T31065-2015风力发电场调度运行规程
- 数据标注工程-概念、方法、工具与案例 课件 第6章 文本数据标注
- 幼儿园小班科学课件:《新年的礼物》
- 四川省绵阳市东辰学校2023-2024学年七年级下学期3月月考语文卷
- DZ/T 0430-2023 固体矿产资源储量核实报告编写规范(正式版)
评论
0/150
提交评论