系列專欄:從 AWS 視角征服 Azure:AZ-900 30 天通關實戰
難度指數:★★★★☆(本篇為架構精選加強版)
今日任務:深入拆解 Azure Cosmos DB 的全受控架構底層,從多模型 API、五種資料一致性層級光譜、邏輯與實體分割區(Partitioning)機制到 RU 容量計費模型,建立對標 AWS DynamoDB 的雙雲架構選型與防禦性設計思維。
Day 18 我們替 Titan 科技拆解了 Azure SQL 家族的三層抽象(Azure SQL Database、SQL Managed Instance、SQL on Azure VM),為關聯式系統、強交易 ACID 與跨資料庫相容性奠定了選型標準。
然而,新的一天帶來了全新的架構挑戰:Titan 科技全球大作「星際遠征(Starry Expedition)」即將在全球各大洲同步公測。CTO 走進架構會議室,攤開一份令人頭痛的存取特徵清單:
若將這套高併發、全球化、彈性結構的資料硬塞進傳統關聯式資料庫,跨洲光纖傳輸的物理延遲(RTT 150~250ms)將直接拖垮分散式交易兩階段提交(2PC),死鎖與頻繁的 DDL 遷移更會引發全球性雪崩。
今天不是單純背出「Cosmos DB 是 NoSQL」這句口號。身為 Chief Cloud Architect,你要掌握 資料模型 ➔ Partition Key ➔ 多區域拓撲(Regions)➔ 一致性層級(Consistency Levels)➔ RU 容量配置 的完整推理鏈。選錯 Partition Key 會引發熱點吞吐量耗盡;在跨區多寫時誤用強一致性更會直接撞上平台架構限制。
本篇加強版同樣導入 🧒 ELI13(Explain Like I'm 13)生活化比喻,將分散式系統最抽象的一致性光譜與計費黑盒徹底解構!
┌──────────────────────────────────────────────────────────────────┐
│ Titan 科技全球客戶端(Web / Mobile App)讀寫請求 │
└──────────────────────────────────────────────────────────────────┘
▼
┌──────────────────────────────────────────────────────────────────┐
│ Azure Cosmos DB Account:選定 API、Partition Key 與一致性層級 │
│ • 全球資料庫帳戶 (全受控 PaaS) ➔ 掌管多區域拓撲與資料複寫契約 │
└──────────────────────────────────────────────────────────────────┘
▼ ▼
┌───────────────────────────────┐ ┌───────────────────────────────┐
│ East Asia Region (亞太區) │ │ West Europe Region (西歐區) │
│ 本地讀取與寫入 │ │ 本地讀取與寫入 │
│ 邏輯分割區 ➔ 實體叢集 │ │ 邏輯分割區 ➔ 實體叢集 │
└───────────────────────────────┘ └───────────────────────────────┘
│ │
└──────── 雙向背景自動複寫 ────────┘
(依一致性協議:Session / Bounded Staleness / Eventual)
💡 架構師重點筆記:Cosmos DB 的「全球分散(Global Distribution)」並非由應用程式層手動寫迴圈同步。在 Cosmos DB Account 層級,架構師定義好資料庫 API、複寫區域(Regions)、多區域寫入(Multi-region Writes)與一致性契約;微軟底層儲存引擎會自動以毫秒級延遲在背景處理資料複寫與同步。
在雲端架構中,傳統關聯式資料庫(RDBMS)的設計哲學是追求 ACID(原子性、一致性、隔離性、持久性)。為了維持絕對的資料正確,任何寫入都必須透過鎖定(Locking)或嚴格日誌同步來確保沒有任何用戶看到衝突。
然而,當系統走向「全球跨大洲分散」時,物理定律成了無法跨越的障礙:光纖傳輸在歐亞大陸與太平洋之間的光速傳播往返時間(RTT)約需 150~250ms。若在多個區域同時維護 ACID 強交易,每次寫入都必須等待跨洲多節點完成兩階段確認,回應時間會從 5ms 暴增至 300ms 以上,系統吞吐量呈現斷崖式下跌。
這正是 CAP 定理 與 PACELC 定理 的核心意涵:
NoSQL 的誕生,正是為了解開這道鎖鏈。Azure Cosmos DB 採用全受控的 Atom-Record-Sequence (ARS) 底層儲存引擎,將資料解構為多版本的鍵值與序列,並在表面提供多種通訊協定相容的 API:
⚠️ 關鍵觀念:多模型 API(Multi-model APIs)只是開發者的存取語言協定,底層皆運行在同一套分散式 ARS 引擎之上。你不能在同一個容器(Container)內任意混用兩種 API,建立帳戶時就必須明確選定。
🧒 ELI13 比喻:關聯式資料庫就像「一本嚴格裝訂的公文大帳簿」,全公司只有一本;任何人要修改其中一頁,走廊上的其他人都必須排隊乾等他蓋章。Cosmos DB 則像「各分公司即時連動的電子白板」:東京、歐洲、美國分公司各有一塊白板,大家可以立刻在白板上貼便利貼(即時寫入),系統在背後悄悄把更新同步到全球其他白板,誰也不必在走廊上乾等。
一般資料庫通常只有「強一致性(Strong)」與「最終一致性(Eventual)」兩種極端二分法;但 Azure Cosmos DB 的創舉在於提供了完整的 五種一致性層級光譜,讓架構師依據商業價值與延遲容忍度進行細緻的旋鈕調節:
┌──────────────────────────────────────────────────────────────────┐
│ Cosmos DB 五種一致性層級光譜 (Consistency Spectrum) │
├────────────┬─────────────┬────────────┬─────────────┬────────────┤
│ Strong │ Bounded │ Session │ Consistent │ Eventual │
│ (強一致性) │ Staleness │ (工作階段) │ Prefix │ (最終) │
├────────────┼─────────────┼────────────┼─────────────┼────────────┤
│ 讀最新寫入 │ 容忍落後K/T │ 讀己之寫入 │ 讀取不逆轉 │ 最終收斂 │
│ 延遲最高 │ 跨區多寫強 │ 預設最佳解 │ 順序保證 │ 延遲最低 │
│ 吞吐量最低 │ 延遲吞吐平 │ 吞吐延遲佳 │ 吞吐極高 │ 吞吐最高 │
└────────────┴─────────────┴────────────┴─────────────┴────────────┘
| 一致性層級 | 讀取保證 | 讀取延遲 | 讀取 RU 成本 | 多區寫入支援 | 典型業務情境 |
|---|---|---|---|---|---|
| Strong | 讀到最新認可值(零落後) | 最高(跨區同步) | 2 倍(Quorum 讀取) | ❌ 不支援 | 金融結算、法律合規審計 |
| Bounded Staleness | 落後不超過 K 個版本或 T 秒 | 中等 | 2 倍(Quorum 讀取) | ✅ 支援 | 跨區即時競價、賽事比分 |
| Session (預設) | 讀己之寫入、單調讀寫 | 極低(本地) | 1 倍(標準單複本) | ✅ 支援 | 玩家個人裝備、購物車、社交動態 |
| Consistent Prefix | 順序不逆轉、保證前置詞 | 極低(本地) | 1 倍(標準單複本) | ✅ 支援 | 聊天室對話串、推播留言更新 |
| Eventual | 最終收斂、無順序保證 | 最低(本地) | 1 倍(標準單複本) | ✅ 支援 | 計數器、物聯網遙測、快取推薦 |
🧒 ELI13 比喻:五種一致性就像 5 種「考試成績公布方式」:
- Strong:校長必須等全國所有考場的試卷全部改完、電話連線全部確認OK,才准許任何人查成績,任何人查都是最新、最正確,但等得最痛苦。
- Bounded Staleness:校長規定「各班成績公佈最多只能比總部慢 5 分鐘或 3 題的差距」,超過這個時間就先不准看,等追上才開放。
- Session:你自己交卷後,老師立刻把成績單塞給你(你看得到自己的最新分數);但隔壁同學走過來問你分數時,系統可能還沒同步給他。你自己永遠不會感到錯亂!
- Consistent Prefix:老師依序公布第 1、2、3 名。可能目前只公布到前兩名,但絕對不會先念出第 3 名再念第 1 名。
- Eventual:園遊會趣味競賽,大家各玩各的,等晚上活動結束熄燈後,大家聚在一起核算,分數總會算清楚的。
在 Cosmos DB 中,資料不會自動無限制地神奇擴展。其無限擴展的核心引擎建立在 水平分割(Horizontal Partitioning) 機制之上:
┌──────────────────────────────────────────────────────────────────┐
│ Titan 寫入:{ playerId: "TW_1082", score: 9850, item: "劍" } │
└──────────────────────────────────────────────────────────────────┘
▼
┌──────────────────────────────────────────────────────────────────┐
│ Cosmos DB 路由:Hash(Partition Key: "TW_1082") ➔ 導向實體分割區 │
│ • 依雜湊範圍決定落點,確保跨分割區的資料儲存與流量均勻分攤 │
└──────────────────────────────────────────────────────────────────┘
▼ ▼
┌───────────────────────────────┐ ┌───────────────────────────────┐
│ Physical Partition 1 (實體區) │ │ Physical Partition 2 (實體區) │
│ --------------------------- │ │ --------------------------- │
│ Logical Partition: TW_1082 │ │ Logical Partition: JP_4401 │
│ • 邏輯分割區上限: 20 GB │ │ • 邏輯分割區上限: 20 GB │
│ • 包含該玩家所有歷史紀錄 │ │ • 包含該玩家所有歷史紀錄 │
│ --------------------------- │ │ --------------------------- │
│ 實體分割區上限: 10,000 RU/s │ │ 實體分割區上限: 10,000 RU/s │
└───────────────────────────────┘ └───────────────────────────────┘
partitionKey 值的項目集合。tenantType = "enterprise" 或 gender = "M"),單一分割區迅速超過 20 GB,Cosmos DB 將直接回傳錯誤拒絕寫入!userId、deviceId、orderId)。creationDate 作為鍵,今天所有寫入全衝向同一個實體分區,即便買了 100,000 RU 也會因為單一分區達 10,000 RU 上限而被 HTTP 429(Too Many Requests)限流!WHERE c.playerId = 'TW_1082')。路由直達單一實體分區,消耗極少 RU。在 Cosmos DB 中,計費與容量不再綁定 VM 的 CPU 或記憶體,而是標準化為 Request Unit(RU,要求單位):
🧒 ELI13 比喻:RU 就像去湯姆熊遊樂場的「代幣」:投 1 枚代幣可以玩一次打地鼠(讀取 1 KB 檔案);玩豪華賽車模擬器一次要吃 10 枚代幣(寫入一份資料)。佈建模式就像包下整間遊樂場一整年;無伺服器模式則是走進去投多少算多少,不玩就不花錢。
身為雲端架構師,絕不能只看功能而忽略資安與爆炸半徑控制:
_ts(或自訂數值屬性)判定,晚發生者覆蓋早發生者。對於具備 AWS 背景的架構師而言,將 Cosmos DB 直接等同於 DynamoDB 容易忽略兩者在設計抽象上的深層差異:
┌──────────────────────────────────────────────────────────────────┐
│ 無伺服器事件驅動資料庫架構對比 (Serverless NoSQL) │
├────────────────────────────────┬─────────────────────────────────┤
│ AWS 架構 (cxcxc-io diagram_05) │ Azure 對應原生現代架構 │
├────────────────────────────────┼─────────────────────────────────┤
│ API Gateway (REST API 端點) │ Azure API Management (APIM 入口)│
│ │ │ │ │
│ ▼ │ ▼ │
│ AWS Lambda (事件處理運算) │ Azure Functions (無伺服器函式) │
│ │ │ │ │
│ ▼ (Gateway Endpoint) │ ▼ (Private Endpoint) │
│ Amazon DynamoDB (NoSQL 資料表) │ Azure Cosmos DB (多模型 NoSQL) │
│ • Hash / Sort Key 路由 │ • Partition Key 邏輯分割路由 │
│ • Global Tables 雙區多寫 │ • Multi-region Writes 多區多寫│
└────────────────────────────────┴─────────────────────────────────┘
💡 來源:改編自 cxcxc-io diagram_05(AWS Serverless 架構圖),已對照 Azure 原生服務調整。展示現代無伺服器架構中,入口流量、無伺服器計算與 NoSQL 資料庫的完整端到端拓撲。
| 評估維度 | Azure Cosmos DB | AWS DynamoDB | 架構架構師思考重點 |
|---|---|---|---|
| 資料模型與 API | 多模型(NoSQL Document、MongoDB、Cassandra、Gremlin、Table) | 鍵值(Key-Value)與文件(Document)模型 | Cosmos DB 支援多種業界開源協定;DynamoDB 專注於專屬 API |
| 主鍵結構設計 | 邏輯分割區鍵(Partition Key)+ 唯一項目識別碼(id) |
單一 Partition Key 或 複合鍵(Partition Key + Sort Key) | DynamoDB 常用 Sort Key 做範圍查詢;Cosmos DB 依靠 Partition Key + SQL 查詢 |
| 全域多區拓撲 | 原生多區域讀取 / 多區域主動寫入(Multi-region Writes) | DynamoDB Global Tables(主動-主動 Active-Active 跨區複寫) | 兩者皆提供跨大洲就近讀寫,但 Cosmos DB 整合於單一帳戶設定介面 |
| 資料一致性模型 | 五種層級光譜(Strong、Bounded、Session、Prefix、Eventual) | 兩種模式(Eventually Consistent 與 Strongly Consistent 讀取) | Cosmos DB 提供更彈性的微調;DynamoDB 強一致性需花費雙倍 RCU |
| 容量與計費計量 | Request Unit(RU/s):佈建模式、自動調整(Autoscale)、無伺服器(Serverless) | Read/Write Capacity Units(RCU / WCU)或 On-Demand 模式 | 計費邏輯相似,但 1 RU 以 1 KB 點讀取為基準,1 RCU 以 4 KB 強讀取為基準 |
| 私密網路邊界 | Virtual Network Private Endpoint / Service Endpoints | VPC Gateway Endpoint(免費)/ Interface Endpoint(PrivateLink) | 雙雲皆支援不出公網的安全通道,落實零信任架構 |
| 多區衝突解決 | Last-Write-Wins (LWW) 或 自訂 JavaScript 預存程序 | Last-Writer-Wins(基於時間戳記覆蓋) | Cosmos DB 具備自訂邏輯合併衝突項目的靈活性 |
Titan 科技備受矚目的跨平台大型多人連線遊戲「星際遠征(Starry Expedition)」即將在全球三大洲(東亞、西歐、美東)展開不刪檔封測。
前端架構師與首席資料工程師來到架構審查會,提出資料庫選型痛點:
「架構師,我們這款遊戲的玩家檔案包含自訂外觀、成就徽章、即時裝備數值與社群社交樹。這些資料每天配合營運活動增加欄位(JSON 彈性綱要),且玩家跨國連線時,本地讀寫必須在 10 毫秒內回應。最重要的是,玩家在商城購買裝備後,點回背包介面必須立刻看到剛買到的道具(讀己之寫入);但其他大洲的好友看他的成就展示,稍微延遲個幾秒完全能接受。CTO 特別交代:維運團隊人手吃緊,嚴禁自己組裝 VM 叢集來搞跨洲資料同步!」
身為 Chief Cloud Architect,哪一個 Azure 資料庫架構方案最符合 Titan 科技的需求?
playerId 作為 Partition Key,啟用多區域分散,並將一致性層級設定為預設的 Session。✅ 正解:B。
playerId 作為 Partition Key」➔ 確保請求均勻分散,消除單點熱點並避免單一分區觸碰 20 GB 上限;❌ A 的陷阱(Azure SQL Managed Instance):
ALTER TABLE 鎖表停機風險。此外,關聯式資料庫主要設計於單一主節點寫入架構,跨洲多寫入會導致延遲暴增,不符合全球分散式彈性文件的業務特徵。❌ C 的陷阱(Azure Table Storage):
❌ D 的陷阱(單一 Region VM 自建 MongoDB 叢集):
本節精選題目全部依據官方考綱情境改寫為 Titan 科技實戰背景,絕不複製受版權保護之題庫原文。所有技術答案與干擾項排除邏輯,均經 Microsoft Learn 現行官方文件逐字交叉驗證。
Titan 科技正在規劃一項全球性的行動物聯網(IoT)車聯網解決方案。車載設備會以非固定欄位的 JSON 格式上傳遙測數據,且架構必須能夠同時在東亞、美東與北歐等多個 Azure 區域並行新增資料(Concurrent writes),並提供個位數毫秒的延遲。請問應推薦哪一項 Azure 服務?
答案:B。
關於 Azure Cosmos DB 的雲端服務模型分類與維運責任,下列哪一項敘述是正確的?
答案:B。
Titan 科技正在整理雲端數據架構的服務目錄,架構師需要將各項 Azure 數據服務與其最核心的架構能力進行精確配對:
請問上述 1~3 應分別對應哪一組 Azure 服務?
答案:A。
⚠️ 來源說明:本題改寫自 2020 年 gratisexam AZ-900 題庫 Q56,屬歷史題庫層,已針對現行考綱與 Microsoft Learn 進行服務邊界校驗,剔除過期描述。
Titan 科技的軟體開發團隊需要一套具備 Git 存放庫管理、版本控制與分支合併審查的受控工具。部分實習工程師提議使用 Azure Cosmos DB 來儲存 Git 檔案。請問架構師應如何糾正並建議正確的 Azure 服務?
答案:B。