opendaylight框架分析_第1頁(yè)
opendaylight框架分析_第2頁(yè)
opendaylight框架分析_第3頁(yè)
opendaylight框架分析_第4頁(yè)
opendaylight框架分析_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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、opendaylight分析opendaylightu總體架構(gòu)分析u模塊,osgi Bundle 與floodlight之間的簡(jiǎn)單對(duì)比uSAL層 之OF Packet的處理流程uMd-SAL模型化驅(qū)動(dòng)簡(jiǎn)單分析uClustering集群OSGi:由于采用OSGi體系結(jié)構(gòu),其技術(shù)提供一種面向服務(wù)的架構(gòu),將應(yīng)用視為對(duì)等模塊的相互協(xié)作,SAL:整個(gè)架構(gòu)引入了業(yè)務(wù)抽象層,將服務(wù)抽象化,使得上層(北向)和下層(南向)之間的調(diào)用相互隔離.MD(Model Drive):使用Yang工具,使用業(yè)務(wù)模型驅(qū)動(dòng)來(lái)設(shè)計(jì)接口、實(shí)現(xiàn)業(yè)務(wù)功能,根據(jù)yang文件,Yang工具直接生成業(yè)務(wù)管理的“骨架”,主要用于南北接口數(shù)據(jù)的

2、適配,使開(kāi)發(fā)者真正專注于具體業(yè)務(wù)。集群(Infinispan):用開(kāi)源的數(shù)據(jù)網(wǎng)格平臺(tái)實(shí)現(xiàn)Controller的集群。南向北向:南向使用Netty來(lái)管理底層的并發(fā)IO,北向使用REST接口。核心技術(shù)與Floodlilght的簡(jiǎn)單區(qū)別采用OSGI框架,各模塊間功能隔離開(kāi)來(lái),有利于擴(kuò)展性、而且可以動(dòng)態(tài)部署。OSGI的依賴關(guān)系管理,有多種實(shí)現(xiàn)方式,可以通過(guò) Dependency Manager 對(duì)象來(lái)注冊(cè)服務(wù),并通過(guò)反射注明依賴的服務(wù)。而Floodlight只是單純的java包之間的引用,擴(kuò)展性不好,支持的南向接口少,目前只有OF1.0;但是易于上手。是一個(gè)Openflow控制器.OpenDayLig

3、ht中的bundles核心基類 :ComponentactivatorabstractBase 實(shí)現(xiàn)了 Osgi提供的 BundleActivator, 以自己定義的容器接口iContaineraware,從中發(fā)現(xiàn)各個(gè)bundle之間、Componet之間、全局和容器Container之間的依賴和調(diào)用關(guān)系。 bundle的抽象基類,管理全局和容器相關(guān)的服務(wù),當(dāng)然bundle本身就是一個(gè)大服務(wù)。Container是OpenDaylight中的一個(gè)網(wǎng)絡(luò)域,有很多鏈接信息、整個(gè)域網(wǎng)絡(luò)信息等,由ContainerManager管理容器 。而OSGI管理各個(gè)bundle;每個(gè)具體的接口實(shí)現(xiàn)和容器的Con

4、tainer為關(guān)鍵字通過(guò)DependencyManager(依賴管理)創(chuàng)建一個(gè)Componet,每個(gè)Component就是一個(gè)服務(wù),里面說(shuō)明了導(dǎo)出的接口和依賴的接口。DM以Component的形式來(lái)管理依賴關(guān)系。7主要方法如下:Start(context)啟動(dòng)方法,會(huì)遍歷其所提供的實(shí)現(xiàn),依次配置依賴關(guān)系。getGlobalImplementations()獲取全局的實(shí)現(xiàn)類,其導(dǎo)出接口的實(shí)現(xiàn)類。getImplementations() 獲取容器相關(guān)的實(shí)現(xiàn) 。Configureglobalinstance(c, Impsi),c是前面提到的componentconfigureInstance()在

5、一個(gè)容器中配置實(shí)現(xiàn)的依賴關(guān)系。containerCreate(String containerName)配置Componet,里面說(shuō)明了導(dǎo)出的接口和依賴的接口,最后放到dm及緩存中。會(huì)在CM的bundle啟動(dòng)中調(diào)用。CreateServiceDependency()生成服務(wù)依賴對(duì)象,需要被子類調(diào)用,在配置componet的依賴關(guān)系的時(shí)候需要用到。Bundle啟動(dòng)過(guò)程1)每個(gè)bundle都會(huì)從start(context)啟動(dòng),先根據(jù)osgi上下文信息,生成bundle對(duì)應(yīng)的dependencymanager對(duì)象,2)再獲取全局相關(guān)的服務(wù),每個(gè)實(shí)現(xiàn)通過(guò)dm創(chuàng)建一個(gè)componet,接著配置這個(gè)co

6、mponet。這里每個(gè)Component就是一個(gè)服務(wù),里面說(shuō)明了導(dǎo)出的接口和依賴的接口3)然后將這個(gè)componet放到dm和緩存(并發(fā)map:dbglobalinstances)中。接著向osgi容器注冊(cè)iContaineraware接口以便容器的生命周期轉(zhuǎn)換點(diǎn)調(diào)用。4)最后調(diào)用bunndle的鉤子函數(shù)init()。該函數(shù)的功能代碼的注釋已經(jīng)概括的很明確。9ArpHandlerArpHandler ArpHandler 所實(shí)現(xiàn)的接口有 Ihostfinder, Ilistendatapacket, Icacheupdateaware, 如前在所介紹的,其沒(méi)有全局的實(shí)現(xiàn),不會(huì)在啟動(dòng)過(guò)程中,配置

7、Component,其會(huì)在先而會(huì)在ContainerManager,啟動(dòng)后,調(diào)用在調(diào)用configureInstance,配置依賴關(guān)系。bundle啟動(dòng)過(guò)程中導(dǎo)出這個(gè)接口,并通過(guò)Createservicedependency()生成服務(wù)依賴對(duì)象。其所依賴的對(duì)象,都是其它budnle所導(dǎo)出的接口,如依賴于SAL層的DataPacketService,DijkstraImplementatio,這個(gè)模塊中所導(dǎo)出的Irouting接口,負(fù)責(zé)尋路。完成對(duì)ARP報(bào)文的處理。SAL服務(wù)抽象層主要作用將服務(wù)抽象出來(lái),不管控制器和網(wǎng)絡(luò)設(shè)備之間 使用何種協(xié)議,提供協(xié)約國(guó)的一服務(wù),是odl的核心設(shè)計(jì),支持多種南向

8、協(xié)議,為各模塊和應(yīng)用提供一致的服務(wù),這些服務(wù)的實(shí)現(xiàn) ,是由插件公開(kāi)(基于已存在的組件(如OF)和網(wǎng)絡(luò)設(shè)備的功能))的所提供的接口,但是與SAL是松耦合的。具體將請(qǐng)求,映射到相應(yīng)的插件,完成服務(wù)。所提供服務(wù) Data Packet Services 為數(shù)據(jù)報(bào)文的處理,提供服務(wù)Topology Service為應(yīng)用提供節(jié)點(diǎn)和鏈路的更新信息,Inventory service為如節(jié)點(diǎn)或者節(jié)點(diǎn)連接提供API查詢Flow Programming Service 流編程服務(wù)Resource service資源服務(wù),對(duì)于一個(gè)Packet-in的處理過(guò)程O(píng)F中的核心,Controller南向設(shè)備通信的控制臺(tái),

9、與Flooodlight中的Controller類功能類似,相對(duì)簡(jiǎn)化,Of報(bào)文首先到達(dá)Controller,會(huì)將此報(bào)文發(fā)送對(duì)已經(jīng)注冊(cè)過(guò)監(jiān)聽(tīng)of報(bào)文的類中進(jìn)行處理,其中DatapacketMuxDemux只處理packet-in報(bào)文,其會(huì)進(jìn)一步處理,交由處理DiscoveryService(處理的是LLDP),其后,交給實(shí)現(xiàn)了IpluginoutdatapacketserviceSAL層處理,最后交給實(shí)現(xiàn)了Ilistendatapacket監(jiān)聽(tīng)報(bào)文的應(yīng)用。這與Floodlight處理報(bào)文的過(guò)程同。Data Packet services舉例來(lái)說(shuō)報(bào)文的簡(jiǎn)單處理過(guò)程首先OF組件收到 APR,需要交到

10、ARP Handler處理 ,將首先根據(jù)類型,調(diào)用IPOPS到SAL,交由SAL層Sal中的datapacketservice實(shí)現(xiàn)了IPOPS其會(huì)通過(guò)dispacthPacket()方法,其會(huì)調(diào)用 實(shí)現(xiàn)IListendatapacket的應(yīng)用,最后 會(huì)將其送到ARP APP處理。Topology Service如前面所講,報(bào)文經(jīng)Controller處理后,DiscoveryService收到報(bào)文,因?yàn)槠鋵?shí)現(xiàn)了 Idatapacketlisten ,所以其能在DataPacketmuxdemux中處理of報(bào)文的過(guò)程中,處理這個(gè)鏈路processDiscoveryPacket()報(bào)文。交給實(shí)現(xiàn)了i

11、discoverylistener ,的 Topologyserviceshim ImplementsImplements Idiscoverylistener,在這個(gè)類中,有個(gè)進(jìn)程,一直在運(yùn)行著,一但有更新,就會(huì),將其notifyedge(edge Edge, Updatetype Type, Set Props)而后,其交給 監(jiān)聽(tīng)了 Itopologyserviceshimlistener,將其交給topologyservices ,處理,交給SAL層的Topology類,這個(gè) 會(huì)調(diào)用IListenTopoUpdates 遍歷監(jiān)聽(tīng)數(shù)組。 s.edgeUpdate(topoedgeupdat

12、eList);MD-SALMd-SAL分析Md-sal的主要功能是促進(jìn)提供者和使用者之間的管道。它可以提供提供者和使用者之間的管道在不同的容器中。它將連接到一個(gè)消息總線和共享數(shù)據(jù)存儲(chǔ)的集群opendaylight容器。提供者或消費(fèi)者在md-sal中注冊(cè)。從而 ,一個(gè)消費(fèi)者可以找到所需的供應(yīng)商。提供者可以生成通知,消費(fèi)者可以接收通知,并從提供者獲取數(shù)據(jù)。插件sal角色(消費(fèi)者或生產(chǎn)者)定義的sal中的數(shù)據(jù)是被移走或存儲(chǔ)數(shù)據(jù)。提供者可以將數(shù)據(jù)存入sal的,一個(gè)消費(fèi)者可以從sal讀取數(shù)據(jù)。 Md-sal提供請(qǐng)求路由和基礎(chǔ)設(shè)施服務(wù),以支持服務(wù),但它不提供服務(wù)本身; 由插件提供服務(wù)。Yang 使得 Co

13、mponet之間、plugin、北向等api,使得這種接口和ad-sal REST接口相比更抽象,符合模型驅(qū)動(dòng)(MD)的思想。16MD-SAL架構(gòu)Broker功能:功能:consumer & provider 注冊(cè)PRCs路由Notification hub1. 系統(tǒng)狀態(tài)訪問(wèn)和修改The Consumer & Provider Binding is generated from YANG schema.通過(guò)BindingIndependentConnector類Md-sal -Bundles 之service TrackerAbstarctBrokerAwareActivato

14、r Impl BundleActivator 為基Bunddle; 每個(gè) Md-SAL的Consumer,Provider分別繼承AbstarctBrokerAwareConsumer; AbstarctBrokerAwareProvider;在這個(gè)類中有個(gè)BindAwareBroker,這個(gè)是MD-SAL層的核心Start方法中startImpl(context);然后新建一個(gè)ServiceTracker(BindAwareBroker).open后,后會(huì)追蹤服務(wù);當(dāng)有服務(wù)注冊(cè)時(shí),OSGI會(huì)觸發(fā)addingservice();在本實(shí)現(xiàn)中,即BindAwareBroker這個(gè)在OSGI中實(shí)現(xiàn)后

15、,會(huì)通過(guò)context.getService(getService(servicereference(bindingawarebroker)得到BindAwareBroker的實(shí)現(xiàn),得到后會(huì)新建一個(gè)線程;onBrokerAvaiable(broker,context);AbstarctBrokerAwareConsumer 在這個(gè)方法中,完成Consumer的注冊(cè),會(huì)broker.RegisterConsumer(this,cotext);BingAwareBroker提供三種Infrastructure Service,Yang Module Service GetPpcService(cl

16、ass);Nitification Service NotificationserviceData Store Access And Modification Databrokerservice在其實(shí)現(xiàn)中,會(huì)初始化這三種服務(wù),并注入其實(shí)現(xiàn),然后在為OSGI中注冊(cè);然后在前面通過(guò)addingservice()中很到的getService(servicereference(bindingawarebroker);中得到其它注冊(cè)來(lái)的borker;得到后,會(huì)將Consumer注冊(cè)到這個(gè)broker中,得到ConsumerContext,后調(diào)用各自Consumer的onSessionInitialize

17、d(ConsumerContext);其中會(huì)通過(guò)getPrcService與getSALservice得到這三類服務(wù);BindingIndependentConnector這個(gè)類,主要負(fù)責(zé)與BA與BI之間的交互過(guò)程;完成BA到BI,與BI到 BA的過(guò)程;在其成員變量中,有MapingService;及BA與BI的服務(wù),LearningSwitchLearningswitch 繼承了 Abstractbindingawareconsumer在 Onsessioninitialized()Learningswitchmanagermultiimpl新建一個(gè)實(shí)例 ,并Get References T

18、o The Following Services Registered With MD-SAL:1)Databrokerservice 數(shù)據(jù)存儲(chǔ)服務(wù),配置流,獲取交換機(jī)狀態(tài) 其實(shí)現(xiàn)類為 Databrokerimpl Begintransaction 中返回的transaction 是 Datatransactionimpl;2)Notificationservice Packetin 通知服務(wù)3)Packetprocessingservice 發(fā)送報(bào)文,通過(guò)三述服務(wù),得到與Md-SAL層通知;在這個(gè)Consumer中,處理交換機(jī),映射表,及自學(xué)習(xí)的過(guò)程,下發(fā)相應(yīng)流FRMFrm Extends

19、AbstractBindAwareProvider1) Provider.Dataservice = Providercontext.getSalservice(dataproviderserivce);Salflowservice=providercontext.getRpcService(dataProviderSerivce);通過(guò) ProviderContext 獲得兩種服務(wù),一種sal層服務(wù),和rpc服務(wù),2)Provider.start(),中 CommitHandler = New FlowCommitHandler(salFlowService);Path 新建一個(gè)data T

20、ree Modeled By YANG;DataService.RegisterCommitHandler(path,flowcommithandler)3)當(dāng)有 Databrokerservice.Commit時(shí), 調(diào)用 Requestcommit(datastoreindentifier);return Flowtransaction;invoke Finish();datacommittransaction是datacommithandler的內(nèi)部類;finish Commit;OpenflowpluginActivator Extends ComponentActivatorAbstractBaseImp 為openFlowPluginProvider Dependency 依賴于bindingAwareBroker,switchConnectionProvider;初始化的過(guò)程中,會(huì)調(diào)用set方法 ,在兩者set之后 ,會(huì)調(diào)用 Broker.RegisterProvider(this,context);返回providerContext,隨后調(diào)用onSes

溫馨提示

  • 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)論