模块化改造完毕之后,可能会出现更多专业的 JDK 发行软件商,atv,提供在功能方面,比如针对于分布式计算,机器学习,图形计算等,纳入相关的功能库作为文件。这样专业行业客户可以选择经过充分优化后的 JDK 版本。 Java 语义上对“模式匹配”有更强的支持,如今的 switch 语句能力还是比较欠缺,可以向 Erlang, Scala 等语言借鉴。 多线程并发处理,Java 做的已经很好了。不过我个人觉得可以在多进程多线程配合,以及语言级别数据管道表示上,可以进行改造和优化。 JDK9 会有 HTTP/2 client 端的能力,但毫无疑问会有更多更好的三方库出现,JDK 可以和这些三方库通力合作,提供一个更好 API 界面和 SPI 参考实现。 目前 Java 在云计算方面遇到的最大问题还是占用内存过大。我个人认为从两个方面来看: 如果该应用的确是长时间运行的服务,可以考虑结构清晰的单体结构,算下来总的内存消耗并不会比多个微服务进程占用的更多。 微服务应用,未来可以采用编译成本地代码的方式,并使用优化过的三方库,甚至本地 so 文件,减少单个进程的过多内存占用。 安全框架更加清晰,SPI 可以允许三方库提供更强大更高效的安全功能。 JavaEE 方向则有更多的改进的地方: EJB 重构目前的 Corba 分布通信基础,参考 gRPC 进行远程系统调用。 分解 EJB 规范,把 JVM 进程相关的特性,如注入 / 加强 / 事务 / 安全都统一到 CDI 规范中;对 EJB 进行裁剪,保留远程访问特性和作为独立执行主体分布式对象能力。 加强 JMS 和 MDB,媲美 Akka 目前的能力。 JaxRS 适度优化,不必要依赖 Servlet,或者适度调整,来提供更大的能力。 JPA 借鉴 JDO,以及融入一部分特性,做到对 NoSQL 更良好的支持。 9一些个人的心得和经验分享 软件业有个 Hype Cycle 模型,有很多技术受到市场的追捧而成为明星,也有些身不逢时而备受冷漠。 EJB 是一个广泛被误解的技术,在企业应用分布式计算方面,EJB 给出了非常完备的技术体系。只是目前所有的应用服务器都实现的不够好。对于目前打算转型微服务设计的架构师,EJB 也是一个非常值得学习借鉴的技术。 Java 的慢是相对的,有些是当前实现的不够好。比如原来有人对 Java 的网络 IO 性能提出质疑,然而稳定的 Netty 框架出现后,就没有人再怀疑 Java 处理网络 IO 的能力了,甚至在 JDK8 中自身的 NIO 也相当出色。要知道 Java 为了实现跨平台能力,采用的是各个操作系统的一个公共能力子集,而且其设计哲学就是给出 API 框架,实现是可以自行实现和加载服务的。 Java 在处理界面方面,Swing 和 Swt 表现可圈可点(Idea 和 Eclipse 分别采用的图形基础库),JavaFX 已经运用到很多的行业软件上。在浏览器界面表现上,SpringMVC 在模板渲染页面方面使用者最多;GWT 似乎使用者不多,但基于 GWT 的 Vaddin 在国外企业中用户众多,而且很多服务器管理软件也用 GWT 写成;JSF 也在企业软件中得到广泛使用,状态信息直接在后端进行管理,配合 js 前端框架,可以充分发挥各种技术的优势。 CDI 规范和 SpringFramework 在服务器程序中作用类似,Spring 是一套设计优良,完备的框架,CDI 具有更强的可扩展性。通过对注解的语义定义,一家公司可以维护一套自己的组件描述语言,来做到产品和项目之间的软件快速复用。CDI 是定义软件组件内部模型的最佳方式,只可惜了解的软件工程师实在太少。 微服务架构在互联网应用,快速开发运维管理方面,配合容器技术使用,有很强的优势。但并不是所有的应用场景都适合微服务:强事务应用系统,采用单体结构的软件体系设计,更容易从整体方面维护,也能获得更优的性能。Java 语言无论在微服务还是单体结构,都有成熟稳定的软件架构供选择使用。 作者介绍 张建锋,永源中间件共同创始人,原红帽公司 JBoss 应用服务器核心开发组成员。毕业于北京邮电大学和清华大学,曾供职于金山软件,IONA 科技公司和红帽软件。对于 JavaEE 的各项规范比较熟悉;开源技术爱好者,喜欢接触各类开源项目,学习优秀之处并加以借鉴,认为阅读好的源码就和阅读一本好书一样让人感到愉悦;在分布式计算,企业应用设计,移动行业应用,Devops 等技术领域有丰富的实战经验和自己的见解;愿意思考软件背后蕴涵的管理思想,认为软件技术是一种高效管理的实现方式,有志于将管理学和软件开发进行结合。 10打个广告 我从事开源是因为它有趣且可行 ——Linus Torvalds 熟练掌握语言仅仅只是第一步,懂得利用语言搭配形成架构图中的一个个框架和模块,才是技术人和企业沉淀下来的财富。 (责任编辑:本港台直播) |