Java老矣,云原生时代的 Java危机

Posted 韩旭051

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java老矣,云原生时代的 Java危机相关的知识,希望对你有一定的参考价值。

QCon2020 主题演讲:云原生时代,Java 的危与机
周志明老师的这个演讲 知识点过于密集,我把他拆一下,方便理解一点 推荐阅读原视频和相关文稿

在文章下面评论了一下 没想到老师还回复了
在这里插入图片描述

技术演进与政治格局

在这里插入图片描述

看了周志明老师的《凤凰架构》感觉很多技术的演进都蛮有意思的,

  • 微服务时代各大厂商抛弃低效的文本传输 HTTP ,自研的通信协议层出不穷,谷歌扛起了 HTTP3.0 的大旗,把 http1.0 、http2.0 一直依赖的 TCP 协议 切换成了 快速 UDP 协议,可以更加适配移动设备能够快速切换网络,降低传输时延。 为什么谷歌会主动做这件事,很大一部分原因是因为 Google 拥同时持有着占浏览器市场 70%份额的 Chrome 浏览器与占移动领域半壁江山的 android 操作系统。

  • 云原生时代,Spring 团队 与 Oracle GraalVM 团队共同孵化 Spring GraalVM Native ,自动找出反射和动态代理的代码,在编译期完成 Bean 的初始化,缩短 Spring 的启动时间 降低内存消耗和容量占用。为什么 Spring 和 Oracle 会做这件事,很大一部分原因还是 因为 Oracle 收购 Sun 公司拥有了 Java 语言,而 Spring 是Java 体系下最成熟的框架,不知道 那儿的调查显示 spring 程序员占 Java 程序员的 86%,所以他们联手开发 是 当前技术格局下 Java 与 go 等原生语言竞争的必然选择。

最近一直 在 翻来覆去的 看这本书 两周时间 把书都 翻黑了,电子版里 有几个章节 纸质书没有 附录,打印出来 也要看看。

Java的危机

Java —— 最具统治力的编程语言

拥有庞大的用户群 和 成熟的软件生态

托管语言 —— 一次编译到处运行

Java 通过 语言层虚拟化 构建 JVM 虚拟机 兼容

  • Linux、Solari、Windows 等不同平台
  • X86、AMD64、SPARC、MIPS、ARM 不同指令集架构

实现了 平台无关、架构中立的先天优势
方便程序分发,避免了 内存模型、线程模型、字节序的底层干扰
开启 托管语言 Java .NET 的兴盛期。

云原生—— 操作系统层虚拟化 翻天覆地

云原生通过 容器的不可变基础设施 实现 操作系统层虚拟化。
不仅 方便运维 程序升级 和 部署。
升华成 向应用代码隐藏环境复杂性的手段,推广分布式服务的必要前提。

主流的应用程序分发方式:程序连同他的运行环境封装到稳定的镜像。
Docker 提出 一次构建 到处运行,削弱了 Java的优势。

享受了硬件红利 —— 与技术潮流的直接冲突

Java 享受了硬件规模发展的红利
Java 是面向大规模、长时间的服务端应用而设计的。

原因结果
严谨语法写出 一致代码
静态类型动态链接利于多人开发 增大规模
即时编译器、性能制导优化、垃圾收集、子系统便于长时间运行

微服务 倡导围绕业务能力构建应用 和 Serverless 无服务云函数,提出了新的要求。

原因手段
不追求实现一致同一系统 由不同语言 不同框架实现 不同服务
服务拆分微服务无需面对 TB 级内存
高可用集群无需24小时无间断运行,随时可中断和 更新
微服务容器亲和性对镜像提及、内存消耗、启动速度、达到最高性能的时间 有要求

这些因素 刚好是 Java 的弱项

原因影响
再小的 Java 程序 也要带着 完整的 虚拟机和标准类库镜像拉取和容器创建效率都会变低,构建容器的生命周期时间也会随时拉长。
基于虚拟机 执行机制,任何Java程序都有固定的内存开销,固定启动时间,依赖注入也会拉长启动时间使容器的 冷启动时间 很难缩短

虚拟机的劣势 —— 工业上的失败案例

产品原因结果
JRuby 编写的Logstash承担部署在节点上的收集端 (Shipper) 和 专门转换处理的服务端 (Master)职责 因为 资源占用大被 Elstaic.co 用 Golang 的Filebeat代替了 Shipper 部分的职能
Scala 语言编写的边车代理Linkerd服务网格概念的提出者 由于 Java 虚拟机的资源消耗被C++ 实现的 Envoy 所取代 成为CNCF 社区 第二个数据平面 项目

编程语言的未来 —— 轻量化、快速响应

微型服务 具备 弹性和韧性,可以随时中断和重启,形成了一股潮流,蚕食着大型系统。

新一代的原生语言 重视 轻量化 和快速响应 能力,又回归到了 原生语言 (Golang、Rust)上。

原文的内容 含金量 过高,后面出了 Java 的危机 还 从 虚拟机的优化 和 Java语言的优化 讲到了 Java 的变革方向和趋势,以及对 未来 Java 转型的预测,一定要看一看原文

Java 的未来是继续向前,再攀高峰,还是由盛转衰,锋芒挫缩,你我拭目以待。

以上是关于Java老矣,云原生时代的 Java危机的主要内容,如果未能解决你的问题,请参考以下文章

Quarkus技术系列「云原生架构原理」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代JAVA语言的求生之路

云原生时代高性能Java框架—Quarkus

云原生时代高性能Java框架—Quarkus

云原生时代 给予.NET的机会

云原生时代的 Java:辟一下谣,我还是最能打的!