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

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 分钟后……