在生产环境运行Lagom
Lagom可以设置为与大多数生产环境协同工作,从物理服务器上的基本手动部署到OpenShift, Kubernetes 和 Mesosphere DC/OS等服务编排平台。Lagom中的核心API独立于任何特定的部署平台。在Lagom确实需要与环境接口的地方,它提供了可扩展的插件点,允许您为生产配置服务,而无需更改服务实现代码。
以下信息概述了适用于任何环境的生产注意事项。如果要在OpenShift集群中部署服务,还可以参考《将Lightbend应用程序部署到OpenShift》指南。
生产环境注意事项可以总结为设置和调整以下部分或全部:
- 制作工件(ZIP包、docker镜像等)
- 服务位置(其他lagom服务、外部服务、数据库等)
- Akka 集群组成
-
生产环境注意事项
生产环境决定了打包服务、管理Akka集群形成和提供服务位置的方法,包括Cassandra 和 Kafka的方法:
Lagom利用开源
[sbt native packager](https://www.scala-sbt.org/sbt-native-packager/?_ga=2.114361607.1487347529.1649669871-1627781359.1617093761)
插件来生成软件包:- 在运行时,服务需要定位其他服务的地址以与它们通信。这需要您配置ServiceLocator的实现,Lagom使用ServiceLocator按名称查找服务的地址。您选择的生产环境可能会提供一种可以与Lagom一起使用的服务发现机制。
- 对于简单的部署,Lagom包含一个内置的服务定位器,该定位器使用服务配置中指定的硬编码地址(如下所述)。
- 当使用进程不在静态IP上运行的动态部署时,您可以使用Akka发现服务定位器,该定位器可以与Kubernetes或DC/OS的服务发现功能或Akka服务发现支持的任何其他环境集成。
- 另外,您可以自己实现该接口,以与您选择的服务注册中心(如 Consul, ZooKeeper, etcd)集成,或者从开源示例实现(如
[lagom-service-locator-consul](https://github.com/jboner/lagom-service-locator-consul)
或[ lagom-service-locator-zookeeper](https://github.com/jboner/lagom-service-locator-zookeeper)
)开始。
- 需要Akka集群(包括任何使用Lagom持久性或发布-订阅API的集群)的Lagom服务必须具有在启动时形成集群或加入现有集群的策略。
- 如果您不使用服务编排平台,并且可以在部署某些节点之前确定它们的地址,那么可以通过在服务配置中列出种子节点的地址来手动配置Akka群集。
- 如果不指定种子节点的静态列表,Lagom将启用Akka集群引导扩展,以便与其他服务发现基础设施集成。使用Akka集群引导需要设置服务发现方法(例如Kubernetes的服务发现)。有关更多信息,请参阅Lagom集群文档。
- 上面介绍的Akka集群引导功能需要启用Akka管理HTTP。这是一个由多个功能共享的Akka HTTP服务器,默认情况下运行在端口8558上(该端口是可配置的)。Lagom将在需要的功能启用时自动启动Akka管理HTTP。另请参见Lagom集群文档。
- Akka管理HTTP还支持Akka提供的健康检查。健康检查是一种可插拔机制,在该机制中,库提供者和用户可以注册逻辑,以确定服务是否处于活动状态和/或就绪状态。默认情况下,Lagom将在Lagom服务需要集群的任何时候启用Akka集群成员资格健康检查。默认情况下,Akka健康检查注册
ready/
和alive/
路由,并实现Kubernetes描述的就绪性和有效性语义。
- Akka管理HTTP还支持Akka提供的健康检查。健康检查是一种可插拔机制,在该机制中,库提供者和用户可以注册逻辑,以确定服务是否处于活动状态和/或就绪状态。默认情况下,Lagom将在Lagom服务需要集群的任何时候启用Akka集群成员资格健康检查。默认情况下,Akka健康检查注册
- Lagom的Cassandra模块已准备就绪,可以使用服务定位器定位您的Cassandra集群。这意味着Lagom将Cassandra视为它可能需要定位的任何其他外部服务。如果您的生产环境需要,您还可以选择绕过服务定位器,直接在服务配置中提供Cassandra连接点,如下一节所述。
- 类似地,Lagom的Kafka集成在默认情况下使用服务定位器来查找Kafka客户端的引导服务器。这也可以被覆盖,以在服务配置中指定代理列表。有关更多信息,请参阅Lagom Kafka客户端文档。
使用静态的Cassandra连接点
如果您希望为您的服务使用动态服务位置,但需要静态定位Cassandra,请修改application.conf
。您需要禁用Lagom的ConfigSessionProvider
,并使用akka-persistence-cassandra
中提供的一个,它使用contact-points
中列出的端点列表。application.conf
除非被覆盖,否则配置设置将应用于所有环境(开发和生产)。有关在开发模式下设置Cassandra的更多信息,请参阅开发人员模式设置,以在开发模式下覆盖Cassandra设置。
要设置静态Cassandracontact-points
并禁用ConfigSessionProvider
,请修改application.conf
的以下部分: ```scala cassandra.default {list the contact points here
contact-points = [“10.0.1.71”, “23.51.143.11”]override Lagom’s ServiceLocator-based ConfigSessionProvider
session-provider = akka.persistence.cassandra.ConfigSessionProvider }
cassandra-journal { contact-points = ${cassandra.default.contact-points} session-provider = ${cassandra.default.session-provider} }
cassandra-snapshot-store { contact-points = ${cassandra.default.contact-points} session-provider = ${cassandra.default.session-provider} }
lagom.persistence.read-side.cassandra { contact-points = ${cassandra.default.contact-points} session-provider = ${cassandra.default.session-provider} }
<a name="FBPWb"></a>
# 服务和Cassandra使用静态值配置
您可以使用静态配置将Lagom系统部署到静态位置。使用静态服务位置时,还可以硬编码Cassandra位置。要实现这一点,请遵循以下步骤:
1. 在`application.conf`中指定服务位置。
1. 在Guice模块中绑定`ConfigurationServiceLocator`。
1. 可以选择在`application.conf`中添加Cassandra位置。
`[ConfigurationServiceLocator](https://www.lagomframework.com/documentation/1.6.x/scala/api/com/lightbend/lagom/scaladsl/client/ConfigurationServiceLocator.html)`从Lagom的`application.conf`中读取服务定位器配置。下面是一个为两个Lagom服务指定静态位置的示例:
```scala
lagom.services {
serviceA = "http://10.1.2.3:8080"
serviceB = "http://10.1.2.4:8080"
}
要使Lagom使用ConfigurationServiceLocator
,需要在生产模式下将[ConfigurationServiceLocatorComponents](https://www.lagomframework.com/documentation/1.6.x/scala/api/com/lightbend/lagom/scaladsl/client/ConfigurationServiceLocatorComponents.html)
特质混合到应用程序中,如下例所示。在开发环境中使用LagomDevModeComponents
特质。
import com.lightbend.lagom.scaladsl.devmode.LagomDevModeComponents
import com.lightbend.lagom.scaladsl.server._
import com.lightbend.lagom.scaladsl.client.ConfigurationServiceLocatorComponents
class HelloApplicationLoader extends LagomApplicationLoader {
override def load(context: LagomApplicationContext) =
new HelloApplication(context) with ConfigurationServiceLocatorComponents
override def loadDevMode(context: LagomApplicationContext) =
new HelloApplication(context) with LagomDevModeComponents
}
要在使用静态服务定位器时对Cassandra连接点进行硬编码,请在application.conf
中添加以下内容:
lagom.services {
cas_native = "tcp://10.1.2.3:9042"
}