您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > opendaylight架构剖析
OPENDAYLIGHTopendaylight•背景•核心技术•主要特色•编译与使用•AD-SAL与MD-SAL•PACKET处理背景•SDN市场,未来应用为主,底层屏蔽,网络服务于应用,controller的争夺,•由IT厂商发起的组织思科,IBM,DELL,REDHAT,VMware等主要为网络设备制造商,软件商,•ONF由网络用户发起,成员都是网络设备用户,致力于标准化,OPENFLOW,•而南向接口不仅仅是OPENFLOW,SDNCONTROLLER•协作开发,由各公司贡献PROJECT,•打造统一开放的SDN平台,本质核心控制和转发分离,南向不需标准化,•推动产业向前,需要标准化,但又不希望标准化,硬件,•最初核心代码由思科和BIGSWITCH,•目标是打造一个网络操作系统核心技术•OSGI一种面向服务的架构,将应用视为对等模块的相互协作,支持在控制器运行时进行服务的安装、删除和更新。•MAVEN构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。•INFINISPAN实现集群•SAL多种南向协议对上提供统一的北向服务接口。•南向NETTY管理底层的并发IO•北向RESTOSGI•模块化定义了OSGI模块的概念,并将之称为一个BUNDLE,包含一个元数据的JAR文件,其中元数据MANIFEST.MF,由NAME-VALUE对组成,由类及相关资源组成,关注的是打包和共享代码。•生命周期定义了OSGI在框架中如何动态安装和管理,通过生命周期的操作(安装,更新,卸载等)动态地管理和改进应用程序,不需要重启应用程序。重点在于执行时模块管理和对底层OSGI框架的访问。•服务层面向服务,服务注册,查找等,接口与实现分离,OSGI服务是JAVA接口,模块内的组件间交互和通信。MAVEN•优秀的构建的工具,可以•每个MAVN项目中核心是POM.XML,其定义了项目的基本信息,•编译时就是使用了mavencleaninstall,•一个重要插件maven-bundle-plugin在pom.xml,可自动生成osgi中元数据,MANIFEST.MF,•设置如importpackage,exportpackage,以及最重要的Bundle-Activator,设置其bundle;PROJECT协作开发,目前有很的PROJECT,20个左右,由各公司开发,•目前发布了Hydrogen版本,主要涉及以下几个PROJECT•BaseOpendaylightController,YANGTools,OpenflowPlugin•VirtualizationAffinityDefense4All,OpenDOVE,OVSDB,VTN•SerivceProviderBGP/LSandPCEP,LISPFlowMapping,SNMP4SDN•下个版本为Helium•InHydrogenRelease,TheOpendaylightControllerConsistsOfTheFollowingModules:•AD-SAL-Api-drivenServiceAbstractionLayer•AD-SALNetworkServiceFunctionsForOpenflow-capableNodes:SwitchManagerStatisticsManagerHostTrackerARPHandlerForwardingRulesManager(FRM)TopologyManager•ClusteringAndHigh-availabilityServicesForAD-SAL•MD-SAL-Model-drivenServiceAdaptationLayer-ASetOfInfrastructureCommonAndGenericServicesForApplicationsAndPlugins(Basically,APlumbingThatConnectsApplicationsAndPluginsToEachOther).•Md-salBaseNetworkFunctions:TopologyExportersInventoryManagers•MD-SALNetworkServiceFunctionsForOpenflow-capableNodes:ForwardingRulesManager(FRM)StatisticsManager•MD-SALNetconfConnector(SouthboundNetconfPlugin)•MD-SALRestconfConnector(NorthboundRestconfPlugin)-AnInfrastructureComponentThatRendersRESTApisForDevice/ServiceModelsLoadedIntoTheController•ConfigSubsystem-Netconf/YangBasedFrameworkForConfiguration,PerformanceAndFaultManagementOfControllerInfrastructureAndPluginsDeployedIntoTheController•NSFAdapters-NetworkServiceFunctionAdapterThatAllowTheMD-SALBasedOF1.0/1.3PluginToTalkWithAS-SALBasedNetworkServiceFunctions安装与使用://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distributions-base/0.1.1/distributions-base-0.1.1-osgipackage.zipInstallingFromRPMvirtualboximage下载源码,编译编译与运行•搭建环境,Ubuntu12.04•安装JDK,MAVEN,设置环境变量,•ECLIPSE,安装插件:eclipse_cli_setup•下载project,openflowplugin,controller:gitclone•Mvncleaninstallor-DskipTests–Dcheckstyle.skip•运行./run.shOpenDayLight中的bundles•核心基类:ComponentActivatorAbstractBase•每个模块的bundle都要继承,•Start(context)启动方法,会遍历其所提供的实现,依次配置依赖关系。•getGlobalImplementations()获取全局的实现类,其导出接口的实现类。•getImplementations()获取容器相关的实现。•ConfigureGlobalinstance(c,Imps[i]),c是前面提到的Component•configureInstance()在一个容器中配置实现的依赖关系。•containerCreate(StringcontainerName)配置Componet,里面说明了导出的接口和依赖的接口,最后放到dm及缓存中。会在ContainerMangaer的bundle启动中调用。•CreateServiceDependency()生成服务依赖对象,需要被子类调用,在配置componet的依赖关系的时候需要用到。依赖管理•bundle的抽象基类,管理全局和容器相关的服务,当然bundle本身就是一个大服务。•Container是OpenDaylight中的一个网络域,有很多链接信息、整个域网络信息等,由ContainerManager管理容器,而OSGI管理各个bundle;•每个模块中有多个实现,其中通过DependencyManager管理其依赖关系。•每个实现一个Component,每个Component就是一个服务,里面说明了导出的接口和依赖的接口。•通过DependencyManager以component管理依赖。SAL主要作用将服务抽象出来,不管控制器和网络设备之间使用何种协议,提供协约国的一服务,是ODL的核心设计,支持多种南向协议,为各模块和应用提供一致的服务,这些服务的实现,是由底层插件(基于已存在的组件(如OF)和网络设备的功能))的所提供的接口,但是与SAL是松耦合的。具体将请求,映射到相应的插件,完成服务。所提供服务•DataPacketServices为数据报文的处理,提供服务•TopologyService为应用提供节点和链路的更新信息,•Inventoryservice为如节点或者节点连接提供API查询•FlowProgrammingService流编程服务•Resourceservice资源服务,Sal—dapacketService•首先OF组件收到APR,需要交到ARPHandler处理,•将首先根据类型,调用IPOPS到SAL,交由SAL层•Sal中的DataPacketservice实现了IPOPS•其会通过dispacthPacket()方法,•其会调用实现IListendatapacket的应用,依赖于实现些接口,会•最后ARP实现了IListenDatapacket会将其送到ARPHandler处理。MD-SAL•Md-sal的主要功能是促进提供者和使用者之间的管道。它可以提供提供者和使用者之间的管道在不同的容器中。它将连接到一个消息总线和共享数据存储的集群opendaylight容器。南向与北向的一致性。•提供者或消费者在md-sal中注册。从而,一个消费者可以找到所需的供应商。提供者可以生成通知,消费者可以接收通知,并从提供者获取数据。•插件sal角色(消费者或生产者)定义的sal中的数据是被移走或存储数据。提供者可以将数据存入sal的,一个消费者可以从sal读取数据。•Md-sal提供请求路由和基础设施服务,以支持服务,但它不提供服务本身;由插件提供服务。•Yang使得Componet之间、plugin、北向等api,使得这种接口和ad-salREST接口相比更抽象,符合模型驱动(MD)的思想。1)FPC注册RegistersWithTheMDSALForFlowConfigurationDataNotifications与OP‘AddFlow’RPCimplementationwiththeSAL2)requestsaflowaddthroughtheController’sRESTAPI3)theMD-SALgeneratesa‘datachanged’notificationtotheFlowProgrammerService4)usestheOFPlugingeneratedAPItocreatetheRPCinputparameterDTOfortheOFPlugin’s“AddFlow”RPC5)MD-SALwillroutetherequesttotheappropriateOFPlugin6)下发流表(与AD-sal类似)PACKET处理流程•PacketIn消息到来,经过底层plugin,经由sal层,调用实现了IListenDataPacket的•reciviceDataPakcet(RawPacketin)处理,•主要涉及三个模块,分别为ARPHan
本文标题:opendaylight架构剖析
链接地址:https://www.777doc.com/doc-5962383 .html