前面简单介绍了一下DBaas服务编排,我们渴望在生态中为客户提供优质的DBaas服务,具体怎么让客户用的舒心,用的放心,是衡量一个产品优劣的标准,那么我们看看trove能否值得期待。架构上之前有简单的浅析,充分利用了openstack的优势,设计讨巧。这里,我想就功能上和阿里云RDS对比一下,在这个过程中,我发现功能的吻合度高达90%以上,不知道这些产品经理是不是互相copy的。
当然,功能吻合不代表技术实力也吻合,毕竟大公司养了那么多技术人员。虽然openstack社区也有几千个代码贡献者,搞不好还包括阿里云的coder,但是这些企业,包括华三等,受益于开源而不太愿意将最核心的优化贡献反哺社区,最后各玩各的。企业具备天生的垄断属性,用他们自己的话来讲就是建造技术壁垒,护城河...在中国,互相抄袭而无惩罚措施的技术环境下,企业和技术人员,拼的是极其细分领域的东西。
以下内容对比,以阿里云产品简介为主,斜体加粗部分为依赖openstack trove所能做到的事情
即开即用
您可以通过阿里云官网或者 API 进行 RDS 规格定制,下发订单后 RDS 实时生成目标实例。RDS 配合 ECS 一起使用,在降低应用响应时间的同时还可以节省公网流量费用。
在不限速的情况下,Trove create能在1分30秒以内创建一个mysql实例
按需升级
在业务初期,您可以购买小规格的 RDS 实例来应对业务压力。随着数据库压力和数据存储量的变化,您可以灵活调整实例规格,且升级期间 RDS 不会中断数据链路服务。
Openstack实例在resize时,业务必然中断几秒,如果要做到服务不中断,那么我们需要确保部署架构是双活或者具备负载均衡的能力,而且resize是采用先备份实例再创建新实例,最后将备份数据恢复至新实例的方式,那么数据一致性也是需要小心调试的。
透明兼容
RDS 与原生数据库引擎的使用方法一致,您无需二次学习,上手即用。另外 RDS 兼容用户现有的程序和工具。使用通用的数据导入导出工具即可将数据迁移到 RDS,迁移过程中的人力开销非常低。
trove区别不大,一样的玩法,即:虚拟机里跑原生的数据库
管理便捷
阿里云负责 RDS 的日常维护和管理,包括但不限于软硬件故障处理、数据库补丁更新等工作,保障 RDS 运转正常。您也可自行通过阿里云控制台完成数据库的增加、删除、重启、备份、恢复等管理操作。
基本服务,都能提供
参数优化
阿里云聚集国内顶尖的数据库专家,所有 RDS 实例的参数都是经过多年的生产实践优化而得。在 RDS 实例的生命周期内,DBA 持续对其进行优化,确保 RDS 一直基于最佳实践在运行。
缺DBA,需要DBA调试出最佳配置塞入镜像
SQL 优化建议
针对用户的应用场景特点,RDS 会锁定效率低下的 SQL 语句并提出优化建议,以便用户优化业务代码。
缺DBA
高端硬件投入
RDS 使用的所有服务器硬件都经过多方评测,保证在性能和稳定性上都遥遥领先。
我们投入的是SSD,等ironic能够产品化落地后,用户甚至可以选择高性能物理机
防 DDoS 攻击
当用户使用外网连接和访问 RDS 实例时,可能会遭受 DDoS 攻击。当 RDS 安全体系认为用户实例正在遭受 DDoS 攻击时,会首先启动流量清洗的功能,如果流量清洗无法抵御攻击或者攻击达到黑洞阈值时,将会进行黑洞处理。
基本的综合防御设计,算标配吧
访问控制策略
用户可定义允许访问 RDS 的 IP 地址,指定之外的 IP 地址将被拒绝访问。每个账号只能看到、操作自己的数据库。
这个好说,faas就能解决(firewall as a service);trove也是多租户的
系统安全
RDS 处于多层防火墙的保护之下,可以有力地抗击各种恶意攻击,保证数据的安全。
RDS 服务器不允许直接登录,只开放特定的数据库服务所需要的端口。
RDS 服务器不允许主动向外发起连接,只能接受被动访问。
网络安全
专业安全团队
阿里云安全团队负责 RDS 的安全技术支持。
ops
双机热备
RDS 采用热备架构,物理服务器出现故障后服务秒级完成切换。整个切换过程对应用透明。
看nova的能力了
多副本冗余
RDS 服务器中的数据构建于 RAID 之上,数据备份存储在 OSS 上。
块设备用的是ceph,对象存储也是ceph 的对象存储,只要ceph不崩,数据就不会丢失
数据备份
RDS 提供自动备份的机制。用户可以自行选择备份周期,也可以根据自身业务特点随时发起临时备份。
Trove也具备备份功能,但是不能设置策略定时、周期备份,需yovolestack有这么个调度任务
数据恢复
支持按备份集和指定时间点的恢复。在大多数场景下,用户可以将 7 天内任意一个时间点的数据恢复到 RDS 临时实例或克隆实例上,数据验证无误后即可将数据迁回 RDS 主实例,从而完成数据回溯。
只要ceph对象存储内的备份数据还在,就能恢复出来
DNS
是否提供域名给客户,私有云无所谓
负载均衡
负载均衡 模块提供实例 IP 地址(包括内网 IP 和外网 IP),以便屏蔽物理服务器变化带来的影响。
例如,某 RDS 实例的内网 IP 地址为 10.1.1.1,对应的 Proxy 或者 DB Engine 运行在 192.168.0.1 上。在正常情况下,负载均衡 模块会将访问 10.1.1.1 的流量重定向到 192.168.0.1 上。当 192.168.0.1 发生了故障,处于热备状态的 192.168.0.2 接替了 192.168.0.1 的工作。此时 负载均衡 模块会将访问 10.1.1.1 的流量重定向到 192.168.0.2 上,RDS 实例仍旧正常提供服务。
整合负载均衡,LBaas
Proxy
Proxy 模块提供数据路由、流量探测和会话保持等功能。
• 数据路由功能:支持大数据场景下的分布式复杂查询聚合和相应的容量管理。
• 流量探测功能:降低 SQL 注入的风险,在必要情况下支持 SQL 日志的回溯。
• 会话保持功能:解决故障场景下的数据库连接中断问题。
需要单独开发
DMS
DMS(Data Management Service)是一个访问管理云端数据的 Web 服务,提供了数据管理、对象管理、数据流转和实例管理等功能。
DMS 支持 MySQL、SQL Server、PostgreSQL 和 PPAS 等数据源。
本质上是一个mysql的web client,应该有开源的可以整合开发
高可用服务
Detection
Detection 模块负责检测 DB Engine 的主节点和备节点是否提供了正常的服务。通过间隔为 8~10 秒的心跳信息,HA 节点可以轻易获得主节点的健康情况,结合备节点的健康情况和其它 HA 节点的心跳信息,Detection 模块可以排除网络抖动等异常引入的误判风险,在 30 秒内完成异常切换操作。
Trove-guest-agent默认60秒上报心跳,仅此而已
Repair
Repair 模块负责维护 DB Engine 的主节点和备节点之间的复制关系,还会修复主节点或者备节点在日常运行中出现的错误。
例如:
- 主备复制异常断开的自动修复
- 主备节点表级别损坏的自动修复
- 主备节点 Crash 的现场保存和自动修复
Trove没有这个模块,repair功能依赖mysql本身的replica机制
Notice
Notice 模块负责将主备节点的状态变动通知到 负载均衡 或者 Proxy,保证用户访问正确的节点。
例如:Detection 模块发现主节点异常,并通知 Repair 模块进行修复。Repair 模块进行了尝试后无法修复主节点,通知 Notice 进行流量切换。Notice 模块将切换请求转发至 负载均衡 或者Proxy,此时用户流量全部指向备节点。与此同时,Repair 在别的物理服务器上重建了新的备节点,并将变动同步给 Detection 模块。Detection 模块开始重新检测实例的健康状态。
待开发
多可用区
多可用区是在单可用区的级别上,将同一地域的多个单可用区组合成的物理区域。相对于单可用区 RDS 实例,多可用区 RDS 实例可以承受更高级别的灾难。
例如,单可用区 RDS 实例可以承受服务器和机架级别的故障,而多可用区 RDS 实例可以承受机房级别的故障。
注意: 因为多可用区之间存在一定的网络延迟,因此多可用区 RDS 实例在采用半同步数据复制方案的时候,对于单个更新的响应时间会比单可用区实例长。这种情况最好通过提高并发量的方式来实现整体吞吐量的提高。
Openstack支持多region、AZ,可以将replica节点部署在不同region、AZ
高可用策略
高可用策略是根据用户自身业务的特点,采用服务优先级和数据复制方式之间的不同组合,以组合出适合自身业务特点的高可用策略。
服务优先级有以下两个级别:
- RTO(Recovery Time Objective)优先:数据库应该尽快恢复服务,即可用时间最长。对于数据库在线时间要求比较高的用户应该使用 RTO 优先策略。
- RPO(Recovery Point Objective)优先:数据库应该尽可能保障数据的可靠性,即数据丢失量最少。对于数据一致性要求比较高的用户应该使用 RPO 优先策略。
数据复制方式有以下三种方式: - 异步复制(Async):应用发起更新(含增加、删除、修改操作)请求,Master 完成相应操作后立即响应应用,Master 向 Slave 异步复制数据。因此异步复制方式下,Slave 不可用不影响主库上的操作,而 Master 不可用有较小概率会引起数据不一致。
- 强同步复制(Sync):应用发起更新(含增加、删除、修改操作)请求,Master 完成操作后向 Slave 复制数据,Slave 接收到数据后向 Master 返回成功信息,Master 接到 Slave 的反馈后再响应应用。Master 向 Slave 复制数据是同步进行的,因此 Slave 不可用会影响 Master 上的操作,而 Master 不可用不会引起数据不一致。
- 半同步复制(Semi-Sync):正常情况下数据复制方式采用强同步复制方式,当 Master 向 Slave 复制数据出现异常的时候(Slave 不可用或者双节点间的网络异常),Master 会暂停对应用的响应,直到复制方式超时退化成异步复制。如果允许应用在此时更新数据,则 Master 不可用会引起数据不一致。当双节点间的数据复制恢复正常(Slave 恢复或者网络恢复),异步复制会恢复成强同步复制。恢复成强同步复制的时间取决于半同步复制的实现方式,阿里云数据库 MySQL 5.5 版和 MySQL 5.6 版有所不同。
用户可以根据自身业务特点,选择服务优先级和数据复制方式的不同组合方式,提高可用性。
缺DBA
Backup
Backup模块负责将主备节点上面的数据和日志压缩和上传。
RDS默认将备份上传到OSS中,在特定场景下还支持将备份文件转储到更加廉价和持久的归档存储 上。在备节点正常运作的情况下,备份总是在备节点上面发起,以避免对主节点提供的服务带来冲击;在备节点不可用或者损坏的情况下,Backup模块会通过主节点创建备份。
Trove可选择swift或者ceph对象存储,默认配置是加密压缩
Recovery
Recovery模块负责将OSS上面的备份文件恢复到目标节点上。
- 回滚主节点功能:客户发起数据相关的误操作后可以通过回滚功能按时间点恢复数据。
- 修复备节点功能:在备节点出现不可修复的故障时自动新建备节点来降低风险。
- 创建只读实例功能:通过备份来创建只读实例。
Trove都支持
Storage
Storage模块负责备份文件的上传、转储和下载。
目前备份数据全部上传至OSS进行存储,客户可以根据需要获取临时链接来下载。在某些特定场景下,Storage模块支持将OSS上面的备份文件转储至归档存储来提供更长时间和更低费用的离线存储。
Trove没这个机制
Service
Service模块负责服务级别的状态跟踪,监控 负载均衡、OSS、归档存储和日志服务等RDS依赖的其他云产品是否正常,包括功能和响应时间等。另外对RDS内部的服务,Service也会通过日志来判定是否正常运作。
Openstack具备这个检查能力,但需要开放相应功能
Network
Network模块负责网络层面的状态跟踪,包括ECS与RDS之间的连通性监控,RDS物理机之间的连通性监控,路由器和交换机的丢包率监控。
缺乏这个机制,相信其他服务编排也需要这个东西
OS
OS模块负责硬件和OS内核层面的状态跟踪,包括:
- 硬件检修:不断检测CPU、内存、主板、存储等设备的工作状态,预判是否会发生故障,并提前进行自动报修。
- OS内核监控:跟踪数据库的所有调用,并从内核态分析调用缓慢或者出错的原因。
监控的范畴
Instance
Instance模块负责RDS实例级别的信息采集,包括:
- 实例的可用信息
- 实例的容量和性能指标
- 实例的SQL执行记录
缺乏这个机制,不过可以通过其他技术手段综合解决
Resource
Resource 模块主要负责 RDS 底层资源的分配和整合,对用户而言就是实例的开通和迁移。例如:用户通过 RDS 管理控制台 或者 API 创建实例,Resource 模块会计算出最适合的物理服务器来承载流量。RDS 实例跨可用区迁移所需的底层资源也由 Resource 负责分配和整合。在经过长时间的实例创建、删除和迁移后,Resource 模块会计算可用区内的资源碎片化程度,并定期发起资源整合以提高可用区的服务承载量。
Nova的本职工作
Version
Version 模块主要负责 RDS 实例的版本升级。例如:
- MySQL 大版本升级:MySQL 5.1 升级至 MySQL 5.5,MySQL 5.5 升级至 MySQL5.6 等。
- MySQL 小版本升级:MySQL 源码存在的 bug 修复。
Newton版本开始,提供了upgrade功能,版本升级很轻松能够做到
迁移服务主要帮助用户把数据从本地数据库迁移到阿里云数据库,或者把阿里云数据库的一个实例迁移到另一实例中。阿里云数据库提供了数据传输服务DTS(Data Transfer Service)工具,方便用户快速的迁移数据库。
DTS是一个云上的数据传输服务,能快速的将本地数据库或者RDS中的实例迁移到另一个RDS实例中。关于DTS简介,请参见DTS产品概述。
DTS提供了三种迁移模式,分别为结构迁移、全量迁移和增量迁移:
- 结构迁移:DTS会将迁移对象的结构定义迁移到目标实例,目前支持结构迁移的对象有表、视图、触发器、存储过程和存储函数。
- 全量迁移:DTS会将源数据库迁移对象已有数据全部迁移到目标实例中。
注意:在全量迁移过程中,为了保证数据一致性,无主键的非事务表会被锁定。锁定期间这些表无法写入,锁定时长依赖于这些表的数据量大小。在这些无主键非事务表迁移完成后,锁才会释放。 - 增量迁移:DTS会将迁移过程中数据变更同步到目标实例。
注意:如果迁移期间进行了DDL操作,这些结构变更不会同步到目标实例。
没有这个工具,是否能利用一些开源工具
网友评论