昨天談到關于serverless database的問題,我的觀點是公有云上使用serverless database我是持正面態度的,但是對于一般企業來說,不太建議在私有云搞serverless database,除非是在測試與開發環境中,對于數據一致性要求沒那么高的場景中使用。昨天有朋友問我如何看待數據庫上容器云的問題,數據庫容器云實際上也是一種serverless database,我個人的觀點,其使用場景也是有一定的限制的。在后面我將會談談我對serverless database應用場景的一些個人看法。
除了應用場景的限制外,團隊的技術能力也是決定組織是否使用serverless database的很重要的因素。可能你會看到某些互聯網企業在這方面用得很溜,你也想去學他們,不過如果你自己的技術能力不足,簡單的模仿很可能會編程東施效顰。如果你的核心業務依賴于數據庫容器云,而當容器云出現故障的時候,你無法解決這些故障,那么后果如何,是可以想象的見的。
在討論這些問題之前,我們首先要來弄清楚你把數據庫遷移到容器云而不選擇云主機的原因。如果你僅僅是因為覺得容器比VM具有更小的開銷(OVERLOAD),那么我建議你要再慎重考慮一下。適當節約IT資源是很合理的,不過目前的數據庫服務器資源與數據庫所承載的企業關鍵數據相比,并不算昂貴。如果你是為了百分之幾的資源消耗差異而選擇將數據庫運行在容器里,那么就真的可以放棄這個想法了。
將數據庫放在容器云里運行,其終極目的都是serverless database,讓數據庫這種IT基礎設施變得很簡單,這才是數據庫上容器云的最合理的需求。2年多前,我寫過一篇關于數據庫上容器云的文章,其中對VM還是容器的選擇用一張圖示做了分析。這張圖是我在medium上看到的,是谷歌云解決方案架構師本杰明.古德畫的。覺得挺有道理,就抄了下來。
圖片
第一個選項要回答你的數據庫是不是k8s友好的。由于容器較物理機、虛擬機等環境是更容易出現故障的基礎設施,因此故障自動轉移事件的發生可能性比傳統托管或完全托管的數據庫高。數據庫中包含分片、故障轉移選擇、自動副本復制功能的數據庫都是屬于k8s友好的數據庫,比如ElasticSearch,Cassandra或MongoDB等。而MySQL、Pg、Oracle等數據庫則是非k8s友好的數據庫。
對于非k8s友好的數據庫,如果具有較好的k8s上的運行支撐,比如借助于一些Operator來實現數據自動復制/備份,故障自動轉移等特性,并且組織能夠提供足夠的運維支撐,那么也是可以轉回使用k8s這條線的。然后我們要回答下面的一個選項,就是數據庫的工作負載是不是適合k8s,如果這個數據庫是一個負載不高,并且隨著應用上線后,負載增加不是很大(如果有較大的負載,可以通過橫向擴展,而不是增加在一個獨立的數據庫上),那么這個工作負載就是k8s友好的,可以使用k8s。反之,如果這個數據庫工作負載很大,或者存在十分高的高峰,或者隨著上線時間推移,數據量增長很快,負載會越來越大,而且無法很好的橫向擴展,那么這個工作負載是非K8S友好的。
然后進入第三個選項環節,你的工作負載能支撐多大的并發量,如果你可以完全控制并發量,讓k8s能夠承受合理的工作負載,那么你就放心的在k8s上跑你的數據庫吧,否則還是讓數據庫跑在一個完全受控的環境下。
從上面的分析可以看出,判斷數據庫是否能上容器云,主要要考慮兩方面的因素,一個是你的應用負載是否是可控的,數據庫的規模與負載是否完全受控,不會因為業務發展和數據量的增長而導致數據庫規模和負載不可控從而引發性能問題,這一點是數據庫在容器中運行的最基本的條件。
第二個因素是數據庫本身是否是容器友好的,其架構本身就不怕容器這種不夠穩定的基礎設施出現問題,如果你的數據庫本身必須依賴于穩定的IT基礎設施,那么你的數據庫上容器云的前提是你的技術足夠好,能夠提供能力強大的operator,從而讓數據庫能夠在容器云中免維護運行。
上面的問題只是回答了能不能在容器云中運行數據庫而已,而要不要讓的數據庫在容器云中跑是另外一個問題了。我覺得在讓自己的數據庫上容器云之前有幾個問題需要再思考一下。如果你覺得上容器云的最主要的目的是為了節約計算資源,那么我建議你立馬放棄這個想法。對于絕大多數企業的幾百個或者千把個數據庫來說,上容器云節約的成本,還不夠搞出一套靠譜的operator來。
如果你上容器云的目的是為了簡化運維和運營,那么還是有點靠譜的。不過你也要考慮一下,你的應用是否能將數據庫都控制在類似規模上,確保自動化運維能夠很好的管理這些數據庫,不需要進行額外的管理與優化。如果你的應用無法很好的控制數據庫的規模,那么可能就會上云一時爽,爽后一世忙了。
另外一點要考慮的是,你的企業中是否有數十個甚至上百個規模相當,可以使用同樣鏡像模板的數據庫,如果是這樣,用容器云還是挺省事的。而如果你的每個數據庫的參數都需要定制化,那么使用容器云和用虛擬機就沒啥區別了。
最后要提醒的還是那個最初說的問題,你的IT能力是否能夠駕馭好運行了成百上千個小型數據庫的容器云,當云平臺本身出問題的時候,你是否能夠很快的解決這些問題。當數據庫因為IT基礎設施不夠穩定而產生切換,丟失部分數據的時候,你的業務是否能夠承受,也是你需要事先考慮好的問題。