云存儲與數據庫服務
數據是數字時代的新石油,而存儲與數據庫服務就是保存和提煉這些石油的“油庫與煉油廠”。阿里云提供了從對象、塊、文件存儲到關系型、NoSQL、數據倉庫的全方位數據服務。本章將幫你構建一套清晰的數據存儲選型框架,并掌握核心服務的使用。
5.1 對象存儲(OSS):海量非結構化數據的家
對象存儲(OSS, Object Storage Service) 是一種海量、安全、高可靠、低成本的云存儲服務,適合存放任意類型的非結構化數據,如圖片、視頻、文檔、備份、日志文件等。
核心概念:
- 存儲空間(Bucket):文件的命名空間,相當于頂層文件夾。名字全局唯一。
- 對象(Object):OSS存儲的基本單元,即一個個文件。由Key(文件名)、Data(數據本身)和MetaData(元信息)組成。
- 地域(Region):Bucket創建時需選擇地域,數據默認存儲在該地域。
- 訪問域名(Endpoint):訪問Bucket的網絡地址。
核心特性與適用場景:
- 無限容量與高持久性:設計耐久性高達99.9999999999%(12個9),無需擔心數據丟失。適用于備份歸檔、靜態資源存儲。
- 高并發與帶寬:支持海量客戶端同時讀寫,無需擔心帶寬瓶頸。適用于用戶上傳內容(UGC)、圖片視頻分享網站。
- 低成本分級存儲:提供標準、低頻訪問(IA)、歸檔、冷歸檔四種存儲類型,價格逐級遞減,訪問速度也逐級變慢。可根據數據訪問頻率選擇,優化成本。
- 標準:熱數據,頻繁訪問。
- 低頻IA:數據較少訪問,但需要實時讀取。
- 歸檔/冷歸檔:冷數據,基本不訪問,讀取需要先解凍(耗時幾分鐘到小時級),適合合規性存儲、長期備份。
OSS的核心價值在于解耦。將應用中的靜態資源(JS/CSS/圖片)分離到OSS,并通過CDN加速,能極大減輕Web/App服務器的負載,提升全球訪問速度,是現代化應用架構的標配。
5.2 塊存儲與文件存儲:為ECS提供持久化存儲
塊存儲和文件存儲為計算服務提供塊級和文件級的持久化存儲。
-
塊存儲(Block Storage):
- 是什么:一種裸磁盤空間,需要掛載到ECS實例后,由實例的操作系統進行分區、格式化(如ext4, NTFS)后才能使用。
- 特點:低延遲、高性能、可隨機讀寫。一塊云盤只能掛載到同一可用區的一臺ECS實例上。
- 類型:
- ESSD:基于NVMe SSD,性能極強(最高100萬IOPS),適用于核心業務、高性能數據庫。
- SSD云盤:高性能SSD盤,性價比高,適用于一般業務系統。
- 高效云盤:基于SATA HDD,適合中小型數據庫、開發測試環境。
- 用途:為ECS實例提供系統盤和數據盤,存放需要直接讀寫磁盤塊的應用,如數據庫。
-
文件存儲(NAS, Network Attached Storage):
- 是什么:一種可共享的、支持多種協議(NFS/SMB)的文件存儲服務。像一個共享網絡文件夾。
- 特點:多個ECS實例(甚至跨可用區)可以同時讀寫同一份文件。容量彈性伸縮,無需預置。
- 用途:內容管理、共享工作目錄、日志共享等需要多實例共享訪問同一文件集的場景。例如,Web集群共享用戶上傳目錄,容器集群掛載共享配置文件。
特性 | 塊存儲 (云盤) | 文件存儲 (NAS) |
---|---|---|
訪問協議 | 塊設備 (SATA, SCSI, NVMe) | 文件協議 (NFS, SMB) |
連接性 | 單ECS實例(同可用區) | 多ECS實例/容器(同VPC) |
典型用例 | 數據庫、操作系統 | 共享目錄、CI/CD共享、企業文件共享 |
5.3 數據庫選型指南:關系型 vs NoSQL vs 數據倉庫
數據庫是應用的核心,選型失誤將帶來巨大的后期改造成本。以下是三大類數據庫的選型框架:
-
關系型數據庫 (RDS):
- 數據模型:基于表格,結構固定,遵循Schema。
- 查詢語言:SQL。
- 優勢:事務ACID特性(原子性、一致性、隔離性、持久性)、強一致性、強大的聯表查詢。
- 場景:需要強一致性事務的核心業務系統,如訂單、交易、用戶賬戶管理系統。
-
NoSQL 數據庫:
- 數據模型:非表格,結構靈活。
- 查詢語言:非SQL,各有自己的API。
- 優勢:高性能、高擴展性、靈活的數據模型。
- 分類與場景:
- 鍵值存儲 (Key-Value):如 Redis。緩存、會話存儲、排行榜。
- 文檔存儲 (Document):如 MongoDB。內容管理系統(CMS)、產品目錄、用戶配置文件。
- 列式存儲 (Wide-Column):如 HBase。物聯網(IoT)、時序數據。
- 搜索存儲 (Search):如 Elasticsearch。日志分析、全文搜索。
-
數據倉庫 (Data Warehouse):
- 代表:MaxCompute, AnalyticDB (ADB)。
- 特點:專為復雜分析查詢(OLAP)設計,海量數據(PB級)處理能力。
- 場景:商業智能(BI)報表、數據分析和挖掘。
現代應用往往是多模數據庫(Multi-Model) 架構。不要試圖用一個數據庫解決所有問題。例如,核心交易用RDS,緩存用Redis,全文檢索用Elasticsearch,海量分析用MaxCompute。
5.4 云原生數據庫:RDS (MySQL) 核心功能
阿里云關系型數據庫服務(RDS)是一種穩定可靠、可彈性伸縮的在線數據庫服務。它免去了數據庫安裝、硬件投入、故障恢復等復雜操作。
以最常用的RDS MySQL為例,其核心優勢遠超一臺自建MySQLECS實例:
- 高可用性:默認提供主備架構(一主一備,跨可用區部署),自動故障切換,業務無感知。
- 讀寫分離:只需一鍵開啟,即可自動創建一個或多個只讀實例,通過一個獨享的讀寫分離地址,自動將寫請求發往主實例,讀請求發往只讀實例,輕松應對高并發讀場景。
- 自動備份:支持數據備份和日志備份,可設置備份策略,并支持按時間點恢復(恢復到任意秒級)。
- 性能優化:提供參數優化建議、SQL審計和優化、慢查詢分析等功能。
- 白屏化管理:監控告警、賬號管理、數據庫升降配、版本升級等操作均可在線完成,極大簡化DBA工作。
5.5 NoSQL之王:Redis版與MongoDB版的應用場景
阿里云提供了完全兼容開源協議的托管式NoSQL服務,讓你無需管理數據庫服務器。
-
Tair/Redis版:
- 場景:緩存(降低數據庫壓力,提升響應速度)、會話存儲(分布式Session)、排行榜、秒殺。
- 阿里云增強:提供持久內存機型(性價比極高)、集群版(海量數據與高性能)、讀寫分離版(超高讀性能)。
-
MongoDB版:
- 場景:內容管理系統、游戲用戶檔案、物聯網(存儲設備狀態信息)。
- 阿里云增強:提供三節點副本集(默認高可用)和分片集群(水平擴展)架構。
實戰演練:構建一個讀寫分離的Web應用(ECS + RDS + OSS)
讓我們綜合本章知識,構建一個比第一章更健壯、性能更高的Web應用。
目標:
- Web服務器(ECS)無狀態,便于水平擴展。
- 用戶上傳的圖片、附件等靜態資源存入OSS,減輕服務器負載。
- 數據庫使用RDS,并配置讀寫分離,提升讀性能。
- 通過SLB對外提供服務,實現高可用。
步驟一:創建RDS MySQL實例并初始化
- 在RDS控制臺創建MySQL實例。
- 網絡類型:選擇之前創建的
prod-vpc
和data-vswitch-zonec
(數據層子網)。 - 系列:選擇高可用版(一主一備)。
- 設置數據庫管理員賬號和密碼。
- 創建成功后,在“數據庫連接”中申請內外網連接地址(內網地址用于ECS訪問,外網地址用于本地臨時管理)。
- 通過DMS或MySQL客戶端登錄,創建一個名為
web_db
的數據庫。
步驟二:創建OSS Bucket
- 在OSS控制臺創建一個Bucket,例如
web-app-static-<你的賬號ID>
。 - 地域:選擇與ECS/RDS相同的地域。
- 存儲類型:標準。
- 讀寫權限:私有(推薦,用戶通過API簽名或臨時Token訪問,更安全)。
步驟三:部署并配置Web應用
- 創建一臺ECS實例,部署在
web-vswitch-zonea
中。 - 在Web應用(如WordPress)的配置文件中(如
wp-config.php
),修改數據庫連接設置:- 數據庫主機:填寫RDS實例的內網地址(至關重要!通過內網訪問,延遲低且免費)。
- 使用之前創建的數據庫名、用戶名和密碼。
- 安裝并配置OSS的WordPress插件,將媒體庫的上傳目標設置為你的OSS Bucket。并在插件中配置具有OSS訪問權限的RAM角色的AccessKey(參考第2章實戰)。
步驟四:配置RDS讀寫分離
- 在RDS控制臺,目標實例的“數據庫代理”中,開通數據庫代理功能。
- 創建一個讀寫分離地址。該地址會自動實現讀寫分離。
- 在Web應用中,配置兩個數據庫連接:
- 寫連接:指向RDS主實例的內網地址(用于寫操作)。
- 讀連接:指向RDS的讀寫分離地址(用于讀操作)。
- (許多現代框架,如Laravel,已支持在配置中直接定義讀/寫連接。)
步驟五:通過SLB訪問
- 創建一個應用型負載均衡(ALB),監聽80端口,并將上述ECS實例添加到后端服務器組。
- 將域名解析到ALB的公網IP上。
- 現在,用戶訪問網站時,圖片等靜態資源從OSS高速下載,數據庫讀請求被自動分發到只讀實例,寫請求發往主實例,整個系統的性能和可用性得到了極大提升。
通過本章,不僅了解了各種存儲和數據庫服務,更掌握了如何將它們有機地組合起來,構建一個專業、健壯的應用架構。