(一)简介
目前 MyTopling 已上线阿里云计算巢,在这个过程中,我们和阿里云计算巢的团队进行了非常密切的合作,阿里云两位非常资深的技术专家亲临我们公司进行技术交流,和我们一起分析需求,跟我们分享计算巢的最佳实践。
开源数据库 MyTopling 是基于开源存储引擎 ToplingDB 的 MySQL,MyTopling 分叉自 MyRocks,兼容 MyRocks,ToplingDB 分叉自 RocksDB,兼容 RocksDB。
在阿里云的大力支持下,MyTopling 成功上线计算巢,相比其它 MySQL表现出了巨大的优势:
- 高性能,无论读写性能,都高于其它 MySQL 兼容数据库
- 节省硬盘空间,相比以节省空间著称的 MyRocks 更加节省
- 节省内存空间,相比其它 MySQL,节省大量内存,内存比外存(硬盘/SSD...)更贵,经济效益更高
- IO 性能优越,基于 协程(fiber) + io uring,大幅提升 IO 并发能力

(二)系统架构

在公有云平台上(例如阿里云计算巢):
- 蓝色的 DB 实例在用户机器上(包括存储),不同 DB 实例互相隔离
- 绿色的后台计算运行在 Topling 的机器上,由多个 DB 实例共享
对于 MySQL 客户端而言,蓝色的 DB 实例和普通的 MySQL 没有区别,都是对应用系统提供 MySQL 服务。因为运行在用户的机器上,使用的是用户的资源,所以是完全免费的,用户只需要给云厂商支付资源费用。
绿色的后台计算对用户是不可见的,用来承接 DB 实例发起的 Compact 请求,在公有云平台上,这是一个 SaaS 服务。因为运行在 Topling 的机器上,使用的是 Topling 的资源,所以需要费用,按量付费,这里的量,指的是压缩的数据量。
目前我们在计算巢上线了 MyTopling 多个版本:私有化部署版,高级版,基础版,集成版(集成 LNMP/Wordpress),特价版 2核2G ¥99包年。其区别在(六)。
(三)系统演进
3.1. 前 Topling 阶段
Terark 可检索压缩技术在 2016 年面世,显示出了相对传统技术的压倒性优势:①极高的压缩率,②极高的随机读性能。
此后我们将该技术接入 RocksDB,再通过 RocksDB,接入 MongoDB,接入 MySQL(MyRocks)。在多种横向对比测试中,显示出巨大的优势。
但是,此时仍然有个不可回避的弱点:Compact/压缩 中 CPU 消耗很大,难以承载繁重的持续写压力。
3.2. 分布式 Compact
Compact/压缩 是必须彻底解决的问题,这个问题早在 2018 年就有了解决方案,就是分布式 Compact。之后发了一些惊心动魄、匪夷所思,足以构成希区柯克悬疑案的剧情……
在 ToplingDB 中,我们设计了一套完善的插件系统,将分布式 Compact 实现为一个插件,最小化 ToplingDB 本身对分布式 Compact 相关的修改,以利于系统的持续演化。
在 MyTopling 分布式 Compact 实现过程中,出现了一些有趣的事情:
3.3. 其它重要改进
- 大道至简,事半功倍:MultiGet IO 并发的协程实现,以及在 MyTopling 中的落地应用
- ToplingZipTable: 把 Succinct 进行到底
- MyTopling Scan Iterator 优化
- ToplingDB 去虚拟化 + 前缀缓存 Benchmark
- 更多内容:雷鹏 - 知乎 (zhihu.com)
最终,MyTopling 实现了对“其他 MySQL”的压倒性优势:MyTopling, MySQL, MyRocks, PolarDB 多索引性能对比。
3.3. Topling 私有控制台
最初,我们自己实现了 Topling 控制台,让用户在 Topling 控制台购买、管理自己的数据库实例,并且撰写了详细的用户文档,指导用户进行操作。然而经实践发现,没有一个用户能按照文档成功完成所有操作……
3.4. 自动化程序
为了降低用户的操作负担,我们写了一个自动化程序,帮助用户自动完成相关的操作:
跨账号授权、设置ECS、打通网络,……,操作简单了好多,吸引了不少用户,也收到很多建议。
3.5. 云企网与 VPC 对等连接
根据 MyTopling + 分布式 Compact 架构,MyTopling 向用户提供 MySQL 服务,需要和用户的应用服务器建立私网连接,不同的用户要互相隔离,而 Compact Worker 运行在 Topling 的服务器上,由不同的用户,不同的 DB 实例共享。
最开始我们使用阿里云的云企网来打通,后来发现使用 VPC 对等连接更合适。
(四)阿里云计算巢
2023年8月,我们发现了阿里云计算巢,经过调研,这正是我们最开始就希望云厂商提供给我们的平台,我们立即开始向计算巢迁移。阿里云计算巢这个平台上的诸多产品,我们大概是最特殊的,既不是纯粹的 SaaS,也不是纯粹的私有化部署,SaaS 还不是通过阿里云最期望大家使用的 endpoint/private link 等方案,还需要跟用户的网络/数据实现内网互通。这个过程中得到了阿里云计算巢团队的大力支持,对于我们的需求,反应非常迅速,不愧是世界顶流!
4.1. MyTopling 私有化部署
最简单的计算巢方案是纯粹的 MyTopling 私有化部署,即 MyTopling 和 Compact Worker 都运行在在客户的 ECS 上,这是绝大多数基于计算巢平台的产品所采用的方案。
4.2. VPC 对等连接及数量限制
通过 VPC 对等连接,可以打通两个不同的 VPC,这两个 VPC 可以是同一个用户名下不同的 VPC,也可以是不同用户名下的 VPC。VPC 打通之后,两个 VPC 之间就可以通过内网连接,相比公网,不仅完全免费,并且性能更高,延迟更低。
但是 VPC 对等连接有个致命缺点:数量限制。单账号每个可用区只有 20 个名额,通过跟阿里云的沟通,得知这是硬性限制,不能上调!(AWS 每个 AZ 有 125 VPC peering 名额,其实与 20 个没有没有本质区别)
4.3. IP V6
从第一性原理出发,同一个区域/可用区,不同用户内网不通其实不是物理上不通,而是逻辑上不通,逻辑上不通的原因是 IP V4,理论上如果使用 IP V6,只要内网物理上能连通,那么逻辑上就能连通。
所以,我们在关键词加上 IP V6,找到了一篇文档,描述不同用户通过附加弹性 IP V6 网卡实现内网连通。遗憾的是,我们无法根据文档完成操作,经过跟阿里云的沟通,得知该文档可能是几年前某个临时产品的,阿里云自己也无法按照文档实现相关操作。为避免引起更多用户的疑惑,阿里云及时下线了该文档。
4.4. 使用 OSS 进行数据交换
好在我们还有退路,就是使用 OSS 对象存储实现数据通讯,在 Compact 前将输入文件上传到 OSS 上,Compact 结束后将输出文件下载到本地。根据我们之前的实践,OSS 使用内网连接的时候,不光免费(近乎免费),而且速度极快!所以就确定这个方案。
4.5. ossfs 与 s3fs
为了最小化开发成本,我们将 OSS 挂载成本地文件系统。阿里云官方推荐的是 ossfs(fork 自 AWS s3fs,阿里云进行了很多优化)。但是我看过 s3fs 和 ossfs 的代码,从中可以看到,为了功能完善,代码的预期性能很差。
4.6. goofys
另一个是 goofys,将 s3 挂载成文件系统,其设计目标是性能第一,其它靠后。看其代码,虽然我们不太懂 golang,但是至少看到代码没做太多的冗余工作,预期性能应该好很多。但是从其官方测试结果看,并没有比 s3fs 好太多,这让我们又有一丝担心。
4.7. autofs/automount
在 Compact Worker 上,要让多个用户多个 DB 共享服务,就需要自动挂载功能,因为我们无法预判会有哪些用户哪些 DB。所以使用 autofs 来自动挂载 OSS。
4.8. ossfs 性能完全无法容忍
使用 ossfs,在多线程、高负载的时候,单个线程上传/下载性能低到可怜的 100~200KB/s,复合吞吐不到10MB/s,是完全不可用的!
4.9. goofys 与 autofs 协同工作
换到 goofys,却发现它无法与 autofs 协同工作,只要是 autofs 触发的 mount,就会卡死,甚至在 autofs 中通过本地 http 向另一个进程发送 mount 命令,让另一个进程执行 mount,都照样会卡死!
在几近绝望之际,都准备手动上传/下载了,搜索到一个 patch,经测试能解决 autofs 卡死问题,但是会导致启动了多个 goofys 进程,看代码发现启动多个 goofys 进程的问题无法解决,但是不会造成不良后果,经测试发现也确实未造成不良后果。
4.10. MyTopling 基础版
根据最终测试,goofys 性能完全满足需求,实测读写吞吐最高比 ossfs 强 100 多倍!我们据此推出了 MyTopling 基础版。
因为 OSS 仅用作数据传输,文件用完即删,文件的生存时间一般在秒级,少数在分钟级,故存储空间费用很低;网络流量是内网,完全免费,但 OSS 请求有¥1/百万次的费用,每次请求数据 1MB,折合流量费约 1¥/TB。所以 OSS 总成本很低,近乎免费,使用默认计费方式即可,使用资源包省不了多少钱。
(五)一站式应用服务器
5.1. 集成 LNMP/Wordpress
公有云上有很多用户不使用 RDS,而是自建 MySQL,甚至更多的用户把 MySQL 和自己的应用放在同一台 ECS 上,这其中典型的是 Wordpress,所以我们推出了 MyTopling 集成版,集成了 LNMP,可选 Wordpress。
5.2. 特价版 ECS
阿里云在首页有 ¥99包年的 ECS 广告,2核2G,40G存储,这样的配置对于很多小用户很有吸引力,所以我们紧跟这个政策,推出了 ¥99包年的 MyTopling 特价版,实际上是集成版的特例,其中的 ECS 使用的就是阿里云¥99包年的 ECS !
(六)MyTopling 各版本的区别,适用场景
欢迎大家使用 MyTopling:私有化部署版,高级版,基础版,集成版(集成 LNMP/Wordpress),特价版 2核2G ¥99包年。(集成版和特价版均基于基础版)
