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

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

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

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

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

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

4、狀態(tài)

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

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

7、云平臺(tái)的不適用性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

這也是為什么阿里云RDS,存儲(chǔ)類型推薦購(gòu)買本地SSD,而不是云盤。

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

打個(gè)比方,我有一個(gè)10000節(jié)點(diǎn)的集群,每個(gè)節(jié)點(diǎn)實(shí)例因?yàn)槿萜骰W(wǎng)絡(luò)插件損耗,QPS低于非容器化100,如果沒(méi)有這些損耗,集群QPS就要提高10000*100=100萬(wàn)。

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

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

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

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

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

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

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

部分介紹:

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

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

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

發(fā)表評(píng)論

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