ONOS系統架構演進,實現高可用性解決方案

? ? ? ? ? ?上一篇文章《ONOS高可用性和可擴展性實現初探》講到了ONOS系統架構在高可用、可擴展方面技術概況,提到了系統在分布式集群中怎樣保證數據的一致性。在數據終于一致性方面,ONOS採用了Gossip協議。這一部分的變化不大,而在強一致性方案的選擇方面則在不斷進行調整,其主要原因是分布式系統中強一致性對系統性能影響較大,并且現有的支持Paxos算法的實現不多。

本文承接上一篇提出的一個問題:ONOS為什么從開始使用ZooKeeper轉到Hazelcast,而終于選擇了Raft?是不是之前的選擇導致系統缺陷?亦或是在某些條件下無法滿足性能需求?且看下文為你慢慢道來。


在開始之前,先簡單的介紹一下ZooKeeperHazelcastRaft,提供一些資料方便大家閱讀。?

????ZooKeeperHadoop生態系統中知名的分布式協作系統,?GoogleChubby一個開源的實現,C/S方式提供服務。應用場景包含配置維護、名字服務、分布式同步、組服務等?。client?與server(Follower/Leader)Watch/Callback的方式進行交互,如圖1所看到的流程,可參考相關實例代碼。

?

??Hazelcast是一種內存數據網格(IMDG:?In-Memory?Data?Grid),網格中全部的節點是以Peer-to-Peer的方式組建集群,而且全部數據置于內存中以提高訪問性能[?Hadelcast架構介紹文檔]Hazelcast提供了通用的數據結構(如Map,?List,?Queue等)和簡單的API進行數據操作,能夠直接引入jar包進行實現。能夠參考下文提供的相關實例代碼。

????Raft是為了解決Paxos算法的可讀性以及實現中拋棄一些細節形成的等價于Multi-Paxos算法。

它依賴于復制狀態機(Replicated?State?Machine),通過Replicated?Log將操作指令拷貝到各個節點,然后各節點在本地按同樣的順序運行同樣的命令,產生一致的狀態,2展示的是Raft狀態機。

?

依據上面的介紹,我們對這些方案有了初步的了解。如今如果我們是該系統的設計者,面臨對這三個方案技術方案進行選型。我們首先須要對這些方案進行對照,詳細如表1所看到的:

? ??從解決這個問題的角度來說,這三個方案都能夠解決ONOS在分布式一致性協作方面的問題,由于算法證明了這些方案都是“正確”的,除非實現上有Bug

就算法的性能來說,差異不是非常大。Paxos算法(一種基于消息傳遞模型的一致性算法),它能保證在一個分布式數據庫系統中,假設各節點的初始狀態一致,每一個節點都運行同樣的操作序列,那么他們最后能得到一個一致的狀態。而Raft算法是等價于Multi-Paxos的算法,它主要解決的是Paxos晦澀的描寫敘述。以及Paxos的實現不能真正意義上的全然正確(實現上無法用公式證明)。這兩個算法盡管在實現上區別非常大,比方一致性實現中角色的定義,比方ZooKeeper中定義了Leader/FollowerRaft定義了Candidate/Leader/Follower角色,但其最核心的兩個關鍵活動。一個是選舉,其目的就是從分布的節點中選出Leader節點作為一致性的參考標桿,其他的Follower就成為“鏡像”。選舉僅僅有在初始化或有Leader退出/失效時才發生,在分布式系統中,節點失效出現的頻次非常低。并且選舉動作都是能夠在秒級別能完畢的。對系統的性能影響不大,不明顯,實際情況中與系統節點數的奇/偶性更相關。比方4個節點或6個節點選舉時間可能比13個節點選舉時間更長。另外一個是同步,其目的是通過復制數據/操作來達到全部的Follower都能產生一致的結果,僅僅要狀態有更新(比方寫操作)。那么就會觸發同步動作。同步意味著數據的復制以及消息的傳遞,從分布式架構來說,在讀寫IO方面這三種實現方式都相差點兒相同。

從這個角度來說,算法不是決定因素。

????大家可能會問:既然算法都差點兒相同了,就沒有必要在ONOS實現上大動手腳了。事實上。從上表我們能夠知道,當初選擇ZooKeeper作為Prototype?1的首選,主要是由于ZooKeeper成熟穩定,它在Hadoop生態圈是鼎鼎有名的高性能、分布式的應用協調服務的首選。

ONOSPrototype?1的實現來看,ZooKeeper確實滿足了分布式集中控制的需求,另外一方面,在事實上驗過程中,驗證系統的性能時,非常多數據是全局靜態的。比方Flow?Rule在實際的應用中是通過控制器以Lazy的方式下發到交換設備中,那么這些數據能夠提前在ZooKeeper中準備好,僅僅要實驗中不進行交換設備的動態添加或者移除,不會影響到總體性能。

也就是說,在Prototype?1中主要關注SDN的概念在ONOS上能發揮到何種程度。而不關心交換設備動態添加、刪除等場景。

????也就是說當有數據大量更新時。ZooKeeper則會出現性能問題,這主要由于ZooKeeper是以服務的形式來保障數據的一致性的。相對于ONOS來說,ZooKeeper是它的一個依賴子系統,因此在部署ONOS之外還要單獨部署ZooKeeper服務,如圖3所看到的的ClientServer之間的讀寫模型。

由于ZooKeeper中全部的數據都以ZNode表示,這些ZNode存儲在ZooKeeperServer上,Client要讀的數據須要跨JVM訪問Server

這樣ONOS?Instance就變成了zClient,那么當ONOS不同實例間須要同步數據時,須要通過TCP的方式從zServer上請求數據,這就導致了ONOS的性能會急劇下降,另外,ZooKeeperzNode對數據大小有限制(zNode數據大小不能超過1M)。所以說ZooKeeper以服務的模式提供分布式一致性,對于ONOS有太多限制,而這時Hazelcast攻克了這些問題。

? ?Hazelcastpeer-to-peer的模式,直接應用其libraryembedded的方式來實現,也就是每一個ONOS?Instance能夠作為一個peerONOS的業務數據就在同一個JVM中,如圖4所看到的(Hazelcast也能提供C/S模式的服務)。

更重要的是,Hazelcast是一個IMDG(In-Memory?Data?Grid),提供了非常方便的接口進行數據操作。在性能上得到了非常大的提升。可是,Hazelcast有個致命的問題,它還非常不成熟,在版本號升級中可能會不兼容。比方在ONOS1.1.0中依舊有非常多Hazelcast相關的Bug,這就意味著ONOS依賴于一個不成熟的庫,風險會非常大。實際上關鍵的因素是:Hazelcast能否正確地實現Paxos算法還是一個未知數。包含ZooKeeper的實現也不能被證明在算法上正確的。由于Paxos實在是太復雜了,能正確理解算法的人不多。更別談實現了。

有人會認為。無論如何Hazelcast會不斷改進的,假設有問題直接提交BugHazelcast不就攻克了?或者說咱們也是做開源的,幫Hazelcast改進為什么不行?原因是當ONOS有了HazelcastBug后就成了ONOSBug,解決這種Bug一方面是存在時間上的風險,另外一方面也取決于Hazelcast是否會由于支持ONOS而進行升級。萬一版本號升級,出現不兼容現象,那么已經部署的ONOS風險就更大了。把風險控制在自己能掌控的范圍之中才是ONOS社區首先考慮的。在這種情況下。Raft就成了不二之選了。

? ?RaftMulti-Paxos的一種等價算法,事實上現能夠通過狀態機(一種容錯機制)、日志副本和一致性模塊(Raft協議)之間的協同完畢,這樣的簡單的模型抽象easy實現client和數據在同一個JVM上。以實現Embedded的方案,詳細架構如圖5所看到的。由于眼下在ONOS代碼中還沒有與Raft相關的實現,但我們能夠從ONOS項目的Sprint能夠看出,在ONOS中首先須要解決的是替換掉Hazelcast。而且保留可擴展的強一致性的存儲。另外,在維護設備的主從關系上。也須要Raft來實現,由于選舉服務是Raft必備的功能。上篇文章也提到過Intent須要強一致性來保障,Intent數據是通過分布式隊列發送,因此也須要支持基于Raft的數據庫服務。

到眼下為止。我們了解到了ONOS系統架構中的高可用方案演進的整個過程。

在系統POC初期,ONOS關注的是SDN概念上的驗證,選擇了ZooKeeper滿足了主要的需求。接下來發如今HA方面存在性能問題,為了保證與ZooKeeper有相同功能,并且性能優先的原則,選擇了Hazelcast,并且它確實做到了。而Hazelcast的問題在于它是一個沒有被廣泛驗證過、不成熟的、還在不斷改進的方案。ONOS不能依賴于這種一個方案,因此終于選擇了Raft

盡管要在ONOS中全面實現Raft還須要時日,但在這個時候選擇Raft是正確的、合理的。

????ONOS已經將Raft的實現提上日程,請參考官方的任務列表,我們共同期待ONOS中的Raft實現吧!

個人覺得。ONOS在項目管理上做得很優秀,這也是ONOS脫穎而出的原因。

?假設您有興趣,也增加到ONOS的開源社區吧,關注ONOS的成長。一起推動SDN的發展!


參考資料

ZooKeeper官方站點:http://zookeeper.apache.org/

?ZooKeeper相關介紹:http://www.oschina.net/p/zookeeper

?ZooKeeper的clientKazoohttp://openinx.github.io/2014/06/07/learning-from-kazoo/

?ZooKeeper分布式鎖實例代碼:http://ifeve.com/zookeeper-lock/

?Hazelcast官方站點:http://hazelcast.org/

?Hadelcast架構介紹文檔:http://docs.hazelcast.org/docs/latest/manual/html/overview.html


版權聲明:本文博客原創文章,博客,未經同意,不得轉載。

轉載于:https://www.cnblogs.com/hrhguanli/p/4755829.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258460.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258460.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258460.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Struts2_day01

Java Web開發常用框架 SSH(Struts2 Spring Hibernate)SSM(Struts2 Spring MyBatis)SSI(Struts2 Spring iBatis) 多種框架協同工作 Web層 -- Service層 -- Dao層 Struts2框架: Struts2是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet,在MV…

使用 python 開發 Web Service

使用 python 開發 Web Service Python 是一種強大的面向對象腳本語言,用 python 開發應用程序往往十分快捷,非常適用于開發時間要求苛刻的原型產品。使用 python 開發 web service 同樣有語言本身的簡捷高速的特點,能使您快速地提供新的網絡服…

python中輸出n開始的5個奇數_送你99道Python經典練習題,練完直接上手做項目,免費送了來拿吧...

學python沒練習題怎么行、今天,給大家準備一個項目: 99道編程練習,這些題如果能堅持每天至少完成一道,一定可以幫大家輕松 get Python 的編程技能。目前,這個項目已經獲得了 2924 Stars,2468 Forks。首先&a…

java 基礎5

一、 什么是數組及其作用? 定義:具有相同數據類型的一個集合 作用:存儲連續的具有相同類型的數據 二、 java中如何聲明和定義數組 2.1 聲明和定義的語法: 數據類型[ ] 數組名;( int[ ] nums ; ) 或 數…

TFS(Team Foundation Server)介紹和入門

在本文的兩個部分中,我將介紹Team Foundation Server的一些核心特征,重點介紹在本產品的日常應用中是怎樣將這些特性結合在一起使用的。 作為一名軟件開發者,在我的職業生涯中,我常常會用到支持軟件開發過程的大量開發工具&#x…

逆函數求導公式_反函數求導法則

反函數的求導法則是:反函數的導數是原函數導數的倒數。例題:求yarcsinx的導函數。首先,函數yarcsinx的反函數為xsiny,所以:y‘1/sin’y1/cosy,因為xsiny,所以cosy√1-x2,所以y‘1/√…

SpringXML方式配置bean的懶加載lazy-init

lazy-init&#xff08;懶加載&#xff09;&#xff0c;表示該bean在容器初始化的時候不進行初始化。例如&#xff1a;<bean name"role1" class"com.fz.entity.Role" lazy-init"true">以上配置表示&#xff1a;spring容器在初始化的時候不會…

windows下system函數的使用

system函數 是可以調用一些DOS命令,比如system("cls");//清屏,等于在DOS上使用cls命令寫可執行文件路徑&#xff0c;可以運行它 下面列出常用的DOS命令,都可以用system函數調用: ASSOC 顯示或修改文件擴展名關聯。AT 計劃在計算機上運行的命令和程序。ATTRIB 顯示或更…

WWDC2017 筆記 - Cocoa Touch 中的新特性

這篇文章是 What’s New in Cocoa Touch / UIKit Session 201 的一些整理。【基于OC】 轉自我的 Blog: Dannys Dream Drag Drop 新的交互方式 拖拽 Drag 需要 Drag 的對象要 add 一個 UIDragInteraction &#xff0c;用法類似于 UIGestureRecognizer 。UIDragInteraction 有一個…

[Hadoop] - 自定義Mapreduce InputFormatOutputFormat

在MR程序的開發過程中&#xff0c;經常會遇到輸入數據不是HDFS或者數據輸出目的地不是HDFS的&#xff0c;MapReduce的設計已經考慮到這種情況&#xff0c;它為我們提供了兩個組建&#xff0c;只需要我們自定義適合的InputFormat和OutputFormat&#xff0c;就可以完成這個需求&a…

PS 色調——老照片效果

這就是通過調色使照片顯得發黃。 R_new0.393*R0.769*G0.189*B; G_new0.349*R0.686*G0.168*B; B_new0.272*R0.534*G0.131*B; clc; clear all; Imageimread(9.jpg); Imagedouble(Image); Image_newImage; Image_new(:,:,1)0.393*Image(:,:,1)0.769*Image(:,:,2)0.189*Image(:,:,3…

jsp出現錯誤

昨天在調試頁面時發生了如圖顯示的異常&#xff0c;它出現的原因是當<jsp:forward>或<jsp:include>標簽沒有參數時&#xff0c;開始標簽和結束標簽</jsp:forward>或</jsp:include>之間不能有空格&#xff0c;不能換行。解決辦法&#xff1a;刪除標簽之…

門限回歸模型的思想_Stata+R:門檻回歸教程

來源 | 數量經濟學綜合整理轉載請聯系進行回歸分析&#xff0c;一般需要研究系數的估計值是否穩定。很多經濟變量都存在結構突變問題&#xff0c;使用普通回歸的做法就是確定結構突變點&#xff0c;進行分段回歸。這就像我們高中學習的分段函數。但是對于大樣本、面板數據如何尋…

【數論】[CF258C]Little elephant and LCM

題目 分析&#xff1a;枚舉最大數&#xff0c;然后找出它所有因數p1…….pk&#xff0c; 從中任意選取一些數&#xff0c;這些數的LCM|這個數且&#xff0c;這些數的最大LCM就是枚舉的這個數&#xff0c;且若pi<aj<pi1則前i個數可以放在j這個位置&#xff0c;即j這個位置…

為普通Object添加類似AttachedProperty的屬性

為普通Object添加類似AttachedProperty的屬性 周銀輝 我們知道&#xff0c;在WPF中對應一個DependencyObject&#xff0c;我們很容易通過AttachedProperty來為類型附加一個屬性。但對于普通的Object而言&#xff0c;這就不可行了。 我現在遇到這樣一個問題&#xff0c;下面有一…

python 操作RabbitMQ

pip install pika使用API操作RabbitMQ基于Queue實現生產者消費者模型View Code 對于RabbitMQ來說&#xff0c;生產和消費不再針對內存里的一個Queue對象&#xff0c;而是某臺服務器上的RabbitMQ Server實現的消息隊列。#!/usr/bin/env python import pika# ###################…

python和嵌入式哪個容易_嵌入式與python選哪個

從概念上來說&#xff0c;嵌入式和Python的區別還是比較明顯的&#xff0c;嵌入式是一個開發領域&#xff0c;而Python則是一門編程語言。嵌入式開發是開發領域的一個重要分支&#xff0c;是物聯網領域技術的重要組成部分&#xff0c;可以說有物聯網的地方就離不開嵌入式開發。…

二階傳遞函數的推導及幾種求解方法的比較

二階系統是指那些可用二階微分方程描述的系統&#xff0c;其電路形式是由兩個獨立動態元器件組成的電路。 二階系統電路包括二階低通電路、二階高通電路、二階帶通電路和二階帶阻電路。 下面分別給出以上二階系統傳遞函數的推導過程&#xff0c;并以二階低通電路的沖激響應為例…

前端技術-調試工具(上)

頁面制作之調試工具 常用的調試工具有Chrome瀏覽器的調試工具&#xff0c;火狐瀏覽器的Firebug插件調試工具&#xff0c;IE的開發人員工具等。它們的功能與使用方法大致相似。Chrome瀏覽器簡潔快速&#xff0c;功能強大這里主要介紹Chrome瀏覽器的調試工具。 打開 Google Chrom…

新版Microsoft Edge支持跨平臺跨設備瀏覽

之前一直使用Google Chrome瀏覽器&#xff0c;可以隨意安裝插件擴展程序&#xff0c;無廣告&#xff0c;這是我鐘愛她的原因。但是之后不能登錄Google賬號&#xff0c;不能實現跨設備應用&#xff0c;就想找一款好用的替代品&#xff0c;近期發現了新版的Microsoft Edge&#x…