当前位置: 首页 > 知识库问答 >
问题:

Quarkus弹性最佳实践

公孙茂学
2023-03-14

我有一个如下的用例:

一个 Quarkus 微服务负责与其他几个固定 API(例如 ArgoCD REST API、STANDARD CORPORATE DRIVEN API)进行通信,以使整个系统处于所需状态。

整个请求需要事务化,这意味着要么所有API请求都需要成功,要么在出现任何错误时回滚。

如果API返回错误,情况对我来说很清楚。“只需恢复之前所做的一切”,但如果我的Quarkus应用程序崩溃会发生什么?

QUKUS应用程序在endpoint上接收POST请求,该endpoint启动以下任务:

    < li >阅读有关REST-API 1的资源 < li >在REST-API 2(argod API)上创建资源 < li >在REST-API 3(标准企业API)上创建资源

如果我的 Quarkus 应用程序在第二步后死亡,它将使我的应用程序处于不一致状态。

例如,我的第二个请求将使用它的REST API创建一个ArgoCD-Application,如果第三个请求失败,我必须再次删除创建的应用程序,使系统回到一致的状态。

LRA方法在这里不适用,因为ArgoCD Rest API未实现LRA API。

所以至少,我必须在Quarkus应用程序中维护状态和补偿逻辑。但是,我需要在任何地方保持我的事务状态,以便在失败后从中恢复。

我当前的解决方案除了使用Redis数据库来保存每个事务的状态,直到它完成,但我想知道我是否错过了一些与我的用例相匹配的标准解决方案。

共有1个答案

袁羽
2023-03-14

我认为没有简单的方法来实现你所寻找的东西。当然,这取决于您的企业可以接受的弹性或隔离级别。实际上,有一个名为LRA(长时间运行动作)的专用微文件规范专门用来解决这个问题。这是传奇模式的一种实现。

问题是,仅仅依靠在这些API上调用回滚是不够的。如果这些回滚失败以及其他许多情况。在这种情况下,总需要有一名协调员来协调整个过程。你可以在上面的链接甚至是LRA的Quarkus扩展中读到更多。

我知道,例如,如果您无法访问这些 API 的源代码来添加 LRA 注释,则可能没有必要解决您的问题,但我希望它能为您提供一些关于人们通常解决此问题的方式的想法。

 类似资料:
  • Overview This article discusses performance and reliability best practices for Express applications deployed to production. This topic clearly falls into the “devops” world, spanning both traditional

  • 性能与体验是前端的核心竞争力,是最直观反应页面是否好用、易用的标准。用户花在页面上的时间不应该是在等待页面加载和响应,而是使用和顺畅浏览的时间,因此如何提升页面性能和体验,让页面更快的可交互、浏览滚动更顺畅,是需要你持续的研究、优化、推进的。在 Rax 不断应用发展以及成熟的过程中,沉淀总结了一系列的性能体验的措施和最佳实践,通过这些,可以帮助你大幅提高页面的各项性能。 加载性能 统计口径 加载性

  • 问题内容: 我正在使用Hibernate 3编写Web应用程序。 所以,过了一会儿,我注意到有些东西很慢。因此,我测试了Hibernate Profiler,发现Hibernate将无理地进行许多数据库调用以简化操作。原因当然是我加载了一个对象(该对象有几个“父母”),而这些“父母”还有其他“父母”。因此,即使我只需要基本对象,从根本上来说,hibernate都会加载它们。好的,所以我研究了延迟加

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En