互联网技术的迅猛发展,手机、平板、智能电视等各种输入终端的普及,让互联网数据呈现出爆炸性的增长。面对海量的数据,如何能以更加稳定、快速的方式存储海量数据,以及从中挖掘出有价值的信息,成为很多企业面临的新课堂。
云存储的出现为数据挖掘快速发展带来了新的机遇。亚马逊、微软、谷歌、IBM 等巨头纷纷推出了自己的云存储平台,国内华为、腾讯、百度、360 等公司也加紧了在云存储领域的布局。云服务已经被企业列入常规IT投资,云数据库服务是非常重要的一部分。
本文将从一个用户的角度历数市场上现有关系型数据库服务的主要功能,探索是否有一些改进的空间以及华为云数据库在技术上所做的一些选择。
数据库备份
数据库备份指将数据库系统中的数据加以复制,一旦发生灾难或错误操作时,得以方便而及时地恢复系统的有效数据和正常运作。
数据库备份是用户常用的功能之一,mysqldump/xtrabackup 是最常见的备份方案,同时也是大多数厂商的选择。
Mysqldump 有比较明显的缺陷,无法做增量备份,对于经常需要做备份的用户来说,是无法接受的。Xtrabackup 是 Percona 推出的商业解决方案,同时提供免费版本,基本机制是通过比较LSN来做增量拷贝。从机制来看,需要 innodb 事务的支持,对于非innodb 比如 myisam,则通过FLUSH TBALES WITH READ LOCAK来保证数据的一致性,显然,block write 的时间取决于 myisam 表拷贝时间。但是我们可以禁用myisam表,这个问题可以跳过。另一方面,xtrabackup 需要运行在 GuestOS 中,读取拷贝生产环境数据目录同时会影响到线上的 IO 表现。
如果用户想要删除其中一个增量备份,该如何做增量的合并和删除?还是将依赖的增量一并删除?
对用户来说,恐怕这都不是理想的。
有没有既不影响生产环境IO,又能做增量并且还能独立删除的办法呢?
事实上,华为云数据库备份是由客户启动的数据库实例的备份,不仅可以备份单个数据库,还可以备份整个数据库实例。数据库备份可让客户按所需的任意频率在已知状态备份数据库实例,然后随时还原到该特定的状态。数据库备份可以使用 RDS 控制台或 RDS API 创建,备份会一直保存,直到客户使用 RDS 控制台或 RDS API 将其或其所在的实例删除。
- 急速增量备份 – 快速完成数据备份,避免大数据量备份时间过长。
- 线上业务轻干扰 – 基于备份的备份过程效率较传统数据库备份方式要高,合理的备份策略,对实例IO资源和业务有着非常有限的影响。
数据库实例规格如图1所示:
图1
数据库引擎
Innodb、myisam 是最常用的 MySQL 数据库引擎,前者是事务安全的,后者则拥有更高的性能。前文描述到,myisam 无法保证备份点数据的一致性,FLUSH TBALES WITH READ LOCAK 又需要 block write,得不偿失。
MySQL replication 是做读写分离的基础,分为异步和半同步的方式,前者有对主机性能影响小,但数据有一定延时,后者则相反。两种技术可以满足用户不同场景的需求。关于Crash safe 的问题,分为 master crash safe 和slave crash safe。MySQL 5.6 版本之前存在一个 bug,即当 sync_binlog=1/innodb-flush-log-at-trx-commit=1 时,会使得 InnoDB 存储引擎的 group commit 失效,导致性能急剧下降。crash-safe slave 的问题更复杂些,主要 replication 中的 SQL thread 和 IO thread 原子性问题,这里不再累述,MySQL 5.6 版本通过将 relay-info.log 的信息保存在 InnoDB 的事务表中解决了这个问题。
讲了这么多华为云 RDS 技术,下面会从几个方面详解 RDS 究竟是什么。
深入浅出 RDS
RDS(Relational Database Service,关系型数据库服务)是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。
RDS 具有较为完善的性能监控体系和多重安全防护措施,能使企业用户在云中轻松设置、操作和扩展关系型数据库。通过 RDS 控制台,可以执行所有必需任务而无需编程,简化运营流程,减少日常运维工作量,从而能够专注于应用开发和业务发展。
用户访问 RDS 实例时,需要经过 ECS(Elastic Cloud Server,弹性云服务器),具体关系如图2所示:
图2
RDS 的最小管理单元是实例,一个实例代表了一个独立运行的关系型数据库,实例可进行如下分类:
- 主实例
- 备实例
- 只读实例
用户可以在 RDS 系统中自助创建及管理各种数据库引擎的实例。
RDS API 使用场景
RDS 的 OpenAPI 提供针对用户数据库实例的创建、查看、删除等基本操作,以及查询系统支持的 API 版本、数据库引擎及版本、运行环境规格、可用区域等操作。其主要的调用场景如图3和图4所示。
图3
在创建实例之前,需要获取系统支持的数据库引擎及版本,运行环境规格以及可用区域信息。
在获取到信息之后,可以将返回结果作为调用参数,执行创建实例操作。
在实例创建成功后,用户可以对自己所属的实例进行列举、查询详细信息、以及删除操作。
图4
数据库实例需要先查询数据库所有参数和参数信息后才能进行设置参数取值和参数恢复默认值。
数据库实例可以进行扩容和重启,可以将返回的任务号作为调用参数查询异步任务的进展情况。
数据库解决方案对比
数据库的解决一般可通过自建数据库、数据库on云服务器、RDS等,我们来通过图5所示的详细对比了解其优劣势:
图5
RDS 背后聚集了华为的 DBA 团队专门负责运维,数据库内核开发团队负责改进数据库,将很多需要 DBA 日常运维的工作逐渐纳入实现产品化。使用的客户可以从很多底层的任务中解放出来。
RDS 数据库实例的生命周期包括创建、修改、重启、备份和还原以及删除等,具体如图6所示。
图6
完整的RDS需要提供哪些服务
接下来将以华为云 RDS 为例,来说明作为一个完整的RDS产品,至少需要能够提供哪些服务。
结合在数据库技术领域的发展趋势,完整的 RDS 产品或可从以下几点特性着手研发:兼容多版本 MySQL、多种实例类型满足多场景需求、数据库管理便利灵活、指标监控便于运行状况了解、性能调优满足业务需要等。
以华为云 RDS 为研究模板和例子,其服务特性可从以下几点来看:
- 安全。RDS 包括多种安全策略保护数据库和用户隐私,例如:VPC、子网、安全组等。
- 性能监控。RDS 能支撑监控数据库实例及数据库引擎的关键性能指标,包括计算/内存/存储容量使用率、I/O 活动、数据库连接数、QPS/TPS、缓冲池、读/写活动等。
- 数据迁移。登录 RDS 管理控制台,即可在“数据迁移”页面,提供数据迁移流程。
- 高可用。RDS会将主数据库实例数据复制到一个备用数据库实例中,一旦主数据库实例发生故障导致不可用,即可在很短时间内切换到备用数据库实例上。
- 弹性伸缩。包括水平伸缩和垂直伸缩,例如可增删只读实例(每个数据库最多有5个只读实例)、数据库实例存储空间扩容等。
- 备份与恢复。RDS 既支持自动备份以及创建备份,又能支持恢复到某个备份文件点。
- 日志管理。可查询数据库“错误日志”和“慢查询日志”,为数据库调优提供参考。
- 参数配置。数据库管理员可以根据监控和日志等信息,对数据库引擎参数进行自定义设置,从而优化数据库。
结语
华为云 RDS 可以解决当前各类电子商务网站、社区网站、移动 APP 以及游戏类应用数据库搭建、管理以及维护的高成本及复杂性问题,使用户可以将更多的精力聚焦到应用和业务等核心层面,节约硬件成本和软件等成本,实现按需付费。
华为云 RDS 支持主从热备、读写分离,且提供了备份、恢复、监控等方面的全套解决方案,从而解决数据库运维上的问题。
了解更多华为云数据库:https://www.huaweicloud.com/product/dbs.html