云数据库

本章内容要点:

  • 6.1 云数据库概述
  • 6.2 云数据库产品
  • 6.3 云数据库系统架构
  • 6.4 Amazon AWS 和云数据库
  • 6.5 微软云数据库 SQL Azure
  • 6.6 云数据库实践

6.1 云数据库概述

6.1.1 云计算是云数据库兴起的基础

云计算通过整合、管理、调配分布在网络各处的计算资源,并以统一的界面通过互联网同时向大量用户提供服务。

云计算具有如下特性:

  • 超大规模计算
  • 虚拟化
  • 高可靠性和安全性
  • 通用性
  • 动态扩展性
  • 按需服务
  • 降低成本

代表性应用场景包括:Google 个人云服务、企业应用实例 Animoto、Amazon 云服务等。

(原图:云计算示意图)

6.1.2 云数据库概念

云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构方法,它极大地增强了数据库的存储能力,消除了人员、硬件、软件的重复配置,让软、硬件升级变得更加容易。云数据库具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。

6.1.3 云数据库的特性

云数据库具有以下特性:

  1. 动态可扩展
  2. 高可用性
  3. 较低的使用代价
  4. 易用性
  5. 高性能
  6. 免维护
  7. 安全

表 6-2 以腾讯云数据库为例,从多个维度对比了云数据库与自建数据库。

表 6-2 腾讯云数据库和自建数据库的比较

比较维度 自建数据库 腾讯云数据库
数据安全 开发者自行解决,成本高 15 种类型备份数据,保证数据安全
服务可用性 需自行保障 99.9% 高可靠
数据备份 需自行搭建备份方案,成本较高 0 花费,系统自动多时间点数据备份
维护成本 需专职 DBA 维护 0 成本,专业团队 7×24 小时帮助维护
实例扩容 硬件采购、部署周期长 一键式直接扩容,安全可靠
资源利用率 资源利用率低 按需申请,资源利用率高达 99.9%
技术支持 自行解决 专业团队一对一指导、QQ 远程协助开发

6.1.4 云数据库是个性化数据存储需求的理想选择

企业类型不同,对存储的需求也千差万别,而云数据库可以很好地满足不同企业的个性化存储需求:

  • 首先,云数据库可以满足大企业的海量数据存储需求;
  • 其次,云数据库可以满足中小企业的低成本数据存储需求;
  • 另外,云数据库可以满足企业动态变化的数据存储需求。

到底选择自建数据库还是云数据库,取决于企业自身的具体需求:

  • 对一些大型企业,目前通常采用自建数据库;
  • 对财力有限的中小企业而言,IT 预算比较有限,云数据库这种前期零投入、后期免维护的数据库服务,可以很好地满足它们的需求。

6.1.5 云数据库与其他数据库的关系

从数据模型的角度来说,云数据库并非一种全新的数据库技术,而只是以服务的方式提供数据库功能:

  • 云数据库并没有专属于自己的数据模型。它所采用的数据模型,可以是关系数据库所使用的关系模型(如微软 SQL Azure、阿里云 RDS),也可以是 NoSQL 数据库所使用的非关系模型(如 Amazon Dynamo 采用"键/值"存储)。
  • 同一个公司也可能提供采用不同数据模型的多种云数据库服务。
  • 许多公司在开发云数据库时,后端数据库都直接使用现有的各种关系数据库或 NoSQL 数据库产品。

6.2 云数据库产品

6.2.1 云数据库厂商概述

表 6-3 列出了市场上代表性的云数据库厂商及其产品。

表 6-3 云数据库产品

企业 产品
Amazon Dynamo、SimpleDB、RDS
Google Google Cloud SQL
Microsoft Microsoft SQL Azure
Oracle Oracle Cloud
Yahoo PNUDS
Vertica Analytic Database v3.0 for the Cloud
EnterpriseDB Postgres Plus in the Cloud
阿里 阿里云 RDS
百度 百度云数据库
腾讯 腾讯云数据库

6.2.2 Amazon 的云数据库产品

Amazon 是云数据库市场的先行者。除了著名的 S3 存储服务和 EC2 计算服务之外,Amazon 还提供了多种基于云的数据库服务:

  • Amazon RDS:云中的关系数据库;
  • Amazon SimpleDB:云中的键值数据库;
  • Amazon DynamoDB:云中的 NoSQL 数据库;
  • Amazon Redshift:云中的数据仓库;
  • Amazon ElastiCache:云中的分布式内存缓存。

6.2.3 Google 的云数据库产品

Google Cloud SQL 是谷歌公司推出的基于 MySQL 的云数据库:

  • 使用 Cloud SQL,所有事务都在云中由谷歌管理,用户不需要配置或排查错误;
  • 谷歌提供导入/导出服务,方便用户将数据库带进或带出云;
  • 谷歌使用用户熟悉的 MySQL,带有 JDBC 支持(适用于基于 Java 的 App Engine 应用)和 DB-API 支持(适用于基于 Python 的 App Engine 应用),多数应用程序不需过多调试即可运行,数据格式对大多数开发者和管理员来说都很熟悉;
  • Cloud SQL 与 Google App Engine 无缝集成。

6.2.4 Microsoft 的云数据库产品

SQL Azure 具有以下特性:

  • 属于关系型数据库:支持使用 T-SQL(Transact Structured Query Language)来管理、创建和操作云数据库;
  • 支持存储过程:其数据类型、存储过程与传统 SQL Server 高度相似,应用可在本地开发后部署到云平台;
  • 支持大量数据类型:包含几乎所有典型的 SQL Server 2008 数据类型;
  • 支持云中的事务:支持局部事务,但不支持分布式事务。

6.2.5 其他云数据库产品

除上述产品外,Oracle、Yahoo、Vertica、EnterpriseDB 以及国内的阿里、百度、腾讯等厂商均推出了各自的云数据库产品(详见表 6-3)。

6.3 云数据库系统架构

本节以 UMP(Unified MySQL Platform)系统为例,介绍云数据库的系统架构。UMP 是一个低成本和高性能的 MySQL 云数据库方案。

6.3.1 UMP 系统概述

UMP 系统架构设计遵循以下原则:

  • 保持单一的系统对外入口,并为系统内部维护单一的资源池;
  • 消除单点故障,保证服务的高可用性;
  • 保证系统具有良好的可伸缩性,能够动态增加、删减计算与存储节点;
  • 保证分配给用户的资源弹性可伸缩,资源之间相互隔离,确保应用和数据安全。

6.3.2 UMP 系统架构

UMP 系统中的角色包括:

  • Controller 服务器
  • Proxy 服务器
  • Agent 服务器
  • Web 控制台
  • 日志分析服务器
  • 信息统计服务器
  • 愚公系统

依赖的开源组件包括:

  • Mnesia
  • LVS
  • RabbitMQ
  • ZooKeeper

(原图:UMP 系统架构图)

1. Mnesia

Mnesia 是一个分布式数据库管理系统:

  • 支持事务,支持透明的数据分片,利用两阶段锁实现分布式事务,可以线性扩展到至少 50 个节点;
  • 数据库模式(schema)可在运行时动态重配置,表能被迁移或复制到多个节点以改进容错性;
  • 这些特性使其在开发云数据库时被用来提供分布式数据库服务。

2. RabbitMQ

RabbitMQ 是一个工业级的消息队列产品(功能类似于 IBM WebSphere MQ),作为消息传输中间件实现可靠的消息传送:

  • UMP 集群中各个节点之间的通信不需要建立专门连接,都通过读写队列消息来实现。

3. ZooKeeper

ZooKeeper 是高效、可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。

在 UMP 系统中,ZooKeeper 主要发挥三个作用:

  1. 作为全局的配置服务器;
  2. 提供分布式锁(选出一个集群的"总管");
  3. 监控所有 MySQL 实例。

4. LVS

LVS(Linux Virtual Server) 即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。UMP 借助 LVS 实现集群内部的负载均衡:

  • LVS 集群采用 IP 负载均衡技术和基于内容请求分发技术;
  • 调度器是 LVS 集群系统的唯一入口点,具有很好的吞吐率,将请求均衡地转移到不同服务器上执行,并自动屏蔽服务器故障,从而将一组服务器构成一个高性能、高可用的虚拟服务器;
  • 整个服务器集群的结构对客户透明,无需修改客户端和服务器端的程序。

5. Controller 服务器

Controller 服务器向 UMP 集群提供各种管理服务,实现集群成员管理、元数据存储、MySQL 实例管理、故障恢复、备份、迁移、扩容等功能:

  • Controller 上运行一组 Mnesia 分布式数据库服务,存储各种系统元数据,主要包括集群成员、用户配置和状态信息,以及用户名到后端 MySQL 实例地址的映射关系(即"路由表");
  • 其他服务器组件需要获取用户数据时,可向 Controller 发送请求;
  • 为避免单点故障,系统部署了多台 Controller,由 ZooKeeper 的分布式锁功能选出一个"总管",负责各种系统任务的调度和监控。

6. Web 控制台

Web 控制台向用户提供系统管理界面。

7. Proxy 服务器

Proxy 服务器向用户提供访问 MySQL 数据库的服务,完全实现了 MySQL 协议:

  • 用户可以使用已有 MySQL 客户端连接到 Proxy;
  • Proxy 通过用户名获取用户的认证信息、资源配额限制(如 QPS、IOPS、最大连接数等)以及后台 MySQL 实例地址;
  • 用户的 SQL 查询请求会被转发到相应的 MySQL 实例;
  • 除数据路由外,Proxy 还实现了屏蔽 MySQL 实例故障、读写分离、分库分表、资源隔离、记录用户访问日志等重要功能。

8. Agent 服务器

Agent 服务器部署在运行 MySQL 进程的机器上,用来管理每台物理机上的 MySQL 实例:

  • 执行主从切换、创建、删除、备份、迁移等操作;
  • 收集和分析 MySQL 进程的统计信息、慢查询日志(Slow Query Log)和 binlog。

9. 日志分析服务器

日志分析服务器存储和分析 Proxy 服务器传入的用户访问日志,并支持实时查询一段时间内的慢日志和统计报表。

10. 信息统计服务器

信息统计服务器定期将采集到的用户连接数、QPS 数值以及 MySQL 实例进程状态用 RRDtool 进行统计:

  • 可在 Web 界面上可视化展示统计结果;
  • 也可把统计结果作为今后实现弹性资源分配和自动化 MySQL 实例迁移的依据。

11. 愚公系统

愚公系统是一个全量复制结合 binlog 分析进行增量复制的工具,可实现在不停机情况下动态扩容、缩容和迁移。

6.3.3 UMP 系统功能

UMP 构建在一个大集群之上,通过多个组件协同作业,实现对用户透明的各种功能:容灾、读写分离、分库分表、资源管理、资源调度、资源隔离、数据安全。

1. 容灾

UMP 为每个用户创建两个 MySQL 实例:一个主库、一个从库,主从库状态由 ZooKeeper 维护。

主从切换过程:

  1. ZooKeeper 探测到主库故障,通知 Controller 服务器;
  2. Controller 启动主从切换,修改"路由表"(用户名到后端 MySQL 实例地址的映射关系);
  3. 将主库标记为不可用;
  4. 借助消息中间件 RabbitMQ 通知所有 Proxy 服务器修改用户名到后端 MySQL 实例地址的映射关系。

整个过程对用户透明。

宕机主库恢复后再次上线的过程:

  1. 主库恢复时,把从库的更新复制给自己;
  2. 当主库数据库状态快要达到与从库一致时,Controller 命令从库停止更新,进入不可写状态,禁止用户写入;
  3. 等主库更新到与从库完全一致时,Controller 发起主从切换,在路由表中把主库标记为可用;
  4. 通知 Proxy 将写操作切回主库,用户写操作继续执行,之后再把从库修改为可写状态。

2. 读写分离

UMP 充分利用主从库实现用户读写操作分离,实现负载均衡:

  • 该功能对用户完全透明;
  • 功能开启后,Proxy 对用户发起的 SQL 语句进行解析:写操作直接发送到主库,读操作被均衡地发送到主库和从库执行。

3. 分库分表

UMP 支持对用户透明的分库分表(shard / horizontal partition)。采用分库分表时,系统处理用户查询的过程如下:

  1. Proxy 解析用户 SQL 语句,提取重写和分发 SQL 所需信息;
  2. 对 SQL 语句进行重写,得到多个针对相应 MySQL 实例的子语句,并分发到对应 MySQL 实例执行;
  3. 接收各 MySQL 实例返回的执行结果,合并得到最终结果。

4. 资源管理

UMP 采用资源池机制管理数据库服务器上的 CPU、内存、磁盘等计算资源:

  • 所有计算资源放在资源池内统一分配,资源池是为 MySQL 实例分配资源的基本单位;
  • 集群中所有服务器根据机型、机房等因素被划分到多个资源池;
  • 对每个具体 MySQL 实例,管理员根据应用部署机房、所需计算资源等因素,指定主库和从库所在资源池;
  • 系统实例管理服务本着负载均衡原则,从资源池中选择负载较轻的服务器创建 MySQL 实例。

5. 资源调度

UMP 中有三种规格的用户:

用户类型 资源调度方式
数据量和流量较小的用户 多个小规模用户共享同一个 MySQL 实例
中等规模用户 每个用户独占一个 MySQL 实例
需要分库分表的用户 占有多个独立的 MySQL 实例

6. 资源隔离

表 6-4 UMP 采用的两种资源隔离方式

方法 应用场景 实现方式
用 Cgroup 限制 MySQL 进程资源 多个 MySQL 实例共享同一台物理机 对 MySQL 进程最大可使用的 CPU 使用率、内存和 IOPS 等进行限制
在 Proxy 服务器端限制 QPS 多个用户共享同一个 MySQL 实例 Controller 监测用户 MySQL 实例的资源消耗,若明显超出配额,则通知 Proxy 通过增加延迟的方式限制用户 QPS,以减少资源消耗

7. 数据安全

UMP 设计了多种机制保证数据安全:

  • SSL 数据库连接:SSL(Secure Sockets Layer)为网络通信提供安全及数据完整性,在传输层对网络连接加密。Proxy 实现了完整的 MySQL 客户端/服务器协议,可与客户端建立 SSL 数据库连接。
  • 数据访问 IP 白名单:只允许白名单内的 IP 地址访问,其他 IP 一律拒绝。
  • 记录用户操作日志:所有操作记录都被记录到日志分析服务器,通过检查操作记录可发现隐藏的安全漏洞。
  • SQL 拦截:Proxy 可根据要求拦截多种类型的 SQL 语句,例如全表扫描语句 select *。

6.4 Amazon AWS 和云数据库

6.4.1 Amazon 和云计算的渊源

2016 年 3 月 14 日,亚马逊网络服务(AWS)迎来十周岁。AWS 的业务规模相当于紧随其后的 4 大竞争对手的总和:

  • 亚马逊在全球拥有 12 个区域性数据中心;
  • Amazon RDS 拥有 10 万多个活跃用户;
  • Amazon 数据库 Aurora 是 AWS 历史上增长最快的服务;
  • AWS 提供的多个亚马逊数据库都在与 Oracle 激烈竞争。

亚马逊的云服务多达几十种,涵盖 IaaS、PaaS、SaaS 三层:

服务层次 英文全称 简称
基础设施即服务 Infrastructure as a Service IaaS
平台即服务 Platform as a Service PaaS
软件即服务 Software as a Service SaaS

(原图:亚马逊云服务层次示意图,含 Server、Storage、Visualization、Infrastructure、Platform、Application 等)

6.4.2 Amazon AWS

(原图:Amazon AWS 架构图)

1. AWS Global Infrastructure(AWS 全局基础设施)

在全局基础设施中有 3 个重要概念:

概念 说明
Region(区域) 每个 Region 相互独立,自成一套云服务体系,分布在全球各地。目前全球有 10 余个 Region(如北京)
Availability Zone(可用区) 每个 Region 由数个可用区组成,每个可用区可看作一个数据中心,相互之间通过光纤连接
Edge Locations(边缘节点) 全球有 50 多个边缘节点,构成内容分发网络(CDN,Content Distribution Network),降低内容分发延迟,保证终端用户获取资源的速度

2. Networking(网络)

AWS 提供的网络服务主要有:

  • Direct Connect:支持企业自身数据中心直接与 AWS 数据中心直连,充分利用企业现有资源;
  • VPN Connection:通过 VPN 连接 AWS,保证数据安全性;
  • Virtual Private Cloud(VPC):私有云,从 AWS 云资源中分一块给用户专用,进一步提高安全性;
  • Route 53:亚马逊提供的高可用、可伸缩的云域名解析系统,高效地将用户请求连接到 AWS 中运行的基础设施(如 EC2 实例、ELB 负载均衡器、S3 存储)。

3. Compute(计算)

亚马逊的计算核心包括众多服务:

  • EC2(Elastic Compute Cloud):亚马逊的虚拟机,支持 Windows 和 Linux 多个版本,支持 API 创建和销毁,有多种型号可供选择,按需使用;具有自动扩展功能(约 5 分钟即可新建一台虚拟机),有效解决应用程序性能问题;
  • ELB(Elastic Load Balancing):亚马逊提供的负载均衡器,可与 EC2 无缝配合,横跨多个可用区,自动检查实例健康状况、剔除有问题实例,保证应用程序高可用。

4. Storage(存储)

  • S3(Simple Storage Service):亚马逊对外提供的对象存储服务,不限容量,单个对象大小可达 5 TB,可实现高达 99.999999999%(11 个 9)的可用性;
  • EBS(Elastic Block Storage):专为 EC2 虚拟机设计的弹性块存储服务,可为 EC2 创建卷(volumes)。EBS 相当于分布式块设备,可直接挂载在 EC2 实例上,用于替代 EC2 本地存储,增强可靠性;
  • Glacier:主要用于存储较少访问的存档文件和备份文件,价格低廉、容量大、安全性高。

5. Database(数据库)

亚马逊提供关系型数据库、NoSQL 数据库以及缓存等数据库服务:

  • SimpleDB:基于云的键/值数据存储服务;
  • DynamoDB:亚马逊自主研发的 NoSQL 数据库,性能高、容错性强、支持分布式;
  • RDS(Relational Database Service):关系型数据库服务,支持 MySQL、SQL Server、Oracle 等;
  • Amazon ElastiCache:数据库缓存服务。

6. Application Service(应用程序服务)

  • Cloud Search:弹性搜索引擎,可用于企业级搜索;
  • Amazon SQS:队列服务,存储和分发消息;
  • Simple Workflow:工作流框架;
  • CloudFront:世界范围的内容分发网络(CDN);
  • EMR(Elastic MapReduce):一个 Hadoop 框架实例,可用于大数据处理。

7. Deployment & Admin(部署和管理)

  • Elastic Beanstalk:一键式创建各种开发环境和运行时;
  • CloudFormation:采用 JSON 格式模板文件创建和管理一系列亚马逊云资源;
  • OpsWorks:允许将应用程序部署模块化,可实现对数据库、运行时、服务器软件等的自动化设置和安装;
  • IAM(Identity & Access Management):认证和访问管理服务,提供立体化安全策略,保证用户在云上的资源安全。

总体而言,Amazon AWS 产品可分为几个部分:

  • 计算类:弹性计算云 EC2(提供云中的虚拟机)、弹性 MapReduce(将 Hadoop MapReduce 搬到云环境,大量 EC2 实例动态成为执行大规模 MapReduce 计算任务的工作机);
  • 存储类:弹性块存储 EBS、简单消息存储 SQS、Blob 对象存储 S3;
  • 数据库类:NoSQL 型数据库 SimpleDB 和 DynamoDB、关系数据库 RDS;
  • 工具支持:支持 Java、Ruby、Python、PHP、Windows/.NET 以及 Android、iOS 等多种开发语言,提供各语言 SDK、程序自动部署及各种管理工具;通过 CloudWatch 系统提供丰富的监控功能。

8. Amazon EC2 架构

相比传统虚拟机托管,EC2 最大的特点是允许用户根据需求动态调整运行实例的类型和数量,实现按需付费。EC2 平台主要包含:

  • EC2 实例(AMI)
  • 弹性块存储
  • 弹性负载均衡(自动缩放)

EC2 存储:

  • EC2 本地存储是实例自带的磁盘空间,但非持久化——实例所在节点出现故障时,相应磁盘空间会随之清空;
  • 为解决本地存储不可靠问题,EC2 推出 EBS:通过卷组织数据,每个 EBS 卷只能挂载到一个 EC2 实例;EBS 卷并不与实例绑定,而是与用户账号绑定。当 EC2 实例失效时,EBS 卷可自动解除与该实例的关联,从而挂载到新实例上。

表:Amazon S3 和 EBS 的区别

对比维度 EBS S3
服务对象 系统管理员/最终用户 系统管理员/最终用户
服务场景 作为虚拟机硬盘,在虚拟机看来就像本地硬盘;EC2 实例失效时 EBS 卷可自动解除关联并挂载到新实例 用户可通过 HTTP/REST API 存取文件;网站可将静态文件存放到 S3,通过 CDN 分发到不同区域以提升性能;可作为 EBS 卷的备份或快照
服务机制 块设备,可格式化为任何 OS 可识别的格式 对象存储,采用"桶—对象"二级结构,无需在其上建文件系统

在 EC2 中创建虚拟机实例时,会提示选择镜像(Images)类型:

  • S3-Hosted images:镜像需从 S3 存储拷贝到 EC2 实例本地存储,拷贝完成后启动实例;
  • EBS-backed images:虚拟机启动快得多,关闭虚拟机后数据仍保留在 EBS 中。

9. AWS 云管理平台

云平台负责根据客户需求(并发数、吞吐量、数据存储空间等)弹性分配资源,并回收不再使用的资源。

任何一个 SaaS 在提供服务时,云平台都通过 4 个阶段对服务进行资源分配及调整:

  1. 启动服务:当有客户进行服务操作时,云平台启动服务;
  2. 启动后监控服务需求情况;
  3. 当无人访问时,停止服务;
  4. 回收不被使用的资源。

一个典型的 Hadoop 作业执行时,AWS 具体操作流程如下:

  1. 消息平台发送服务启动命令给启动控制器,启动控制器首先将启动信息放入 SimpleDB 的缓冲区;
  2. 分配 EC2 计算资源,启动 Hadoop 等,将计算数据从 S3 导入 EC2,开始计算和分析;
  3. 监控控制器接收监控信息,对应用中所有资源和错误进行监控,更新 SimpleDB 缓冲区中的状态,并根据用户需要随时增减资源(计算节点和存储节点);
  4. 关闭控制器收到关闭消息后,停止 EC2、Hadoop 等资源,将运算结果放入 S3 或客户指定的存储目标,并发消息给结算控制器。

6.4.3 Amazon AWS 平台上的云数据库

时至今日,所有 AWS 数据库服务都已走上正轨,成为亚马逊数十亿美元业务的组成部分,包括:Amazon RDS、SimpleDB、DynamoDB、Redshift、ElastiCache。

1. SimpleDB

SimpleDB 是 AWS 上的第一个 NoSQL 数据库服务(键值数据库):

  • 记录由主键和多个属性组成;
  • 可对数据进行多副本存储,支持高并发读取;
  • 更新操作只能针对主副本进行,但可快速传播到其他副本,提供最终一致性;
  • 更适合存储小型、碎片化的零散数据。

SimpleDB 的缺陷如下:

  • 单表限制:SimpleDB 数据模型由域(domain)、项目(item)、属性(attribute)和值组成,每个域最多保存 10 GB 数据,需自行分区以免超限;
  • 性能不稳定:SimpleDB 以简单为设计目标,不需用户指定主键,也不需创建索引(默认对所有属性创建索引),但这种简洁性也带来副作用;
  • 一致性问题:采用最终一致性模型。

2. Amazon DynamoDB

DynamoDB 采纳了 SimpleDB 中成功的托管服务形式及灵活数据模型:

  • 记录由主键和多个属性组成,类似 SimpleDB 与 BigTable,比简单 KV 模型更易用;
  • 提供一致性读功能;
  • 限制系统功能,只能通过主键操作记录,不能批量更新,这使得系统可保证可伸缩性以及任何时候的高性能;
  • 全面使用 SSD 提升系统性能。

3. Amazon RDS

Amazon RDS 拥有超过 10 万活跃客户和多个数据库引擎可供选择,已成为云中运行关系数据库的新常态。支持的数据库引擎包括:

  • MySQL
  • Oracle
  • SQL Server
  • PostgreSQL
  • MariaDB
  • Aurora

借助 AWS 数据库迁移服务及其附带的模式转换工具,客户可选择从本地部署向 AWS 迁移相同数据库引擎。RDS 可以建立 3 TB 存储和 3 万 IOPS 的 DB 实例。

6.5 微软云数据库 SQL Azure

SQL Azure 是微软的云关系型数据库,后端存储又称为"云 SQL Server"。它构建在 SQL Server 之上,通过分布式技术提升传统关系数据库的可扩展性和容错能力。

6.5.1 逻辑模型

  • 一个逻辑数据库称为一个表格组;
  • 表格组中所有划分主键相同的行集合称为行组(row group);
  • 只支持同一个行组内的事务,同一个行组的数据逻辑上会分布到一台服务器,以此规避分布式事务;
  • 通过主备复制将数据复制到多个副本,保证高可用性。

(原图:云 SQL Server 数据模型)

6.5.2 物理模型

在物理层面:

  • 每个有主键的表格组根据划分主键列有序地分成多个数据分区,每个行组属于唯一分区;
  • 分区是 SQL Azure 复制、迁移、负载均衡的基本单位;
  • 每个分区包含多个副本(默认为 3),每个副本存储在一台物理 SQL Server 上;
  • SQL Azure 保证每个分区的多个副本分布到不同故障域;
  • 每个分区有一个副本为主副本(Primary),其他副本为从副本(Secondary);主副本处理所有查询和更新事务,并以操作日志形式将事务同步到从副本,从副本接收事务日志并应用到本地数据库;
  • 每台物理 SQL Server 数据库混合存放来自不同逻辑分区的主副本和从副本。

6.5.3 体系架构

SQL Azure 分为四个主要部分:

  1. SQL Server 实例:每个实例是一个运行着 SQL Server 的物理进程;每个物理数据库包含多个相互隔离的子数据库,子数据库就是一个分区,包含用户数据以及 schema 信息。
  2. 全局分区管理器:维护分区映射表信息。
  3. 协议网关:负责将用户的数据库连接请求转发到相应的主分区上。
  4. 分布式基础部件(Fabric):维护机器上下线状态,检测服务器故障,并为集群中各种角色执行选取主节点操作。

(原图:云 SQL Server 的分层架构)

SQL Azure 的体系架构中包含一个虚拟机簇,可根据工作负载变化动态增加或减少虚拟机数量:

  • 每台虚拟机(SQL Server VM)安装 SQL Server DBMS,以关系模型存储数据;
  • 通常一个数据库会被散存储到 3~5 台 SQL Server VM 上。

(原图:SQL Azure 的体系架构)

6.6 云数据库实践

本节以阿里云 RDS 为例介绍云数据库的具体使用。内容包括:RDS 简介、RDS 中的概念、购买和使用 RDS、将本地数据库迁移到云端 RDS。

6.6.1 阿里云 RDS 简介

RDS 是阿里云提供的关系型数据库服务,它将直接运行于物理服务器上的数据库实例租给用户,是专业管理的、高可靠的云端数据库服务:

  • RDS 由专业数据库管理团队维护,可为用户提供数据备份、数据恢复、扩展升级等管理功能;
  • 相比用户自建数据库,RDS 具有专业、高可靠、高性能、灵活易用等优点,帮助用户从费时费力的数据库管理任务中解放出来,聚焦核心业务;
  • RDS 具有安全稳定、数据可靠、自动备份、管理透明、性能卓越、灵活扩容等优点,可提供专业的数据库管理平台、专业的数据库优化建议以及完善的监控体系。

6.6.2 RDS 中的概念

1. RDS 实例和 RDS 数据库

RDS 实例是用户购买 RDS 服务的基本单位。在实例中:

  • 可以创建多个数据库;
  • 可使用常见数据库客户端连接、管理及使用数据;
  • 可通过 RDS 管理控制台或 OPEN API 创建、修改和删除数据库。

RDS 数据库是用户在一个实例下创建的逻辑单元:

  • 一个实例可创建多个数据库,实例内数据库命名唯一,所有数据库共享该实例下的资源(CPU、内存、磁盘容量等);
  • RDS 不支持使用标准 SQL 语句或客户端工具创建数据库,必须使用 OPEN API 或 RDS 管理控制台操作。

2. 地域和可用区

  • 地域指用户所购买 RDS 实例的服务器所处地理位置。RDS 曾支持杭州、青岛、北京、深圳、香港五个地域,服务品质完全相同;购买时指定,购买后暂不支持更改。
  • 可用区指在同一地域下,电力、网络隔离的物理区域。可用区之间内网互通,可用区内网络延时更小,不同可用区之间故障隔离。

RDS 可用区又分为:

  • 单可用区:RDS 实例主备节点位于同一可用区,可有效控制云产品间网络延迟;
  • 多可用区:RDS 实例主备节点位于不同可用区,当主节点所在可用区出现故障(如机房断电),RDS 主备切换后会切换到备节点所在可用区继续服务,轻松实现同城容灾。

3. 磁盘容量和连接数

  • 磁盘容量:购买 RDS 实例时选择的磁盘大小。实例所占用磁盘容量除存储表格数据外,还包括系统数据库、回滚日志、重做日志、索引等正常运行所需空间。
  • RDS 连接数:应用程序可同时连接到 RDS 实例的连接数量。任意连接到实例的连接均计入,与应用程序或网站支持的最大用户数无关。实例的最大连接数由用户购买时选择的内存大小决定。

6.6.3 购买和使用 RDS 数据库

进入阿里云首页 http://www.aliyun.com/,使用支付宝账户登录后,点击"云数据库 RDS"进入页面,点击"立即购买"即可获得 RDS 服务。新用户可免费体验半年。购买成功后可通过管理控制台使用 RDS。

主要操作流程:

  1. 购买 RDS 实例
  2. 管理 RDS
  3. 管理 RDS 实例
  4. 新建 RDS 账号
  5. 新建 RDS 数据库
  6. 连接 RDS 数据库
  7. 操作 RDS 数据

购买 RDS 实例:

  • 在 RDS 页面点击"立即购买"进入购买页面;
  • 若已购买阿里云服务器 ECS(Elastic Compute Service),选择与 ECS 相同的地域,ECS 与 RDS 之间可以内网方式访问。

管理 RDS:

购买成功后通过管理控制台查看已开通的产品与服务,点击云数据库 RDS 进入管理界面,可创建新实例、对已购买实例进行管理、续费和升级。

管理 RDS 实例:

点击已购买实例的"管理"操作,可查看该实例的基本信息。一个实例可创建多个数据库,实例内数据库命名唯一,所有数据库共享该实例下的资源。

新建 RDS 账号:

  • 点击"创建新账号",可创建新 RDS 账号,选定需绑定的数据库,输入账号密码和账号类型(读写权限)等信息;
  • MySQL 实例最多支持创建 50 个账号,SQL Server 实例最多支持创建 20 个账号;
  • 账号创建后可进行重置密码和修改操作。

新建 RDS 数据库:

  • 点击"数据库管理"可查看数据库基本信息,并可对数据库进行创建、删除(需至少保留 1 个数据库);
  • 点击"增加数据库",在弹出界面填写数据库相关信息提交即可;
  • RDS 数据库也可以是自建数据库迁移来的或是从其他 RDS 实例迁入的。

连接 RDS 数据库:

  • 如果在阿里云 ECS 上连接 RDS,选择内网模式;
  • 如果在其他服务器上连接 RDS,选择外网模式(控制台右上角切换);
  • 从本地远程访问云端 RDS 时使用外网模式,需要在"安全控制 → 白名单设置"填入本地机器的外网 IP,从而允许本地机器访问。

连接方式包括:

  • 使用客户端 MySQL-Front 访问;
  • 使用数据库管理工具 Navicat for MySQL;
  • 使用 MySQL 命令登录,命令格式:
mysql -u user_name -h yuqianli.mysql.rds.aliyuncs.com -P3306 -pxxxx
  • 使用阿里云控制台 iDB Cloud 访问(RDS 连接地址及端口无需再输入,只需输入数据库账号和密码即可登录)。

操作 RDS 数据:

连接 RDS 数据库后,对数据库的操作与直接操作本机 MySQL 数据库无异。iDB Cloud 提供三种创建表的方法:

  • 可视化界面
  • SQL 窗口
  • 命令窗口

6.6.4 将本地数据库迁移到云端 RDS 数据库

假设有一个本地应用程序使用本地 MySQL 数据库存取数据,现在希望把本地 MySQL 数据库全部迁移到远程阿里云 RDS,本地应用程序不迁移(仍运行在本地),但使用云端 RDS 进行数据存取管理。需要执行两步操作:

  1. 把本地数据库迁移到云端 RDS 数据库;
  2. 修改本地应用程序配置,使用 RDS 数据库服务。

把本地数据库迁移到云端 RDS 的步骤:

  1. 在本地数据库中创建一个迁移账号;
  2. 设置迁移账号权限;
  3. 确认本地数据库 MySQL 配置文件 my.cnf 是否正确;
  4. 登录本地数据库,通过命令查看是否为"ROW"模式;
  5. 在 RDS 管理控制台对应实例页面点击"将数据迁移至 RDS",在弹出页面填写待迁移本地数据库的连接地址、端口、账号、密码,即可完成从本地到云端的迁移。

本章小结

本章介绍了云数据库的相关知识。云数据库是在云计算兴起的大背景下发展起来的,在云端为用户提供数据服务,用户无需自己投资建设软硬件环境,只需向云数据库服务供应商购买数据库服务,就可以方便、快捷、低成本地实现数据存储和管理功能。

  • 云数据库具有动态可扩展、高可用性、低成本、易用性、大规模并行处理等突出优点,是大数据时代企业实现低成本大规模数据存储的理想选择;
  • 云数据库市场有很多代表性产品可供选择:Amazon 是先行者,谷歌、微软都开发了自己的云数据库产品,在市场上形成了各自的影响力;
  • 本章最后以阿里云 RDS 为例,介绍了云数据库的具体使用方法。

出处:厦门大学计算机系(Department of Computer Science, Xiamen University) 源自:林子雨《大数据技术原理与应用》教材课件

最后修改:2026 年 09 月 20 日
如果觉得我的文章对你有用,请随意赞赏