细品这杯香浓的咖啡——阿里中间件高级专家沈询的Java之旅

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
简介: 王晶昱花名沈询,阿里高级专家,来自阿里巴巴中间件和稳定性平台。目前主要负责阿里的分布式数据库DRDS(TDDL)和阿里的分布式消息服务ONS(RocketMQ/Notify)两个系统

与Java的不解之缘

看到这个专题名字的第一眼,真是感慨万千:Java已经有20年历史了啊,我竟然也用了这语言8年了,真是转眼一瞬。

与Java的不解之缘

看到这个专题名字的第一眼,真是感慨万千:Java已经有20年历史了啊,我竟然也用了这语言8年了,真是转眼一瞬。

image.png

王晶昱(花名:沈询)

回想起8年前的我,应该是正在大学宿舍里努力地从网上搜索C语言的各种教程,在“值传递和指针传递的区别是什么?”“如何避免引用计数循环引用?”等问题中东突西撞不得要领吧。然后在某天,我偶然间看到了一门据称比C++简单的Java语言,恰巧还碰上一个好老师——莫倩老师,自然而然地激发起我去了解和学习Java的兴趣。现在还记得当时在学习《ThinkinJava》时,我还不是特别理解BruceEckel介绍Java与C++的差别时提到的一句话:“Java是一种生产力语言”。当时我看着这句话,心里一直在想:语言嘛,应该大同小异,能有什么生产力提升?一个解释型语言怎么可能超越编译语言呢?

转眼,我使用Java已有8个年头了,现在想想,Java真的带给了我很多:它尽可能地避免我写出错误的代码。它不需要我去计算指针偏移量,也不需要我去关心垃圾回收问题,连Collection类都有DougLea这样的大神做好了封装。这些语言内建机制和类库极大地减轻了我的头脑负担,让我能够更加专注地完成业务逻辑。而最让我惊喜的是,Java一直不懈地追求JVM虚拟机的持续优化,各种眼花缭乱的锁优化、动态字节码编译调优、GC新算法等JVM优化层出不穷。

在最近的几年,我也可喜地看到,在Oracle的带领下,Java语言的演进变得非常迅速。当我还在熟悉Java7的forkJoin框架的时候,支持Lambda的Java8已正式发布了。

现在,我也想从我个人角度,给Java点个赞。确实,对我而言,这是一门生产力语言,而Java也成功地帮助阿里巴巴、淘宝走过了高速发展时期,并造就了我们阿里的一支明星团队:阿里巴巴-共享业务-中间件和稳定性平台。

说起这个团队,其实它在内部的名字一般称为Java中间件。你看把Java放在了团队的名字里,这就是真爱啊!从2007年开始,我们就逐渐发现,外部企业级中间件并不是非常适合我们互联网业务的实际发展需要。面对着每年翻番的用户量和用户请求,我们不得不开始进行分布式应用体系的探索。当时可真是没什么能够参照的,全都得靠自己去探索,经过了三年多不断摸索,我们彻底地将系统进行了服务化、分布式改造。

image.png

目前,整个阿里集团几乎所有的应用都在使用这些中间件。我想,这也是阿里技术体系的精华所在吧。

最近这几年,阿里的核心技术体系架构已经非常稳定可靠了。我们又在这些核心中间件的基础上,不断地深入细化运维体系,尽可能地做到自动化、智能化,为集团节省了比较多的设备成本和运维成本。在2015年,Java中间件更是响应了阿里集团上云的梦想,将阿里集团七年的技术积累,一股脑地搬到了云上,目前所提供的主要产品有:企业分布式应用服务(EDAS)、分布式关系数据库(DRDS)、分布式消息服务(ONS)。它们都是使用Java编写的,为大家量身定做的分布式中间件,与互联网应用体系相结合,能够非常轻松地实现企业IT架构的随需定制和可线性扩缩。如果大家有需求,可以按照自己的需要来进行选择。

与Java一起成长

能够取得这样的成绩,Java功不可没。除了我上面提到语言特性对我们的帮助之外,在团队之中,我们也非常关注整个Java的生态体系。基本上,无论我们有什么新的想法,都可以立刻在Java的开源世界中找到对应的一些实现,里面有很多还非常靠谱,Netty、Tomcat、Ibatis、Hibernate、Spring、Struts、ZooKeeper、Hadoop、Mahout、Cassandra……我能举出无数的开源软件,它们都对我们的平台积累起到了非常大的作用。

同样的,我们也在积极尝试将自己系统的积累反馈回到社区里,大家可以在github.com/alibaba下面找到很多我们开源出来的软件,在这里面我想特别的提几个:RocketMQ(消息队列)、Druid(连接池)、FastJson(JSON解析引擎)、Dubbo(RPC框架)等等。这些开源软件与其他友商的各种开源、闭源的Java软件一起丰富了Java生态体系,也让我们解决问题变得更加轻松。

对我个人而言,Java的生态体系之所以能够这样丰富,主要原因在于它编写一次、多点运行的特性,以及一直坚持着的向下兼容能力。这些都非常有利于Java生态体系的积累和演进,也造就了现在如此丰富的Java开源软件环境和体系。

提到Java的向下兼容能力,我也想稍微聊一下我的看法。我经常能看到很多人谈到,Java的历史包袱太重了,为了兼容这些历史遗留的包袱,Java的演进已经非常困难,这会导致Java语言的崩溃。针对这个问题,我个人的看法是:首先,Java作为一个被这么广泛的使用的语言,有着这么深厚的系统积累,完全不考虑系统的兼容性而演进整个系统,这其实是比较危险的,对其他革新进行兼容并包可能才是它最好的发展方向。就目前而言,我几乎没看到过哪个语言能够比较好地解决这种语言升级所导致的软件断层问题,所以,更多的只是两害取其轻的过程吧。同时,我也非常高兴地看到,依托于JVM,我们有了大量的新的语言实现,这里面有Groovy,Scala,JPython等等。它们都非常优秀,这些新生的语言与Java一起,进一步丰富了整个Java的生态体系,也更加坚定了我对Java生态体系的信心,它一定还能再战十年!

寄语现在,展望未来

一叶知秋,回顾我的Java之路,最感谢还是阿里巴巴能够给我们这些技术人员创造出这样有挑战的业务场景和业务需要,也感谢有这样一群人能够为了这个目标一起努力到现在。

能够跟这些大牛们一起工作,耳濡目染,不断提高,是我的工作生涯中最为宝贵的一笔财富。而如果能够回到过去,我最想告诉8年以前的自己:“要买房!”

笑~~

其实是:“还是要特别注重基础,操作系统、网络、算法数据结构、离散数学、数据库原理与实践,这些看起来枯燥而无味的基础科学,是我目前感到知识最为匮乏,但却最为急需的部分,要了解它们是必须付出非常多的时间才有可能理解通透些。而这些基础的扎实程度,就直接决定了你的高度”。可惜,我没办法在21天内学会C++,这些建议,也就只能提供给还有机会实践的各位做参考了。

作者简介:王晶昱花名沈询,阿里高级专家,来自阿里巴巴中间件和稳定性平台。目前主要负责阿里的分布式数据库DRDS(TDDL)和阿里的分布式消息服务ONS(RocketMQ/Notify)两个系统

目录
相关文章
|
29天前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
3月前
|
Java 程序员 API
Java中的异常处理:从基础到高级
【7月更文挑战第28天】在Java编程的世界中,异常处理是一块基石,它确保了程序的健壮性和可靠性。本文将带领读者深入理解Java的异常处理机制,从基本的try-catch语句开始,逐步探索更复杂的异常处理策略,如finally块、自定义异常以及异常链。我们还会讨论如何在设计良好的API时利用异常处理来提高用户体验。通过这篇文章,读者将能够更加自信地处理各种异常情况,编写出更加稳定和用户友好的Java应用程序。
|
2月前
|
小程序 JavaScript Java
【资料】阿里Java开发手册
本文是关于分享阿里Java开发手册资源及促进编程规范学习的指南。作者以个人经历引入,讲述了公司领导通过细致讲解阿里Java开发手册,提升了团队对代码质量和编程规范的认识
391 0
【资料】阿里Java开发手册
|
16天前
|
Java UED
Java中的异常处理:从新手到专家
【9月更文挑战第17天】在Java编程世界中,异常处理是一块基石,它确保了程序的健壮性和可靠性。本文将通过浅显易懂的语言和实例,带你了解如何在Java中优雅地处理异常。我们将一起探索try-catch块的奥秘,学习如何自定义异常,以及何时应该使用throw和throws关键字。准备好了吗?让我们开始这段旅程,把那些不请自来的编程小怪兽——异常,一一捕获!
|
2月前
|
缓存 监控 Java
"Java垃圾回收太耗时?阿里HBase GC优化秘籍大公开,让你的应用性能飙升90%!"
【8月更文挑战第17天】阿里巴巴在HBase实践中成功将Java垃圾回收(GC)时间降低90%。通过选用G1垃圾回收器、精细调整JVM参数(如设置堆大小、目标停顿时间等)、优化代码减少内存分配(如使用对象池和缓存),并利用监控工具分析GC行为,有效缓解了高并发大数据场景下的性能瓶颈,极大提升了系统运行效率。
53 4
|
2月前
|
Java 程序员 开发者
掌握Java异常处理:从新手到专家
在Java的世界中,异常是程序运行中不可忽视的挑战。本文以浅显易懂的语言,引导你认识Java中的异常处理机制,从基础的try-catch语句到深入的自定义异常和最佳实践,让你在遇到运行时错误时能够从容不迫,优雅地处理每一个可能的异常情况。让我们一起走进Java异常的世界,学习如何驯服这些“野性”的错误,让程序更加健壮和可靠。
|
2月前
|
安全 Java 数据库连接
Java中的异常处理:从新手到专家
在Java编程的海洋里,异常处理是一块不可或缺的救生板。本文将带你领略异常处理的重要性,并深入探讨如何在Java中优雅地处理这些不期而遇的波涛。从基础的try-catch语句到高级的自定义异常和最佳实践,我们的目标是让每位读者都能在面对异常时游刃有余,确保代码的稳健与优雅。
33 2
|
3月前
|
Java 开发者
Java中的并发编程:从基础到高级
在Java世界中,并发编程是一项至关重要的技能。本文将深入探讨Java并发编程的核心概念、实用工具和高级技术。我们将从线程基础出发,逐步过渡到线程池的使用,最后探索Java并发包中的强大工具,如CyclicBarrier、Semaphore和CountDownLatch。无论你是Java新手还是资深开发者,这篇文章都将为你提供有价值的见解和技巧,帮助你在多线程环境中编写出更加高效、稳定的代码。 【7月更文挑战第30天】
32 7
|
3月前
|
Java 开发者
Java中的异常处理:从基础到高级
在Java的世界中,异常处理是一项不可或缺的技能。它不仅关乎程序的健壮性,更是开发者调试和解决问题的利器。本文将深入探讨Java异常处理的各个方面,从基本的try-catch语句到自定义异常类,再到异常链追踪和finally块的使用,我们将一一剖析。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和深度理解。
|
2月前
|
安全 Java 程序员
阿里开发手册 嵩山版-编程规约 (四)OOP规约-Java程序员必看知识点!!!
《阿里开发手册 嵩山版》的OOP规约部分强调了面向对象编程的最佳实践,包括正确使用静态方法、覆写方法的注解、可变参数的使用、接口的稳定性、equals和compareTo方法的使用、BigDecimal的正确比较、包装类与基本数据类型选择、POJO类的属性和方法设计等,以提升代码的质量和维护性。
下一篇
无影云桌面