内容来源:2017年5月21日,当当架构部总监张亮在“饿了么技术沙龙-Java专场”进行《玩转Java开源项目》演讲分享。IT大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。
阅读字数 :3334 | 7分钟阅读
开发一个软件,并把源代码发布到github,就是开源么?如何可以开发一个有价值的开源项目、如何可以维持一个健康活跃的社区并让开源项目真正从中受益、如何可以经过它帮助他人和提升本身,这些才是开源更须要关注的方面。咱们来看看当当架构部总监是如何从四个方面来玩转Java开源项目。git
嘉宾演讲视频地址:t.cn/RSceo7Ngithub
Java是一门历史很是悠久的开发语言,从1995年初见至今,时间的指针已不知不觉的拨动了二十多个年头。请跟我简单回顾一下Java那些抓住历史高光的瞬间,也顺便回忆一下当时那些与Java一块儿产生共鸣的技术风暴。数据库
Java首次出如今人们的视野中是1995年,它提出了Write once,runanywhere的口号让开发者以为兴奋。随着JDK 1.0的发布,一些核心概念闪亮登场,它们是JVM,Applet和AWT。Applet和AWT目前虽已退出历史潮流,但当初在网页上展示的冒着热气的咖啡的Applet小程序,确实让人眼前一亮。JVM则沿用至今,基于JVM的跨平台特性对后续的技术产生了深远的影响。编程
1998年发布的JDK 1.2,首次提出了J2SE、J2EE和J2ME三个系列,分别对应于标准开发,企业级开发和手机开发。J2ME随着手机硬件的更新换代,已逐渐退出历史舞台。而J2SE和J2EE则一直沿用至今。J2EE规范中著名的EJB、JSP、Servlet等既是从那时开始加入并日臻完善的。小程序
2002年发布的JDK 1.4是很是经典的版本,这多是至今仍然可能在老程序中看到的最老版本。而因为EJB使用起来过于复杂,轻量级的开发框架SpringFramework开始流行。开发者愈来愈多的抛弃掉笨重的EJB,而转向更为灵活的Spring Framework阵营。然后来出版的由其做者Rod Johnson撰写的《expert one-on-one J2EE Development without EJB》更是成为了避免朽的名做,Spring Framework也随之成为Java开发者必须掌握的技术栈。设计模式
2006年JDK 1.6发布,从JDK 1.5开始尝试的诸如泛型,元注解等编程语言层面的加强,在JDK 1.6中获得了进一步的完善。同期,参考Google发表的3篇著名的关于GFS、MapReduce和Bigtable学术论文,由Doug Cutting用Java建立并开发的Hadoop面世,它在必定程度上颠覆了传统关系型数据库在数据存储和分析领域的绝对统治,今后大数据成为了技术圈乃至全世界各个领域的热词。缓存
2009年JDK 1.7发布。同时由Google开源的Android趋于成熟,和Apple的IOS造成鼎立之势,共同开启了基于智能手机的移动互联网时代。架构
随着互联网的发展,信息愈来愈多,技术的更新迭代也愈来愈快。最近的一次Java大版本的发布,是2014年的JDK 1.8,它也是目前为止Java的最新版本。而在同一时期出现最多的焦点技术是以Docker为主的容器和如何有效治理容器的微服务。容器方面Java虽然难于建树,但基于Java的Spring Boot、SpringCloud、Zookeeper等优秀的框架以及组件为微服务奠基了坚实的基础。框架
谈了好久Java历史,那么经历了这么多年的发展,Java必然沉淀了大量极具价值的项目,可供无偿使用的开源项目层出不穷。Java门槛愈来愈高,不只仅是编程语言层面的问题,也不只是难于理解的面向对象、设计模式等,而是在于它的技术广度。因为技术栈众多,它几乎很难快速上手,但从另外一方面讲,Java生态相对于其余语言更加稳定和成熟,技术组件几乎应有尽有。异步
基础类:为编程提供便利的基础类库。如:Guava、ApacheCommons等。
框架类:曾被认为Java最重要的部分,早期是业务开发工程师的饭碗。如:SpringFramework、Hibernate、MyBatis、Struts等。
测试类:与其余语言比,Java有较完善的测试体系,它很容易提高测试覆盖率,这得益于普遍的测试类库。如:Junit、TestNG、DbUnit、Mocktio等。
构建类:因为使用Java开发的项目大多规模大,依赖复杂,所以Java构建类工具很完善。如:Ant、Maven等。
中间件:中间件种类不少。好比:Tomcat、Jetty等Web中间件,ActiveMQ、RocketMQ等消息中间件、Dubbo等服务治理中间件等。基础中间件已很是成熟,而分布式中间件仍极少有统一标准。
NoSQL:NoSQL是关系型数据库的有益补充。NoSQL类型主要分为文档数据库、列簇数据库、KV数据库和图数据库。相关产品众多,使用Java开发的也很多,如:Cassandra、Neo4j等。
搜索:全文检索领域中,Lucene是基础类库的佼佼者。而基于Lucene封装的Solr、Elasticsearch等高可用搜索引擎也是很常见的技术。
大数据:Hadoop系列几乎全是用Java开发的。
手机端:刚才提到过的Android系统。
桌面端:虽然使用Java开发桌面系统并不是如今的主流,但深刻人心的产品依然不少,如:Eclipse。
在容器、缓存和关系型数据库这三个领域,Java的开源项目并很少见,并且当前Java也没有太多机会进驻这些领域。
虽然Java已有为数众多的成熟开源项目,可是目前仍稀缺的优秀开源领域主要是分布式、服务化和弹性化这三个方面。
在互联网行业分布式、服务化和弹性化是很重要的非功能需求。每一个互联网企业中都有一套足够成熟的系统,但不少系统难于解耦且定制化严重,所以在这方面,成熟的开源产品百里挑一。所以,有价值的开源项目应该从这三方面考虑,并且Java比较适合作这些领域的开发。
来源主要从四个方面,大公司、创业公司、社区以及我的。
大公司所作的开源产品基本上不与经济收益直接相关。如:Google开源的Kubernetes,Linkedin开源的Kafka等。
创业公司开源的产品通常会与他们的经济利益绑定,大都开源其核心技术,而后针对定制化、咨询以及企业版进行收费服务。如:Docker、Mesosphere的Mesos、Elastic的Elasticsearch等。
彻底由社区驱动的开源的产品拥有强大的开源基因,是开源世界的典范。如:Linux、Apache等。
而我的开源的产品,通常是处于孵化阶段。
一、以熟悉各类轮子为前提
重复造轮子是巨大的精力浪费,有价值的开源项目应该是现有轮子不能彻底覆盖的范围。
二、以解决实际问题为目的
任何技术项目都是以解决实际存在的业务问题为前提的,彻底脱离业务的技术其存在价值是存疑的。
三、以系统眼光去规划设计
相比于闭源项目,开源项目的受众更广,影响范围更大,每次升级都带来颠覆性的变动是灾难性的。所以尽可能的合理设计系统架构和roadmap是成功的关键。好的系统是设计出来,而非改造出来的。前瞻性的眼光很是重要。
四、以工匠精神去雕琢细节
开放出去的源代码会在必定的范围内引发共鸣。一个值得研读开源项目,其代码必须通过雕琢,让其规范、一致、优雅、易懂,尽可能将细节作到极致。经过代码质量给予使用者信心。
一、灌输开源精神
freeis not free是开源的一句名言。开源的价值不只仅在于免费,更在于自由。既然已经把源代码开放出去了,那么使用者想怎么改均可以,而不该一味地向开源人索取。所以须要合理对用户进行引导,并让其认同开源精神,最终作到积极反馈社区。
二、关注核心用户
应尽早识别出核心用户,与核心用户共同发展。最好可以抱团造成组织,或做为周边生态加入更大的组织,并利用核心用户的影响力吸引更多的用户。
三、坚持与耐心
成功历来不是一件容易的事,开源也不例外。开源以后要坚持去推广、运营和完善它,并保持足够耐心。相信是金子总会发亮,坚持才能带来最终的收获。
四、文档
文档的重要性甚至优于程序自己。应尽可能将使用场景、使用限制、使用建议、配置手册、实现原理、常见问题等描述清晰。优质文档能够屏蔽大量重复问题,减小开源维护者的精力消耗。
当当目前的主要开源产品有三个,分别对应于用于异步化的做业中间件、用于服务化的服务治理中间件以及用于数据水平扩展的数据库分库分表中间件。其关注的核心都是分布式和弹性化。这三个开源项目都有属于本身的关键词。
Elastic-job:Elastic-job的关键词是融入。它是一个分布式弹性化调度框架,由Lite和Cloud两个分支组成,Elastic-Job-Lite提供轻量级、无中心化的做业治理服务。Elastic-Job-Cloud采用中心化方式,它与Mesos完美结合,很容易提供一站式的做业云平台服务。
下图是以Elastic-Job-Cloud为核心的当看成业云架构图:
Sharding-jdbc:Sharding-jdbc的关键词是兼容。它做为一个分布式的数据库中间层,主要职责是透明化数据库水平扩展以及柔性事务的处理。它扩展并彻底兼容JDBC协议,所以任何基于JDBC的Java ORM框架都可无缝兼容使用。应用开发工程师无需对现有代码进行任何调整,只须要配置完成分片规则便可直接享用Sharding-JDBC带来的便利。
Sharding-JDBC不只仅是简单的SQL识别,它拥有一套复杂且完善的知识理论。下图是Sharding-JDBC的架构图:
Dubbox:Dubbox的关键词是扩展。它在阿里开源的Dubbo基础上直接扩展,增长了REST协议等新功能,用于实现异构语言间调用。
三个项目的Github地址是:
这3个项目已较为成熟,已在当当大规模使用,比较符合互联网的业务场景。欢迎感兴趣的同窗使用、star和fork,欢迎联系咱们并提出宝贵建议。
个人分享到此结束,谢谢你们!