我在京东这一年—张亮

本文由张亮原创,首发于京东数科技术说微信公众号,详情点击原文连接html


640?wx_fmt=jpeg


「摘要」张亮,数据库管理部资深架构师,Apache ShardingSphere发起人 & PPMC热爱开源,目前主导开源项目ShardingSphere(原名Sharding-JDBC)和Elastic-Job。擅长以java为主分布式架构以及以Kubernetes和Mesos为主的云平台方向,推崇优雅代码,对如何写出具备展示力的代码有较多研究。java

目前主要精力投入在将ShardingSphere打造为业界一流的金融级数据解决方案之上。ShardingSphere已经进入Apache孵化器,是京东集团首个进入Apache基金会的开源项目,也是Apache基金会首个分布式数据库中间件。git


在过去的2018年,我所负责的ShardingSphere,有幸成为京东集团首个进入Apache基金会的孵化项目,很荣幸地入围集团技术金项奖提名。我是2018年初入职,时间过得真快,不知不觉已经整整一年。2019年的2月5日恰逢正月初一,写下此文记录我这一年的所闻、所见、所感与所得。
github


  契机 —— 加入京东  


加入以前,我在另外一家互联网公司负责架构部,并倾力于开源。任职期间,我开源了两个项目:分布式调度框架Elastic-Job和数据库分库分表中间件Sharding-JDBC。对这两个项目,我投入了至关大的精力,也由此在开源界收获了较为良好的口碑。数据库

除了本身的开源,我很是愿意帮助其余开源项目成长和进步。我曾经主导将架构团队开发的由Dubbo fork而来的分支DubboX捐献回Apache Dubbo;也曾经为公司的重点项目的基石——Apache Mesos进行本地化宣传,并得到了由mesosphere官方承认的DOCS宣传大使的荣誉;也曾在Apache Skywalking的推广初期帮助它在公司落地等等。在个人认知中,我愿意将开源当作是面向全世界技术人员的礼物,它应该能够跨越公司、跨越种族、跨越信仰,让对技术自己感兴趣的人创建链接。apache

为了寻求更广阔的天地,一年前我决定出来看看机会。由于可以作的方向比较多,因此我反而以为犹豫不定。有公司想邀请我去主导Kubernetes平台的搭建,也有公司愿意让我去帮助他们作有意向进入Apache的开源项目。但对于我来讲,内心种下的种子始终难以舍弃,投入巨大精力的Elastic-Job和Sharding-JDBC,我很是但愿将它们的其中之一推向Apache,成为世界顶级项目。所以,当京东的领导和同事跟我沟通时,我意识到了让Sharding-JDBC在京东集团生根发芽,并推向Apache国际舞台,不只可让其对公司基础设施建设贡献力量,也可让它在国际化舞台上大展拳脚。这正是我心之所向,所以我放下犹豫,义无反顾的决定加入这个团队。后端



  扩张 —— 野蛮生长  


来到这里以后,我所面对的是全新的挑战。Sharding-JDBC还远未达到京东对分布式数据库中间件的需求。从部署架构来说,它是一个jar包,即smart client形态,并不具有上云的能力;从功能来说,它仅仅是一个分库分表中间件,缺少对分布式事务的处理能力,难以造成功能上的闭环。为了让Sharding-JDBC快速成长,我决定扩充Sharding-JDBC的范围,将它升级为一个生态圈,为不一样的用户提供更加多样化的选择。微信

在与领导沟通和交流后,扩展的方向定位到了接入端的扩充以及功能闭环这两块。首先要完成的是让Sharding-JDBC具有在云上部署的能力,即提供代理端。可是我以前有过使用Netty的经验,但并无开发MySQL协议的经验,为了可以尽快验证这条技术路线的可行性,我全身心投入到MySQL代理端的开发工做中,披星戴月回家已成常态。架构

在开发过程当中遇到了各类问题,例如:对MySQL协议的不熟悉、MySQL面向开发者的官方文档的部分不完善、缺少调试经验等,都使得开发进展寸步难行。通过了无数的尝试与努力,终于迎来了阶段性成果。在一个多星期的全天候的努力付出以后,于2018年春节前夕将基本功能跑通。同时,我利用春节休假的期间将后端的数据分片能力彻底挂接到代理端架构中,彻底验证了这条技术路径的可能性,并提供了初始可用的版本。实际上,开发一个产品的原型,并不须要花费过久的时间,Sharding-JDBC的原型用了两周的时间就开发完毕,而此次代理端的原型也基本就是两周,其后续工做更多的是完善。并发

我一直对Service Mesh架构以及Sidecar模式青睐有加,但愿能将Sharding-JDBC
完美的融入Service Mesh中,所以早就有了研究一个数据库中间层sidecar的想法。春节事后,我将思路梳理成文,并在InfoQ发表《Service Mesh是大方向,那DatabaseMesh呢?》[https://www.infoq.cn/article/database-mesh-sharding-JDBC]。它就像是一块石子投入平静的湖面,激起了各类关于Mesh的讨论。

在Smart Client、代理端以及Sidecar这三驾马车的想法渐渐成型以后,Sharding-JDBC这个项目名称已经再也不适合。顾名思义,Sharding-JDBC的寓意是在JDBC
层进行数据分片的产品,随着接入端的扩展,JDBC已经没法涵盖它的所有范围。因为Sharding-JDBC在开源的两年中,累积了很多群众基础,所以,我也很难放弃原有的所有积累,转而彻底从零开始。我曾经想过将Sharding-JDBC做为品牌保留,而将原有的JDBC接入端更名为Sharding-JDBC-Driver,将代理端命名为Sharding-JDBC-Server,并增长Sharding-JDBC-Sidecar模块,但名称略有牵强。通过考虑权衡,决定保留Sharding-JDBC这个项目,将其做为总体项目的一个子项目,将代理端的接入端命名为Sharding-Proxy,Sidecar接入端则顺其天然地命名为Sharding-Sidecar,由它们共同组成一个生态圈,名字就叫作ShardingSphere,意为分片生态圈。由此,ShardingSphere的全景图以下:

640?wx_fmt=jpeg



  追寻 —— 厚积薄发  


ShardingSphere规划肯定以后,我开始紧锣密鼓的筹备将它推向Apache基金会孵化器的事宜。在Apache Skywalking发起人吴晟的帮助下,我完成了进入Apache基金会的准备,将

Proposal[https://wiki.apache.org/incubator/ShardingSphereProposal]早早的完成,满心期待的但愿将ShardingSphere一蹴而就地推向Apache。很快,咱们联系到了一位Apache的导师,Apache Cassandra的Michael。看完Proposal以及项目在GitHub的提交记录以后,Michael给个人反馈是:我我的在项目中的提交比重过多,超过了80%,Apache项目的社区目标是但愿即便项目的初创者休假两个月,项目也可以不受影响地持续前行。

这则反馈使我深切地意识到了团队的重要性。借此契机,我便开始着手团队的组建。很是幸运的是,在京东这样优秀的平台,有着足够多对技术充满热情的同窗。在团队组建之初就收获了来自其余各部门的同窗的青睐。再加上社招的给力,一个来之能战的团队以出人意料的速度组建完成。在团队成员的共同努力下,ShardingSphere在分片核心、接入端、分布式事务这几方面齐头并进,很快便取得了惊人的成绩。在团队愈来愈多的发挥协同做战的力量以后,我更加进一步的理解那句话:一我的前进能够走的很快;你们一块儿前进才能走的更远。

在分布式事务开发的过程当中,咱们与Apache Servicecomb项目负责人姜宁一拍即合。Apache Servicecomb中的柔性事务Saga很是适合于ShardingSphere,所以咱们达成战略合做,以更好的发挥各自优点。再加上以前和Apache Skywalking的良好合做关系,APM的集成也彻底交由其完成。快速的将资源整合,使得ShardingSphere的进展更加迅速。



  收获 —— 水到渠成  


以前短暂的挫折反而让ShardingSphere迎来了全新的发展。它迅速的完成了与两个起源于中国的Apache项目的高度整合,在事实上融入了Apache项目的生态圈。随着团队不断的磨合,ShardingSphere对Apache Way的理解也越发深刻,随着社区愈来愈开放和成熟,进入Apache基金会孵化器的想法又开始躁动起来。

2018年10月,恰逢Apache基金会的三位导师Roman、Craig、Justin访华,他们分别在上海和深圳呆一周。怀着对最初梦想的执着,我忐忑的踏上了旅程,但愿能说服其中几人,帮助ShardingSphere推向Apache基金会。

所幸通过了以前的经历,对于Apache基金会的规则我已基本了然于心,与导师们的交流十分愉快。他们三人均对ShardingSphere的评价很是高,并认为ShardingSphere不管是社区,Apache way,项目的规范度,甚至是Proposal的细节,都已经日臻完善,已经无需导师花费额外的精力去辅导。在他们回国后的一周,经过邮件决定由Roman担任ShardingSphere的Champion,Craig、姜宁以及一直以来与我保持良好关系的来自Mesosphere的创始人Benjamin共同担任项目的导师。在2018年的双十一以前一天,11月10日,ShardingSphere正式经过Apache基金会的投票

[https://lists.apache.org/thread.html/88beebeec1aec8c32d331a3957b9eaec5aeee3e4e1bb23664731d048@%3Cgeneral.incubator.apache.org%3E],成为Apache孵化器的一员。



  新的挑战 —— 知难而进  


进入Apache基金会并不是结束,而是一个全新的开始。从进入孵化器的那一天开始,ShardingSphere便进入了一个全新的领域,在这个领域中,充满了未知和挑战。而面向这些全新的挑战,ShardingSphere团队已经打起十二分精神,随时准备面对困难的洗礼。

如京东某业务因为业务体量巨大,数据库不可避免地进行了水平拆分。拆分以后的数据节点规模达到了十万级别,是极度少见的金融级、高并发、海量数据并存的应用系统。为了追求性能极致以及代码的可控性,它以前是在业务框架中,根据分片键替换数据库和表名称进行分片的。

随着业务的发展,经过业务框架进行分片的方式,使得代码的维护成本不断攀升。ShardingSphere在通过了大量系统的验证以后,理所固然的成为了这一业务的数据分片中间件的首选方案,ShardingSphere团队也很是愿意帮助业务团队解耦业务和底层技术代码,缓解开发工程师肩上的重担。

虽然经历了大量系统的检验,ShardingSphere已经相对成熟,但面对其体量在全国乃至世界上均屈指可数的王牌级产品,仍将是一次严峻的考验。而事实上,对接工做也确实不是一路顺风,遇到了不少在以往系统中未曾遇到的深层次问题。在通过一个个不眠之夜后,ShardingSphere已经平稳的在其生产环境运行了几周,性能与原生JDBC几乎一致,GC次数与资源消耗也未见异常。

在已经到来的2019年,ShardingSphere将迎接更大的挑战,对内更加全面的服务于公司,对外则致力于打造业界一流的解决方案,成为国际化技术产品翘楚而努力。



  结  语  


在一年的前进历程中,ShardingSphere经历过挫折,也获取了短暂的成功,但咱们不会站在历史的功劳簿上,而是要不断前进。得到金项奖提名是对ShardingSphere团队以及社区的巨大认同。咱们会将它当作前进的动力,继续不断的精进本身。谨以此文记录并感谢ShardingSphere团队和社区在过去一年来的努力和付出,并但愿它能在从此为京东贡献更大力量,并在业界和国际化舞台上绽开风采。


640?wx_fmt=png


Apache ShardingSphere(Incubating)自2016开源以来,不断精进、不断发展,被愈来愈多的企业和我的承认:Github上收获6000+的stars,70+公司企业的成功案例。此外,愈来愈多的企业和我的也加入到Apache ShardingSphere(Incubating)的开源项目中,为它的成长和发展贡献了巨大力量。


咱们从未停息过脚步,聆听社区伙伴的需求和建议,不断开发新的、强大的功能,不断使其健壮可靠!

开源不易, 咱们却愿向着最终的目标,步履不停!

那么,正在阅读的你,是否能够助咱们一臂之力呢?分享、转发、使用、交流,以及加入咱们,都是对咱们最大的鼓励!

项目地址:

https://github.com/apache/incubator-shardingsphere


更多信息请浏览官网:

http://shardingsphere.apache.org/


640?wx_fmt=jpeg


扫码进群

640?wx_fmt=jpeg