Cloud SQL 小提示 – MS SQL Server 版本的選擇與升級
大家可能會想,都到Cloud SQL,那就用MySQL企業版的沒有授權費用不是最好嗎?但很多時候情況是不允許這樣,尤其當客戶已經被耳濡目染的認為MS SQL很穩定的時候,選擇MySQL有可能就等於產品的自我毀滅。
MS SQL Server版本
選擇MS SQL Server的時候有一個重點是在於選擇資料庫引擎的版本,有Express、Web、Standard、Enterprise。
最後兩個大概是給雲端成功企業使用,這在剛雲端化的企業如我們上面是不實用。因為光是給微軟的授權費用一個月就要1000 USD以上,Enterprise可能要5000~6000 USD,不含跑SQL的基礎虛擬機器的費用。
這篇文章不會談到那兩個版本,因為到那個時候純粹只是SQL的讀寫速度與成本來決定版本,那兩個版本在於支援的vCPU、RAM和資料庫大小幾乎是沒有差異太多,或者是差異已經不是一般來說大家需要考慮的。
選擇版本小提示
剛開始使用Cloud SQL建議先從最低的版本選擇起,也就是Express,然後選擇1 vCPU,因為這些後來都可以升級,可以將雲端費用最佳化。
比如有一個產品,SQL Server的使用上不會超過一個資料庫10GB大小的限制,那優先就是選擇Express版本,1 vCPU 3.75 GB RAM。
因為Cloud SQL只能升級不能降級,如果使用了VPC保護SQL,在改變SQL執行個體又有10個容器以上透過內部IP呼叫原本的SQL,改變SQL Server執行個體就好像在做內臟移植手術。
如果只是增加vCPU或者升級SQL版本,這就好像在醫院打個針,痛幾分鐘就沒事了。
差異就在這裡,如果一開始選了Web版但發現Express版就夠用,那公司就得多花33 USD一個月左右的成本在微軟的授權費,如我錯估vCPU用量的時候就會這樣。
備份小提示
備份的部分,Cloud SQL內建是一次性備份所有資料庫到一個備份檔案,似乎不能選排程備份個別資料庫,那如果一台SQL有3個資料庫跟三間客戶有關,其中一間今天資料異常或操作異常爆掉要我還原,我一還原會還原另外兩家的資料。
也就是Cloud SQL除非有一個虛擬機器寫排程備份個別資料庫到Cloud Storage裡面以外,最好一台機器只影響一個客戶。
那每台機器都要33 USD授權費(Web 版本),跟客戶收的費用就不能少,因為羊毛出在羊身上。如果不要一個客戶一台,在4 vCPU也就是Web版本支援的最大vCPU數量且10GB資料庫大小範圍下夠的狀態下,要做的就是額外開一個Linux或者Windows(要最低3x USD的Windows授權費用不含VM機器的費用),執行排程。
最佳化預算
這樣在資料庫大小10 GB也就是Express版本夠用的狀態下,一定是先選Express版本,然後監控7~14天或更短週期的CPU用量,最好是用VPC保護好SQL Server以免CPU被一些網路的掃描性質攻擊佔用。
超過60%才需要增加vCPU和升級SQL Server的版本以及調整跟客戶的收費。雲端一直是以資源運用60%左右作為一個最佳化運用的標準,因為還有40%才到服務受不了速度變慢,餘裕空間很夠。但如果只使用10~15%就升級那就是跟自己的荷包過不去。
增減vCPU的時間
升級版本的時間較久,因為我一開始就錯誤選擇Web版本,沒想到雲端使用者的量太少沒有讓我的驗證伺服器超過12% CPU的用量,所以我不知道Express升級到Web的詳細時間,但應該不會小於10分鐘。
增減vCPU也就是Cloud SQL執行個體的更動,大概更新時間在5~10分鐘之間,昨天有做更動是6分30秒以內。
增減vCPU不會更動內部外部IP,所以就像先前說的只是去醫院打針,不用如同換器官一樣所有使用到的容器都要重接。
只要加班一下或者在上班時間公告一下維護,30分鐘內大概就可以搞定更正測試,讓自己的服務的SLA也可以在99.9%左右。
如果要降級SQL版本
那就要重建立一個執行個體了,像我打算在年假的時候為公司省下一個月33 USD,或者如果在年假之前產品銷售符合預期,也許Web 版本就會是需要的。
重建一個執行個體是非常麻煩的,因為我們公司使用的是Cloud Run來最佳化運算成本,容器就有10多個不同大小的。每個容器內建的參數IP都要改,又要重新部署,只要漏掉一個客戶就會打來罵了。
這個大概只有過年假期或者直接跟客戶說維修要3~5天才有辦法完美的搬遷包含各種測試,手腳快一點的話可以1~3天,但最久的在於測試時間而非搬遷時間。
最後,SQL Server版本的選擇
Cloud SQL 的 Express版本 只支援1 vCPU、3.75 GB RAM和10 GB的資料庫大小,如果資料庫大小大於就不用考慮這個了。
Web 版本支援到 4 vCPU、RAM忘了但大概用不到那麼大,也是10 GB資料庫大小,這樣有可能就要將一個資料庫拆資料庫, 因為是單一資料庫限制大小。
比如如果下一代的KM系統要在Cloud SQL的Web版本上的話,有可能暫存檔與附加檔案要在一個資料庫,內容紀錄要在一個資料庫。甚至附加檔案要把圖檔和文件檔分開到兩個資料庫。
把附加檔案弄在資料庫裡我知道並不是最好的實踐方法,但考慮到開發效率這個是最快且最不會錯誤的方式。
四個版本的SQL是以Web的CP值最高,因為支援最多4 vCPU,硬碟讀寫也不算慢,資料庫支援10 GB除非有附加檔案不然很難爆掉。
Express建議每個初期的人優先選擇,因為SQL Server就沒有授權費了可以省下Web的一個月33 USD。
如果33 USD覺得是小錢的話不如想想當沒辦法Downgrade的狀態下,一年要花396 USD,3年就花超過1000 USD的成本在授權費用上。
就算是資料庫使用人數會快速成長的,先到Express再挑一個維護時間Upgrade,能省一點就是一點。
結論
雲端是由一點一點的小錢堆積而成的成本,所以如果要為公司考量,不管要不要與可不可以跟公司邀功,雲端成本能省一點,公司就會多一點資源可以發薪水或獎金給自己(X。
就算自己沒有利益,對於自己公司資金的不浪費也是一種美德,當然老闆少賺一點也不關自己的事,但有可能在談雲端成本的時候開太高就會被老闆否決掉。