是否有一种简单的方法来为每个请求创建一个docker容器的距离?
我有一个Docker容器,需要很长时间才能计算数学算法。运行时,不能并行处理其他请求。 Lambda函数将是最好的解决方案,但是该容器需要下载超过1gb的数据,并且至少需要10个内核和5GB ram才能执行,因此Lambda太昂贵了。
我们有一个大型集群(1000个内核,0.5TB RAM),我正在考虑使用NGINX负载均衡器或Kubernetes裸机。 是否可以通过配置为每个请求创建实例的方式(类似于Lambda函数)?
答案 0 :(得分:0)
有Airflow或Argo之类的工具专门用于这些东西。
基本上,您可以创建DAG,其运行方式非常类似于功能即服务,但可以在所需的自定义Docker容器上运行。
答案 1 :(得分:0)
您可能需要将HTTP服务与后端处理分离。如果作业需要几分钟或更长的时间才能运行,大多数浏览器和其他HTTP客户端将在完成之前超时,因此HTTP末尾需要以某种方式启动作业并立即返回某种成功消息。
完成此操作后,您可能会发现像RabbitMQ这样的作业队列是一项有用的基础架构技术。再次,这将作业队列与该机制分离,以实际运行它们。在Docker / Kubernetes空间中,您将启动一些持久性工作程序,这些工作程序都侦听队列并按照队列中出现的方式工作。您不一定要在每个工作岗位上雇用一名工人;或者可能只有一名工人启动了其他Docker容器或Kubernetes Jobs;但是,如果工作积压时间太长,您可以启动更多工作人员。
在纯Docker空间中,理论上可以使用Docker API启动其他容器。但是,这样做可以使您的进程无限制地访问主机。如果您是在HTTP服务器的上下文中运行此程序,则在安全性方面要格外小心。 Kubernetes还具有一个API,从安全角度来看,这可能更好:您可以设置一个仅具有启动Jobs权限的服务帐户,并为到达的每个入站作业启动Job。 (安全性仍然很重要,但恶意输入很难根植主机。)