生产环境

生产环境

2019年8月3日

Erlang/OTP 当然是一种独特的语言和运行时环境,但它并不像一些支持者所认为的那样不同。在本部分中,我们将了解如何构建用于部署的工件以及如何在与运行任何其他服务的相同环境中操作部署。在本部分中,我们将构建一个可部署的工件(一个发布版本),创建该发布版本的 Docker 镜像并部署到 Kubernetes 集群。

在论坛和热门科技新闻网站的评论区中,经常会听到一种说法,即你拥有 OTP,就不需要 Kubernetes。或者相反,拥有 Kubernetes 就可以取代 OTP。Erlang 不会取代 Kubernetes,Kubernetes 也不会取代 Erlang。如果一个 Erlang 系统不需要像其他运行时一样进行监控和重启,因为它拥有监督树,那么它就不会带有 heart。类似地,如果使用 heart 重启整个程序就足够了,那么就不会有监督树。

Kubernetes 提供了一个调度程序,用于有效地将程序(作为容器)打包到物理机或虚拟机上。使用容器通过将所有依赖项(例如 Erlang 发布版本中的 OpenSSL)捆绑到单个镜像中并进行隔离来简化部署,从而防止服务在同一台机器上运行时出现依赖冲突。此外,部署和管理在生产环境中的所有服务中保持一致,无论它们使用何种语言或运行时构建。当你将 Erlang 服务与常见的监控和跟踪服务集成时,你还可以确保它不再是你同事害怕处理的异类。

但是,容器和 Kubernetes 并非在所有情况下都适用。Kubernetes 可能过于复杂,尤其是在无法使用托管解决方案或你的产品可能是嵌入式设备的情况下。