本文同步刊登於個人技術部落格,有興趣關注更多 Kubernetes、DevOps 相關資源的讀者,請務必追蹤從零開始的軟體工程師之旅,喜歡的話幫我按讚分享、歡迎留言、或是許願想要看的文章。
如果有技術問題也可透過粉絲專頁 討論,技術方面諮詢免錢、需要動手做另計 XD。
上篇,我們開始探討以下幾個需求:
有人提出一個問題:該不該在 Kubernetes 上面跑 database?
TL;DR,如果你剛開始考慮這件事,通常的答案都是否定的
等等,我們這邊不是討論該不該上 Kuberentes,而是該不該使用先占虛擬機吧。
然而由於先占虛擬機節點的諸多限制,光憑先占虛擬機並不適合跑任何持久性的儲存庫。我們這邊仰賴 Kubernetes 的網路功能 (e.g. 服務發現),與自動管理 (e.g. health check,HPA,auto-scaler),基於先占虛擬機,建構高可用性的服務架構,來支撐高可用,且有狀態的的儲存庫。
應用是否適合部署到 Kubernetes 上,可以看這篇 Google Blog: To run or not to run a database on Kubernetes: What to consider,如果大家有興趣,再留言告訴我,我再進行中文翻譯。
文中針對三個可能的方案做分析,以 MySQL 為例:
然而 RDBMS 的提供商,自家也提供 Operator
你就想,所以這些人是想怎樣,RDBMS 放 Kubernetes 上到底是行不行 XD。Google 的文章說明:如果應用本身並不符合 Kubernetes 的工作流程 (Pod life-cycle),可以透過上述的 Operator 來自動化許多維運的作業,降低維運的困難。
然而 DB 有千百種,除了 RDBMS 以外,還有另外一批 Database 天生就具有分散式的架構,這些儲存庫部署到 Kubernetes 上,並不會太痛苦 (還是要付出一定的成本XD),但是卻可以得益於 Kubernetes 的諸多功能。
底下我們先根據分散式的儲存庫做概觀描述,本系列文的最後,會根據時間狀況,做實例分享:Cassandra 或是 CockroachDB。提供各位一點發想,並根據需求去選擇需要的儲存庫
「行不行要問你自己了施主,技術上都可以,維運上要看看你的團隊有沒有那個屁股吃這份藥 XD」
底下非常粗淺的簡介分散式儲存庫的概念,提供一個基準點,幫助接下來討論是否可以使用先占虛擬機。這邊要強調,儲存庫的類型千百種,底層的各種實作差異都非常大,底下的模型是基於 cassandra 但不會走太多細節。 cassandra 的規格有機會再細聊。
當後端應用已經順利水平拓展之後,整體服務的效能瓶頸往往都壓在後端 DB 上。這些不同的 DB 面向不同的需求,當需求符合時,可以考慮使用這些解決方法。
這邊要強調,不是放棄現有的 RDBMS ,完全移轉到新的資料庫,這樣的成本太高,也沒有必要性。更好的做法,是搭配既有的關聯性資料庫,將不是核心業務的資料處理抽出,移轉到合適的資料庫上。讓不同需求的資料儲存到更合>適的儲存庫,是這段話要強調的重點,關連式資料庫也不是唯一選擇。
分散式的資料庫有以下特徵
從以上特徵來說,使用此架構的服務可以承受先占虛擬機的不定時終止,或許可以使用。
實務上有非常多需要注意,需要依據各自服務的性質,各自處理。常見的問題舉例如下:
都是需要仔細了解解決方案,並且分析需求,來評估是否有合乎成本。
以上分析了三種常見需求例子:從 batch job,user-facing service,與 distributed database。
明天會實際搬出 GKE 與 GCP Preemptible Instance 的技術規格,與大家實際討論。
有寫過鐵人賽的都知道 30 篇真的很漫長,一篇文章幾千字,都要花好幾個小時。我去年後半,真的都會看讀者的留言跟按讚,取暖一波,才有動力繼續寫。留言的人多就會多寫,留言的人少就會少寫,各位覺得文章還看得下去,請務必來我粉專按讚留個言,不管是推推、鞭鞭、或是有想看的文章來許願,都十分歡迎。有你們的支持,我才有動力繼續寫。
請大家務必以實際行動支持好文章,不要讓劣幣驅逐良幣。不然 iThome 上面之後只剩洗觀看數的熱門文章了 XD
當然,沒人留言我就會當作自己才是垃圾文 (自知之明XD),就會收一收回家嚕貓睡覺,掰掰~