Dqlite,基于sqlite 高可用(HA)數(shù)據(jù)庫

k3s之前的multi-master的支持 Mysql, PostgreSql, etcd 這3個(gè)方案,現(xiàn)在正在實(shí)驗(yàn)一個(gè)內(nèi)嵌的multi-master方案,使用一個(gè)sqlite的HA版本-dqlite,dqlite-顧名思義,distibution sqlite,以后穩(wěn)定的話,可能會(huì)成為官方推薦的HA方案。

Dqlite用主要做了幾個(gè)事情:

  1. 提供一個(gè)基于raft的解決方案,基于一個(gè)叫 c-raft 的 raft輕量級(jí)實(shí)現(xiàn),

  2. 把sqlite封裝起來,給它存儲(chǔ)層注冊(cè)一個(gè)定制driver來操作數(shù)據(jù)

  3. CAP理論里,和絕大多分布式數(shù)據(jù)庫一樣,dqlite選擇了(CP without A), 就是選擇了Consistency(一致性)、Partition tolerance(分區(qū)容錯(cuò)性),而不保證 Availability(可用性),也即是:

  4. 保證了數(shù)據(jù)一致性

  5. 保持強(qiáng)一致性,用戶請(qǐng)求需要在服務(wù)器中所有的分區(qū)里面完成了一致性才返回

  6. 但是,不保證每個(gè)請(qǐng)求都能得到?jīng)]有報(bào)錯(cuò)的響應(yīng)

一般,我們用sqlite是這樣的:

image

應(yīng)用程序直接調(diào)用一個(gè)單節(jié)點(diǎn)的sqlite實(shí)例

使用dqlite,則是這樣的

image

應(yīng)用程序不直接操作sqlite的接口,調(diào)用的是dqlite提供的接口,dqlite通過c-raft來保證數(shù)據(jù)一致性和容錯(cuò)行

目前官方提供了一個(gè)go的binding, 可以直接在go里使用dqlite的接口

作者有一個(gè)demo的演講,演示了一個(gè)go寫的分布式氧飽和度檢測(cè)儀的例子

image

這段代碼很簡單,模擬插入氧飽和度的數(shù)據(jù),然后提供一個(gè)http接口查詢平均飽和度返回給調(diào)用者

其中g(shù)etDatabase方法,如果用單實(shí)例的sqlite,它是這樣的:

image

如果用dqlite變成這樣

image

startEngine實(shí)際上是調(diào)用dqlite的接口創(chuàng)建一個(gè)新的dqlite節(jié)點(diǎn)

image

然后調(diào)用dqlite client這個(gè)接口連到集群

image

往sqlite的存儲(chǔ)層注入一個(gè)dqlite定制的driver

image

可以看到,用go來使用這HA方案,還是挺方便易用。

目前k3s的dqlite HA版本目前還是實(shí)驗(yàn)狀態(tài),不要在生產(chǎn)環(huán)境使用,還有一些問題,比如:

  • cpu使用率高

  • 第一個(gè)啟動(dòng)的節(jié)點(diǎn)如果崩潰了,leader選舉不出來

總的來講,這個(gè)k3s的嵌入式HA方案還是非常值得期待,畢竟在IOT這種蠅級(jí)設(shè)備里面包mysql或者etcd這種程序還是有點(diǎn)太重了

參考:

  1. 作者的演講

  2. go的binding和demo


擴(kuò)展閱讀:

新手該如何選擇云服務(wù)器
個(gè)人玩家和中小企業(yè)云服務(wù)器選擇對(duì)比

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • nginx的請(qǐng)求轉(zhuǎn)發(fā)算法,如何配置根據(jù)權(quán)重轉(zhuǎn)發(fā) 負(fù)載均衡策略:內(nèi)置策略:輪詢(默認(rèn))、加權(quán)輪詢(處理1次連接則權(quán)重...
    星冉子閱讀 516評(píng)論 0 1
  • Servlet: Server applet 概念:運(yùn)行在服務(wù)器上的一個(gè)小程序(動(dòng)態(tài)資源) Servlet是...
    董宇浩閱讀 228評(píng)論 0 0
  • 簡介:工廠模式大體分為 簡單工廠,工廠方法,抽象工廠等三種模式。工廠方法模式也可以稱為工廠模式。簡單工廠進(jìn)階變成工...
    Gxy_8c77閱讀 200評(píng)論 0 0
  • 一、什么是HTTP協(xié)議 HTTP協(xié)議:規(guī)定了瀏覽器和服務(wù)器端的數(shù)據(jù)交互的格式 1、HTTP的特性 (1)基于請(qǐng)...
    劉哲_1d91閱讀 150評(píng)論 0 0
  • 當(dāng)初我們畢業(yè)的時(shí)候也是懷揣夢(mèng)想的人,經(jīng)歷了一次又一次的跳槽,發(fā)現(xiàn)自己變成了一件工具,一件為了完成工作的工具,跳槽也...
    cocoaZ閱讀 263評(píng)論 0 0

友情鏈接更多精彩內(nèi)容