热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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




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



文章目录


    • 技术演进与政治格局
    • Java的危机
      • 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 的未来是继续向前,再攀高峰,还是由盛转衰,锋芒挫缩,你我拭目以待。



推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
author-avatar
廖盈秀怡伶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有