微服务能像Go一样快吗?
|
实验了解 Java 微服务在运行速度上能否达到 Go 微服务的水平。目前,软件行业普遍认为 Java 已经过于陈旧、缓慢且无聊。而 Go 则成了快速、崭新以及酷炫的代名词。真是这样吗?我们想从数据的角度看看这样的印象是否站得住脚。 我们希望建立一个公平的测试,因此创建了一项非常简单的微服务,其中不含外部依赖项(例如数据库),而且代码路径非常短(仅处理字符串)。我们在其中包含有指标及日志记录,因为似乎一切微服务都或多或少包含这些内容。另外,我们使用了小型、轻量化的框架(Helidon for Java 以及 Go-Kit for Go),两袖清风尝试了 Java 的纯 JAX-RS。我们也尝试了不同版本的 Java 与不同 JVM。我们对堆大小及垃圾收集机制做出基本调整,并在测试运行前对微服务进行了预热。 2. Java 的发展历史Java 由 Sun Microsystems 公司开发,后被甲骨文所收购。其 1.0 版本发布于 1996 年,目前的最新版本是 2020 年的 Java 15。Java 当前的主要设计目标,在于实现 Java 虚拟机及字节码的可移植性,外加带有垃圾回收的内存管理机制。时至今日,Java 作为一种开源语言仍是全球最受欢迎的语言选项之一(根据 StackOverflow 及 TIOBE 等来源)。 下面来聊聊“Java 问题”。人们对于它速度缓慢的印象其实更多是种固有观念,而不再适应当下的事实。如今的 Java 甚至拥有不少性能敏感区,包括存储对象数据堆、用于管理堆的垃圾收集器,外加准时化(JIT)编译器。及最新的 ZGC 垃圾收集器。现代垃圾收集器旨在尽可能减少垃圾收集造成的暂停时长。 甲骨文实验室开发出一款名为 GraalVM 的 Java 虚拟机,其使用 Java 编写而成,具有新的编译器外加一系列令人兴奋的新功能,包括可以将 Java 字节码转换为无需 Java 虚拟机即可运行的原生镜像等。 3. Go 的发展历史Go 语言由谷歌的 Robert Griesemer、Rob Pike 以及 Ken Thomson 开发而成。他们几位也是 UNIX、B、C、Plan9 以及 UNIX 视窗系统等项目的主要贡献者。作为一种开源语言,Go 的 1.0 版本发布于 2012 年,2020 年最新版本为 1.15。Go 语言的本体、采用速度以及工具生态系统的发展都相当迅猛。 Go 语言受到 C、Python、JavaScript 以及 C++ 的影响,已经成为一种理想的高性能网络与多处理语言。 截至我们发布主题演讲时,StackOverflow 上共有 27872 个带有“Go”标签的问题,Java 则为 1702730 个。 Go 是一种静态类型的编译语言,其语法类似于 C,且拥有内存安全、垃圾回收、结构化类型以及 CSP 样式并发(通信顺序过程)等功能特性。Go 还使用名为 goroutine 的轻量级进程(并非操作系统线程),外加各进程间用于通信的通道(类型化,FIFO)。Go 语言不提供竞态条件保护。 Go 是众多 CNCF 项目的首选语言,例如 Kubernetes、Istio、Prometheus 以及 Grafana 等皆是由 Go 语言编写而成(或者大部分是)。 Go 语言在设计上强调快速构建与快速执行。到底是两个空格还是四个空格?Go 语言表示不用麻烦,无所谓。
与 Java 相比,我将个人体会到的 Go 语言优势整理如下: (编辑:揭阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


