VLCPSDN 控制器
VLCP 是一款為生產(chǎn)集群應用而嚴格設計開發(fā)的 SDN 控制器。它從根本性的設計上改變了以往 SDN 控制器不穩(wěn)定的印象,使用 ZooKeeper + 專業(yè)的事務性技術為控制器集群提供同步性支持,使用先進的異步編程框架實現(xiàn)內(nèi)部邏輯。
項目已經(jīng)開發(fā)約18個月,目前已經(jīng)在借貸寶公司小規(guī)模投產(chǎn)。在10臺物理機組成的集群中進行壓測,控制器可以在:每服務器1000+容器;16+Gbps 流量;每分鐘、每服務器創(chuàng)建/刪除兩百個容器的高壓力環(huán)境下長期穩(wěn)定運行。VLCP 的最終設計目標是面向數(shù)千臺物理服務器、數(shù)萬乃至數(shù)十萬個虛擬網(wǎng)絡端點的巨型 IDC 環(huán)境中穩(wěn)定運行,提供高效、可靠、可控的 SDN 網(wǎng)絡。
VLCP 可以通過 vlcp-docker-plugin 與 docker 進行對接,為 docker 提供更多功能、更高穩(wěn)定性的 SDN 網(wǎng)絡,直接為容器提供外部網(wǎng)絡連通性,或者子網(wǎng)之間的連通性等。
架構特點
VLCP 使用協(xié)程化的架構實現(xiàn)了無鎖、高性能的并發(fā)邏輯?;?Pub/Sub 機制的協(xié)程同步機制為擴展提供了極大的便利。獨特的調(diào)度器實現(xiàn)簡化了許多異步邏輯,通過統(tǒng)一的中心隊列在進程內(nèi)實現(xiàn)了眾多的生產(chǎn)者-消費者模型,使得程序結構穩(wěn)定、易讀、統(tǒng)一排錯:
VLCP 使用高可擴展性的模塊化設計。每個模塊都可以單獨加載、單獨卸載,加載不同模塊即可為控制器添加新的功能。模塊功能不僅限于 SDN,也包括外圍功能如管理、監(jiān)控、排障等。官方自帶的模塊就已經(jīng)有了很豐富的內(nèi)容:
VLCP利用ZooKeeper實現(xiàn)了統(tǒng)一的事務層——ObjectDB,保證了從任意節(jié)點的讀寫都滿足事務性,并與其他節(jié)點的數(shù)據(jù)保持同步。事務層的使用簡便而有特色,通過WALK與TRANSACT兩個原語實現(xiàn)了任意的讀事務和寫事務;組合兩者則可以實現(xiàn)任意的事務操作。同時,寫入的內(nèi)容會通過更新消息推送的機制推送到其他節(jié)點上,從而實時更新其他節(jié)點上的信息和流表。
VLCP使用一種通用的方式來解析OpenFlow中的二進制結構,利用了namedstruct庫。這種庫通過類似于C程序中結構體定義的語法定義出結構體并進行動態(tài)的解析或構造。這種寫法很容易跟著OpenFlow的版本升級,甚至可以比較容易地保持以往程序的兼容性。同樣的技術還用來解析以太網(wǎng)數(shù)據(jù)包和ZooKeeper協(xié)議。
VLCP使用OpenFlow1.3的多流表功能實現(xiàn)了從L2到L3的完整功能,這些功能可以通過獨特的流表分配機制由模塊系統(tǒng)進行擴展。現(xiàn)有的流表結構大致如下圖所示:
VLCP支持預推送、OpenvSwitch學習、控制器學習與首包上傳等多種不同運行策略。
VLCP甚至包含了內(nèi)置的HTTP服務器,用于提供WebAPI接口;也可以用來開發(fā)簡單的管理界面。
VLCP有統(tǒng)一的配置系統(tǒng),很容易將配置文件映射到具體的類中的屬性。
