上週 Canonical宣布發布Dqlite 1.0項目的主要版本, 您正在開發一個SQL引擎 內置SQLite兼容,通過跨多個節點支持數據複製,自動災難恢復和容錯能力。
Dqlite是一個C庫 它實現了具有高可用性和自動故障轉移功能的複制SQL數據庫引擎。 首字母縮寫詞“ dqlite”代表“分佈式SQLite”, 這意味著dqlite通過網絡協議擴展了SQLite,該協議可以連接應用程序的多個實例,並使它們充當高可用性群集,而無需依賴外部數據庫。
如上所述 DBMS以附加到應用程序的C庫的形式實現 並根據Apache 2.0許可進行分發(原始SQLite在公共領域中提供)。 該庫是基於現有SQLite代碼的插件, 它增加了網絡協議支持,以鏈接在不同主機上運行的應用程序的多個實例。
使用Dqlite構建的應用程序可以用作故障轉移群集 由於自主錯誤,獨立於外部DBMS。
在實踐中, Canonical在LXD容器管理系統中使用Dqlite。 在圖書館的應用領域中,還提到了在邊緣計算系統中創建容錯的物聯網設備和處理器。
為了確保數據複製的一致性,使用了基於Raft算法的共識方法,該方法用於etcd,RethinkDB,CockroachDB和OpenDaylight等項目中。 Dqlite使用自己的異步C-raft實現,用C編寫。
為了多路復用連接處理並組織協同程序的啟動,使用了準備好的庫libuv和libco。
與類似的rqlite項目相比,Dqlite提供了完整的交易支持,它可以與任何C項目進行通信,允許您使用time()函數,並使用基於框架的複製而不是基於SQL表達式翻譯的複制。
在Dqlite中可以突出顯示的功能包括:
- 以異步模式執行所有磁盤和網絡操作
- 一組測試的存在,以確認數據的準確性
- 低內存消耗和通過網絡的高效數據交換
- 永久數據庫磁盤存儲和事務日誌(具有內存中緩存功能)
- 故障後快速恢復
- Go語言的穩定CLI客戶端,可用於初始化數據庫,配置複製以及連接/斷開節點
- 支持ARM,X86,POWER和IBM Z架構
- 優化了Raft算法的實現,以最大程度地減少事務等待時間。
- 使用libuv作為事件循環的異步單線程實現。
- 針對SQLite原語和數據類型進行了優化的自定義連線協議。
- 基於Raft算法的數據複製及其在C-raft中的有效實現。
如何在Ubuntu及其衍生產品上安裝Dqlite?
Canonical提供了有關如何構建與Dqlite進行交互的客戶端的信息,您可以查閱此信息。 在下面的鏈接中。
現在,關於在系統上安裝庫, 對於使用Ubuntu的用戶,可以通過兩種方式進行安裝 或其任何其他派生詞。 Canonical提供了PPA 從那裡可以以相當簡單的方式獲得它。
可以從終端添加此PPA,並在其中執行以下命令:
sudo add-apt-repository ppa:dqlite/v1 sudo apt-get update sudo apt-get install libdqlite-dev
安裝此庫的另一種方法是通過編譯 這是在系統上進行的,因此對於Ubuntu和其他Linux發行版而言,這是一種更通用的方法。
為此,他們只需要打開一個終端並執行以下命令:
git clone --depth 100 https://github.com/canonical/sqlite.git cd sqlite ./configure --enable-replication make sudo make install cd .. git clone https://github.com/canonical/libco.git cd libco make sudo make install cd .. git clone https://github.com/canonical/raft.git cd raft autoreconf -i ./configure make sudo make install cd ..
一旦安裝了所有必需的庫,為了構建dqlite共享庫,您可以運行:
autoreconf -i ./configure make sudo make install