我在docker容器中有一个应用程序/服务系统,当我使用docker-compose调用它们时,可以使用桥接网络相互通信。
员工启动并向经理注册。经理给工人分配要做的工作。为了做到这一点,工人需要知道经理在哪里,经理也需要知道工人在哪里。
我想把它们都部署到Google Cloud Run上。
目前,在docker中通过docker-compose,它们使用各自的容器名称相互通信。例如,工作者可以在启动时调用:http://manager:5000/register?name=worker1&port=5000
进行注册,然后经理可以调用http://worker1:5000
来发送工作。这一切都要归功于它们连接到同一网桥网络的事实。
这是如何与Google Cloud一起运行的?据我所知,当你创建一个与容器链接的服务时,你会得到一个永久的URL,一旦你的应用程序启动,你就会得到一个永久的URL来与之通信。容器中的应用程序不知道URL是什么。
我可以使用服务名称以与docker网桥网络相同的方式相互通信吗?
发布于 2019-08-28 23:02:57
Cloud Run当前不支持对项目中的其他服务进行基于主机名的服务发现。
目前,您最好的选择是使用环境变量或类似的东西来配置您的应用程序所依赖的服务URL。
发布于 2019-08-28 22:58:13
事实上,您不能以与工人相同的方式进行协调。实际上,Cloud Run服务会回复HTTP请求。当实例生成时,不需要向管理器注册。
如果要并行执行多个任务,请执行多个HTTP请求。
如果您想要在同一服务的不同实例之间进行强隔离,请将并发参数设置为1(该服务的一个实例在同一时间内只处理1个HTTP请求)。
仅供参考,同一服务最多可拥有100个实例。
因此,部署一个管理器服务和一个工作服务。manager服务使用正确参数执行对worker的HTTP请求,以执行正确的工作。
注意工作的持续时间。目前,可以将超时设置为最大900秒(15分钟
关于命名,模式如下:https://<service-name>-<project-hash>.run.app/
https://stackoverflow.com/questions/57689876
复制相似问题