【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

专访京东科技张亮:本土开源需形成吸纳开发者的靶心丨开源创新 30 人

  • 2021-01-27
  • 本文字数:4794 字

    阅读完需:约 16 分钟

专访京东科技张亮:本土开源需形成吸纳开发者的靶心丨开源创新30人

据 InfoQ 不完全调研数据显示,仅在过去一年,国内便先后有超过 10 家开源企业获得新一轮资本助力,融资纪录为近年来开源赛道最高。与此同时,大公司开源步伐加速、国内第一家开源基金会正式成立等消息,也成为了去年本土开源领域的重磅新闻。

 

随着越来越多的企业、人才、资金等资源不断涌入,在本土开源这一赛道之上,未来将涌现出更多优秀的开源参与者。然而,在参与开源的过程中,更多有关于企业开源治理、社区运营等方面的难题,却依然困扰着每一位投身开源的人。

 

去年 4 月 16 日,Apache 软件基金会宣布 Apache ShardingSphere 毕业并成为顶级项目,成为基金会内首个分布式数据库中间件项目,这意味着 Apache ShardingSphere 在开源实践上取得的成绩,获得了国际顶级开源组织的认可。而作为 Apache ShardingSphere 项目 VP & 创始人,张亮对于开源项目治理及社区发展也在经过基金会的孵化洗礼后变得更加的深刻了。


近日,InfoQ 「开源创新 30 人」专题访谈人员有幸约访了张亮先生,就企业开源治理、开源社区发展等方面话题,进行了交流。

ShardingSphere 的三次蜕变


在开始企业开源治理及开源社区建设的话题之前,首先得从张亮及 Apache ShardingSphere 的发展说起。

 

截至目前,ShardingSphere 项目已有 150+ 公司采用,并涵盖金融、电商、数字化与云服务、互联网教育、出行、物流、医疗健康等各行各业,在京东内部也被广泛采用。事实上,从写下第一行代码到取得今天这样的成绩,ShardingSphere 主要经历了三个阶段的发展。

 

在开源初期,当时还被命名为 Sharding-JDBC 的 ShardingSphere 主要由张亮个人主导,是一款基于 Java JDBC 接口实现的数据库分库分表管理框架。

 

据张亮介绍,当时决定写下第一行代码的原因,主要是因为行业内的数据库中间件长期没有足够成熟且能让大家广泛采用的产品。“不同阶段的开源项目都让人觉得缺点什么,比如说对 SQL 的支持度不高,工具也不成熟,而且开源一段时间就没人维护了,都是些半成品。”张亮表示。

 

抱着改变这一现状的初衷,当时对社区都没什么概念的他便写下了 Sharding-JDBC 的第一行代码。

 

而在第一个版本的产品成型并发布后,由于 Sharding-JDBC 很好地屏蔽掉了数据持久化过程中分库分表等方面的实现细节,让开发者能够更轻松地实现数据库的水平扩展,产品开源后便获得了开发者的一致好评。

 

随后,伴随着 Sharding-JDBC 在开源社区得到认可,当时打算自研分布式数据库的京东科技团队(原京东数科)也找到了张亮,有意邀请他加入。再三考虑后,张亮最终加入京东科技,全职做起了 Sharding-JDBC,也从此开启了 Sharding-JDBC 第二阶段的发展旅途。

 

据张亮介绍,由于设计之初 Sharding-JDBC 主要是基于 JDBC 标准接口实现的,整体上更像是一款 Java 数据分片框架,因此也存在只能用于 Java 上的局限性。但事实上,业务应用开发语言不止 Java 一种,实现从一个 Java 框架到更为通用的跨语言数据库中间件产品的转变, Sharding-JDBC 还有许多需要提升的地方。

 

首先是品牌的升级,将 Sharding-JDBC 改名成为了 ShardingSphere ,在保留原来开源框架累计下来的人气与品牌关注度的同时,进一步强调自己已经跳出了最初 Java 框架的固有产品形象。

 

与此同时,张亮还开始着手运营与组建社区,考虑将 ShardingSphere 推入 Apache 基金会,将其发展成为更加大众化的、能够成为开源数据库中间件领域标准的产品。

 

2018 年 11 月,伴随着 ShardingSphere 正式进入 Apache 孵化,随后又于 17 个月之后正式毕业成为 Apache 顶级项目,在先后完成了社区组建,同时遵循 Apache 的规则将 ShardingSphere 所有权从公司与个人转向社区所有之后,ShardingSphere 基本完成了第二阶段的转变。

 

在进入第三阶段之后,可插拔架构的提出,也开始成为了 ShardingSphere  发展需要考虑的问题。

 

据张亮介绍,可插拔思路的成型,主要是由于在使用 ShardingSphere 的过程中,京东内部除了对数据分片和读写分离等需求外,也逐渐衍生出了包括数据加密、影子库压测等这一类的需求。这些功能如果分别让各个系统部门自己去实现,就会出现重复造轮子的现象,但如果能够将这些功能中比较通用的能力抽离出来,集成到 ShardingSphere 之上,这就会极大地减少公司整体的工作量。

 

而在将这些功能集成到 ShardingSphere 的过程中,如何实现功能之间的互相隔离,不影响主架构运行,成为了 ShardingSphere “可插拔架构”提出的关键。

 

据张亮介绍,在技术架构上,ShardingSphere 的可插拔架构划分为面向数据库内核、企业应用和开源生态的三个层级。

 

L1 内核层:面向数据库内核,包括查询优化、分布式事务、核心执行链路、调度引擎和分布式治理等。L1 内核层是 ShardingSphere 通过对行业的思考所提供的解决方案。通过可切换的双引擎,在分布式数据库尚未成熟的变革阶段提供中间件增量服务;并在终将到来的分布式数据库成熟之时提供面向分布式的查询优化、事务和存储引擎。希望 L1 内核层的可插拔设计,能帮助传统数据库向分布式和云原生阶段提供平稳的演进路径。当然,目前内核层还属于筹划阶段。

 

L2 功能层:面向企业应用,包括数据分片、读写分离、数据库高可用、强一致多副本、弹性迁移、数据加密、影子库以及其他扩展。它是开发者可以自行拓展的重点部分。L2 功能层对于企业级应用意义重大,目前 L2 功能层已经较为完善。

 

L3 生态层:面向开源生态,包括 SQL 方言、数据库协议以及数据网关。除了对单一数据库兼容度的提升,对异构数据源的打通数据网关也在探索中。 L3 生态层将是 ShardingSphere 对接和融入开源生态的标准。

 

从最初基于 Java 语言开发并开源的数据库分库分表框架开始,ShardingSphere 一路随着市场的需求不断更新,先后经历了功能升级、治理模式切换,进入开源基金会等过程,逐渐演化成为了一个分布式的数据库生态体系。

社区大于代码的含义是“独行致快,众行致远”


一路转型升级的过程中,张亮对于开源的理解也在不断地提升。

 

从写下第一行代码到第一个开源版本发布,张亮用了三个月就完成了所有工作,在之后两年的运营过程中,张亮个人贡献的代码量也一度达到 80%以上。但是开源之后,如何让整个项目长期稳定地运行下去,却成为了让张亮思考最多的问题。

 

一个项目的代码再好,但如果他是属于一个人的,那其实它的风险是非常大的。因为随着维护者的心情变化,可能这个项目可能会忽然就失去维护,或者开始维护很慢。从企业使用的角度来看,这样的项目是不被看好的。

 

在张亮看来,一个开源项目想要真正取信于人,一定是它要有一个稳定的基座,这个基座不能是第二天就会消失的东西。


而在亲历了 ShardingSphere 从进入 Apache 孵化到毕业的全流程之后,他为自己的这一理念找到了新的解释。

 

在 Apache 基金会内,“社区大于代码”的理念渗透到整个基金会运营决策的每一个环节,一句话便高度概括了 Apache 的运营发展之道。但在张亮看来,“社区大于代码”其实又可以解释为“独行致快,众行致远”。

 

“一个人去写代码可能会很快,但是只有更多的人一起参与进来,即使当项目的创始人累了不想走了的时候,背后也有别人在推着他向前走,并且经常会有一些有趣的新方法出现,刺激大家一起往前。”张亮表示。一个有一群人参与的社区,才是最有魅力的社区。

 

关于如何打造一个持续活跃、健康发展的社区?张亮总结了以下五点经验:

 

第一,需要多去听多看。通过 GitHub 和邮件列表这些渠道,再小的声音都能够反馈到社区内部,项目运营人员通过这些渠道倾听参与者的声音,能够提炼出更加通用、普适的需求,进一步迭代出更加完善的功能,让开源项目的社区变得更加有活力,发展更为稳健。

 

第二,要保持英文化。社区是多元的,上面聚集了来自不同国家、地区乃至于文化背景的人,我们不希望社区是一个割裂的状态,统一用英文沟通,是对社区多元化的一个最基本的保障,它不会让一些想参与它的外国人,因为语言壁垒最终无法参与。

 

第三,每一次问题提交都要做到可检索。所有用户提的问题都需要尽量留痕,如果某一用户提了一个他自己没想清楚的问题,或者抛了一个空指针之后又关掉了页面,最好的方式就是提醒他将自己的问题完善或改到容易被检索的状态,因为这些问题可能之后会有其他的人看到,能给他人带来启发,这是存在价值的。与此同时,也需要定期去做一些问题的梳理与标签设置,让社区能够更好地了解项目当下的进展。

 

第四,需要有一个强大的测试系统。因为参与开源的人比较多,沟通的工作量也非常大,如果提交者上传的代码没有经过必要的前期测试就通过了,这导致的结果是,项目正确性的责任全部由后面代码审核的人负责,代码实现的分工将变得不那么合理。 

 

第五,要避免重复造轮子。需要站到更高的维度去看问题,开源的生态还包括社区的交流共享,别人可能会用你的项目,你也需要适当地去采用别人的项目,避免做一些重复造轮子的事情。

 

“对于开源而言,最重要的不是代码的实现,而是代码背后的服务,及其对应的整个社区生态所蕴含的价值。”张亮表示。而在这一经验的指导和超 200 名社区参与者的共同努力下,Apache ShardingSphere 在 2020 年 Linux 基金会旗下的 OpenSSF 的开源项目关键评分中,取得了 Java 语言类第 72 名,国人主导的开源项目第 1 名的亮眼成绩。

企业需要开放更多的开源岗位

 

在刚过去的 2020 年,伴随着越来越多基于开源模式的企业在商业上获得市场认可,国内出现了一批被投资者选中的开源项目,开源创业的春天,已然来临。

 

然而对于本土开源而言,在开源越来越热的当下,本土开发人员底层研发能力薄弱,工程能力大多停留于运用层的局限性,也正在制约着本土开源生态的发展成型,这些问题并不是短期内能够解决掉的。

 

在参加了无数场国际顶级的开源峰会之后,张亮最大的一个感触是,国外参会的开发者在 40 岁到 60 岁之间的人员依然很多,但是国内的参会者却普遍在 30 多岁之间。

 

“技术本身还是一个熟练工种,你在这个领域沉淀得越深了,累积的能力也便越强。”张亮表示。在其看来,一个人在某一领域的思维变得非常活跃,而且经验也很丰富的时候,往往是这个人在这个领域耕耘了超过十年以上的时候,但国内的工程师在整个时间段的时候,可能已经转移到其他岗位上了。

 

未来本土开源生态的完善,仍有很长的路需要走。而针对这一现状,张亮给出的建议是——大型企业在参与开源治理的同时,需要开放更多全职的开源岗位。

 

“大型科技公司其实是希望有自己开源方面输出的需求的,这种输出的目的,其实是希望寻求对于行业标准的影响,进一步占领更多的话语权,赢得行业关注和口碑。”张亮表示。在其看来,虽然大型企业参与开源本质上并不是 100%奔着开源去的,但如果能让这些企业内参与开源的人投入 50% 的时间去做开源,就已经很足够了。

 

“一个开源项目如果全部是通过业余时间去完成的话,那么这个项目的发展在一定程度上是会很慢的。”张亮表示。在其看来,大型企业需要开设更多的开源岗位引导开源社区发展。

 

国内从来不缺优秀和聪明的开发者,但缺少的是能够让开发者去持续付出心血的环境,以及稳定的项目基石。“当一个人的热情被投入到一个不合时宜的地方时,也许第二天承载着这些热情的项目就没了,这将会很糟糕,投入的价值也不大。”张亮表示。

 

他希望能够将 ShardingSphere 打造成一个能够吸纳开发者热情的靶心,带给开发者更多正向的回报,为本土开源生态的建设贡献一份自己的力量。


高端访谈推荐[新基建50人]、[开源创新30人]



「中国技术力量」之「新基建 50 人」以及[开源创新 30 人]系列专题报道火热进行中,我们长期专注于发现新基建以及技术开源领域内驱动产业数字化转型、智能升级、融合创新的科技型组织机构、企业部门 ,并将重点采访其中的产业发展引领者,技术部门中坚力量等人士,深度传播他们对于新基建、开源创新等方面的技术理解、产业需求以及商业化探索尝试。欢迎大家点击超链接申请免费采访报道名额:>> [新基建50人]、[开源创新30人]

2021-01-27 08:353925

评论

发布
暂无评论
发现更多内容

如何避免这10类常见故障?B站数据库架构设计做了这5步……|TakinTalks稳定性社区

TakinTalks稳定性社区

数据库治理 故障治理

Web3.0杂谈-#002(48/100)

hackstoic

Web3.0

ESP32-C3入门教程 基础篇(六、TIMG 硬件定时器 与 软件定时器)

矜辰所致

软件定时器 ESP32-C3 9月月更

FaissPQ索引简介

转转技术团队

深度学习 Faiss 向量计算

Linux内核详细笔记目录

简说Linux内核

嵌入式 Linux内核 驱动

Python语法之循环

攻城狮Wayne

Python 9月月更 循环控制

客户说你的 SaaS 产品不好用怎么办?

产品海豚湾

产品经理 SaaS 客户关系管理 产品运营 9月月更

ESP32-C3入门教程 基础篇(七、LEDC — LED PWM 控制器)

矜辰所致

pwm ESP32-C3 9月月更

多维分析利器Druid

穿过生命散发芬芳

Druid 9月月更

【云原生 | 从零开始学Kubernetes】四、Kubernetes之YAML文件详解

泡泡

云计算 云原生 k8s 9月月更

Python语法之流程控制

攻城狮Wayne

流程控制 9月月更 嵌套

C++学习---__gen_tempname函数原理分析学习

桑榆

c++ 源码分析 9月月更

易观千帆联合《扬子晚报》发布苏州市手机银行应用活跃人数榜单

易观分析

金融 手机银行 苏州

JavaWeb核心之ServletConfig

楠羽

Servlet 笔记 9月月更

中移链DDC-SDK技术对接全流程(三)

BSN研习社

数字化转型趋势|汽车电子软件开发工具链必看

laofo

DevOps cicd 研发效能 持续交付 DevOps工具链

【云原生 | 从零开始学 Kubernetes】三、Kubernetes集群管理工具kubectl

泡泡

Docker 云计算 云原生 k8s 9月月更

Hybrid App会靠小程序崛起吗

Geek_99967b

小程序

Java基础科普

吉师职业混子

9月月更

异常场景测试

转转技术团队

测试方案 异常测试 用例设计

Spring事务管理

十八岁讨厌编程

Java 后端开发 9月月更

架构实战营模块一作业

东尼大锤

网安超基础一周目

吉师职业混子

9月月更

赛事升级,烽烟正燃!网易云信 Innovation 2022 开发者大赛等你参加!

网易智企

开发者大赛

ShareSDK Uni-app 插件

MobTech袤博科技

uni-app ios android

注册中心

想要飞的猪

zookeeper nacos Eureka

【Kafka】编译 Kafka 源码并搭建源码环

石臻臻的杂货铺

kafka 9月月更

Python语法之列表

攻城狮Wayne

列表 元素 9月月更

SpringMVC初识

十八岁讨厌编程

Java 后端开发 9月月更

Spring事务角色与事务属性

十八岁讨厌编程

Java 后端开发 9月月更

2022-09-22:以下go语言代码输出什么?A:5、B:不能编译;C:运行时死锁。 package main import ( “fmt“ “time“ ) func main

福大大架构师每日一题

golang 福大大 选择题

专访京东科技张亮:本土开源需形成吸纳开发者的靶心丨开源创新30人_编程语言_周文猛_InfoQ精选文章