數(shù)據(jù)庫適不適合Docker容器化部署

2021年8月24日17:38:33 發(fā)表評論 3,856 ℃

網(wǎng)上有一篇文章提到數(shù)據(jù)庫不適合容器化的七大原因:

1、數(shù)據(jù)不安全

2、運行數(shù)據(jù)庫的環(huán)境需求

3、網(wǎng)絡(luò)問題

4、狀態(tài)

5、數(shù)據(jù)庫不適合使用主要的Docker功能

6、額外的隔離對數(shù)據(jù)庫是不利的

7、云平臺的不適用性

當(dāng)然網(wǎng)上搜索“數(shù)據(jù)庫適不適合Docker容器化部署”相關(guān)關(guān)鍵詞,基本上也只有這一篇文章。

數(shù)據(jù)庫適不適合Docker容器化部署

至于它說的到底對不對,一開始也非常疑惑,但經(jīng)過一段時間以后,阿湯博客覺得“數(shù)據(jù)庫適不適合Docker容器化部署”沒有絕對的答案,完全看業(yè)務(wù)場景、量級和數(shù)據(jù)庫的架構(gòu)。下面談?wù)劙┲鱾€人的一點點看法和理解。

從數(shù)據(jù)安全性來看,目前在實際工作中,項目非生產(chǎn)環(huán)境中的MySQL、Redis、Eleasticsearch都實現(xiàn)了容器化,都運行良好,也并未出現(xiàn)過什么數(shù)據(jù)安全問題。前提當(dāng)前是不能把數(shù)據(jù)存儲到容器內(nèi)部。

當(dāng)初為什么要把數(shù)據(jù)庫容器化部署?

在非容器化部署時,一臺服務(wù)器上面要部署多個MySQL、Redis、Eleasticsearch實例,可以說非常困難,維護管理也非常痛苦。

容器化以后,同一個鏡像,可以在一臺服務(wù)器同時部署dev、test、uat三個數(shù)據(jù)庫實例,只需要映射不同的端口即可,完全保證了環(huán)境一致性;而不用每臺服務(wù)器去編譯安裝。

單機的情況,完全可以一個docker-compose文件,就管理了三個環(huán)境的實例。

從復(fù)雜度來說,有狀態(tài)應(yīng)用在容器化相對于無狀態(tài)應(yīng)用來說要略微復(fù)雜。

容器化以后,網(wǎng)絡(luò)也是一個復(fù)雜的問題。

就拿比較熱門的容器編排工具kubernetes來說,在部署無狀態(tài)應(yīng)用和有狀態(tài)應(yīng)用是就能體現(xiàn)出來無狀態(tài)應(yīng)用的優(yōu)勢,你要多考慮一個數(shù)據(jù)持久化。

數(shù)據(jù)持久化就設(shè)計到共享存儲、PV、PVC管理以及如何水平擴容等等相關(guān)的一系列問題。

從性能方面來說,不管是什么docker網(wǎng)絡(luò)插件、什么kubernetes網(wǎng)絡(luò)插件、都會有多多少少的性能損耗。

如果使用共享存儲,即使是阿里云的文件存儲CPFS,也存在一定的網(wǎng)絡(luò)傳輸IO延遲。

這也是為什么阿里云RDS,存儲類型推薦購買本地SSD,而不是云盤。

阿湯博客認為這些損耗和延遲在你的業(yè)務(wù)沒有達到一個量級或不要求極限并發(fā)I/O性能、讀寫時延極穩(wěn)定的業(yè)務(wù)場景,是可以完全忽略的。

打個比方,我有一個10000節(jié)點的集群,每個節(jié)點實例因為容器化網(wǎng)絡(luò)插件損耗,QPS低于非容器化100,如果沒有這些損耗,集群QPS就要提高10000*100=100萬。

如果你只是一個3節(jié)點的集群,這點損耗完全就可以忽略不計了,不如水平擴展一個節(jié)點、增加服務(wù)器配置提升來的性能來的明細。

很多人都在談服務(wù)器性能優(yōu)化、內(nèi)核優(yōu)化,個人認為業(yè)務(wù)量沒有達到一個量級時,這些優(yōu)化并不能帶來太多收益和效果,不如增加一個節(jié)點來的明顯。

從數(shù)據(jù)庫集群管理方面來說,目前只有Eleasticsearch官方推出了ECK,用于編排和管理Eleasticsearch在kubernetes集群中的運行。

至于Redis,當(dāng)不需要數(shù)據(jù)持久化時,在kubernetes集群中相對其他數(shù)據(jù)庫編排、水平擴容還是容易一些。

至于MySQL,在kubernetes集群想要部署管理一套高可用MySQL集群,并實現(xiàn)水平擴容是一件非常困難復(fù)雜的事情。

所以生產(chǎn)環(huán)境MySQL集群我還是采用了商用產(chǎn)品。

目前,一些高性能DB如:騰訊云的TDSQL(金融分布式數(shù)據(jù)庫)和阿里云的Oceanbase(分布式數(shù)據(jù)庫系統(tǒng))都直接運行中在物理機器上,并非使用便于管理的 Docker 上。

部分介紹:

OceanBase 數(shù)據(jù)庫采用 Shared-Nothing 架構(gòu),各個節(jié)點之間完全對等,每個節(jié)點都有自己的 SQL 引擎、存儲引擎,運行在普通 PC 服務(wù)器組成的集群之上,具備可擴展、高可用、高性能、低成本、云原生等核心特性。

TDSQL 可提供多種部署形態(tài)。在公有云,提供多租戶和獨享物理集群兩種部署形態(tài),僅需在管理控制臺中單擊幾下,即可生產(chǎn)一套 TDSQL 數(shù)據(jù)庫。同時可兼容 MySQL、MariaDB 協(xié)議,兼容 PostgreSQL 協(xié)議,高度兼容 Oracle 語法;可在一個物理集群中擴展支持集中式和分布式實例。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: