【发布时间】:2020-12-27 20:54:32
【问题描述】:
我在 Laravel 中有一个网站,您可以在其中单击一个按钮,该按钮将消息发送到在 Docker 中隔离的 Python 守护程序。这适用于简单的 MVP 来证明一个概念,但它在生产中不可行,因为用户很可能也希望暂停、恢复和停止该过程,因为该服务被设计为永不停止,否则考虑到它是一个循环的扫描仪.
我已经为此考虑了几个解决方案,例如在软件层中修复它,但这会增加程序的复杂性。我用谷歌搜索了 Docker,发现实际上可以通过命令 pause、unpause、run 和 kill 对 Docker 本身做我想做的事情。
如果我有一个服务可以按照上述标准与 Docker 实例交互并且能够从 HTTP 获取命令,那将是最佳选择。 Docker Swarm 是解决这个问题的正确方法还是有更简单的方法?
【问题讨论】:
-
您的问题不清楚。当您说“用户”时,您指的是什么用户?运行服务的操作人员? HTML 前端的用户?如果您的意思是操作人员,那么您必须考虑服务中断(因为如果服务关闭,按钮将不起作用)。这包含在可用性概念 (itsm.tools/…) 中。一般来说,Swam 对任何事情都没有用——业界已经转向 Kubernetes 以实现高可用性 (HA)。暂停服务没有充分的理由。
-
对不起,我指的是网站上的普通用户,已经购买了账号。除了开始、暂停、恢复和停止扫描之外,用户应该没有任何特权(例如从仪表板启动网络爬虫)。我想通过简单地保存服务状态并使用停止和启动操作,暂停和恢复可能是多余的。是否需要进行大量设置才能使 Kubernetes 从 HTTP API 启动和停止 Docker 映像?
-
为了响应来自浏览器的任何请求,您的服务必须正在运行。因为很难预测用户可能使用您的应用程序的时间,所以该服务通常一直在运行。您没有每个用户的服务,您只有一个服务,它会响应所有用户。我很抱歉这么说,但是你需要大约 3 年的学习和研究才能理解和做到这一点——你应该忽略我以前的 cmets,因为 Kubernetes 对你来说太先进了。我教这些东西,最近的计算机科学硕士毕业生需要大约 6 个月的时间才能跟上进度。
-
我知道服务必须正在运行才能从消息代理接收消息,截至目前,我有一个始终在侦听消息的服务,但它只能按顺序处理消息。我考虑过拥有一个服务池并具有自动扩展功能,这将解决可扩展性问题。但我不确定如何停止来自网络用户的扫描。您将如何停止通过 Kubernetes 在服务中运行的用户发起的扫描?重新启动该服务?还是通过软件,例如通过发送消息或修改定期检查的 API?
标签: docker service docker-swarm