查看原文
其他

八股文一文不值 | 云原生时代大数据的危与机

大数据技术与架构 大数据技术与架构 2022-09-10
点击上方蓝色字体,选择“设为星标
回复”资源“获取更多资源周末的时候,在网上看了周志明老师关于《云原生时代的Java》公开课,感慨颇深。周志明老师就不多做介绍了。我可以很负责的说,如果你没有听过周老师,那么你根本不是一个合格的 Java 语言使用者和开发者。过去的 25 年里,在企业软件领域,Java 是绝对王者,但它让开发者既爱又恨。一方面因为其丰富的生态和完善的工具支持,可以极大提升了应用开发效率;但在运行时效率方面,Java 也背负着"内存吞噬者","CPU 撕裂者"的恶名,持续受到 NodeJS、Python、Golang、Rust 等新老语言的挑战。在过去的25年里,Java在于其他语言进行竞争时,大家可以想想靠的是什么?不是语法也不是类库,而是庞大的软件生态。简单的说就是我想要什么就有什么,直接Maven加个依赖,一切都解决了。然而,这个现在看起来仍然是坚不可摧的Java帝国,其统治地位的稳固程度不仅没有高枕无忧,随着云原生时代而降临,说是危机四伏也不为过。本文也不讨论为什么云原生(Cloud Native)是未来发展的一个方向,起码现在看来云原生是一个大方向。云原生时代,对应用运行时的要求:
  • 体积小

  • 启动快

  • 占用资源少

  • 水平扩展

大家可以看看Java占哪样?一个最普通的Java应用,编译后起码几百M,启动在1分钟以上,占用资源动辄8G内存起步,水平扩展更是无从谈起。我们可以举几个例子来看,例如大名鼎鼎的Logstash,因为资源占用的原因,被Elstaic.co用Golang的Filebeat代替了Shipper部分的职能。另外由Scala编写的Linkerd,作为服务网格概念的提出者,却最终被Envoy所取代,其主要弱点之一也是由于Java虚拟机的资源消耗所带来的劣势。正是由于潮流趋势的改变,新一代的语言与技术尤其重视轻量化和快速响应能力,大多又重新回归到了原生语言(Native Language,如Golang、Rust)之上。这恰恰是Java的弱点。有同学说,你说了这么多对于数据领域有什么影响?在云原生时代,软件通常会作为一种服务来交付,也就是软件即服务(SaaS)。那么基于此,我们可以看看软件在开发交付方面的标准:
  • 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。

  • 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。

  • 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。

  • 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。

  • 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。

这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。大家想一想大数据领域的中间件哪个符合这个标准。大数据领域的各个中间件普遍集臃肿笨重、极高的部署/运维成本、自身巨大的资源消耗、难如登天的水平扩容,和云原生的要求想去甚远。这也是为什么Flink、Pulsar这类框架在设计之初就考虑了对K8s的支持。当然Java的开发者们并没有坐以待毙,在未来的几年也是这门语言关键的转型期。不然面对Go、Rust这样新兴的挑战者,即使再深的护城河也终有被蚕食殆尽的一天。假如有一天,数据领域的中间件放弃了Java语言,你准备好了吗?

硬刚Hive | 4万字基础调优面试小总结

如何打破职业瓶颈

快手大数据平台服务化实践

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存