KubeBlocks 研发轶事之 addon 抽象

2024-01-23 00:44

本文主要是介绍KubeBlocks 研发轶事之 addon 抽象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者介绍
张云杨,前阿里云数据库产品负责人,2016-2019 年任阿里云数据库产品总监,负责 RDS、PolarDB、Redis、MongoDB 等核心产品。目前作者就职于云猿生数据,主要负责云原生数据控制面 KubeBlocks 和 Serverless MySQL 产品。欢迎云计算或数据库行业从业者加微信交流。

作者微信:realzyy

许多年之后,面对研发同事的口若悬河,我都将会想起,Tony 跟我解释什么是 addon 的那个遥远的上午。

Tony 是一个美籍华裔 Infra 工程师,常年混迹于 KubeCon 和 HackerNews,痴迷于新的产品技术、健身以及布道。在他的个人主页上,Tony 是这样描述自己的:长期主义者,喜欢仔细思考选择最优解,喜欢学习新东西,保持客观。如果没有后面的故事,恐怕我永远也无法注意到他描述自己的另外一段话:概括能力过于跳跃,handwriting disorder。

在北京出差的某个早上,Tony 的头像意外地闪烁起来。一般来说,产品经理不太会引起 Tony 的兴趣,虽然在同一个地区但是双方的上班时间存在时差,并不支持淋漓尽致的输出。毕竟,高端的喷子都要求极低的延迟。好奇的我没管住该死的手,让他关注到了飞书消息的“已读”状态。在简单寒暄两句后,Tony 兴奋地给出了一个文档链接,并要求评审。“Addon KubeBlocks 控制平面可选特性开关功能”,标题的 handwriting disorder 没难住我,我知道他想写的是“KubeBlocks Addon 定义以及功能提议”。但愿里面内容还行,我向产品之父苏杰祷告。

天气开始热起来了,我看他打了杯冰美式,问到:“什么是 addon?”

Tony 不客气地问:“你是不是没看我的文档?”

“那个文档没写明白”,我心里这样想,但是嘴上很怂:“我没看懂。对于一个数据库控制平面而言,可选特性的意义是变化的。比如说新的引擎版本,或者更细粒度的备份功能,或者更丰富的监控指标,对用户而言都是特性上面的变化。如果 addon 的定义是可选特性,那哪些特性是必选的,哪些又是可选的呢?”

“比如,负载均衡、监控系统、存储接口都是可选的,它们都是 addon。”

“如果我在阿里云上面运行 KubeBlocks,ACK 提供的存储接口是必选的,那它就不是 addon。而在亚马逊上面运行 KubeBlocks,EKS 提供的存储接口是可选的,那它又是 addon。按照定义,存储接口到底是不是 addon?”

Tony 放下了咖啡杯。从 Motivation、Goals、Non Goals,到用户故事、使用场景,再到开发和测试计划,那个下午我获得了很多,但是好像也失去了很多。

“不行,我一定要搞明白 addon 是什么。”

这么多聪明的人里面,肯定有谁能解释清楚。我不由自主地瞥了一眼巧克力。我们的 CTO,有着黝黑的皮肤和宜人的性格,就像巧克力一样丝滑且有智慧。

“简单来说,addon 是工作负载(Kubernetes Workload)的一种抽象”,巧克力解释道:“本质是包含 ClusterDefinition、ClusterVersion、Script 和 ConfigMap 等资源的 Helm Chart,比如 KubeBlocks 接入的 OceanBase 就是一种 addon。”

虽然有点像抬杠,但是我脱口而出:“那什么又是抽象呢?”

“在软件工程领域,抽象是指从问题或系统中提取主要特征和行为。通过抽象可以提高重用性和可拓展性,提升理解和研究问题的效率。”

“不愧是精通 ChatGPT 的男人”,我硬着头皮继续问道:“那 addon 作为一种抽象,它解决了什么问题?”

“当你只开发一种数据库服务的时候,每个功能都是独特的;当你开发了一百种数据库服务的时候,99% 的功能都是重复的。addon 作为一种抽象,就是找出了这 99% 的功能,以便研发团队集中力量提高它们的质量。这样大家都能过上幸福的生活。”

巧克力已经回到座位上了。我还在回味这个饼是甜的还是咸的,感觉吃到了但是又有点饿。

我下定决心去打扰珊博。珊博是坡县国立大学数据库科班出身,获得了学术大佬的真传。Tony 的文档让人形神俱灭,而珊博的文档旁征博引,有种饱腹感。我读了她的 Addon Tutorials 系列,4 万字抄一遍刚好水一篇硕士毕业论文。别看我,我没有。

“如果开发者在 KubeBlocks 上面没有找到想要的数据库引擎,他们可以选择自己动手做一个 addon,part time 参与的话 10 个工作日内可以完成”,珊博推了推眼镜:“addon 的制作分为三步。一是设计数据库集群的部署拓扑结构,二是设计数据库集群的参数模版,三是增加 addon yaml 配置文件。具体来说,……”

我仿佛看见了大象缓缓走进冰箱,赶紧示意珊博暂停:“addon 好像是 KubeBlocks 0.5 就已经具备的功能,为什么这两天发布的 0.8 里面感觉它有点若隐若现?”

“这是个好问题”,珊博又推了推眼镜:“KubeBlocks 0.8 把 addon 代码拆了出来,这样就能支持两边按不同节奏来发布了。比如说,KubeBlocks 的发布节奏是 1.5 个月一个大版本,如果用户想要接入一个新的数据库,他随时都可以写个新的 addon 并发布出来,再也不需要等 KubeBlocks 更新版本了。当然,还有其它的好处,比如说……”

吃不了抽象的苦,就要吃具象的苦,不争气的口水从眼角流下来。

Addon:一种高效、开放的拓展机制

上面这几个虚拟的小故事,是真真正正发生在 KubeBlocks 的研发过程中的。过程没有那么魔幻现实主义,但是讨论的激烈程度远胜于文章,毕竟研发同学们的奇思妙想只有经过深入的拷问,才可能真正变成产品的特性。规划赶不上变化的事情比比皆是,但也还是要在这不确定性中寻求确定性,正如在虚无缥缈的抽象理念中寻求具象的事实般重要。

所以,addon 到底是什么?我们最终达成了一个共识:

addon 是一种高效的拓展机制。通过 KubeBlocks Addon,开发者可以在 10 个工作日内添加一种新的数据库引擎到 KubeBlocks 中,并获得该数据库引擎特有的基础管理功能,包括但不限于生命周期管理、数据备份恢复、指标和日志采集等。

同时,addon 也是一种开放的拓展机制,是 KubeBlocks 与其它数据控制面软件的重要区别。我们尝试通过 addon 机制,定义数据控制面的接入标准,降低 Kubernetes 支持新数据库引擎的难度,加速数据库容器化的进程,并以此为基础推动云原生平台的应用深度与广度。这件事很难,但是做成了很有意义。

在具体实现上,addon 体现为存储在 Git 仓库里面的 helm chart 安装包,里面包含了支持一个数据库引擎所需要的拓扑信息、配置信息和操作脚本。KubeBlocks 官方社区提供的所有 addon helm chart 源码都可以在 https://github.com/apecloud/kubeblocks-addons 找到,安装包则全部放在 https://github.com/apecloud/helm-charts 的发布里面。开发者也可以根据需要,编写新的 helm chart 或者改写存量的 helm chart,提升 KubeBlocks 管理的数据库引擎种类和体验。

KubeBlocks 0.8 将存量数据库引擎的 helm chart 从 KubeBlocks repo 分离出来,并采取了 Apache v2 的授权模式,预期可以带来如下收益:

  • 数据库引擎种类和版本迭代,与 KubeBlocks 自身版本的迭代解绑。开发者不需要关注 KubeBlocks 的发版周期,随时可以接入新的数据库引擎或者版本,也方便终端用户在存量 KubeBlocks 集群上测试新的数据库引擎/版本。
  • 数据库引擎的定义实现了多版本,降低了 addon 升级可能造成的故障风险。数据库引擎的定义是一种“元数据”,对元数据的“更新”操作实际上会影响所有存量数据库集群。KubeBlocks 0.8 将元数据的“更新”操作变成了“新增”操作,让升级过程变得更加可控。

通过 addon 机制,KubeBlocks 社区已经支持了几十种数据库引擎,其中不乏一些优秀的国产数据库,比如 OceanBase、PolarDB-X、OpenGauss。如果您是数据库厂商,正在头疼如何满足客户提出的“云原生”诉求,可以尝试使用 KubeBlocks 快速解决这个问题。如果发现不能满足需求的地方,欢迎您联系我们提供帮助。

开源合作:https://github.com/apecloud/kubeblocks

商业合作:marcom@apecloud.com

本文由mdnice多平台发布

这篇关于KubeBlocks 研发轶事之 addon 抽象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/634742

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

工厂方法模式和抽象工厂模式的区别

区别  工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。    一个抽象工厂类,可以派生出多个具体工厂类。    每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。    一个抽象工厂类,可以派生出多个具体工厂类。    每个具体工厂类可以创建多个具体产品类的实例。    区别: 工厂方法模式只有一个抽象产品类

Java基础入门 【第七章 抽象、接口、内部类、枚举】(二)

匿名内部类书写格式: 父类或接口类型变量名=new父类或接口(构造方法实参列表){ //重写所有的抽象方法 @Override public返回值类型method1(形参列表){ 方法体实现 } @Override public返回值类型method2(形参列表){ 方法体实现 } //省略... }; //匿名内部类对象调用方法 变量名.重写方法(实参列表); 匿名

【秋招笔试】9.07美团秋招改编题(研发岗)

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:可插入的Adapter(使用抽象操作)

 示例:可插入的Adapter(使用抽象操作) 说明: 当其他的类(如A)使用一个类(如C)时,如果所需的假定条件越少,这个类(如C)就更具可复用性。如果将接口匹配构建为一个类(如B),就不需要假定对其他的类可见的是一个相同的接口(如C接口)。也就是说,接口匹配使得我们可以将自己的类(如C)加入到一些现有的系统中去,而这些系统对这个类(如C)的接口可能会有所不同。 A  =〉 C

《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:基于抽象工厂的迷宫

 示例:基于抽象工厂的迷宫   实现:     如果TMaze.Create是传递一个对象当作参数来建立rooms、walls及doors;如此你可以以不同的参数来改变rooms、walls及doors的类。  请注意MazeFactory也就是工厂方法(Factory Method)的一个集合;这是最通常实现抽象工厂模式的方式。同时请注意MazeFactory不是一个抽象类

Python知识点:Python研发中,如何使用Docker进行容器化开发与部署

在 Python 开发中,使用 Docker 进行容器化开发和部署,可以帮助解决跨平台兼容性问题,使应用更易于迁移、测试和部署。Docker 可以将 Python 应用程序及其所有依赖打包在一个独立的容器中,确保在任何环境中运行一致。 以下是使用 Docker 容器化 Python 应用程序开发与部署的基本流程。 1. 安装 Docker 在开始使用 Docker 之前,首先需要在开发机器或

反常识!科研巨头扎堆夕阳行业?A股研发之王是它?

这是邢不行第 119 期量化小讲堂的分享 作者 | 邢不行 2023年华为研发费用再创新高,高达1600亿。 多年高研发投入让华为在一众领域遥遥领先。 研发费用占全年收入23% 遍观全球,各行各业巨头也极为重视研发。 2022年全球研发投入排名 细数它们的成功史,大抵都离不开投入研发、收入增加,继而加大研发力度,收入狂飙这一路径。 高研发投入能否作为判断公司好坏的依据?

设计模式系列之抽象工厂模式

本文继续介绍23种设计模式系列之抽象工厂模式。 前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例。 例子背景: 随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件。于是这个工厂开始生产空调和发动机,用来组装汽车。这时候工厂有两个系列的产品:空调和发动机。 宝马320系列配置A型号空调和A型号发动机,宝马23