iT邦幫忙

4

會在雲端服務的虛擬機內裝資料庫嗎?

  • 分享至 

  • xImage

AWS有RDS,Azure有Azure SQL。 若是使用這些雲端平台的虛擬機且有資料庫的需求時,有什麼合理的理由不使用上述的資料庫服務,而是選則在EC2或是VM裡面自己裝資料庫?

  1. 是否在自己的VM裡裝資料庫,可以對資料庫有較高的自主性或控制權? 還是其實跟使用雲服務的資料庫沒差多少?
  2. 安全考量上,資料庫放在虛擬機裡面,多了一層防護?
  3. 針對第2點,個人覺得可能反而不安全,因為虛擬機掛了,資料庫也跟著掛。如果使用雲端資料庫,反而分散風險,是吧?
  4. 所以是不是多數人不會在雲端的虛擬機內裝資料庫?

以上四點希望能指點迷津,謝謝

黃彥儒 iT邦高手 1 級 ‧ 2023-01-01 00:00:55 檢舉
資料庫很貴的…
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
21
Ray
iT邦大神 1 級 ‧ 2023-01-01 00:38:13
最佳解答

有很多因素可以考量:

第一個當然是: 成本!!

找一個 AWS 計算機來試算一下:
https://ithelp.ithome.com.tw/upload/images/20230101/20026603IC0HsKiqoL.jpg
我上面隨意選一個 RDS 規格: 4 core CPU, 15GB RAM, 32GB gp2 SSD EBS, 一個月要 US$358; 同等級的 EC2 裡面自己安裝 Mariadb, 只需要 US$192, 兩者成本差了一倍

如果把功能往上加, 例如: Multi-AZ (HA), 自動備份...等等, 價格差距又會更大.

這些額外的功能, 都是需要有專業人力去維護的, 如果你覺得這些都沒關係, 或者自己有很強的 DB 管理能力, 可以扛下日常 DB 維護的工作, 那當然不需要靠公有雲的人力來維護...
(順便提一下, 他們的維護作業是符合多種合規的, 例如: 符合 ISO-27001, SOC2 Type 2, HIPPA, FedRAMP...等等, 你也應該評估一下, 自己維護的合規可以到甚麼程度?)

架構如果提升到 HA (例如: AWS 的 Multi-AZ Cluster), 價格當然又更高, 不過你自己維護的能力也相對更高. 你的工程師有沒有能力維護一組 DB Cluster? 有沒有能力修復不預期的 Cluster 腦裂 (Split Brain)狀況? 有沒有能力把資料復原到指定時間點? 有沒有能力修補安全漏洞?....

第二個是: 可用性

DB 放在公有雲 100% 都不會壞?
....不要相信沒有根據的傳說啦!

可能很少人會去讀公有雲承諾的 SLA, 我們就看一下 AWS RDS 的 SLA 怎麼承諾的:
https://aws.amazon.com/tw/rds/sla/

請留意 RDS 有兩種不同的 SLA 情境:
Multi-AZ 承諾: 99.95%
Single DB 承諾: 99.5%

每月 SLA > 99.5% 的意思就是:
每個月累積故障最多不超過: 3小時 36 分, 才不用賠錢; 否則就要依比例賠償..
http://www.slatools.com/sla-uptime-calculator
(99.95% 更嚴格: 一個月只能故障 21 分鐘 36 秒)

再來看 VM 的 SLA, 以 AWS EC2 為例, 同樣有兩種:
https://aws.amazon.com/tw/compute/sla/
Regional 承諾: 99.99%
Instance 承諾: 99.5%

看起來, 單一 VM 跟單一 RDS 的 SLA 是相同的(99.5%); 但是 Multi-AZ RDS 的可用率(99.95%), 低於 Regional EC2 (99.99%). 所以這就看你的抉擇:

用 Regional EC2 VM 組成 DB Cluster 之後, 你的維運能力是否可以比 RDS Multi-AZ 的 99.95% 還高? 直逼原本的 EC2 Regional?

SLA 99.99% = 一個月只能故障 4 分鐘 19 秒
SLA 99.95% = 一個月只能故障 21 分鐘 36 秒
(上線營運用的 DB, 至少要有 3 個 9 以上的 SLA 可靠度)

如果你的組織從來都沒在管理 SLA, 那麼人家花那麼多維運成本堆給你的 SLA 就沒有意義, 當然也不需要去花這筆錢讓雲託管.

(SLA 承諾是有罰則的, 未達標要賠錢給客戶, 這是雲業者少數會賠錢出來的項目, 可見得需要很高的成本去維護; 某些 24hr SaaS 或者遊戲業者, 當服務 SLA 不達標的時候, 也會去扣維運工程師的獎金)

我用 VM 自裝營運的 DB, 通常都可以維持每月 99.96% 以上的 SLA. (包含安全更新)
但是, 如果你的組織也有 SLA 要求的話, 你覺得自裝 vs. 託管, 哪一種容易辦到?

此外, 以下這兩件事情也要分開來討論 (篇幅有限, 這裡不談):
可用性 (Availability)
可靠性 (Reliability)

第三個: 合規管理 (Compliance Management)

前面提過, 公有雲的 DB PaaS 服務都驗證過合規性, 你自己維運 DB 的話, 如何滿足合規性? 當然, 雲上面的合規標章種類太多了, 我們不見得都用得上, 但是雲業者不會因為你用不到某些合規, 他就跳過你不想要的合規項目不做. 所以合規變成是使用 PaaS 的必要成本, 你沒有辦法對雲業者說: 我只要買 DB PaaS, 不要買合規! (人家不賣你)

自架 VM 裝 DB 的話, 雖然也是在雲上面, 雲業者 VM 的 IaaS 雖然也有合規, 但這個合規認證範圍, 就只會到 IaaS 等級, 你在 VM 裡面裝的任何軟體, 都不在雲業者 IaaS 的合規執行範圍之內, 換句話說: VM OS 裡面所有的合規, 你都要自己做.

以下是 AWS 已經通過的合規認證:
https://aws.amazon.com/tw/compliance/programs/
如果你公司稽核也需要以上合規認證的話, 在 IaaS/PaaS/SaaS 有用到 AWS 部分, 請稽核直接跟它們對接就好, 不需要自己再額外去做雲項目的驗證. (其他公有雲也都有它們自己的合規認證, 可以跟你的稽核對接)

但是合規不等於絕對安全喔, 她只是代表:
可以被稽核驗證, 不是自己嘴巴講的安全.

第四個: 談談安全性

至於大家常常在談的安全性, 我們從來不認為: 上不上雲有甚麼差別? 事實上, 公有雲上發生的安全事件, 有 99% 都來自於: 使用者自己設定錯誤, 或者金鑰外洩 (從程式碼或自己的電腦中外洩) 造成的, 而這些過失, 不論你用不用雲, 都有可能發生.

雲業者早就把安全責任劃分得很清楚, 也明定在合約上, 在使用之前, 務必要先知道:自己應該負責哪些範圍? 不能盲目的把安全責任完全推給雲業者:
(這在業界稱為: Shared Responsibility Model)

灰色部分才是雲業者的安全責任, 藍色部分都是使用者自己要扛的.

要解釋淺顯一點, 可以看這張圖 (這是以 AWS 為例, 其他業者也差不多):

當你看到: AWS 要負責下面 Copmute (VM) 的安全時; 別忘了: 她不是包山包海包生子---上面屬於 Customer 的部分, 是被排除在 AWS 責任之外的, 要由客戶自己來負責, 例如: 用戶端加密, 身分管理, 存取控制, 資料完整性, 傳輸安全, 網路層設定...

我們最常見的就是: 在自家網路內, 工程師原本習慣所有 DB Engine/後臺管理入口...都不設定密碼, 結果她把這個習慣帶到雲上去, 就爆發了資料外洩事件. 試問: 這樣能算是雲業者的責任嗎? 當然不是, 這是工程師原本在地端, 就沒有養成良好的安全管理習慣所致, 責任在工程師本身.

多數事件都是: 組織自己沒有培養出正確的安全管理制度, 把壞習慣帶到雲去使用造成的.

舉例來說, CIS (Center for Internet Security) 對資料庫安全, 有一套 Database Security Benchmarks 安全標準建議, 包括:

1.建立強大的身份認證與授權機制
2.建立安全的資料庫架構
3.管理資料庫帳號
4.加強資料庫網路的安全性
5.管理軟體更新與威脅情報
6.建立備份與恢復計畫
7.設定安全日誌記錄

https://www.cisecurity.org/cis-benchmarks/
看看上面, 大多數責任都在使用者, 即便用了 PaaS, 公有雲業者也不會幫你全管每一項.

貴組織如果這麼不喜歡管制安全的話, 那把整個 AWS VPC 當作內網使用就好了, 結果也跟你在自家機房是一樣的環境; 但問題是: AWS RDS 預設是外網環境, 你懂不懂: 如何把 RDS VPC 改設成內網專用的環境? 如果是因為:你不懂得要設定成這樣, 才導致資安事件發生的話, 那能算是雲業者的責任嗎?

(人家有這個選項讓你用, 是因為你不懂得用, 才出事的, 能怪誰?)

我自己的作法:

測試/個人用/沒有營收/老闆不給錢, 自己用 VM 裝 DB 就好
正式營運/故障要有人出來背鍋/老闆有錢, 買公有雲 DB PaaS

但是, 每個人的 DB 管理能力不同, 以我為例, 從底層往上全部都讓我管的 DB, 我可以在 Infrastructure 發生災難之後, 復原到故障前一秒的最後那筆交易 (相當於: RPO, Recovery Point Objective=1秒); 你可以自問看看: 不論自管或託管, 有沒有辦法做到這點?

(或者去實作看看, 能否完成這個情境? 其實這是 DBA 的基本功, 如果工程師做不到的話, 不論有沒有上雲, 都不應該讓她來管 DB 維運)

obarisk iT邦研究生 2 級 ‧ 2023-01-02 11:08:58 檢舉

拜見大神,
另求 RPO = 1 秒的教學

/images/emoticon/emoticon31.gif

Ray iT邦大神 1 級 ‧ 2023-01-02 15:55:36 檢舉

很簡單, 大部分具備 ACID 特性的 RDBMS 都有 Transaction Log 的機制, 只要你能夠保護 T-log 的檔案紀錄到故障前最後一秒, 即使整個資料庫毀損, 仍然可以從上次的 DB 完整備份時間點開始, 先復原完整備份, 接著靠手上存活的 T-log 一路累加還原上去, 直到最後一秒的最後一筆已成功交易都全部回來.

還原 Log 到指定時間點 --這是擔任 DBA 人員的基本功, 其實原廠手冊都會寫到這個操作, 但是很多使用 DB 的人都沒去了解她的實作方法, 以為光把完整備份倒回來就沒事了; 然後因為這樣做不到要求的 RPO 時間, 又跑去買貴貴的 CDP 架構, 把整個儲存體都包起來, 一整個都在浪費錢, 被廠商牽著鼻子走又影響效能....
https://www.ithome.com.tw/tech/33669

大家都不去想: 當年還沒有 CDP 產品之前, 為何我們可以辦到 RPO=1s?
現在要上雲了, 才發現地端的 CDP 搬不上去, 就只好兩手一攤都交給雲?
這些功能只要看懂原理就會做了, 不需要再疊床架屋的買新設備或技術...

還有, 沒人要求把 log 和 db file 放在同一顆儲存區內, 所以這兩個東西, 原本就是可以被分開, 各自用不同方法保護的, db file 壞了, 不見得 log 也會跟著壞掉....重點是: 你要知道如何設定才能保護她.

也沒人說 DB Engine 只能建一台來用, 就連 File System 也有 Journal Log 可以用來保護檔案完整性 (當然同樣要有人預先規劃和設定維管, 她不是開箱即用的); 當你需要 RPO=1s 的關鍵保護力的時候, 就要窮盡所有底層技術的架構設計, 不計代價的去獲得保護; 先達成關鍵目的, 再來談降低成本

其實就資料庫保護而言。除了R大說的。
也可以利用Multi機制。
這是一種同步+異地但非備份的方式。
除非真的很倒楣。異地不同的機房同時掛掉。

不過要開Multi機制,好貴啊!!!
我還是只開一天備份一次的方式。了不起就是損失最多24小時的資料。
真有那種資料不能遺失的客戶,我大多會建議他們用Multi模式。
然後他們一聽成本就乖乖的縮了。

2

是否在自己的VM裡裝資料庫,可以對資料庫有較高的自主性或控制權? 還是其實跟使用雲服務的資料庫沒差多少?

「較高的自主性或控制權」不覺得
「雲服務的資料庫沒差多少?」差很多喔。

安全考量上,資料庫放在虛擬機裡面,多了一層防護?

您完全搞錯了,是放在對應的資料庫服務上,安全性才高。

針對第2點,個人覺得可能反而不安全,因為虛擬機掛了,資料庫也跟著掛。如果使用雲端資料庫,反而分散風險,是吧?

這算是其一優點就是了。你倒是沒講錯。其實還有其它優點的。例:負載平衡使用時。

所以是不是多數人不會在雲端的虛擬機內裝資料庫?

看情況,大多數是依成本考量。再來是備援性考量,最後還有安全性考量則。
依我目前AWS用RDS來說。兩種方式我都會用。
畢竟RDS等於多一倍以上的價格,不一定有客戶能接受。
所以當客戶不接受時,我還是會內置裝上資料庫來使用

2
hsiang11
iT邦好手 1 級 ‧ 2023-01-01 03:44:05

說說我觀察的現象,在台灣的中小企業,成本很多都是第一考量
RDS這類雲端幫你扛下很多問題的資料庫服務,連備份都幫你考慮好了
但是就因為貴了不少,大多企業並不太愛
有些公司甚至應用雲端的,例如EC2
長期幾年下來沒遇到掛掉出包的,大多會產生導入雲端後服務就是不死的心態
而這種公司,資料庫長期都沒備份的也有
甚至規劃上連Multi-AZ都沒有做到,就開始賣服務給外面客戶了
客戶也從不知道,每月收錢的服務到底架構安不安全
死掉的話狀況會有多嚴重?

主管層來說很多領高薪,長期做DB和程式這塊的反而也都不熟DB的維運
他們大概只是聽過db salve ,readonly之類的架構
也會照原本單台EC2,希望就再起一台EC2 做salve,不管是不是同一個AZ
會要求底下工程師去研究以前的實體主機架構
而不是去熟悉更貴的RDS

其實就安全性考量而言
台灣很多主管的考量,有著很多不專業的想法
他們大多不會去分析兩種方案的差異和最好的建議給老闆下決策
只是用看數字的方式再做決策,
這就很像台灣買硬體的方式一樣
找好幾家報價選最低的就對了

所以如果有聽到某些公司在資料庫上出包的話
大多都是主管和老闆一起在這場賭局中賭輸了

看更多先前的回應...收起先前的回應...
ckp6250 iT邦好手 1 級 ‧ 2023-01-01 06:10:17 檢舉

成本的部份,可能也要考量企業對【損壞後,復原時間的忍受度】來看。

大部份的中小企業,資料庫(硬體或軟體)壞了,如果幾個小時或半天可以恢復就能接受的話,它應該不會想花大錢去做那【分秒必爭】的昂貴消費。

BKY iT邦研究生 2 級 ‧ 2023-01-03 10:54:05 檢舉

請問有沒有神人知道
假設雲端主機如果和地端實體主機規格都一樣
效能上雲端會比地端差多少?
或是說如果資料庫要上雲
同樣效能的雲端規格要比地端拉高多少?
效能差異也會牽涉到成本

hsiang11 iT邦好手 1 級 ‧ 2023-01-03 11:23:16 檢舉

BKY 大多數雲端業者並非笨蛋
資源基本上都是共享的
要專用也不是不行 報價很貴而已
https://aws.amazon.com/tw/ec2/dedicated-hosts/

企業大多因成本也不太會考慮專用

金融業也不例外喇,效能 vs 成本往往捨易取難。神人對上管理層,瞬間下凡成俗人。RPO,RTO及 SLA 口頭禪而已,出包也罪不及己。

BKY
其實雲主機跟地端主機。其設備大多大同小異。
唯一的差別性,是只有線路頻寬的不同。只要你錢夠就能買同樣的設備。
但高速專線網路可不一定有錢就能買的到。

畢竟一條高速網路。那成本費用可是不得了的。地端主機是比不上的。
(財大氣粗的就算了)

就算線路都一樣好了。其它配備的費用?隨便一個都要好幾百萬。
這要怎麼比呢?

如果就單純只看PC設備好了。也先不談VM技術性的問題。
其實兩邊的PC設備都大同小異。
但如果將其它對應設備、機房都算下去。
簡單基本計算都要好幾千萬以上。月付則上百萬甚至千萬起。

光這樣的成本,一般企業就不太可能考量進去了。
當然了,有些人會用縮簡化機房來計算。
可能就單純一台機櫃來計算成本。網路用專線的。
試算一下。一定超過直接租用雲主機10倍以上。這還沒考量維護成本下去。

再來說說效能差異。
依照我使用EC2+RDS來看。EC2與RDS之間是採用內網連接的模式。
網速可是會比一般高速網路還要快上許多。
這也是為何當全球性主機,需要考量到 Multi 模式。
這也是為了內網請求最快速的原理。

當然,我自已也曾經試過從EC2本身架資料庫及讀取RDS來比較。
坦白說,一定是本身資料庫最快。
但這是在請求數單純低的情況下。
當請求數達到一定量時。會發現本地資料庫開始變慢。但RDS並不會受到影響。

我要發表回答

立即登入回答