如何部署 Akka?

Akka 可以以不同的方式使用:

  • 作为库:在应用程序的环境变量中作为一个常规 JAR 使用,将其放入WEB-INF/lib
  • 作为与「sbt-native-packager」打包的应用程序

原生打包程序

sbt-native-packager是用于创建任何类型应用程序(包括 Akka 应用程序)的分发的工具。

project/build.properties文件中定义 sbt 版本:

  1. sbt.version=0.13.13

project/plugins.sbt文件中添加sbt-native-packager

  1. addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.5")

按照「 sbt-native-packager 插件文档」中JavaAppPackaging的说明进行操作。

在 Docker 容器中

你可以在 Docker 容器内同时使用 Akka 远程处理和 Akka 集群。但是请注意,在使用 Docker 时,你需要特别注意网络配置,在「Akka behind NAT or in a Docker container」中描述了相关信息。

你可以查看「带有 docker-compse 示例项目的集群」,以了解实际中的情况。

为了让 JVM 在 Docker 容器中运行良好,可能需要调整一些通用(不是特定于 Akka)参数。

资源限制

Docker 允许限制每个容器的资源使用。

内存

你可能希望在 JVM 8u131之后使用「-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap」选项设置,这使它了解c-group内存限制。在 JVM 10 和更高版本上,则不再需要-XX:+UnlockExperimentalVMOptions选项设置。

CPU

对于多线程应用程序(如 JVM),CFS 调度程序限制是不合适的,因为它们会限制允许的 CPU 使用,即使主机系统有更多的 CPU 周期可用。这意味着你的应用程序可能缺少 CPU 时间,但你的系统似乎处于空闲状态。

因此,最好完全避免--cpus--cpu-quota,而是使用--cpu-shares指定相对容器权重。

在 Kubernetes 中

集群 bootstrap

为了利用你在 Kubernetes 内部运行而形成集群这一事实,你可以使用「Akka Cluster Bootstrap」模块。

你可以查看「带有 Kubernetes 示例项目的集群」,以了解实际中的情况。

资源限制

为了避免 CFS 调度程序限制,最好不要使用resources.limits.cpu,而是使用resources.requests.cpu配置。


英文原文链接How can I deploy Akka?.