Quarkus Native与Go微服务对比?


我们的团队目前正在开发一个非常庞大且复杂的 Spring Boot 项目,Spring Boot 固执己见的本质使我们能够非常快速地编写业务逻辑,而无需担心样板代码。

现在,我们的任务是编写小型微服务,首席架构师强迫我们使用 Go,因为它“简单”、“云原生”、“资源占用少”等等。我看过其他团队的 Go 项目,其中大多数都写得很糟糕,没有遵循任何设计原则,充满了样板代码,甚至对于小任务也重新发明轮子。

由于我们的团队在 Java 和“automagic”框架方面非常熟练,因此我们在像 Quarkus 和 Micronaut 这样的轻量级(使用 graalvm)Java 框架中会非常高效,而不是在 Go 上苦苦挣扎。

使用 GraalVM 构建的 Quarkus 二进制文件可以满足 Go 等低系统要求。

我的问题是,如何说服我们的首席架构师让我们使用 Quarkus?

答:
1、这是一个社会问题,而不是技术问题。
至少就您的首席架构师“减少资源”的愿望而言,quarkus 将符合要求。至少如果它与 graalvm 一起使用的话。

如果你想让某人相信某件事,你需要真正理解为什么他们会这么想。
他们认为用Go编写会为你的团队提供更好的服务。
他们在某种程度上也是“负责人”。如果不了解他们更深层次的推理,你就不会改变他们的想法。

例如,graalvm 可能会为您提供更好的性能,但编译时间可能是他们认为不可接受的。

也许他们一直想看看Go会如何发展,这更多是个人愿望,而不是实际技术驱动的东西。

2、我在生产中使用 Quarkus Native:配置本机镜像需要时间,您添加的每个不是 quarkus 扩展的库都可能会破坏构建。
我们仍在使用,因为拥有 30MB 的镜像、50MB 的内存和 1 秒的启动时间确实很不错,但您将花费时间来获得它。
我们还有一个非常广泛的集成测试套件(quarkus 在这方面提供了很多帮助),来处理graalvm 本机代理跟踪。如果你的团队不够成熟,事情就会破裂。

3、问题是什么是小型微服务。如果你在java上花费10天开发,在GO上花费30天开发,那么在服务器上节省的钱是不值得的。您还需要考虑支持、部署、日志记录、审核……您已经拥有所有这些 Java 工具。
您提到您的团队在 Spring Boot 方面工作得非常好。在 Spring Boot 中执行此操作。您知道,它将在生产中提供快速且轻松的支持。你拥有团队中的所有知识。如果一个人去度假,其他人可以提供支持。
如果它仍然太大,请寻找您提到的其他框架。但还是留在Java(JVM)中。Spring boot 不支持 GrallVM,不用担心,如果你写得对,对于小型微服务来说就足够了。

4、Go 实际上非常适合小型微服务。
我主要从事 Java 工作,但偶尔也会为了一些小事情而使用 Go。我非常喜欢 Quarkus,但我不会将它用于提供一堆 json 查询的简单 http 服务。
Go 的编译时间、平台支持、二进制大小都非常出色。
然而,小型微服务到底意味着什么,对你我来说可能是不同的衡量标准。
语言和框架只是工具。
根据要求,使用适合工作的正确工具。您的架构师可能是对的。

5、我现在使用 quarkus 处理所有事情,无论是微服务还是大规模项目,它的速度非常快,像 Cloud Run 这样的无服务器中的微服务在冷启动时启动速度非常快,quarkus 是真的很棒。