【问题标题】:What is the canonical way to deploy Scala/Akka microservices?部署 Scala/Akka 微服务的规范方法是什么?
【发布时间】:2016-11-25 04:08:08
【问题描述】:

我们最终会得到几十个这样的微服务(大多数是基于 Akka 的),我不确定如何最好地管理它们的部署。具体来说,它们被构建为彼此独立,并且尽可能专业化和分布式。

我的问题源于它们对于各自的 JVM 来说都太小了;即使我们将它们托管在 AWS nano 实例上,如果考虑到冗余,我们最终仍将拥有大约 40 台机器,而且根本不需要这么多的机器。三个中型实例可以(并且确实)轻松处理整个工作负载。

目前,我只是将它们分组到“容器”应用程序中,有点随机,然后在更大的 JVM 上运行这些容器应用程序。

但是,必须有更好的方法。我不知道有任何 Akka 应用服务器可以在其中“部署 Actor”,因此我想了解其他人如何在生产环境中运行 Akka 微服务(特别是如何管理部署)。

这可能不仅限于 Scala 和 Akka,但大多数其他平台都有专门的应用服务器来部署这些东西。

【问题讨论】:

标签: scala deployment jvm akka devops


【解决方案1】:

恕我直言,规范的方法是使用服务编排工具,这确实会在单独的进程中运行它们,每个进程都有自己的 JVM。 只有这样,您才能通过微服务获得所需的解耦、隔离和弹性,只有这样您才能单独部署、更新、停止和启动它们。

你是说:

我的问题源于它们都太小了 他们自己的个人JVM;即使我们将它们托管在 AWS nano 上 实例

您似乎将 JVM 和 Amazon VM 视为等效,但事实并非如此。您可以在单个虚拟机上拥有多个 JVM 进程。

我建议您看看服务编排工具,例如 Lightbend Production Suite / Service OrchestrationKubernetes

这些只是示例,还有其他示例。请注意,此工具类别将为您提供许多您迟早需要的功能,例如轻松扩展、日志整合、服务查找、健康检查/服务故障处理等。

【讨论】:

  • 感谢您,lutzh,您的宝贵意见。我将研究您提到的工具(我之前听说过 Kubernetes,但出于某种原因认为它更多地用于管理 Docker 容器)。关于在一台机器上运行多个 JVM - 是的,我很清楚这是可能的,但我总是认为这是不必要的,因为在每个微服务周围运行完整的 JVM 的开销,而它们都可以在一个微服务中运行。也许这种想法有些过时了,因为现代 JVM 通常被认为是轻量级的。
  • “只有这样你才能单独部署、更新、停止、启动它们”这不是真的。您可以在单个 JVM 中拥有独立的组件生命周期。弹性是另一回事,但是如果您过度订阅系统资源,那么一台机器上多个 JVM 之间的交互可能会很重要。
猜你喜欢
  • 2018-06-17
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2018-09-28
  • 2017-12-14
  • 1970-01-01
  • 2017-07-31
  • 2017-10-06
相关资源
最近更新 更多