Sedona 使用 Quarkus 重写保险费精算引擎

Sedona 成立于 1998 年,总部位于巴黎,是一家咨询和信息技术服务公司,在 3 个国家设有办事处:法国、瑞士和中国。 Sedona 在全球拥有 180 名专家,其中 40% 在巴黎办事处办公。
Sedona 响应了一家法国金融和保险公司关于计算引擎的招标(提案请求),该公司一直在使用 Microsoft Excel 来执行保险费的估算,并认为他们已经达到了 Excel 功能的限制。 他们希望拥有一个更专业、可配置、可定制且用户友好的工具,以便在市场上获得竞争优势,为最终客户提供更快的报价速度,以及更好的最终用户体验。 在他们目前的基于 Excel 的系统中,每个员工都有自己的 Excel 表格,每个员工都可以更改其 Excel 表格的副本,这可能会为相同的输入生成不同的报价。 他们希望统一和标准化这些流程,使其不易出错。
Sedona 的提案是开发一个前端应用程序,与作为实际计算引擎的后端以及用于管理计算引擎配置的后台解决方案进行交互。 后端计算引擎将执行精算分析以估计保险费。 关于客户的要求,该解决方案需要包括 Docker、快速启动时间和小的 RAM 消耗。 只要基于 Java,他们的客户并不关心他们使用的框架。
他们选择 Quarkus 的道路
Edouard Lamotte 是 Sedona 的首席软件架构师和 Java 团队经理,拥有超过 15 年的 Java、Java EE 和 Spring Boot 经验。 为了跟上创新和领先技术的发展,他和他的许多同事定期参加 Devoxx、Red Hat Summit 等开发者大会,以学习、理解和倾听大型软件供应商、社区和组织正在讨论的创新软件技术和工具。
几年前,他们了解了 Eclipse MicroProfile,他们很喜欢它,并认为采用它而不是 Spring 是一个非常好的主意,因为 MicroProfile 是一个社区驱动的微服务 Java 规范。 他们尝试了 Thorntail 的 MicroProfile 实现,并获得了使用此技术实现微服务的经验。 他们考虑 MicroProfile 的另一个原因是,他们希望标准化单一技术栈,避免他们的开发人员混合使用技术栈:例如,一个使用 Spring Boot,另一个使用 Micronaut。 所以,这些是他们决定使用 MicroProfile 的最主要原因。
就像他们偶然发现 MicroProfile 一样,大约一年后,他们了解了 Quarkus,这给他们留下了深刻的印象,因为它实现了各种扩展和框架,包括 MicroProfile。 在尽职调查中,他们在互联网上研究了 Quarkus,以比较 Quarkus 和其他技术。 他们还尝试了 GitHub 上所有这些技术的不同入门项目:Micronaut、Thorntail、SparkJava、Quarkus。 经过全面评估,他们选择 Quarkus 的原因如下:
-
Quarkus 具有容器优先的方法
-
它是 Kubernetes 原生的
-
它具有快速启动时间
-
它消耗很少的 RAM
-
实时编码
最后,他们需要为客户开发的应用程序不是太大,所以他们很乐意尝试像 Quarkus 这样的新技术。 如果事情没有进展,他们可以回滚到不同的技术。
关于应用程序
计算引擎可以被看作是一个暴露 REST 端点的微服务。 Sedona 已经在这种架构模式上工作了好几年。 微服务通常在容器中运行,因此小足迹(~75MB)和快速启动(<2s)的可交付性问题是非常重要的考虑因素。 Sedona 过去使用 Spring,但这个框架似乎太重,消耗太多资源,而且最重要的是,它不是 Java 标准。
在研究和使用了不同的框架(如 Spark Java、Eclipse MicroProfile、Thorntail 和 Micronaut)之后,Quarkus 因其容器优先的方法及其与 Kubernetes 环境的本机兼容性而引起了 Sedona 的兴趣。
客户的直接限制是用 Java 开发,交付 Docker 镜像,并在不久的将来迁移到 Kubernetes 环境。 因此,Quarkus 是满足这些约束的解决方案。 此外,Sedona 认为与 GraalVM 的集成是一个优势。
有了这个解决方案,他们现在可以集中管理这些流程,所有员工将使用相同的计算引擎来获得更准确和一致的报价。
该应用程序于 2020 年 1 月 15 日部署到生产环境,并在私有云中的虚拟机上运行。 在本次采访时,他们没有看到应用程序有任何性能问题。 在过去的几个月里,他们看到流量增加,导致应用程序的规模扩大。 同样,这种情况顺利发生,没有任何问题。
Quarkus 应用程序为其客户提供的一个重要好处是,由于该应用程序消耗更少的内存并具有更快的启动时间,他们将能够在相同的硬件上处理更高的流量。 换句话说,他们的客户将能够在现有硬件上获得更高的工作负载密度。
致力于此项目的资源包括:一名架构师、一名项目经理和三名全栈开发人员(Angular、Java)。 他们于 2019 年 7 月中旬开始开发,并于 2020 年 1 月的第二个星期投入生产,总共花费了六个月。
交付的 Quarkus 应用程序使用 Docker 进行容器化,容器的管理通过 Docker Compose 完成。 虚拟机的配置通过 Ansible 脚本完成。
即使对于 .NET 开发人员也很容易上手
对于拥有 Spring Boot、MicroProfile 和 Java EE 经验的 Edouard 来说,上手 Quarkus 非常容易; “我来自 Spring、Java EE 和 MicroProfile 的世界,Quarkus 支持 MicroProfile,所以过渡很容易”,Edouard 断言。 一般来说,Sedona 开发人员在 Java EE 和 Java 技术(如 Hibernate、RESTEasy 等)方面拥有丰富的经验,Quarkus 为所有这些技术提供了扩展。 这使得他们可以快速上手 Quarkus。 此外,“Quarkus 文档非常适合开始使用 Quarkus”,他补充说。
在开发人员文化方面,Sedona 鼓励他们的开发人员学习并能够从一种技术切换到另一种技术,他们的 .NET 开发人员就是这种情况。 其中一位是 Jocelyn P.,他也是他们的 Quarkus 应用程序的开发成员。 他花了大约一个月的时间开始用 Quarkus 进行开发,花了 2 到 3 个月的时间才能独立地熟练和高效地工作。 以下是 Jocelyn 关于 Quarkus 的引言:
Jocelyn P. (.NET 开发人员): “一开始,使用 Quarkus 有点困难。 但是在使用几个月后,我认为这是一个很好的框架,易于使用,并且在引导和实时重新加载方面速度很快。 我特别喜欢数据访问覆盖层 (Panache),它允许执行任何数据库读取操作,而无需编写 SQL,包括稍微复杂的查询,而不会改变性能,即使是在大量数据上也是如此。 REST 客户端将在下一个 Quarkus 版本中非常受欢迎。 随着 Quarkus 的创新,我将继续学习和利用它的优势,并更好地理解它的所有可能性”。
Sedona 也有 Spring 开发人员。 以下是 Mathias B. 的证词:
Mathias B. (Spring 开发人员): “使用 Quarkus,我们坚持标准来开发一个完整的 restful 后端,该后端是轻量级的并且启动速度非常快。 我喜欢 Quarkus 的几个方面是:- 文档/指南清晰明了。 (我们甚至在网站上有一个快速入门)。 - 简化 DAO/Repositories 管理的 Panache 实体 - 用于 BDD(Flyway)的本机版本控制集成(用于管理数据库版本)- 通过注解(Scheduler 扩展)进行本机和简单的 CRON 管理”。
好处
Sedona 发现 Quarkus 的实时编码功能非常令人印象深刻。 Edouard 提到 “实时编码对开发人员友好,并且非常容易与不同的 IDE 一起使用”。 他们发现他们可以轻松地将 Quarkus 项目与他们喜欢的 IDE 集成。 他补充说 “您启动 Quarkus 应用程序,您可以修改您的 Java 类,您的更改会立即无缝地重新加载”。 例如,对于他们的一个基于 REST-API 的应用程序,“使用 Quarkus 进行实时重新加载大约需要 2-3 秒,而使用 Spring Boot 需要 30 秒才能重新加载”,他在描述他们使用 Quarkus 相对于 Spring Boot 的首次体验时提到。 他们还发现 Hibernate ORM 与 Panache 扩展非常有用,有助于加快开发速度。
另一个让 Sedona 印象深刻的好处是 Quarkus 提供的非常小的首次响应时间。 “快速启动真的很棒”,Edouard 说。 他们认为,对于扩展微服务和降低 Web 应用程序的应用程序响应时间,快速启动时间非常重要。
目前,Edouard 提到 “我们正在容器上的 JVM 模式下使用 Quarkus,但在未来,我们已经在计划在 Kubernetes 和无服务器环境中的本机模式下使用 Quarkus,本机模式将是理想的”。
总的来说,Sedona 对 Quarkus 的看法是 “显然是积极的,Quarkus 是我们迄今为止使用的在引导和热重载方面最快的框架”。
他们也使用 Kotlin 进行开发,Quarkus 也支持 Kotlin。
最后,他们的开发人员所经历的小学习曲线、配置不同环境(如开发、测试和生产)的管理简单性、实时编码以及 Quarkus 的快速启动功能使 Sedona 的开发人员能够提高他们的生产力,从而更快地为他们的客户交付解决方案。
展望未来
这是 Edouard 第一次使用 0.19 版本(尚未达到 1.0 版本)的技术投入生产。 这说明了 Quarkus 工程师和社区开发的软件的高质量和可靠性。
Sedona 已决定继续将 Quarkus 用于未来的项目,他们认为 “这是对未来的一个好赌注”。
更新:Sedona 在 2020 年 4 月底将 Quarkus 更新到 1.4。 Sedona 目前正在启动两个新的 Quarkus 项目(在本机模式下),一个用于微服务项目,另一个用于无服务器项目(使用 AWS Lambda)。
有关 Quarkus 的更多信息
-
Quarkus 网站:https://quarkus.net.cn
-
Quarkus GitHub 项目:https://github.com/quarkusio/quarkus
-
Quarkus Twitter:https://twitter.com/QuarkusIO
-
Quarkus 聊天:https://quarkusio.zulipchat.com/
-
Quarkus 邮件列表:https://groups.google.com/forum/#!forum/quarkus-dev