已关闭。此问题需要更多focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。
7天前关闭。
Improve this question
我是DevOps的新手,特别是使用golang和微服务架构。
我想知道go应用程序是否应该部署在容器(Docker)中。在这个例子中,我有一个使用微服务架构构建的系统。例如,我有两个Web服务,A和B。另外,我有另一个Web服务器作为这两个服务的网关。
A和B都需要访问数据库,例如MySQL。A处理表A,B处理表B。
我知道在Go语言中,源代码被编译成一个可执行的二进制文件,因为这里有3个服务,所以我有3个二进制文件,这3个服务都是作为Web服务器运行的,公开了JSON REST API。
我的问题是:
***我可以将这些服务器一起部署在一个主机上,在不同的端口上运行吗?**例如,如果我的主机获得IP x.x.x.x,我的网关可以在x.x.x.x:80中运行,A在端口81中运行,B在端口82中运行。A和B将与同一主机外部或内部的某个MySQL服务器通信。这是一个好的做法吗?持续部署可以与此做法一起工作吗?
***为什么我应该在Docker这样的容器中部署和运行这些二进制文件?**我知道自从几年前它发布以来,Docker已经找到了轻松集成到开发工作流中的方法。但是,使用Docker并不像将代码编译成二进制文件然后将其移动到部署服务器那么简单。使用Docker,我们必须将可执行文件放入容器中,然后将容器也移动到部署服务器。
***如果不使用Docker,可伸缩性和高可用性会怎样?**我可以复制我的服务,并使用负载平衡器在不同的主机上同时运行它们吗?这样,我应该在一台主机上部署A、B和网关,在另一台主机上部署另一个A、B和网关,然后在它们前面设置负载平衡器。A、B和网关在端口80、81、和82个。这样我就可以拥有成千上万个节点,它们可能以虚拟机或LXD容器的形式分布在数百个裸机上,使用简单的bash脚本和ssh进行部署,如果情况变得复杂,则使用Ansible进行部署。
***使用Docker的可伸缩性和可用性如何?**我是否应该将所有服务放在容器中,并使用Kubernetes之类的工具来管理它们,以实现高可用性?这样做确实会增加开销,对吗?因为团队必须学习Kubernetes之类的新技术,如果他们还不知道的话。
- 您能给我举一个部署golang服务的最佳实践的例子吗?
2条答案
按热度按时间ldfqzlk81#
我想知道go应用程序是否应该部署在容器中(Docker)
为什么要在Docker这样的容器中部署和运行这些二进制文件?
当然,前提是您将构建与实际的最终映像分开(以便在所述最终映像中不包含构建依赖项)
请参阅**Matteo Madeddu中的"Golang, Docker and multistage build"。
我是否可以将这些服务器一起部署在一个运行于不同端口的主机中?
实际上,它们都可以在自己的港口上运行自己的集装箱,即使那个港口是相同的。
使用EXPOSEd端口**可以进行容器内通信。但是,如果从外部访问它们,则它们的 * published * 端口确实需要不同。
如果不使用Docker,可伸缩性和高可用性会怎样?
使用Docker的可扩展性和可用性如何?
当您谈到动态状态时,就会涉及到某种编排:请参见Docker Swarm或Kubernetes以获得有效的集群管理。
Both are available with the latest docker。
示例:
1bqhqjot2#
VonCs的回答很棒。我只想补充一点:Golang是容器的完美选择,因为它内置了对自我维持的二进制文件的支持。这意味着你可以构建几MB大小的容器,而不是像alpine等典型的容器那样,通常需要数百MB。
看看这个read。