Quarkus 如何改进 Logicdrop 的开发者体验和流程

Logicdrop logo

Logicdrop 提供了一个业务自动化和数据智能平台,使企业能够设计自己的解决方案并在云中运行它们。我们每月处理数百万笔交易,覆盖全球客户群,并为关键任务流程增加重要价值。

开发者体验在任何技术的采用中都起着重要的作用。能够快速且自信地从构思到交付,有助于培养创新并有助于交付世界一流的产品。

我们为客户化繁为简,那么,我们如何为自己的开发过程做到这一点呢?

当其他人专注于如何改变世界时,我们将首先专注于如何从内部改变自己。

……这始于我们对 Quarkus 的采用。

挑战

我们平台的开发始于 3 年多前。Quarkus 几乎还只是一个传闻,Kogito 甚至还不存在,而且我设法在儿子的中间名中加入了 “Jenkins”,因为它仍然是一个流行的构建系统。

现在是 2020 年,我们仍然在使用 Spring Boot,但完全拥抱 Kubernetes 和其他技术,如 Knative、Kamel 和 Ignite,仅举几例。

随着我们平台取得的巨大进步以及它们带来的功能,随之而来的是巨大的复杂性,这就是旅程的开始……

随着我们平台的发展和复杂性的增加,我们的开发过程变得越来越繁琐,技术团队、前端、后端和运营之间的依赖关系开始成为瓶颈。

好吧,我们做了任何一个有自尊心的计算机科学家都会做的事情,并查看了数据。是什么导致了这种转变,阻止我们变得更敏捷?

经过一些分析,我们很快发现了三个主要的痛点

  • 环境设置太难

  • 学习曲线太陡峭

  • 我们的 CI/CD 流程是自动化的,但还不够

进入 2021 年。我们的目标不仅仅是恢复现状,而是对我们的流程进行重大改进,并首当其冲地进入云原生!

Quarkus 实际上是什么?

就像网站所说的那样,它确实是纯粹的开发者乐趣

在跳入 Quarkus 之前,我们评估了许多技术栈,Spring Boot、Micronaut,甚至 Guice 也一度被考虑。我们还考虑了更激烈的变化,例如切换到 Python 或 .NET Core。

最终,Quarkus 赢得了我们的青睐,因为它是在需要时打了鸡血的 Java,我们都知道并喜欢它,并且

  • 被开发者迅速掌握

  • 最容易上手并提高生产力

  • 一个丰富而有凝聚力的生态系统

  • 能够自然地处理反应式或命令式

  • Kubernetes 和 Knative 友好

  • 基于我们已经熟悉的标准

我们越深入探索 Quarkus,就越开始欣赏其他方面

  • 指南足够简单可以上手,但适用于真实世界的任务

  • 一个超级响应和乐于助人的社区,尤其是核心开发者

在这一点上,我们决定冒险一试,但不是改造我们现有的平台,而是从头开始。与此同时,我们将进一步推动信封,彻底改造我们的 CI/CD 流程、集群,最重要的是,我们的开发者文化。

负责原型设计的首席架构师说

在不到一个月的时间里,我已经使用 Quarkus 实现了并部署了至少三个新的重要原型。我简直不敢相信其中两个已经被拒绝了。

首席架构师

改变是不可避免的

由于我们将此视为对现有 Spring Boot 平台的彻底重写,因此需要进行许多更改。代码库是新的,但模式是相同的,并且使用 Quarkus,我们能够更容易、更快、更好地实现它们。

  • VSCode 能够成为我们事实上的编辑器

  • 自动配置和浪费的依赖项消失了(一大胜利)

  • DI 变得可预测而不是神奇(一大胜利)

  • 使用标准使开发和学习代码库更容易

  • Mongo 和 Panache 做了我们需要的,仅此而已

  • Kubernetes 配置可以更接近服务

  • Mutiny 使编写反应式服务对每个人来说都更容易

  • 不再需要反射来扫描 “bean” 以帮助配置或 DI

  • 安全性开箱即用且定义明确(一大胜利)

  • REST 客户端帮助更清洁和更好地隔离服务

  • OpenAPI 和 Swagger 无需调整即可工作

  • 不再需要深入了解 Maven

  • 测试变得更容易和一致

  • CI/CD 将所有服务一起编排,而不是单独编排每个服务

  • 引入了预览环境,以隔离部署/测试服务

  • 不再有臃肿的依赖项

  • Livecoding 使一切都变得更好

而且这个列表还在继续……

所有开发者都发现 Quarkus 更容易上手,甚至包括 Python 和 .NET 开发者,并欣然接受它

Quarkus 使 Java 开发比以往任何时候都更容易和更高效。我不再需要在多个终端之间切换才能找到重建代码的正确终端,Quarkus 使其自动化。

专注于规则和大数据全栈开发者

与 Kubernetes 的深度集成进一步最大限度地降低了复杂性,并使我们的服务更接近云原生。我们的 DevOps 工程师(以前是一名开发者)说得最好

这是否意味着我可以回去编写代码,因为我不再需要处理服务配置,因为 Quarkus 为我做了这件事?

DevOps 工程师

前端开发者对 Quarkus 足够熟悉,能够阅读代码(至少),并且可以帮助进行调试或测试

我终于在本地设置了一个完整的环境,我可以理解发生了什么。现在,我可以找到错误,而不必至少等待。

前端开发者

我需要原生镜像吗?

原生镜像是我们最初最不关心的功能之一,但你猜怎么着?它们工作得很好,几乎没有问题。

我们现在部署的容器大约为 50MB,低于 200MB。这对于集群密度大有帮助,而且还节省了大量集群节点上的资金。

此外,原生镜像的启动时间不到 1 秒,而以前在某些情况下超过 10 秒。

因此,如果可以构建和使用原生镜像,为什么不呢?将其合并到 CI/CD 流程和测试中可能会带来一些有趣的挑战,但没有任何大的问题。

衡量成功

六个月后,几乎所有东西都已从头开始重建。

推出 Logicdrop Fusion,我们由 Quarkus 提供支持的新型云原生平台。

我们超过 60% 的代码库已经迁移,并且不到原始等效代码库的一半大小。我们每小时/每天多次部署到预览和暂存环境,平均周转时间是过去所需时间的一半。

通过迁移到 Quarkus,我们取得了哪些重大胜利?

  • 入职上手需要几天而不是几周

  • 代码库更小、更紧凑、更易于使用

  • 提高生产力和质量

  • Java 再次变得有趣

并且我们所有的开发者都具有足够的工作知识,可以在几小时而不是几天或几周内构建、测试和部署服务。

一个开发者解释说,更容易的学习曲线的结果

很高兴按照我的预期注入依赖项并开始编码,而无需处理一堆样板配置。我现在可以专注于我必须做的事情,而不是首先如何到达那里。

Java 开发者

如果你考虑一下,我们必须学习 Quarkus 从头开始重做一切。现在,经过短短一段时间后,我们正在部署生产就绪的代码。这真是太酷了,它表明了采用 Quarkus 是多么容易。

致 Quarkus……以及更远的地方

在这一点上,我们完全投资于 Quarkus。它是我们新平台的核心,唯一的遗憾是没有早点跳入。

我们今年剩余时间的路线图

  • 继续扩展我们的 Quarkus 基础

  • 在团队和客户中宣传 Quarkus

  • 强化平台

  • Kogito 集成

不用说,尽可能快地引入功能,因为 Quarkus 使我们能够更好地做到这一点!

现在典型的一天

FYI,以防你想知道,我刚刚部署了 10 个服务。

Slack 消息

我刚刚再次部署了所有 10 个服务。

30 分钟后……