chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenDaylight中的DataStore是什么

汽車電子技術(shù) ? 來源:碼農(nóng)與軟件時代 ? 作者:碼農(nóng)與軟件時代 ? 2023-02-14 15:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇作為MD-SAL核心內(nèi)容的第二篇,我們將從OpenDaylight的數(shù)據(jù)存型、DataStore是什么,如何實現(xiàn)等幾個方面進行介紹。

圖片

圖片來自網(wǎng)絡(luò)

一、OpenDaylight需要的數(shù)據(jù)存儲

1.1數(shù)據(jù)庫簡單介紹

我們熟知的軟件系統(tǒng)有學校的“圖書館管理系統(tǒng)”,企業(yè)里面的“客戶關(guān)系管理系統(tǒng)”,這些系統(tǒng)本質(zhì)上只需要易操作就可以了,不需要高并發(fā),這種系統(tǒng)的典型架構(gòu)如下圖所示:

圖片

我們注意到這些系統(tǒng)都包含一個數(shù)據(jù)庫。而提到數(shù)據(jù)庫,我們可能先想到的是MySql、oracle之類的關(guān)系型數(shù)據(jù)庫,有人可能還會想到MangoDB、redis的非關(guān)系型數(shù)據(jù)庫,使用Java語言編程的人員可能會想到ehcache、memcache等緩存數(shù)據(jù)庫。如下圖所示:

圖片

我們來看下什么是內(nèi)存數(shù)據(jù)庫?在Wiki上,我們可以看到:“內(nèi)存數(shù)據(jù)庫(in-memory database,IMDB),也稱為主內(nèi)存數(shù)據(jù)庫系統(tǒng)或內(nèi)存駐留數(shù)據(jù)庫,是一種數(shù)據(jù)庫管理系統(tǒng),主要依賴主存儲器進行計算機數(shù)據(jù)存儲。它與采用磁盤存儲機制的數(shù)據(jù)庫管理系統(tǒng)形成對比。內(nèi)存數(shù)據(jù)庫比磁盤優(yōu)化數(shù)據(jù)庫更快,因為磁盤訪問比內(nèi)存訪問慢,內(nèi)部優(yōu)化算法更簡單,執(zhí)行的CPU指令更少”。事實上,在具有實時計費能力的電信運營商,采用的基本上都是內(nèi)存數(shù)據(jù)庫。它的好處是訪問速度快,一般來說,內(nèi)存數(shù)據(jù)庫要比磁盤數(shù)據(jù)庫快10000倍。不好之處在于

數(shù)據(jù)是直接存在系統(tǒng)主內(nèi)存中,如果內(nèi)存數(shù)據(jù)庫重啟或崩潰后,可能會導致數(shù)據(jù)全部丟失。所以內(nèi)存數(shù)據(jù)庫很重要的一點就是如何保證數(shù)據(jù)的安全可靠,并能在出現(xiàn)問題時能夠快速恢復數(shù)據(jù)。

1.2 OpenDaylight能力需求

SDN起源于校園網(wǎng),發(fā)揚光大于數(shù)據(jù)中心,現(xiàn)廣泛用于廣域網(wǎng),SDN控制器,可能管理著數(shù)十萬臺軟交換機,下發(fā)數(shù)百萬乃至上千萬條路由信息。因此,作為SDN控制器的開源項目OpenDaylight,無論是業(yè)務(wù)邏輯還是數(shù)據(jù)存儲,都需要具備如下能力:

l高并發(fā):支持大規(guī)模的網(wǎng)絡(luò)設(shè)備控制、網(wǎng)絡(luò)路由計算和生成、海量的業(yè)務(wù)消息處理;

l高可靠:在控制器軟硬件發(fā)生故障時,依然能夠?qū)ν馓峁┓?wù);

l實時性:SDN網(wǎng)絡(luò)能夠做到秒級或毫秒級的收斂;

1.3 OpenDaylight存儲選型

從上面的分析可知,OpenDaylight選用內(nèi)存數(shù)據(jù)庫極為合適。下面我們來看下OpenDaylight的存儲選型:

Lithium 版本之前 ,OpenDaylight采用基于AD-SAL的架構(gòu)設(shè)計,數(shù)據(jù)存儲采用的是Infinispan。它是基于內(nèi)存的分布式鍵值存儲系統(tǒng)。那么,如何理解鍵值存儲呢?可以簡單地將理解為“鍵與值的映射”,在內(nèi)存中的具體形式體現(xiàn)HashMap和有序樹。Infinispan可以作為一個Java Lib進行使用,也可以通過一系列主流的遠程協(xié)議方式(如REST、WebSockets)來提供獨立的服務(wù)。

Ininispan包可通過Maven的方式獲取,Infinispan jar包含所需的OSGi manifest headers,可以作為OSGi包OSGi運行時環(huán)境中使用。 除此之外,還需要安裝所需的第三方依賴項。詳細安裝方法可參照:

http://infinispan.org/docs/9.3.x/getting_started/getting_started.html

Lithium版本之后, OpenDaylight轉(zhuǎn)向基于MD-SAL的架構(gòu)設(shè)計,存儲實現(xiàn)也相應的轉(zhuǎn)為DataStore。

二、如何理解DataStore?

2.1DataStore是什么

在OpenDaylight控制器中,使用YANG作為建模語言,用于對數(shù)據(jù)存儲的內(nèi)容和行為進行建模,YANG可以轉(zhuǎn)換成XML的格式。作為MD-SAL核心的Datastore實現(xiàn)了W3C DOM Document樹,并使用XML進行數(shù)據(jù)的表示。需要說明的一點:DataStore并不是完全基于XML的,OpenDaylight子項目YANGTools提供了優(yōu)化YANG XML并使其適應XML DOM的模塊。

DataStore由DataTree組成,Yang定義了該樹的地址空間,由根節(jié)點、葉子節(jié)點和內(nèi)部節(jié)點組成,如下圖所示:

圖片

圖片來自網(wǎng)絡(luò)

而DataTree分為兩個邏輯數(shù)據(jù)存儲:operational和config。這兩部分都有統(tǒng)一的視圖,并且可以使用實例標識符InstanceIdentifier來定位特定節(jié)點。如下圖所示:

圖片

圖片來自網(wǎng)絡(luò)

2.2DataStore如何實現(xiàn)?

2.2.1如何進行并發(fā)控制?

數(shù)據(jù)庫中經(jīng)常發(fā)生并發(fā)的場景:應用邏輯A在讀取數(shù)據(jù)的同時,應用邏輯B可能正在寫入數(shù)據(jù),應用邏輯A就可能讀到不一致的數(shù)據(jù),也就是臟讀。為了解決上述出現(xiàn)的問題,實現(xiàn)并發(fā)控制,大家想到最簡單的方法便是加鎖,讓所有讀數(shù)據(jù)的應用程序等待寫數(shù)據(jù)的應用程序工作完成,這相當于串行工作,效率非常低。現(xiàn)在大多數(shù)據(jù)庫實現(xiàn)的是MVCC(Multi-Version Concurrency Control,多版本并發(fā)控制機制),基本思想是通過對同一份數(shù)據(jù)保持多版本來并發(fā)問題,在不加鎖的情況下,實現(xiàn)讀與寫事務(wù)完成隔離。具體機制是:

l當應用邏輯需要讀取或更新數(shù)據(jù)時,數(shù)據(jù)庫會創(chuàng)建該數(shù)據(jù)的快照,數(shù)據(jù)庫中存在同一份數(shù)據(jù)的多個版本。

l每個應用邏輯擁有一份獨立快照,數(shù)據(jù)更新在沒有完全提交之前,其他應用邏輯不可見。

l數(shù)據(jù)庫會定期清理舊版本數(shù)據(jù),以最新版本數(shù)據(jù)替換主數(shù)據(jù)。

l數(shù)據(jù)庫讀通過timestamp 或 transaction id 來標識數(shù)據(jù)最新的版本。

但如果是多個寫事務(wù)并發(fā),則有可能發(fā)生沖突,可通過樂觀鎖來解決。

同時,我們從第一部分分析OpenDaylight能力需求中可以看出,OpenDaylight內(nèi)存數(shù)據(jù)庫DataStore需要具備高并發(fā)、高性能的能力,DataStore同樣實現(xiàn)了MVCC。如果對MVCC感興趣,可以閱讀《數(shù)據(jù)庫村的旺財和小強》。

2.2.2 如何實現(xiàn)高可靠?

DataStore作為內(nèi)存數(shù)據(jù)庫,在遇到突然斷電或系統(tǒng)宕機的情況,將會是毀滅性的。因此,需要定時將數(shù)據(jù)保存到硬盤里面,也就是要做持久化的操作。

DataStore持久化的實現(xiàn)機制是在控制器啟動時對其創(chuàng)建快照,并在后續(xù)操作過程記錄日志。我們查看控制器的部署目錄,snapshots目錄用來保存快照,而journal目錄用來操作日志信息,如下圖所示:

圖片

現(xiàn)在我們將snapshots和journal目錄中的文件刪除掉,然后重啟OpenDaylight控制器,觀察目錄中又重新生成對應的文件:

圖片

當發(fā)生斷電或宕機等情況后,將取這兩個目錄的文件,恢復內(nèi)存數(shù)據(jù)庫。

事實上,上述實現(xiàn)是EV(Event Sourcing,事件溯源)思想的實現(xiàn),下面我們大致介紹下EV:生活中最常見的例子就是電信運營商業(yè)務(wù)中的繳費、扣費、調(diào)賬、轉(zhuǎn)賬以及退款等業(yè)務(wù)流程,BOSS系統(tǒng)中會記錄每一筆交易發(fā)生的詳細信息,從而能夠得到某個時間點用戶的“錢”是多少。因此,EV也就是將數(shù)據(jù)的增刪改查每一操作都按照順序記錄,順次保存在日志文件中,如果想回到某個時間點的狀態(tài),則可以順次回放就可以了。

具體到DataStore內(nèi)存數(shù)據(jù)庫,將多個操作封裝到一個事務(wù)中,并生成本次事務(wù)的操作樹,持久化時按照操作日志的順序記錄下來就可以了。

2.2.3 如何實現(xiàn)高性能?

面對海量數(shù)據(jù),數(shù)據(jù)庫系統(tǒng)采用分庫、分表、分區(qū)、分片等手段來實現(xiàn)高性能,DataStore使用了分片(Sharding)技術(shù)。

YANG建模的DataStore是一個樹型結(jié)構(gòu)。一個分片就是一個子樹。子樹之間如果存在包含關(guān)系,則被包含的子樹作為一個獨立的分片,事實上是從根節(jié)點按照最長路徑匹配其父路徑所指定的分片。整個大樹是Default分片,Shard1作為一個新分片后,Default分片將不包含Shard1部分的數(shù)據(jù),其分片類同。當啟用集群后,一個分片可以位于多臺機器上。如下圖所示:

圖片

2.3DataStore如何訪問?

MD-SAL中使用DataBroker訪問DataStore:

圖片

具體的訪問方式如下所示:

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 路由
    +關(guān)注

    關(guān)注

    0

    文章

    280

    瀏覽量

    42461
  • 廣域網(wǎng)
    +關(guān)注

    關(guān)注

    1

    文章

    256

    瀏覽量

    22231
  • sdn
    sdn
    +關(guān)注

    關(guān)注

    3

    文章

    256

    瀏覽量

    45620
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    718.如何利用HomeAssistant,讓你的閑置樹莓派成為智能控?

    控系統(tǒng)樹莓派
    小凡
    發(fā)布于 :2022年10月05日 01:53:42

    汽車車身控制與舒適性系統(tǒng)檢修:控門鎖系統(tǒng)故障診斷和排除#汽車維修

    汽車電子控系統(tǒng)
    學習電子
    發(fā)布于 :2022年11月20日 15:16:47

    別克君越控開關(guān)失靈,什么情況怎么解決

    開關(guān)
    YS YYDS
    發(fā)布于 :2023年06月23日 00:38:57

    TP-EIQ-BRING-YOUR-OWN-DATA-BYOD沒有名為“deepview”的模塊是怎么回事?

    我們正在嘗試借助 TP-EIQ-BRING-YOUR-OWN-DATA-BYOD 文檔給出的說明使用自己的數(shù)據(jù)集創(chuàng)建 eiq 項目,如下所示。 我們創(chuàng)建了一個 notebook 中提
    發(fā)表于 03-17 07:25

    Vmware OVA 6.7模板導入6.5報錯模塊Nvman”打開電源失敗處理方法

    content library and getting the above error?Go into the OVA’s VMX file and delete the NVRam line.Browse to the datastore that vm is located Go into th
    發(fā)表于 01-10 15:12 ?0次下載
    Vmware OVA 6.7模板導入6.5報錯模塊Nvman”打開電源失敗處理方法

    OpenDaylight軟件定義網(wǎng)絡(luò)框架

    ./oschina_soft/controller.zip
    發(fā)表于 05-13 10:51 ?3次下載
    <b class='flag-5'>OpenDaylight</b>軟件定義網(wǎng)絡(luò)框架

    如何從零開始學OpenDaylight

    OpenDaylight的邏輯架構(gòu)分為應用層、控制器層和數(shù)據(jù)轉(zhuǎn)發(fā)層。其中,應用層聚焦網(wǎng)絡(luò)業(yè)務(wù)邏輯開發(fā),負責資源編排;控制器層進行全局網(wǎng)絡(luò)的管理;數(shù)據(jù)轉(zhuǎn)發(fā)層為各種網(wǎng)絡(luò)設(shè)備,負責數(shù)據(jù)的轉(zhuǎn)發(fā)。
    的頭像 發(fā)表于 02-14 14:04 ?2916次閱讀
    如何從零開始學<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的運行環(huán)境

    OpenDaylight作為一種開源的SDN控制器,使用Java語言編寫,
    的頭像 發(fā)表于 02-14 14:08 ?1149次閱讀
    <b class='flag-5'>OpenDaylight</b>的運行環(huán)境

    OpenDaylight的示例

    對于External System來說,我們在介紹基于REST API編程時再進行介紹。
    的頭像 發(fā)表于 02-14 14:11 ?963次閱讀
    <b class='flag-5'>OpenDaylight</b>的示例

    什么是OpenDaylight的Maven

    構(gòu)建的實質(zhì)是將我們編寫的Java源文件、XML配置文件、HTML頁面、CSS和JS文件等,通過某種方式組合在一起,變?yōu)榭蓪ν夥?wù)項目的過程。同時,構(gòu)建過程很多都是沒有技術(shù)含量且重復的工作,手工操作很無趣且太麻煩。
    的頭像 發(fā)表于 02-14 15:02 ?1356次閱讀
    什么是<b class='flag-5'>OpenDaylight</b>的Maven

    OpenDaylight的OSGi

    從寫單個類的打印Hello World小程序到OSGi模塊化開發(fā),確實存在較大的難度,本文將從模塊化、OSGI模型以及OSGI在OpenDaylight的應用等方面進行介紹。
    的頭像 發(fā)表于 02-14 15:05 ?1099次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的OSGi

    OpenDaylight的Karaf

    Karaf是一個現(xiàn)代的、多種形態(tài)的(polymorphic),輕量的、強大的、經(jīng)過OSGI認證的企業(yè)級容器。這里的多種形態(tài)指的是它能夠容納各種應用,諸如OSGi、Spring、war等等。單從OSGi的角度來說,Karaf是OSGI的容器實例,類似tomcat是Servlet的容器實例一樣。
    的頭像 發(fā)表于 02-14 15:08 ?2271次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的Karaf

    OpenDaylight的YANG

    YANG是和NETCONF相伴而生的,而NETCONF作為網(wǎng)絡(luò)管理協(xié)議,包含安全傳輸層、消息層、操作層和內(nèi)容層,其中內(nèi)容層沒有標準化,操作層允許自定義RPC,而這兩者的標準化建模就是由YANG來完成的。
    的頭像 發(fā)表于 02-14 15:10 ?2447次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的YANG

    OpenDaylight的RPC &amp; Notification是什么

    我們將介紹RPC和Notification,并從進程內(nèi)外的通信開始,著重介紹遠程過程調(diào)用和發(fā)布-訂閱機制,然后分析MD-SAL的通信交互過程。
    的頭像 發(fā)表于 02-14 15:15 ?1270次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的RPC &amp; Notification是什么

    OpenDaylight的MD-SAL是什么

    一般情況下,軟件系統(tǒng)的研發(fā)分為需求獲取與分析、架構(gòu)設(shè)計、代碼實現(xiàn)、系統(tǒng)發(fā)布、上線等階段。其中,架構(gòu)設(shè)計可以細分為架構(gòu)需求、分析、設(shè)計、文檔化、評審、修改和實現(xiàn)等過程,我們以簡化歸一,描述為:提供UI界面和消息接口服務(wù),UI選擇B\S架構(gòu)風格,消息可以是REST、SOAP以及AMQP等類型,數(shù)據(jù)庫采用關(guān)系型數(shù)據(jù)庫
    的頭像 發(fā)表于 02-14 15:17 ?1447次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的MD-SAL是什么