资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,opendaylight,分析,opendaylight,总体架构分析,模块,osgi Bundle 与floodlight之间的简单比照,SAL层 之OF Packet的处理流程,Md-SAL模型化驱动简单分析,Clustering集群,OSGi:由于采用OSGi体系结构,其技术提供一种面向效劳的架构,将应用视为对等模块的相互协作,,SAL:整个架构引入了业务抽象层,将效劳抽象化,使得上层北向和下层南向之间的调用相互隔离.,MD(Model Drive):使用Yang工具,使用业务模型驱动来设计接口、实现业务功能,根据yang文件,Yang工具直接生成业务管理的“骨架,主要用于南北接口数据的适配,使开发者真正专注于具体业务。,集群Infinispan:用开源的数据网格平台实现Controller的集群。,南向北向:南向使用Netty来管理底层的并发IO,北向使用REST接口。,核心技术,与Floodlilght的简单区别,采用OSGI框架,各模块间功能隔离开来,有利于扩展性、而且可以动态部署。OSGI的依赖关系管理,有多种实现方式,可以通过 Dependency Manager 对象来注册效劳,并通过反射注明依赖的效劳。而Floodlight只是单纯的java包之间的引用,扩展性不好,支持的南向接口少,目前只有OF1.0;但是易于上手。是一个Openflow控制器.,OpenDayLight,中的,bundles,核心基类 :ComponentactivatorabstractBase 实现了 Osgi提供的 BundleActivator, 以自己定义的容器接口iContaineraware,从中发现各个bundle之间、Componet之间、全局和容器Container之间的依赖和调用关系。,bundle的抽象基类,管理全局和容器相关的效劳,当然bundle本身就是一个大效劳。,Container是OpenDaylight中的一个网络域,有很多链接信息、整个域网络信息等,由ContainerManager管理容器 。而OSGI管理各个bundle;,每个具体的接口实现和容器的Container为关键字通过DependencyManager(依赖管理)创立一个Componet,每个Component就是一个效劳,里面说明了导出的接口和依赖的接口。,DM以Component的形式来管理依赖关系。,主要方法如下:,Start(context)启动方法,会遍历其所提供的实现,依次配置依赖关系。,getGlobalImplementations()获取全局的实现类,其导出接口的实现类。,getImplementations() 获取容器相关的实现 。,Configureglobalinstance(c, Impsi),c是前面提到的component,configureInstance在一个容器中配置实现的依赖关系。,containerCreate(String containerName)配置Componet,里面说明了导出的接口和依赖的接口,最后放到dm及缓存中。会在CM的bundle启动中调用。,CreateServiceDependency()生成效劳依赖对象,需要被子类调用,在配置componet的依赖关系的时候需要用到。,7,SAL效劳抽象层,主要作用将效劳抽象出来,不管控制器和网络设备之间 使用何种协议,提供协约国的一效劳,是odl的核心设计,支持多种南向协议,为各模块和应用提供一致的效劳,这些效劳的实现 ,是由插件公开(基于已存在的组件如OF和网络设备的功能)的所提供的接口,但是与SAL是松耦合的。具体将请求,映射到相应的插件,完成效劳。,所提供效劳,Data Packet Services 为数据报文的处理,提供效劳,Topology Service为应用提供节点和链路的更新信息,,Inventory service为如节点或者节点连接提供API查询,Flow Programming Service 流编程效劳,Resource service资源效劳,,对于一个,Packet-in,的处理过程,OF中的核心,Controller,南向设备通信的控制台,与Flooodlight中的Controller类功能,类似,相对简化,Of报文首先到达Controller,会将此报文发送,对已经注册过监听of报文的类中进行处理,其中,DatapacketMuxDemux只处理packet-in报文,,其会进一步处理,交由处理DiscoveryService处理的是,LLDP,其后,交给实现了Ipluginoutdatapacketservice,SAL层处理,最后交给实现了Ilistendatapacket监听报文的应用。,这与Floodlight处理报文的过程同。,Data Packet services,举例来说报文的简单处理过程,首先OF组件收到 APR,需要交到ARP Handler处理 ,,将首先根据类型,调用IPOPS到SAL,交由SAL层,Sal中的datapacketservice实现了IPOPS,其会通过dispacthPacket()方法,,其会调用实现IListendatapacket的应用,,最后 会将其送到ARP APP处理。,Topology Service,如前面所讲,报文经Controller处理后,DiscoveryService收到报文,因为其实现了Idatapacketlisten,所以其能在DataPacketmuxdemux中处理of报文的过程中,处理这个链路processDiscoveryPacket报文。交给实现了idiscoverylistener ,的TopologyserviceshimImplementsIdiscoverylistener,在这个类中,有个进程,一直在运行着,一但有更新,就会,将其notifyedge(edgeEdge, Updatetype Type, Set Props),而后,其交给 监听了Itopologyserviceshimlistener,将其交给topologyservices,处理,交给SAL层的Topology类,这个 会调用IListenTopoUpdates 遍历监听数组。 s.edgeUpdate(topoedgeupdateList);,MD-SAL,Md-SAL,分析,Md-sal的主要功能是促进提供者和使用者之间的管道。它可以提供提供者和使用者之间的管道在不同的容器中。它将连接到一个消息总线和共享数据存储的集群opendaylight容器。,提供者或消费者在md-sal中注册。从而 ,一个消费者可以找到所需的供给商。提供者可以生成通知,消费者可以接收通知,并从提供者获取数据。,插件sal角色(消费者或生产者)定义的sal中的数据是被移走或存储数据。提供者可以将数据存入sal的,一个消费者可以从sal读取数据。,Md-sal提供请求路由和根底设施效劳,以支持效劳,但它不提供效劳本身; 由插件提供效劳。,Yang 使得 Componet之间、plugin、北向等api,使得这种接口和ad-sal REST接口相比更抽象,符合模型驱动MD的思想。,MD-SAL,架构,Broker,功能:,consumer & provider,注册,PRCs,路由,Notification hub,系统状态访问和修改,The Consumer & Provider Binding is generated from YANG schema.,通过,BindingIndependentConnector,类,16,Md-sal -Bundles,之,service Tracker,AbstarctBrokerAwareActivator Impl BundleActivator 为基Bunddle; 每个 Md-SAL的Consumer,Provider分别继承AbstarctBrokerAwareConsumer; AbstarctBrokerAwareProvider;在这个类中有个BindAwareBroker,这个是MD-SAL层的核心,Start方法中startImpl(context);然后新建一个ServiceTrackerBindAwareBroker.open后,后会追踪效劳;当有效劳注册时,OSGI会触发addingservice();在本实现中,即BindAwareBroker这个在OSGI中实现后,会通过context.getService(getService(servicereference(bindingawarebroker)得到BindAwareBroker的实现,得到后会新建一个线程;onBrokerAvaiable(broker,context);AbstarctBrokerAwareConsumer 在这个方法中,完成Consumer的注册,会broker.RegisterConsumer(this,cotext);,BingAwareBroker,提供三种Infrastructure Service,,Yang Module Service GetPpcService(class);,Nitification Service Notificationservice,Data Store Access And Modification Databrokerservice,在其实现中,会初始化这三种效劳,并注入其实现,然后在为OSGI中注册;,然后在前面通过addingservice()中很到的getService(servicereference(bindingawarebroker);中得到其它注册来的borker;得到后,会将Consumer注册到这个broker中,得到ConsumerContext,后调用各自Consumer的onSessionInitialized(ConsumerContext);其中会通过getPrcService与getSALservice得到这三类效劳;,BindingIndependentConnector,这个类,主要负责与BA与BI之间的交互过程;完成BA到BI,与BI到 BA的过程;,在其成员变量中,有MapingService;及BA与BI的效劳,,LearningSwitch,Learningswitch 继承了 Abstractbindingawareconsumer,在 Onsessioninitialized(),Learningswitchmanagermultiimpl新建一个实例 ,并,Get References To The Following Services Registered With MD-SAL:,1)Databrokerservice 数据存储效劳,配置流,获取交换机状态 其实现类为 Databrokerimpl Begintransaction 中返回的transaction 是 Datatransactionimpl;,2)Notificationservice Packetin 通知效劳,3)Packetprocessingservice 发送报文,,通过三述效劳,得到与Md-SAL层通知;在这个Consumer中,处理交换机,映射表,及自学习的过程,下发相应流,FRM,Frm Extends AbstractBindAwareProvider,1 Provider.Dataservice = Providercontext.getSalservice(dataproviderserivce);,Salflowservice=providercontext.getRpcService(dataProviderSerivce);,通过 ProviderContext 获得两种效劳,一种sal层效劳,和rpc效劳,,2Provider.start),中 CommitHandler = New FlowCommitHandler(salFlowService);,Path 新建一个data Tree Modeled By YANG;,DataService.RegisterCommitHandler(path,flowcommithandler),3)当有 Databrokerservice.Commit时, 调用 Requestcommit(datastoreindentifier);return Flowtransaction;invoke Finish();datacommittransaction是datacommithandler的内部类;finish Commit;,Openflowplugin,Activator Extends ComponentActivatorAbstractBase,Imp 为openFlowPluginProvider,Dependency 依赖于bindingAwareBroker,switchConnectionProvider;,初始化的过程中,会调用set方法 ,在两者set之后 ,会调用 Broker.RegisterProvider(this,context);返回providerContext,随后调用onSessioninitiated(pc);,在这个类中get publishService和dataService;两个SAL效劳;,然后通过 SessionManagerOFImpl里注入这两个效劳;,new MDController();,md.scp=setSwicthConnetcionProvider(swicthConnetcionProvider)处理与交换机连接的实际提供者,处理与交换机相连的局部;收到连接消息后,会调用下面的onSwitchConncted();,md.start(),1)FPC 注册 Registers With The MD SAL For Flow Configuration Data Notifications与OP AddFlow RPC implementation with the SAL,2) requests a flow add through the Controllers REST API,3) the MD-SAL generates a data changed notification to the Flow Programmer Service,4) uses the OF Plugin generated API to create the RPC input parameter DTO for the OF Plugins “AddFlow RPC,5) MD-SAL will route the request to the appropriate OF Plugin,6)下发流表与AD-sal类似,谢谢,
展开阅读全文