吴忠躺衫网络科技有限公司

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

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

3天內不再提示

OpenDaylight中的DataStore是什么

汽車電子技術 ? 來源:碼農與軟件時代 ? 作者:碼農與軟件時代 ? 2023-02-14 15:13 ? 次閱讀

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

圖片

圖片來自網絡

一、OpenDaylight需要的數據存儲

1.1數據庫簡單介紹

我們熟知的軟件系統有學校的“圖書館管理系統”,企業里面的“客戶關系管理系統”,這些系統本質上只需要易操作就可以了,不需要高并發,這種系統的典型架構如下圖所示:

圖片

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

圖片

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

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

1.2 OpenDaylight能力需求

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

l高并發:支持大規模的網絡設備控制、網絡路由計算和生成、海量的業務消息處理;

l高可靠:在控制器軟硬件發生故障時,依然能夠對外提供服務;

l實時性:SDN網絡能夠做到秒級或毫秒級的收斂;

1.3 OpenDaylight存儲選型

從上面的分析可知,OpenDaylight選用內存數據庫極為合適。下面我們來看下OpenDaylight的存儲選型:

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

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

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

Lithium版本之后, OpenDaylight轉向基于MD-SAL的架構設計,存儲實現也相應的轉為DataStore。

二、如何理解DataStore?

2.1DataStore是什么

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

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

圖片

圖片來自網絡

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

圖片

圖片來自網絡

2.2DataStore如何實現?

2.2.1如何進行并發控制?

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

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

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

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

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

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

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

2.2.2 如何實現高可靠?

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

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

圖片

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

圖片

當發生斷電或宕機等情況后,將取這兩個目錄的文件,恢復內存數據庫。

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

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

2.2.3 如何實現高性能?

面對海量數據,數據庫系統采用分庫、分表、分區、分片等手段來實現高性能,DataStore使用了分片(Sharding)技術。

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

圖片

2.3DataStore如何訪問?

MD-SAL中使用DataBroker訪問DataStore:

圖片

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

圖片

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

    關注

    0

    文章

    278

    瀏覽量

    41933
  • 廣域網
    +關注

    關注

    1

    文章

    246

    瀏覽量

    21864
  • sdn
    sdn
    +關注

    關注

    3

    文章

    254

    瀏覽量

    44873
收藏 人收藏

    評論

    相關推薦

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

    控系統樹莓派
    小凡
    發布于 :2022年10月05日 01:53:42

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

    汽車電子控系統
    學習電子
    發布于 :2022年11月20日 15:16:47

    別克君越控開關失靈,什么情況怎么解決

    開關
    YS YYDS
    發布于 :2023年06月23日 00:38:57

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

    我們正在嘗試借助 TP-EIQ-BRING-YOUR-OWN-DATA-BYOD 文檔給出的說明使用自己的數據集創建 eiq 項目,如下所示。 我們創建了一個 notebook 中提
    發表于 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
    發表于 01-10 15:12 ?0次下載
    Vmware OVA 6.7模板導入6.5報錯模塊Nvman”打開電源失敗處理方法

    OpenDaylight軟件定義網絡框架

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

    如何從零開始學OpenDaylight

    OpenDaylight的邏輯架構分為應用層、控制器層和數據轉發層。其中,應用層聚焦網絡業務邏輯開發,負責資源編排;控制器層進行全局網絡的管理;數據轉發層為各種網絡設備,負責數據的轉發。
    的頭像 發表于 02-14 14:04 ?2364次閱讀
    如何從零開始學<b class='flag-5'>OpenDaylight</b>

    OpenDaylight的運行環境

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

    OpenDaylight的示例

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

    什么是OpenDaylight的Maven

    構建的實質是將我們編寫的Java源文件、XML配置文件、HTML頁面、CSS和JS文件等,通過某種方式組合在一起,變為可對外服務項目的過程。同時,構建過程很多都是沒有技術含量且重復的工作,手工操作很無趣且太麻煩。
    的頭像 發表于 02-14 15:02 ?1099次閱讀
    什么是<b class='flag-5'>OpenDaylight</b>的Maven

    OpenDaylight的OSGi

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

    OpenDaylight的Karaf

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

    OpenDaylight的YANG

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

    OpenDaylight的RPC &amp; Notification是什么

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

    OpenDaylight的MD-SAL是什么

    一般情況下,軟件系統的研發分為需求獲取與分析、架構設計、代碼實現、系統發布、上線等階段。其中,架構設計可以細分為架構需求、分析、設計、文檔化、評審、修改和實現等過程,我們以簡化歸一,描述為:提供UI界面和消息接口服務,UI選擇B\S架構風格,消息可以是REST、SOAP以及AMQP等類型,數據庫采用關系型數據庫
    的頭像 發表于 02-14 15:17 ?1192次閱讀
    <b class='flag-5'>OpenDaylight</b><b class='flag-5'>中</b>的MD-SAL是什么
    百家乐官网官网游戏| 全讯网找a3322.com| 百家乐塑料扑克牌盒| 金博士百家乐娱乐城| 百家乐投注方法| 破解百家乐游戏机| 正品百家乐网站| 大发888娱乐城 真钱bt| 大发888娱乐城维护| 澳门博彩娱乐有限公司| 99真人娱乐城| 梓潼县| 百家乐官网赢钱好公式| 百家乐官网决战推筒子| 百家乐官网单打| 百家乐免費游戏| 百家乐赌场高手| 威尼斯人娱乐城官方| 亚洲顶级赌场 网投领导者| 定日县| 百家乐官网最大的赌局| 千亿百家乐官网的玩法技巧和规则| 百家乐游戏排行榜| 悍马百家乐的玩法技巧和规则| 皇冠现金网导航| 百家乐官网实时路单| 百家乐官网深圳广告| 百家乐庄闲出现几率| 为什么百家乐玩家越来越多选择网上百家乐 | 百家乐官网游戏解密| 大世界百家乐官网娱乐场| 博马百家乐娱乐城| 威尼斯人娱乐城网址是| 永利高网址| 百家乐官网赌场代理| 百家乐电话投注多少| 大发888游戏官方网站| 百家乐官网手机软件| 中国百家乐官网澳门真人娱乐平台网址| 百家乐真人百家乐皇冠| 百家乐官网|