GoWithFlow 选择 Quarkus 以最小的风险快速投入生产

GoWithFlow 是一家最近在葡萄牙成立的初创公司,是 CEiiA 的衍生公司,Galp 是其主要股东,提供集成的移动解决方案,既可以为新的移动运营商提供端到端服务(例如,运营踏板车共享网络、管理电动汽车充电网络、管理车队),也可以从其他移动运营商那里收集数据,例如汽车共享运营商、公共交通等,从而为城市内的移动性提供单一入口。他们整合所有这些数据,供市民通过手机应用程序消费,这些应用程序可以帮助他们找到最近的共享车辆,或者使用多种交通方式从 A 点到 B 点的最佳方式,例如。

他们有一个单体应用服务器来支持他们所有的应用程序,他们的开发人员正在经历 2 到 3 分钟的部署周期来测试对代码所做的任何更改。此外,每次发生更改时,无论多小,都需要 2 到 3 个月的时间才能投入生产,这需要他们部署整个系统——即使是没有修改的部分——这使得整个过程非常危险。

GoWithFlow 正在将其工作负载迁移到云上的容器中,因此云资源消耗成本始终是首要考虑因素,并且他们始终在努力寻找更好的方法来优化云上的内存和计算使用量。

降低云资源消耗

当 GoWithFlow 的架构师兼 DevOps 负责人 Raul Valdoleiros 第一次听说 Quarkus 时,他对它的功能和特性非常感兴趣。他们研究了市场上其他类似的解决方案,但在评估了 Quarkus 之后,他们决定继续使用它。在与他们现有的单体解决方案进行比较时,他们意识到 Quarkus 带来的巨大内存节省,确切地说,负载下的内存消耗减少了 79%。下表显示了他们的评估结果

表 1. 评估结果
运行时模式 启动时 RAM 负载下的 RAM

单体

1.3 GB

1.5 GB

Quarkus JVM 模式

90 MB

800 MB

Quarkus native 模式

11 MB

320 MB

功能丰富且学习曲线小

除了低内存消耗和闪电般的启动速度外,GoWithFlow 选择 Quarkus 是因为其丰富的框架、扩展和功能。Raul 将 Quarkus 描述为“一个令人难以置信的集成项目,包括 MicroProfile、Vert.x、Kafka 和 Keycloak 等功能。”

由于 Quarkus 扩展由 GoWithFlow 开发人员已经知道的框架和功能组成,因此他们很容易学习并快速提高效率。虽然 Quarkus 引入了在云和容器上运行 Java 的创新技术,但开发人员发现它很熟悉,并且能够以很小的学习曲线掌握它,因为它的所有扩展对他们来说都很熟悉。尽管如此,他们还是花了一些时间来熟悉与 native images 相关的方面以及 Quarkus 尚未拥有扩展的功能。

原型

一旦 GoWithFlow 选择 Quarkus 进行 Java 开发,他们就开始了一个原型项目,该项目包括 4 个微服务的实现。使用 Quarkus 内置的测试工具,开发人员实现了自动化测试,这些测试在 JVM 和 native 模式下的构建时运行。他们还优化了管道流程,以避免在部署到生产期间的任何人为干预,其中微服务以 native 模式运行。集成测试包括启动应用程序并通过 Web 界面测试整个系统,Web 界面会调用 Quarkus 微服务。所有这些工作都是由他们架构团队的 3 名开发人员完成的,GoWithFlow 对他们迄今为止所取得的成就非常满意。

开发者生产力

GoWithFlow 一直在单体应用服务器中运行他们的应用程序。这意味着即使只对应用程序应用了一个小更改,他们也必须将整个应用程序推出到生产环境。除了耗时(发布需要 2 到 3 个月)之外,他们认为这是有风险的,因为他们必须不断发布未修改的代码。此外,开发人员必须等待 2 到 3 分钟才能看到他们的更改,同时他们等待将更改部署到应用服务器。这些延长了开发过程,这对开发人员的生产力以及他们的创新能力和保持竞争优势的能力产生了负面影响。他们致力于加快开发过程,而帮助他们完成这一任务的一个关键因素是 Quarkus 的 container-first 方法。现在,他们不再需要等待数月才能进行生产发布。此外,开发人员现在可以使用 Quarkus live coding 功能立即测试他们的源代码更改,这节省了大量的开发和故障排除时间,正如 Raul 所描述的那样“live coding 是 Quarkus 最好的功能之一,如果不是最好的。”

未来计划

GoWithFlow 目前每周向生产环境交付,并且正在努力优化其开发流程,目标是在未来实现持续部署。作为这项工作的一部分,他们还计划通过让整个开发团队(共 10 名开发人员)致力于这项工作,继续将他们的单体应用程序分解为基于 Quarkus 的微服务。该团队还将继续在 Quarkus 中开发新功能。

“包括 MicroProfile 在内的 Quarkus 对我们非常重要” Raul 在提到他们使用 MicroProfile Health、MicroProfile Config、MicroProfile Fault Tolerance 和 MicroProfile Rest Client 扩展时提到。未来,他们计划使用 MicroProfile OpenTracing 来可视化遍历不同微服务的请求,这对他们来说是一项关键功能。

GoWithFlow 对他们迄今为止使用在 native 模式下运行的 Quarkus 所取得的成就感到满意,并将继续与社区合作以促进其创新。

有关 Quarkus 的更多信息