前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java老矣,云原生时代的 Java危机

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

作者头像
韩旭051
发布2021-10-13 11:57:39
6350
发布2021-10-13 11:57:39
举报
文章被收录于专栏:刷题笔记刷题笔记

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 的未来是继续向前,再攀高峰,还是由盛转衰,锋芒挫缩,你我拭目以待。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 技术演进与政治格局
  • Java的危机
    • Java —— 最具统治力的编程语言
      • 托管语言 —— 一次编译到处运行
        • 云原生—— 操作系统层虚拟化 翻天覆地
          • 享受了硬件红利 —— 与技术潮流的直接冲突
            • 虚拟机的劣势 —— 工业上的失败案例
              • 编程语言的未来 —— 轻量化、快速响应
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档