【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

为了让你搞定数据库选型,这些工程师重写了 26 万行代码

  • 2021-10-07
  • 本文字数:3995 字

    阅读完需:约 13 分钟

为了让你搞定数据库选型,这些工程师重写了 26 万行代码

无论多么有主见的架构师,在做数据库选型的时候,也可能会犯难。


传统 SQL、NoSQL 还是 NewSQL?架构风格是以 久经考验的关系型数据库为主,还是偏向所谓原生的分布式架构?如果提及具体产品,那选择就更多了,TiDB、OceanBase、PolarDB、TDSQL、GaussDB、MongoDB…… 现在还有许多服务于新场景的产品,比如处理时序数据的 TDengine,处理图数据的 Nebula Graph……以及最老派又最完善的 Oracle。


如果从业务场景或即将面临的迁移成本来看,问题会更加复杂。牵扯到底层数据的选型和架构设计,有时更像一锤子买卖,一旦定了某种方案,再想替换代价可不是一般的大。


差不多在 10 年前,这事儿还没有那么棘手。Oracle、IBM Db2,二选一而已。但今时不同往日,这是一个数据量急速膨胀、业务高度复杂的时代,真正让人焦虑的不是单纯的选型问题,而是将“降本提效”推向极致的数字化转型问题。


那么,除了咬牙硬选一个数据库,或者基于现有数据库的基础上自研一套存储方案,真的没有其他路可走了吗?其实也有,只不过在分布式数据库热度越来越高的当下,显得有些“透明”,那就是中间件 + 多商业数据库的解决方案。


看到这个答案,你可能会有些失望。中间件方案出现的时间,尚在分布式数据库成熟之前。因此在业内很多架构师看来,这种方案在技术上不够超前,只能算是某种“过渡策略”,本质上是 NewSQL 数据库成熟前的无奈之举。


但来自金融等行业的诸多落地实践证明,事实可能并非如此。


我们为此特别采访了 全球顶级开源项目、数据库中间件产品 Apache ShardingSphere 的作者,以及背后商业公司 SphereEx 的 CEO 张亮,他一直对分布式架构设计保持关注,曾是京东科技架构专家、当当架构部总监。关于整个数据库行业的选型和架构设计问题,张亮有着特别的思考。

可插拔架构,或许是答案


“需求是多元化的,一部分用户适合分布式数据库,一部分用户适合用数据库中间件,甚至还有一部分适合两种都用,没有太绝对的答案”,张亮说。


这是个无错的答案,但也可以得出一个推论:如果场景是多元化的,数据库是多元化的,那么架构师应该尽量规避扩展性、兼容性不好的数据库解决方案。


无独有偶,Oracle ACE、数据库专家韩锋也在其个人公众号里发表过类似的观点:“(关于数据库选型)为了规避路线选择、厂商绑定的风险,比较现实的方法是选择一款兼容通用性协议的产品,并且在应用中仅使用标准数据库的用法。”


二者结合起来,我们能抽离出一些关键词:中立、兼容、标准,对于很多在选型问题上难以抉择的架构师来说,这让中间件路线看起来更加实际。


与数据库行业不同,以 ShardingSphere 为代表的中间件层由于不涉及存储引擎,如今已将目光从单纯的水平扩展问题转向业务支持和灵活性问题,也因此得以实现对异构数据库的统一管理。


灵活性、兼容性,是数据库中间件产品的核心,也是解决“数据库选型”问题的关键。据张亮透露,近两年的主要研发重点一直是可插拔架构,以将灵活性和兼容性推向极致。好消息是,ShardingSphere 的可插拔架构预计将在未来一段时间内正式上线。


所谓的可插拔架构,是指在架构层面,将整个系统分为基座和插件两部分,插件部分互相隔离、互不影响,基座可以自由接入多个插件。可插拔架构多见于相对轻量级的前端领域,属于微前端体系的一部分,但在基础软件部分则相当少见。


张亮认为,可插拔架构形式是未来数据库中间件的主要趋势之一,一则产品需要高度的灵活性,二则还有大量的能力需要被构建,比如数据安全、异构数据网关等功能,可插拔架构自然成为了产品核心。


话虽如此,但可插拔架构的设计难度却很大,让人望而生畏。这种设计难度,大致分可为两部分来谈:

第一,可插拔架构是对 OCP(Open-Closed Principle)原则的一次彻底执行,力图仅通过增加新模块来满足新需求,旧有模块完全保持 0 修改。这意味着,可插拔架构要清晰地定义出,什么是基座,什么是插件。它对上层、下层都无感知,一切面向接口。用张亮的话说,就是:“完全面向一个抽象的、虚无的东西,不涉及任何的业务细节”。


比如,ShardingSphere 转向可插拔架构后,其核心流程里已经没有分片功能了,分片会作为可插拔能力的一部分接入到服务中。对于数据库中间件来说,几乎属于产品重定义。与许多人对数据库中间件的固有认知相悖,因为在许多人的理解中,数据库中间件不就是为了分库分表而存在的吗?


但实际情况是,单体数据库的覆盖场景依然很多,分库分表并不是 0 级功能。这是在架构层面,必须具备的关键洞察。


第二,与微服务相似,只要涉及服务拆分,就会涉及颗粒度问题。对于可插拔架构来说,需要插件化的不一定只是产品功能,比如两阶段强一致事务和柔性事务,也是能够实现可插拔的。


基于这些拆分问题,ShardingSphere 把可插拔架构分为三层,分别是内核层、功能层、生态层,分别面向数据库内核、企业功能、数据库生态进行可插拔设计。其中,查询优化器、分布式事务引擎、调度引擎等是内核层的可插拔模块;数据分片、读写分离、数据库高可用、数据加密、影子库都是功能层的可插拔模块;数据库协议、SQL 方言等则是生态层的可插拔模块。


要实现可插拔架构,除了设计难度和颗粒度拆分,其工作量也令人叹为观止。ShardingSphere 有 190 多个模块,近 43 万行代码,核心 Java 代码 29 万行,张亮回忆道:“为了做可插拔架构,老代码留了不到 1/10。”这意味着,有近 26 万行的核心代码被重写了。


可插拔架构是 ShardingSphere 追求灵活性最重要的标志之一,但它对灵活性的追求又不仅限于可插拔架构。


比如,ShardingSphere 还额外提供了两种部署形态,分别为 JDBC 和 Proxy。JDBC 是 Java 访问数据库的标准接口,Proxy 是中间件最常见的服务形式,且两者经常能够在同一环境下进行混用,以满足多用户下多类型访问的需求。


这样多种类型的服务接口,一方面服务了不同类型的开发人员,另一方面也实现了性能层面的可定制化,工程师可以结合场景调整数据库分片的键值,实现不同场景下,性能的最大化提升;反之,“全包式”数据库方案,则往往需要放弃部分灵活性,以相对中庸的方案来换取无感知、低侵入的使用体验,体现了与数据库中间件方案的差异性。

真正的开源项目,是社区说了算


如果我们要做技术选型,需要注意的另外一点是,备选产品的维护主体是谁,备选产品的基因是什么,是开源,还是闭源?这与搞清楚产品的技术方案、技术理念同样重要。


当下,无论开源的热度如何,大部分分布式中间件、分布式存储、数据库都是闭源的,这是不争的事实。


看到的是,大量的开源创业公司正在出现,资本也在快速进入,比如 SphereEx、欧若数网、Neo4j,以及大家熟知的 PingCAP。同时也有许多数据库宣布开放源代码,比如 OceanBase、Tendis、openGauss。


为什么在数据存储领域,开源这么引人关注?


一个可能的答案是,开源在技术层面的想象空间更大,对开发者更友好。就像 ShardingSphere 的可插拔架构,架构设计完成只是第一步,后续还有海量的不同模块的开发工作。对于创业公司来说,如果不借助社区的力量,美好的可插拔架构也可能成为公司的研发黑洞。


产品的中立性,也是导致开源项目集中迎来爆发的另一个要素。尤其是在数据存储领域,最美好的答案可能是无依赖、跨多云,最差的答案才是被单一产品强绑定。


当然,开源再好,也抵不过现实的骨感。开源两年,Star 几百,花钱不少,效果为零,这恐怕是众多开源项目的常态。社区的健康程度,往往直接定义了开源项目的生死,这导致即便架构师想做选型,也没有太多的好选择。


在张亮看来,一个开源项目能不能成功,大致可以分为三个维度来考察


第一,能否耐的住寂寞,团队是真的相信开源,还是拿开源当做商业上的捷径。一个最简单的考核指标便是运营时间,“开源项目一定要度过‘静默期’才会迎来爆发,只做了半年、一年,是没法预估项目未来的”,张亮说。


第二,一些必备的运营技巧。张亮一方面把 ShardingSphere 捐献给 Apache 基金会,另一方面也带着项目参与了许多活动,比如谷歌举办的黑客马拉松、编程夏令营,除国内用户以外,也吸引了大批的海外开发者、学生参与到社区建设中来。


第三,观念的转变,也是最关键的部分。从小处着眼,是从“自己开发”到“社区开发”;从大处着眼,就是在真正意义上拥抱开源,而不只是嘴上说说。


“ShardingSphere 的项目发展是受社区的引导。比如说,社区认为 ShardingSphere 该做基于影子库的压测和可观察性,ShardingSphere 就真的做了。这些都不是项目自上而下的设计,只要需求爆发,且在项目的 Scope 内,就可以实现。但如果一个公司在运营开源项目时,遇见所谓的偏离主线设计的社区诉求,就拒掉它,那么大概率也会影响这个项目的成长,因为它不算真正扎根社区的开源项目。”

未来的发展方向


目前相关的中间件产品,还是把核心聚焦在水平分片、弹性迁移和 MySQL 实例管理上。


但某种程度上,ShardingSphere 可能代表了未来数据库中间件发展的核心方向之一,即 0 级功能是可插拔,1 级功能才是数据分片。开源和可插拔架构结合在一起,等于打开了数据库中间件在技术和产品维度的想象空间。张亮透露,SQL 审计、基于数据的权限引擎、多租户、TTL(Time To Live)都会被提上开发日程。


除此之外,ShardingSphere 还有一个正在开发中的构想,叫做 Database Mesh,力争实现数据库上云的原生体验,但还需要一定的开发周期。


Database Mesh 会在数据库集群之上,封装一层代理,做智能的负载均衡。传统的负载层无法识别 SQL 特征,只能用轮询或权重的方式透传。但 Database Mesh 会根据不同的 SQL,匹配计算实例的标签,更加智能选择要访问的数据库计算或存储节点。


对于架构师而言,最重要的是打开技术选型的眼界与想象力。分布式数据库对业务的侵入性更低,但中间件方案规避了对厂商的依赖问题,究竟如何选择,要以实际场景为判断依据。但这并不妨碍我们给出阶段性的推论:


很可能,在未来的 5 - 10 年间,数据库中间件都是底层架构最重要的解决方案之一,值得每一个架构师认真调研。

2021-10-07 16:438263

评论 2 条评论

发布
用户头像
软文,how much

2021-11-13 17:01
回复
用户头像
神马文章,SQL都写成SOL
2021-10-11 14:41
回复
没有更多了
发现更多内容

发现一个开源项目优化点,点进来就是你的了

捉虫大师

开源 性能优化 sentinel 5月月更

Wallys/QCN9074 /11ax/ 4x4 /5G M.2

wallys-wifi6

QCN9074 11 ax

知识管理在企业创新中的作用

小炮

知识管理

DCM:一个能够改善所有应用数据交互场景的中间件新秀

华为云开发者联盟

数据处理 数据交互 多样性数据源 DCM

EAM系统解决方案

低代码小观

资产管理 企业管理系统 企业设备管理 设备巡检管理系统 企业管理软件

企业网站该怎样选择网站域名?

源字节1号

软件开发

直播预告丨 OpenHarmony 标准系统多媒体子系统之相机解读

OpenHarmony开发者

OpenHarmony

洞见科技数据科学家王湾湾:隐私计算助推金融业数字化转型

洞见科技

数据挖掘 金融科技 隐私计算

墨天轮高分技术文档分享——Oracle升级迁移篇(共96个)

墨天轮

MySQL 数据库 oracle postgresql 国产替代

全场景式全流程监控,博睿数据为券商IT运维难题提供范例

博睿数据

数字化转型 博睿数据 数据链DNA 证券行业

JavaScript== 和 ===

源字节1号

软件开发 前端开发 后端开发 小程序开发

青藤《关键信息基础设施增强保护安全实践》论文入选中国科技核心期刊

青藤云安全

信息安全 关键信息 安全保护

单机GPU云服务器的深度学习训练和预测模型分析

Finovy Cloud

云服务器 GPU服务器

国内私有云厂商有哪些?排名怎么样?

行云管家

网络安全 私有云 私有云厂商

创建自定义的配置信息

Wk

5月月更

Python 编程

兮子

5月月更

直播预告 | 服务网格规模化应用下的 Istio Sidecar 灵活配置实践

阿里巴巴云原生

阿里云 云原生 直播 服务网格 Istio Sidecar

有没有支持vmware/openstack/zstack私有云的堡垒机?

行云管家

私有云 云服务器 堡垒机 行云管家

剧透!2022开发者关注的开源技术全解析

华为云开发者联盟

开源 mindspore kubeedge OpenHarmony open Euler

离线数仓建设,企业大数据的业务驱动与技术实现

袋鼠云数栈

web前端培训 | Tree shaking问题排查

@零度

web前端开发

技术分享| 浅谈IM 产品中的“缩略图”功能

anyRTC开发者

音视频 IM 实时消息 发送图片 缩略图

java培训 | API 接口如何实现统一格式返回

@零度

JAVA开发 API

Wallys/QCN9074 /11ax 4x4 6G M.2

wallys-wifi6

wifi6 m.2

使用 Amazon DevOps Guru for Serverless 自动检测 Lambda 函数中的运行问题

亚马逊云科技 (Amazon Web Services)

DevOps Lambda severless

GPU不可不知的指标项

AIWeker

人工智能 gpu 5月月更

数据治理项目调研环节思考

agileai

项目管理 数据中台 数据仓库 数据治理 主数据

极客星球 | 机器学习赋能商业地产决策进阶

MobTech袤博科技

开源夜聊栏目开播:聊聊新晋 CNCF 项目 sealer 背后的故事

阿里巴巴云原生

阿里云 开源 云原生 直播

主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了

葡萄城技术团队

数据分析 BI 用友

Spring Cloud OpenFeign 的 5 个优化小技巧!

王磊

SpringCloud

为了让你搞定数据库选型,这些工程师重写了 26 万行代码_开源_王一鹏_InfoQ精选文章