云数据库概述
云计算是分布式计算、并行计算、效用计算、网络存储、虚拟化、负载均衡等计算机和网络技术发展融合的产物。云计算是由一系列可以动态升级和被虚拟化的资源组成。
云计算主要包括3中类型,即IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)和SaaS(Software as a Service)。
传统软件与云计算方式的比较
项目 | 传统的软件使用方式 | 云计算方式 |
获得软件的方式 | 自己投资建设机房,搭建硬件平台,购买软件在本地安装 | 直接购买云计算厂商的软件服务 |
使用方式 | 本地安装,本地使用 | 软件运行在云计算厂商服务器上,用户在任何有网络接人的地方都可以通过网络使用软件服务 |
付费方式 | 需要一次性支付较大的初期投入成本,包括建设机房、配置硬件、购买各种软件(操作系统、杀毒软件、业务软件等) | 零成本投入就可以立即获得所需的 IT资源,只需要为所使用的资源付费,多用多付,少用少付,极其廉价 |
维护成本 | 需要自己花钱聘请专业技术人员维护 | 零成本,所有维护工作由云计算厂商负责 |
获得IT资源的速度 | 需要耗费较长时间建设机房、购买和安装调试设备和系统 | 随时可用,购买服务后立即可用 |
共享方式 | 自己建设,自给自足 | 云计算厂商建设好云计算服务平台后同时为众多用户提供服务 |
维修速度 | 出现病毒、系统崩溃等问题时,需要自己聘请IT人员维护,很多普通企业的IT人员技术能力有限,碰到些问题甚至需要寻找外援,通常不能立即解决 | 出现任何系统问题时, 云计算厂商都会凭借其专业化团队给出及时的响应,确保云服务的正常使用 |
资源利用率 | 利用率较低,投人大量资金建设的IT系统,往往只供企业自己使用,当企业不需要那么多IT资源时,就会产生资源浪费 | 利用率较高,每天都可以为大量用户提供服务;当存在闲置资源时,云计算管理系统会自动关闭和退出多余资源;当需要增加资源时,又会自动启动和加入相关资源 |
企业搬迁时的成本 | 当企业搬迁时,原来的机房设施就要作废,需要在新地方重新投人较大成本建设机房 | 企业无论搬迁到哪里,都可以通过网络重新零成本立即获得云计算服务,因为资源在云端,不在用户端,企业搬迁不会影响到IT资源的分布 |
资源可拓展性 | 企业自己建设的IT基础设施的服务能力通常是有上限的,当企业业务量突然增加时,现有的IT基础设施无法立即满足需求,就需要花费时间和金钱购买和安装新设备:当业务高峰过去时,多余的设备就会闲置,成资源浪费 | 元计算厂商可以为企业提供近乎无限的IT资源(存储和计算等资源),企业想用多少都可以立即获得;当企业不使用时,只需退订多余资源,几乎不存在资源闲置问题。 |
云数据库的概念
云数据库是部署在云计算环境中的虚拟化数据库。云数据库具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。它允许用户以服务的方式通过网络获得云端的数据库功能。
云数据库的特性
- 动态可扩展
- 高可用性
云数据库不存在单点失效问题。在云数据库中,数据通常是冗余存储的,在地理上也是分散的。
- 较低的使用代价
云数据库通常采用多租户的形式同时为多个用户提供服务,用户采用“按需付费”的方式使用;云数据库低层存储通常采用大量廉价的商业服务器,这也大大降低了用户开销。
- 易用性
用户只需要一个有效的连接字符串就可以使用云数据库。
- 高性能
云数据库采用大型分布式存储服务集群,支撑海量数据访问,多机房自动冗余备份,处动读写分离。
- 免维护
- 安全
云数据库提供数据隔离,不同应用的数据存在于不同的数据库中而不会相互影响;提供安全性检查,可以及时发现并拒绝恶意攻击性访问;提供数据多点备份,确保不会发生数据丢失。
云数据库是个性化数据存储需求的理想选择
- 云数据库可以满足大企业的海量数据存储需求
- 云数据库可以满足中小企业的低成本数据存储需求
- 云数据库可以满足企业动态变化的数据存储需求
云数据库产品
云数据库厂商主要分为三类:
- 传统的数据库厂商
Teradata、Oracle、IBM DB2、Microsoft SQL Server等
- 涉足数据库市场的云数据库厂商
Amazon、Google、Yahoo!、阿里、百度、腾讯等
- 新兴厂商
Vertica、LongJump、EnterpriseDB等
企业 | 产品 |
Amazon | DynameoDB、SimpleDB、RDS |
| Google Cloud SQL |
Microsoft | Microsoft SQL Azure |
Oracle | Oracle Cloud |
Yahoo! | PUNTS |
Vertica | Analytic Database for the Cloud |
EnerpriseDB | Postgres Plus in the Cloud |
阿里 | 阿里云RDS |
百度 | 百度云数据库 |
腾讯 | 腾讯云数据库 |
Microsoft SQL Azure
SQL Azure具有以下特征:
- 属于关系数据库
支持使用Transact-SQL来管理、创建和操作云数据库
- 支持存储过程
它的数据类型、存储过程和传统的SQL Server具有很大的相似性,因此应用可以在本地进行开发,然后部署到云平台上
- 支持大量数据类型
包含了几乎所有典型的SQL Server的数据类型
- 支持云中的事务
支持局部事务,但是不支持分布式事务
SQL Azure 的体系架构中包含了一个虚拟机簇,可以根据工作负载的变化,动态增加或减少虚拟机的数量,如图所示。每台SQL Server虚拟机( Virtual Machine, VM )都安装了SQLServer数据库管理系统,并以关系模型存储数据。通常,一个数据库会被分散存储到3~5台SQLServer VM中。每台SQL Server VM同时安装了SQL Azure Fabric和SQL Azure管理服务,后者负责数据库的数据复写工作,以保障SQL Azure的基本高可用性要求。不同SQL Server VM内的SOL Azure Fabric和管理服务之间会彼此交换监控信息,以保证整体服务的可监控性。
UMP系统架构
UMP系统概述
UMP系统架构设计遵循了以下原则:
- 保持单一的系统对外入口,并且为系统内部维护单一的资源池
- 消除单点故障,保证服务的高可用性
- 保证系统具有良好的可伸缩性,能够动态地增加、删减计算与存储节点
- 保证分配给用户的资源也是弹性可伸缩的,资源之间相互隔离,确保应用和数据的安全
UMP系统是低成本和高性能的MySQL云数据库方案,关键模块采用Erlang实现。
UMP系统把各种服务器资源划分为资源池,并以资源池为单位把资源分配给MySQL实例。
系统内部将用户划分为3种类型,分别是数据量和流量比较小的用户、中等规模用户和需要分库分表的用户。多个小规模用户可以共享一个MySQL实例;中等规模用户独占一个MySQL实例;需要分库分表的用户的多个MySQL实例可以共享同一台物理机。
UMP系统通过“用Cgroup限制MySQL进程资源”和“在Proxy服务器端限制QPS”两种方式,实现了资源隔离、按需分配,以及限制CPU、内存和I/O资源;同时,UMP系统还支持在不影响提供数据服务的前提下根据用户业务的发展进行动态扩容和缩容。
UMP系统综合运用了SSL数据库连接、数据访问IP白名单、记录用户操作日志、SQL拦截等技术,来有效保护用户的数据安全。
UMP系统架构
UMP系统中的角色包括Controller服务器、Web控制台、Proxy服务器、Agent服务器、日志分析服务器、信息统计服务器、愚公系统;依赖的开源组件包括Mnesia、RabbitMQ、ZooKeeper和LVS。
UMP系统功能
UMP系统构建在一个大的集群之上,通过多个组件的协同作业,整个系统实现了对用透明的容灾、分库分表、资源管理、资源调度、资源隔离和数据安全等功能。
1、容灾
UMP系统为每个用户创建两个MySQL实例,一个是主库,一个是从库,这两个MySQL实例之间互为备份,任意一个 MySQL实例上面发生的更新都会复制到对方。同时,Proxy 服务器可以保证只向主库写人数据。
主库和从库的状态是由ZooKeeper负责维护的,ZooKeeper可以实时监听各个MySQL实例的状态,一旦主库死机, ZooKeeper可以立即感知到,并通知Controller服务器。Controller 服务器会启动主从切换操作,在路由表中修改用户名与后端MySQL实例地址的映射关系,并把主库标记为不可用,同时,借助于消息队列中间件RabbitMQ通知所有Proxy服务器修改用户名与后端MySQL实例地址的映射关系。通过这一系列操作后,主从切换完成,用户名就会被赋予一个新的可以正常使用的MySQL实例,而这一切对于用户自己而言是完全透明的。
死机后的主库在进行恢复处理后需要再次上线。在主库死机和故障恢复期间,从库可能已经发生过多次更新。因此,在主库恢复时,会把从库中的这些更新都复制给自己,当主库的数据库状态快要达到和从库一致的状态时,Controlle服务器就会命令从库停止更新。进入不可写的状态,禁止用户写人数据,这个时候用户可能感受到短时间的“不可写”。等到主库更新到和从库完全一致的状态时,Controller服务器就会发起主从切换操作,并在路由表中把主库标记为可用状态,然后通知Proxy服务器把写操作切回主库上,用户写操作可以继续执行,再把从库修改为可写状态。
2、读写分离
由于每个用户都有两个MySQL实例,即主库和从库,因此UMP系统可以充分利用主从库实现用户读写操作的分离,实现负载均衡。UMP系统实现了对于用户透明的读写分离功能,当整个功能被开启时,负责向用户提供访问MySQL数据库服务的Proxy服务器,就会对用户发起的SQL语句进行解析。如果该SQL语句属于写操作,就直接发送到主库;如果该SQL语句属于读操作,就会被均衡地发送到主库和从库上执行。但是,有一种情况可能发生,那就是,用户刚刚写入数据到主库,数据还没有被复制到从库之前,用户就去从库读这个数据,导致用户要么读不到数据,要么读到数据的旧版本。为了避免这种情况的发生,UMP系统在每次用户写操发生后都会开启一个计时器,如果用户在计时器开启的300 ms内读数据,不管是读刚写人的这些数据还是其他数据,都会被强行分发到主库上去执行读操作;当然在实际应中,UMP系统允许修改300ms这个设定值;但是一般而言, 300ms已经可以保证数据在写入主库后被复制到从库中。
3、分库分表
UMP支持对用户透明的分库分表(Shard / Horizontal Partition ),但是用户在创建账号的时候需要指定类型为多实例,并且设置实例的个数,系统会根据用户设置来创建多组MySOL实例。除此以外,用户还需要自己设定分库分表规则,如需要确定分区字段,也就是确定根据哪个字段进行分库分表,还要确定分区字段里的值如何映射到不同的MySQL实例上。
当采用分库分表时,系统处理用户查询的过程如下:首先,Proxy服务器解析用户SQL语句,提取重写和分发SQL语句所需要的信息;其次,对SQL语句进行重写,得到多个针对相应MySQL实例的子语句,然后把子语句分发到对应的MySQL实例上执行;最后,接收来自各个MySOL实例的SQL语句执行结果,合并得到最终结果。
4、资源管理
UMP系统采用资源池机制来管理数据库服务器上的CPU、内存、磁盘等计算资源,所有的计算资源都放在资源池内进行统一分配,资源池是为MySQL实例分配资源的基本单位。整个集群中的所有服务器会根据其机型、所在机房等因素被划分为多个资源池,每台服务器会被加入相应的资源池。对于每个具体的MySQL实例,管理员会根据应用部署在哪些机房、需要哪些计算资源等因素,为该MySQL实例具体指定主库和从库所在的资源池,然后系统的实例管理服务会本着“负载均衡”的原则,从资源池中选择负载较轻的服务器来创建MySQL实例。在资源池划分的基础上,UMP系统还在每台服务器内部采用Cgroup将资源进一步地细化,从而限制每个进程组使用资源的上限,同时保证进程组之间相互隔离。
5、资源调度
UMP系统中有3种规模的用户,分别是数据量和流量比较小的用户、中等规模用户,以及需要分库分表的用户。多个小规模用户可以共享同一个MySQL实例。对于中等规模的用户,每个用户独占一个MySQL实例,用户可以根据自己的需求来调整内存空间和磁盘空间,如果用户需要更多的资源,就可以迁移到资源有空闲或者具有更高配置的服务器上。对于分库分表的用户,会占有多个独立的MySQL实例,这些实例既可以共存在同一台物理机上,也可以每个实例独占一台物理机。
UMP系统通过MySQL实例的迁移来实现资源调度。借助于阿里巴巴中间件团队开发的愚公系统,UMP系统可以实现在不停机的情况下动态扩容、缩容和迁移。
6、资源隔离
当多个用户共享同一个MySQL实例或者多个MySQL实例共存在同一台物理机上时,为了保护用户应用和数据的安全,必须实现资源隔离,否则,某个用户过多消耗系统资源会严重影响到其他用户的操作性能。UMP系统采用表6-4所示的两种资源隔离方式。
资源隔离方式 | 应用场合 | 实现方式 |
用Cgroup限制MySQL进程资源 | 适用于多个MySQL实例共享同一台物理机的情况 | 可以对用户的MySQL进程最大可以使用的CPU使用率、内存和IOPS等进行限制 |
在Proxy服务器端限制QPS | 适用于多个用户共享一个MySQL实例的情况 | Controller服务器监测用户的MySQL实例的资源消耗情况,如果明显超出配额,就通知Proxy服务器通过增加延迟的方法去限制用户的QPS,以减少用户对系统资源的消耗 |
7、数据安全
数据安全是让用户放心使用云数据库产品的关键,尤其是企业用户,数据库中存放了很多业务数据,有些属于商业机密,一旦泄露, 就会给企业造成损失。 UMP系统设计了多种机制来保证数据安全。
(1)SSL数据库连接
安全套接字协议( Secure Sockets Layer, SSL )是为网络通信提供安全及数据完整性的一种安全协议,它在传输层对网络连接进行加密。Proxy 服务器实现了完整的MySQL客户端/服务器协议,可以与客户端之间建立SSL数据库连接。
(2)数据访问IP白名单
UMP系统可以把允许访问云数据库的IP地址放人“白名单”,只有白名单内的IP地址才能访向云数据库,其他IP地址的访问都会被拒绝,进一步保证账户安全。
(3)记录用户操作日志
用户的所有操作都会被记录到日志分析服务器,通过检查用户操作记录,可以发现隐藏的安全漏洞。
(4)SQL 拦截。
Proxy 服务器可以根据要求拦截多种类型的 SQL语句,比如全表扫描语句“select *”.