开源的存储引擎--cantian

embedded/2024/10/23 23:27:02/

cantian

   上次稼先社会活动之后,在北京签售的时候见到了三位参天的核心人物。我有感于他们的热情、务实和坦诚,我觉得还应该在深入的做一些事情。至少可以安装体验一下,做做推广。毕竟现在务实的产品不多了,很多都是浮躁的宣传。为了踏实做事的产品和人做一些宣传。
     在华为的产品中有这么一款特殊的产品,大家看了以后都会觉得这是数据库呀,但是这个产品算是在存储产品线的。开始我也不理解,后面我会解释为什么会这样。     

    华为对自己的产品命名都是宏大的,比如鲲鹏、鸿蒙,我今天说的这个是参天。由于现在开源了,不仅仅是华为的了。不过对外这个团队都是这样写的,cantian还是很低调的。我个人还是喜欢低调的,因为能接受意见。

cantian正式介绍

   刚才我们提到说这个产品算存储这边的。不知道的人会问为什么这样算?结合他们在gitee上的描述:
   Cantian引擎,是一个存储引擎,采用了存算分的离架构,通过分布式缓存技术、事务MVCC机制、多主集群高可用等关键技术,可以让使能普通的单机数据库,让其变得具有类似Oracle RAC的多读多写能力。Cantian引擎无需修改已有数据库的实现,可以以无侵入的方式被MySQL等数据库加载运行。类似Oracle RAC,Cantian引擎的多读多写,也需要基于共享存储来构建。任何能够提供共享存储并可以提供标准文件接口的存储系统都可以进行对接测试。
      既然如此是一个存储引擎,那么算在存储上也顺理成章了。其他的一些话术我不在这里引用了。最后说一点就是他实现了RAC的架构。其实在数据库中主从架构也算是HA,但是这种是一写多读。而RAC的能做到多谢多读。对于MySQL来说虽然MGR也是可以做到多写多读的,但是普遍大家都觉得单主模式靠谱一点。所以如果想基于MySQL的多谢多读,怎么办?cantian就在存储引擎上做文章,共享存储来实现。虽然我没有实地安装过,但是从朋友那里看到安装好以后得存储引擎是这样的。

图片

     也就是说和innodb没有关系了。纯自己的引擎。熟悉MySQL的朋友会知道搞懂了innodb基本就搞懂了一半MySQL。因为主体就是innodb存储引擎(当然也有其他引擎,只是innodb是重心),那么这里cantian没有跟随官方的路线,而是自己另起炉灶。这个角度很别致啊。

cantian的源码地址

    https://gitee.com/openeuler/cantian
    在往下看的时候,看到这个有点震惊。
 

图片

          步骤确实惊人。

    安装过MySQL的人都知道。一条命令就按照完成了。我给别人上课时候MGR也就5分钟解决。从某种意义上来说这个作为MySQL的RAC显然复杂了很多。我仅仅看这个步骤就不是30分钟可以解决的。

      那说到这里可能会说,既然那么麻烦为什么还要做RAC这样的多读多写?答案就是有需要。
    多读多写一方面可能承载更多的业务请求,另外一方面对于高可用有更好的体验。数据库这种有状态的产品和中间件这种无状态的产品不一样。中间件没有ACID的要求,重启切换都可以,甚至在容器中都可以。但是数据库会涉及到不同节点的数据不一样。在一致性要求下,性能就要做妥协。反之,要求性能的极致,那么一致性就要有些妥协。而RAC下就解决了分布式下的一致性的。所以有不少企业也在这个上面去研究。
     Oracle体系复杂,MySQL体系相对简单。所以Oracle的RAC会麻烦很多。MySQL的MGR约等于MySQL的RAC+ADG,这里说的是约等于。而参天这种架构就是能在MySQL的下层做文章实现了MySQL兼容下的RAC架构。这意味着既有了MySQL的分布式,也能解决一致性问题。由于RAC架构的高可用容灾特性,那么即使一个节点宕机,对应用无感知可以继续使用。无需人工介入干预,这对当下不少追求业务连续性的企业来说是很友好的。
这一切是源于cantian的共享存储。其实在阿里和腾讯的部分产品介绍中也看到过类似的解决方案。只是他们是共享存储上面建立的读写分离。这样数据无需从写节点同步到读节点。而cantian是共享存储上多读多写,和Oracle的RAC的模式很像。这里无需数据同步到其他节点也是非常有意义的。数据库中大事务对数据同步及其不友好,DDL也一样。但是在共享存储下,这些都不是问题。数据是集中统一的。
    在cantian这种下,原有的使用MySQL的用户可以体验高可用。也可以说使用A节点写,B节点读,沿袭自己从前的使用也可以,不同的是没有MySQL主从延迟。

不少数据库的安装是一座山

       过去几年中,有一次技术大会,盖总在墨天轮的问题统计中发现,使用Oracle数据库最大的问题是来自于安装。而不是运行时候的问题。安装问题占到总问题的58%的比例。所以可以得出Oracle的安装是有难度的。这一点我深信不疑。刚工作时候在windows上安装过Oracle。后来尝试在Linux上安装,确实麻烦。可能在2010年以前,谁在Linux上安装好,就是高手了。现如今没那么难了,但是比起MySQL和Redis、PG这些来说还是难一点。

基于以上的情况–我要提建设性意见(吐槽)了

       我不确定我能安装好,看了总监写了一篇以后,我更加确定我应该安装不好。劝退概率太大了。比如MySQL官网上有对不同操作系统平台,不同操作系统版本,不同CPU架构的不同的版本。用户可以直接下载(当然非要源码编译也行)而大部分人都希望是拿来rpm安装或者解压配置环境变量就可以使用。第一个建议:给个不同环境下的成品。
     既然存储引擎,那么我们就那其他存储引擎对比。PG和MySQL的存储引擎基本上都是插件形式,我说的插件是执行一个install就完成的这样形式。本身RAC这种存算分离会涉及到网络等其他的。这些周边不得已要去花精力没办法,但是数据库和存储上别再给DBA加戏了。可以考虑心疼DBA一下。

     我想起我第一家公司的时候,有一些产品,安装手册600页。一包打印纸都不够。为什么?除了使用说明,安装是也是一个问题。比如安装完成以后,找到DLL目录,用U盘中的相应的DLL文件去替换。我当时就想,这就不能把最新(正确的)动态链接库做进去吗?如果安装完QQ,每次也去替换DLL或者exe,那QQ使用者能有10万都算多的。

     我后来反思,我是把Oracle从上传安装包后,都可以做到一键安装或者分解了几个shell,依次执行或者串联执行。这样使用者能快速部署。如果大家看过总监写的深入浅出cantian,你们就会觉得我这些建议绝对是良心建议了。
     在写这些的过程中也和cantian的核心人员交流过。他们的宽容和大度也让我感动。国内有些厂家是听不进去意义,不能说不好。而cantian的团队说:“你们提的很好!“,“都是很有意义的反馈”,”准备研发后续优化了”。
     将来等优化过后,再和现在的比较一下。我估计会有惊人的改变,那样的话,我非常荣幸的见证了历史。
     不少数据库产品都会提到四个字:安稳易用。可见易用是一个重点,也是卖点。先搞定DBA,让DBA容易接纳,产品就要推广了。


http://www.ppmy.cn/embedded/129926.html

相关文章

vuex3入门

vue2 对应的 vuex、vue-router 都为3. 项目创建与框架安装 vue create hellovuex3 npm i vuex3 npm install npm run serve vuex使用 vue集成vuex,数据更新&展示 新建store/index.js import Vue from vue import Vuex from vuexVue.use(Vuex)const store n…

IT运维的365天--017 如何在两台Linux服务器之间快速批量传输文件夹(同时设置免密)

前情提要(两台Linux服务器之间传输批量文件夹): 两台都是外网服务器,都是Linux系统(CentOS),都安装了宝塔,用于搭建巨量的静态网站,由于A服务器准备不要了,所以要在A服务器转移几百个静态网站到B服务器。 Linux下scp单命令传输文件夹测试: 准备工作,先测试转移一…

Cursor零基础小白教程系列 - 开卷有益

最适合小白零基础的Cursor教程 网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签 写在前面的话 Cursor在我看来 我认为当下AI时代,Cursor能够极大赋能每个普通人,帮助每个普通人实现自己的创意和想法。 例子&#xff…

Flink时间窗口程序骨架结构

前言 Flink 作业的基本骨架结构包含三部分:创建执行环境、定义数据处理逻辑、提交并执行Flink作业。 日常大部分 Flink 作业是基于时间窗口计算模型的,同样的,开发一个Flink时间窗口作业也有一套基本的骨架结构,了解这套结构有助…

【C++刷题】力扣-#268-丢失的数字

题目描述 给定一个包含从 1 到 n 的整数的数组 nums,其中 n 是数组的长度。数组中的元素都不相同,但是缺失了一个数字,导致数组和为 n*(n1)/2 减去的某个数字。找出这个缺失的数字。 示例 示例 1 输入: nums [3,0,1] 输出: 2示例 2 输入:…

Vivado - Aurora 8B/10B IP

目录 1. 简介 2. 设计调试 2.1 Physical Layer 2.2 Link Layer 2.3 Receiver 2.4 IP 接口 2.5 调试过程 2.5.1 Block Design 2.5.2 释放 gt_reset 2.5.3 观察数据 3. 实用技巧 3.1 GT 坐标与布局 3.1.1 选择器件并进行RTL分析 3.1.2 进入平面设计 3.1.3 收发器布…

git提交信息写错处理方式

在Git中,你可以通过使用rebase命令来合并提交记录。以下是一个简单的步骤来合并一系列提交: 使用git rebase -i开始交互式变基。在打开的编辑器中,你会看到一个提交列表。若要合并提交,将要合并的提交前面的pick改为squash或s。保…

【计算机网络 - 基础问题】每日 3 题(四十二)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…