沃达丰希腊公司用Quarkus代替Spring Boot - quarkus


沃达丰希腊公司是希腊第二大电信公司,为超过600万订户提供固定和无线电话服务。
沃达丰希腊分公司在本地和云上运行许多应用程序,因此云资源消耗成本对其极为重要。其体系结构的一个组成部分是数字体验层(DXL),这是一种基于Kubernetes的软件,它通过提供易于使用的REST充当沃达丰核心系统(基于SOAP的通信)和客户端(Web /移动)之间的中间件,是一个基于TMF规范的API(https://www.tmforum.org/),其目标是在未来数年内成为沃达丰数字服务的骨干。其组件利用MongoDB,Kafka Streams和Redis等技术将旧服务的响应速度提高了800%以上,同时将其转换为REST友好的通用API。DXL是使用Spring Boot实施的,并且完全在云上运行,并且他们一直在消耗大量内存资源并且启动时间很长,因此他们开始寻找减少这些资源的方法。
沃达丰希腊公司关心的另一个关键领域是应用程序启动时间长,尽管沃达丰希腊公司可以为DXL分配更多的云资源以缩短启动时间,但这将意味着更高的云成本。因此,他们着手寻找优化DXL的方法,以使其消耗更少的云资源。
除了DXL之外,Vodafone Greece还使用Spring Boot运行很大一部分微服务。目前,他们在开发和生产中运行的微服务中有80%基于Spring Boot,但它们中还包含4个Node.js微服务。

他们为何选择Quarkus
他们选择Quarkus 替代Spring Boot的主要标准是开发人员效率,更低的云资源消耗和更短的应用程序启动时间。他们认为后者对云资源消耗成本以及用户体验的改善具有重大影响。
他们研究并评估了其他技术和框架,例如其他本机可编译框架Node.js和Vert.x。他们认为Node.js对他们来说不是一个好选择,因为这会给Java开发人员带来负担,使他们无法学习Java应用程序并将其迁移到Javascript。某些框架也没有被削减,原因是它们渴望有强大的支持者和赞助者。未选择另一个本机可编译框架,因为它无法编译MongoDB驱动程序-当时不支持在本机模式下使用MongoDB驱动程序,并且无法跳过未编译为本机的MongoDB驱动程序部分。
他们几乎选择了Vert.x,因为它具有出色的上下文传播功能和出色的性能。然而,当他们在2019年4月了解Quarkus并且在其堆栈中包含Vert.x并提供内存和启动时间优化时,他们决定使用Quarkus。
根据Quarkus Vodafone Greece DXL技术负责人Christos Sotiriou的说法“似乎可以提供我们所需的性能提升,同时拥有良好的支持者(Red Hat)并依靠经过考验的技术。” 在2019年6月,Vodafone Greece首次成功实现了微服务部署,该部署依赖于他们在Quarkus中有限的重写公共库集。
选择Quarkus而非其他竞争技术的另一个原因是开发人员能够编写自己的扩展。此外,项目的高活动性,例如社区成员,项目明星,Quarkus开发人员对社区问题的答复和修​​复的快速周转以及通过项目沟通渠道彻底回答技术问题的红帽开发人员的数量是积极的指标让他们选择Quarkus。最后,他们对Red Hat的信任以及在软件市场中的信誉为其提供了保证,他们选择了赞助商为Red Hat的Quarkus来做出正确的选择。

解决方案
一旦他们决定前进的道路,沃达丰希腊公司便开始将其常见的内部库从Spring Boot迁移到Quarkus。它们的公共库涵盖了跨领域的关注点,例如:

  • 记录中
  • 安全
  • 数据库连接
  • Kafka连接
  • 分布式日志

根据Christos的说法,“使用Spring Boot很难实现分布式日志记录,而对于Quarkus,创建这个新的公共库是可行和可行的。与Spring Boot相比,至少在我们的用例中,在Quarkus中设置标头传播并对微服务的入站-出站请求执行操作的方法至少在我们的用例中允许更好的可重用性,并允许我们为我们的跨国公司进行更简单的设置团队”。
截止到今天,他们已经拥有大约15个Quarkus微服务,其中有5个于2019年9月底投入生产。就工作量而言,有2个开发人员致力于处理这前5个微服务,这些服务现在已经以JVM模式运行。目前,他们的团队正在努力在未来3个月内提供20种微服务。值得一提的是,根据克里斯托斯的说法,根据他们的经验,他们的Spring开发人员很容易选择Quarkus Java堆栈,因为“从Spring Boot迁移到基于CDI的框架不需要很多工作”。 
尽管Quarkus具有Spring API兼容性,但Vodafone Greece没有计划使用它,因为Christos认为“在微服务中混合两种编程模型没有意义”。为了保持代码的清洁,Vodafone Greece正在“仅使用Quarkus构造,而不会使用Spring语法弄混水”,这是Christos所指定的。对于他们的需求,Quarkus堆栈已经提供了他们所需的一切,因此根本不需要任何Spring Boot。

好处
沃达丰希腊公司已经发现使用Quarkus有很多好处。其中之一是,在JVM模式下,内存资源消耗减少了一半。此外,无需任何优化,启动时间已减少到将近四分之一。值得一提的是,其中许多微服务都很复杂,因为它们“具有大量的Kafka和数据库连接”,如Christos所述。
他们的使用Kafka的日志记录系统使用大量内存,因为它处理大消息并将其转换为JSON。例如,某些微服务在使用Spring Boot时需要1 GB RAM。相比之下,对于生产而言,他们现在可以部署具有512 MB RAM的Quarkus微服务。“对于80种微服务而言,这是一笔可观的节省!” Christos强调并补充说:“在默认情况下(在JVM模式下),Quarkus提供的内容(不尝试对其进行优化)比Spring在优化后提供的内容(在JVM模式下)提高了50%-60%照顾依赖关系,使用JVM选项,等等)”。
关于启动时间,其中很大一部分时间用于等待消息代理和数据库接受连接,这使Spring Boot微服务在大约50秒内启动。但是使用Quarkus微服务,可以在不到四分之一的时间(14秒)内启动。
他们获得的巨大的开发人员效率收益是出乎意料的,也是令人惊喜的:
首先,他们意识到从Spring Boot迁移到基于CDI的框架不需要他们的Spring开发人员花费很多精力,因此学习曲线很小。
其次,使用Quarkus实时编码功能(又称开发模式)导致开发人员生产率的提高,克里斯托斯称这是“一件非常好的事情”。例如,每个开发周期包括1到2个冲刺(1个冲刺= 2周的周期),具体取决于所开发逻辑的复杂性,并且使用Quarkus,他们看到“开发人员的生产率比以前提高了30%到40%”根据Christos的说法,“这是Spring Boot,这是针对前Spring Boot开发人员的。”
另一个令Quarkus印象深刻的功能是Quarkus使用企业Java的方式的有效性,例如,将CDI与上下文传播结合使用的简洁方法用于异步方法。微服务调用其他微服务然后聚合其他微服务返回的信息并不少见,并且通过MicroProfile Context Propagation和MicroProfile Reactive Messaging扩展毫不费力地与Quarkus一起工作。事实上,“ MicroProfile是为什么我们喜欢Quarkus作为开发工具的一个很好的理由” Christos说。

下一步是什么
就下一步而言,希腊沃达丰微服务的数量现在只涵盖了他们打算做的一小部分。他们希望将目前的数量增加一倍,换句话说,将微服务的数量和致力于该计划的开发人员的数量增加一倍。为此,他们计划在接下来的三个月中发布20个Quarkus微服务。根据Christos所说,随着他们的成长,“编排和开发人员的生产力对于他们所消耗的资源将变得更加重要”。
当前,当它们与MongoDB进行接口时,它们以JVM模式运行Quarkus,但他们正在考虑将来与MongoDB一起使用本机编译。沃达丰(Vodafone Greece)几个月前开始使用Quarkus时,它并未包括MongoDB的扩展,但是Quarkus确实包括MongoDB客户端扩展,因为它们可以利用。此外,他们计划使用更多的Quarkus扩展,例如MicroProfile Fault Tolerance的断路器,并更广泛地采用MicroProfile反应消息规范。
此外,尽管有了Quarkus,他们已经以一半以上的速度在JVM模式下运行以减少内存消耗和启动时间,但他们仍计划将来在纯模式下运行Quarkus微服务,以更好地消耗内存并启动时间。