Last Updated:

何时选择Akka HTTP,Lagom或Play?

银狐

关注和使用Play Framework已经5年时间了,目前是公司使用的核心技术,推荐使用该系列技术框架,当初是因为相信其未来:任何一个程序员面对都是弹性可扩展、高并发、分布式、实时高效的应用处理系统。构建这样的应用程序,其中的核心技术只有技术专家才可应付,只关注应用开发的程序人员则很难掌控和实现。所以,选择好的框架作为应用开发工具,是捷径之选。

下面是官方对系列框架如何选择的最新介绍,原文详见:https://www.lightbend.com/blog/lightbend-podcast-when-to-use-play-lagom-or-akka-http

Google翻译如下:

成千上万的开发人员正在使用Lightbend技术构建出色的系统,但某些特定工具对于特定用例更好。那么如何为工作选择合适的工具呢?在与Lightbend的微服务实践负责人Wade Waldron的播客中,我们讨论了为什么考虑您的用例,您的团队和您的环境很重要。

有些问题要问自己:

您正在构建REST API吗?
你在构建GUI吗?
您是否希望在服务之间明确地进行HTTP调用?或者您正在寻找更像远程过程调用(RPC)的东西?
您是否计划使用Command Query Responsibility Segregation(CQRS)或Event Sourcing(ES)进行构建?
您的团队是否愿意在较低的水平上工作,了解所发生的所有细节?或者他们更喜欢框架透明地处理这些细节?
根据您对这些问题的回答,您可以确定Play Framework,Lagom Framework或Akka HTTP是否适合您的用例。

开发人员应该何时考虑从Play Framework开始?
Play Framework是一个Web开发框架,使开发人员能够轻松构建高度可扩展,快速的应用程序,并且在JVM上无与伦比。Play建立在Akka和Akka HTTP之上,并基于MVC编程模型,许多Java和Scala开发人员都应该熟悉它。

Play专注于使开发人员能够构建基于HTML的用户界面。它还提供了用于创建功能齐全的REST API以及插件的工具,以支持授权,与数据库集成等重要功能。

考虑到上述情况,我们经常建议客户将Play Framework用于以下用例:

基于Web的用户界面(GUI)
基于REST的微服务
API网关
CRUD风格的应用程序
开发人员应该何时考虑从Lagom Framework开始?
Lagom Framework可以帮助开发人员将微服务构建为系统 – 确切地说,反应系统 – 使您的微服务具有弹性和弹性。Lagom构建于Play Framework和Akka Cluster之上,具有基于RPC样式的编程模型,以简化微服务之间的通信,以及基于Domain Driven Design所描述的Entities概念的持久层。

Lagom旨在支持微服务之间的RPC式通信,包括命令查询责任隔离(CQRS)和事件源(ES)。Lagom具有与Apache Kafka和Apache Cassandra的集成,以及用于与DNS,Kubernetes,Zookeeper等集成的Service Location的抽象。

我们经常建议客户采用Lagom Framework,如果他们的用例特别关注:

RPC风格的后端微服务
CQRS / ES持久性策略
开发人员应该何时考虑从Akka HTTP开始?
Akka HTTP是一个基于Akka Streams 的Reactive Streams兼容工具包,它实现了完全异步和非阻塞的服务器端和客户端HTTP堆栈。Akka HTTP的编程模型提供了高级路由DSL和低级API。虽然它使用Akka Actors和引擎盖下的Actor模型,但它的API会隐藏最终用户。

Akka HTTP是一套库,而不是像Play和Lagom这样的框架 – 与浏览器的交互在范围内,但它不是它的主要关注点。Akka HTTP面向集成层的灵活性,而不是应用程序核心。它包含对Akka Streams和Reactive Streams的流API的内置支持,客户端API提供相同的异步,非阻塞和流式支持。

我们经常建议我们的客户使用Akka HTTP来处理以下用例:

向应用程序添加小型,轻量级的REST / HTTP端点。
构建丰富的HTTP服务器,其灵活性比简单性更重要。
似乎一切都在Akka的引擎盖下。那么开发人员何时应该特别关注Akka?
Akka是一个基于actor的消息驱动运行时,用于管理JVM上的并发性,弹性和弹性,具有对Java和Scala的一流支持。Akka背后的编程模型基于Actor模型,Akka Streams基于Reactive Streams,提供了一个针对流数据进行优化的模型。

Akka使用Actor模型来简化并发性并提高资源使用率,提供集群功能,包括Sharding,无冲突复制数据类型(CRDT),gRPC,路由器等。它还包括用于支持具有无阻塞背压的流数据的Akka Streams,以及用于提供与各种外部技术集成的Akka Streams端点的Alpakka。

我们建议将Akka集成到已经为其应用程序使用其他Lightbend技术(如Akka HTTP,Play或Lagom)的客户端,并希望实现以下用例:
优化单片或微服务应用程序中的资源使用。
实现可扩展的系统,克服传统应用程序的限制。
提供与流数据源的集成。
综上所述…
无论您是从Akka,Lagom还是Play开始,您都可以根据需要在以后添加这些功能。这些只是针对Lightend客户的指导原则,其他因素可能会影响决策。

心得:

未来将会是“一切以数据为中心,用数据驱动一切”的生活场景。人们的生活、工作时时刻刻都在生产数据,同时也在消费数据,将来人工智能更是离不开数据,一切都在围绕数据在运作,并且利用数据来驱动一切。未来谁掌握的数据越有质量越有可信度越大容量,那么谁驱动世界的能力就会越大。