成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據庫不適合Docker及容器化的7大原因

存儲 存儲軟件 數據庫
Docker 的炒作應該有一天會冷下來。 這并不意味著人們將停止使用容器虛擬化技術,而是說我們在將容器化設計時,需要將其帶來的價值放在首要考量因素。

所有的服務都開始了容器化升級,在一切皆容器的主流思想下,無狀態的服務采用容器化已經是大勢所趨,常常困擾架構師的一個問題是,數據庫是否需要容器化?

如果我們觀察 2017 年技術行業,容器和 Docker 依然將是最熱門的流行語。我們開始在每個領域的 Docker 容器中打包開發的軟件。從小型初創公司到巨大的微服務平臺都在使用容器技術。從 CI 平臺到 Raspberry Pi 。從數據庫到……

數據庫?您確定要將數據庫放在容器中嗎?

[[232155]]

不幸的是,這不是虛構的場景。我看到許多快速增長的項目將數據持久化到容器中。并且將計算服務和數據服務放在同一臺機器上。筆者希望有經驗的人不會用這個解決方案。

下面是我的觀點,數據庫容器化從今天來看是非常不合理的。

數據庫不適合容器化的7大原因

1. 數據不安全

即使你要把 Docker 數據放在主機來存儲 ,它依然不能保證不丟數據。 Docker volumes 的設計圍繞 Union FS 鏡像層提供持久存儲,但它仍然缺乏保證。

使用當前的存儲驅動程序,Docker 仍然存在不可靠的風險。 如果容器崩潰并數據庫未正確關閉,則可能會損壞數據。

2. 運行數據庫的環境需求

常看到 DBMS 容器和其他服務運行在同一主機上。 然而這些服務對硬件要求是非常不同的。

數據庫(特別是關系型數據庫)對 IO 的要求較高。 一般數據庫引擎為了避免并發資源競爭而使用專用環境。如果將你的數據庫放在容器中,那么將浪費你的項目的資源。 因為你需要為該實例配置大量額外的資源。 在公有云,當你需要 34G 內存時,你啟動的實例卻必須開 64G 內存。在實踐中,這些資源并未完全使用。

怎么解決? 您可以分層設計,并使用固定資源來啟動不同層次的多個實例。 水平伸縮總是比垂直伸縮更好。 

3. 網絡問題

要理解 Docker 網絡,您必須對網絡虛擬化有深入的了解。也必須準備應付好意外情況。你可能需要在沒有支持或沒有額外工具的情況下,進行 bug 修復。

我們知道:數據庫需要專用的和持久的吞吐量,以實現更高的負載。我們還知道容器是虛擬機管理程序和主機虛擬機背后的一個隔離層。然而網絡對于數據庫復制是至關重要的,其中需要主從數據庫間 24/7 的穩定連接。未解決的 Docker 網絡問題在1.9版本依然沒有得到解決。

把這些問題放在一起,容器化使數據庫容器很難管理。我知道你是一個頂級的工程師,什么問題都可以得到解決。但是,你需要花多少時間解決 Docker 網絡問題?將數據庫放在專用環境不會更好嗎?節省時間來專注于真正重要的業務目標。

4. 狀態

在 Docker 中打包無狀態服務是很酷的,可以實現編排容器并解決單點故障問題。 但是數據庫呢? 將數據庫放在同一個環境中,它將會是有狀態的,并使系統故障的范圍更大。下次您的應用程序實例或應用程序崩潰,可能會影響數據庫。

5. 數據庫不適合使用主要的 Docker 功能

考慮容器中的數據庫,我們來思考它的價值。 我們先看看 Docker 官方對其的定義:

Docker 是為開發人員和系統管理員構建,分發和運行分布式應用程序的開放平臺。 Docker 包括 Docker Engine(便攜式,輕量級運行時和打包工具)以及 Docker Hub(用于共享應用程序和自動化工作流的云服務),Docker 使應用程序能夠以組件快速組裝,并消除開發,QA 和生產環境之間的不同。 因此,IT 可以更快地分發程序,并在筆記本電腦,數據中心虛擬機和任何云上運行相同的應用程序。

根據該答案,我們可以很容易定義 Docke r的主要特性:

  • 易于構建新環境
  • 易于重新部署(持續集成)
  • 容易水平伸縮(從實踐得出)
  • 易于維護環境一致

讓我們開始思考這些功能如何適應數據庫世界。

容易設置數據庫? 讓我們看看,容器化或者在本地運行數據庫,在運行上是否有巨大的差異。

  1. docker run -d mongod:3.4 

對比:

  1. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 
  2. echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list 
  3. sudo apt-get update && sudo apt-get install -y mongodb-org 

易于構建新環境?如果我們談論是 MongoDB集群 - 可能容器化效率更高。但是配置管理系統呢?它們旨在通過運行一個命令來解決配置問題。使用 Ansible 你可以輕松設置幾十個 Mongo 實例。正如你所看到的,沒有顯著的價值增長。

容易重新部署?您重新部署數據庫升級到下一個版本的頻率是多少呢?數據庫升級不是可用性問題,而是工程問題(即在群集中的可用性)。想想你的應用程序將如何使用新的數據庫引擎版本。引擎更換時可能導致的問題。

容易水平伸縮?是否要在多個實例之間共享數據目錄?你不害怕直接數據并發問題和可能的數據損壞嗎?使用專用數據環境部署多個實例不會更安全嗎?最后搞一個主從復制?

易于維護環境一致?數據庫實例環境的變化頻率如何?每天升級操作系統嗎?還是數據庫版本或依賴軟件變化頻繁?或者是不容易與工程團隊達成共識?

最后看來,沒有一個特性足以讓我考慮數據庫容器化。

6. 額外的隔離對數據庫是不利的

其實我在第二點和第三點原因中提到了這一點。 但我把這個列為單獨的原因,因為我想再次強調這一事實。 我們擁有的隔離級別越多,我們獲得的資源開銷就越多。 相比專用環境而言,容易水平伸縮可以使我們得到更多的好處。 然而在 Docker 中水平伸縮只能用于無狀態計算服務,而不是數據庫。

我們沒有看到任何針對數據庫的隔離功能,那為什么我們應該把它放在容器中?

7. 云平臺的不適用性

大部分人通過共有云開始項目。 云簡化了虛擬機操作和替換的復雜性,因此不需要在夜間或周末沒有人工作時間來測試新的硬件環境。當我們可以迅速啟動一個實例的時候,為什么我們需要擔心這個實例運行的環境?

這就是為什么我們向云提供商支付很多費用的原因。 當我們為實例放置數據庫容器時,上面說的這些便利性就不存在了。因為數據不匹配,新實例不會與現有的實例兼容,如果要限制實例使用單機服務,應該讓 DB 使用非容器化環境,我們僅僅需要為計算服務層保留彈性擴展的能力。

這 7 點適用于所有數據庫嗎?

也許不是全部,但是應該是一切需要持久化數據的數據庫,以及所有具有特殊硬件環境要求的數據庫。

如果我們使用 Redis 作為緩存或用戶會話存儲- 使用容器就不應該有任何問題。因為不需要保證該數據落地,那么數據沒有丟失的風險。但是如果我們考慮使用 Redis 作為一個持久的數據存儲,那么你最好把數據放在容器外面,即使您不斷刷新 RDB 快照,在快速變化的計算集群中找到這個快照也會很復雜。

我們還可以談談容器內的 Elasticsearch。我們可以存儲在 ES 中的索引,并且可以從持久性數據源重建它們。但是看看要求!默認情況下,Elasticsearch 需要 2 到 3GB 的內存。由于 Java 的 GC,內存使用并不一致。您確定Elasticsearch 適合用于資源限制的容器嗎?讓不同的 Elasticsearch 實例使用不同的硬件配置不是更好嗎?

不要擔心本地開發環境的數據庫容器化。將數據庫放在本地環境的容器中,你將節省大量的時間和精力。你將能夠復制生產環境操作系統。原生Postgres for OS X或Windows不是100%兼容Linux版本。在主機操作系統上設置容器而不是軟件包,你會克服這種問題。

結論

Docker 的炒作應該有一天會冷下來。 這并不意味著人們將停止使用容器虛擬化技術,而是說我們在將容器化設計時,需要將其帶來的價值放在首要考量因素。

幾天前我看到了一個關于在零亂的 Ruby 世界中框架如何生存的演講。 從這個演講中我得到的啟發是技術炒作周期,借用這個炒作周期的說法,我們看到 Docker 目前在第二階段(充滿期望的高峰)太長時間(高可用架構小編:參看資源1),當我們在最后一個階段看到 Docker 時,情況將會正常化。 我認為我們需要對這種過程負責,并應該加快這一進程。 

責任編輯:武曉燕 來源: 高可用架構
相關推薦

2011-06-22 10:28:53

TRILLVLAN數據中心

2016-11-04 09:41:48

容器Docker

2019-10-12 11:15:10

數據庫工具技術

2017-05-18 08:14:48

NoSQL數據庫場景

2009-01-15 18:30:11

服務器虛擬化VMware

2015-07-23 11:26:35

虛擬化負載類型

2013-08-16 10:00:45

VMwareOpenStack

2015-03-12 13:39:48

Hadoop場景大數據

2021-01-31 18:52:36

Rust開發Web API

2009-10-14 08:30:22

Windows 7UAC企業部署

2017-11-15 08:54:00

2010-07-20 09:56:53

VDI部署

2018-06-09 08:37:06

SCVMM數據中心系統中心虛擬機管理器

2009-04-20 08:49:29

Windows 7微軟操作系統

2018-07-29 07:58:34

物聯網IOT物聯網產品

2010-10-09 09:31:26

2022-07-12 14:04:19

Kafka

2022-11-07 10:20:20

useEffects

2012-03-13 15:28:47

Kindle Fire傲游

2013-12-09 10:16:03

Android firAndroid開發移動創業
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧洲一区 | 国产一区三区视频 | 91精品久久久久久久久 | 国产美女精品 | 国产一区久久 | 中文字幕亚洲区一区二 | 国产中的精品av涩差av | 欧美激情精品久久久久久 | 国产精品毛片 | 激情视频一区 | 日韩精品久久久 | 91成人在线视频 | 久久国内精品 | 激情六月丁香婷婷 | 久优草| av毛片| 中文字幕在线观看一区 | 一级欧美黄色片 | 亚洲一区二区三区在线视频 | 欧美亚洲另类在线 | 一区二区视频免费观看 | 自拍偷拍精品 | 人人人艹 | 99国内精品 | 欧美日一区二区 | 久久久www成人免费无遮挡大片 | 91免费观看在线 | 婷婷色网 | 精品在线播放 | 天天草狠狠干 | 亚洲综合色视频在线观看 | 欧美一级片久久 | 久久久久久综合 | 四虎影院新地址 | 美日韩一区二区 | 国产精品69毛片高清亚洲 | 精品国产欧美一区二区 | 激情久久av一区av二区av三区 | 精品欧美乱码久久久久久 | 狠狠色综合欧美激情 | 成人精品视频在线观看 |