docker - 谷歌云运行容器网络
问题描述
我在 docker 容器中有一个应用程序/服务系统,当我使用 docker-compose 启动它们时,使用桥接网络相互通信。
工人启动并向经理注册。经理分配工人工作。为了做到这一点,工人需要知道经理在哪里,经理需要知道工人在哪里。
我想将它们全部部署到 Google Cloud Run。
目前,通过 docker-compose 在 docker 中,它们使用容器名称相互通信。例如,worker 可能会调用:http://manager:5000/register?name=worker1&port=5000
在启动时注册,然后 manager 可以调用http://worker1:5000
来发送工作。这一切都要归功于它们连接到同一个桥接网络这一事实。
这如何与 Google Cloud Run 配合使用?据我所知,当您创建与容器链接的服务时,您将获得一个永久 URL,以便在应用启动后与它进行通信。容器中的应用程序不知道 URL 是什么。
我可以使用服务名称以与 docker bridge 网络相同的方式相互通信吗?
解决方案
事实上,你不能以与工人相同的方式进行编排。实际上,Cloud Run 服务会回复 HTTP 请求。生成实例时,没有向管理器注册。
如果要并行执行多个任务,请执行多个 HTTP 请求。
如果要在同一服务的不同实例之间进行强隔离,请将并发参数设置为 1(服务实例同时处理 1 个 HTTP 请求)。
有关信息,您最多可以为同一服务拥有 100 个实例。
因此,部署一个管理器服务和一个工作器服务。管理器服务使用正确的参数向工作人员执行 HTTP 请求,以完成正确的工作。
注意工作时间。目前,超时时间最长可以设置为 900 秒(15 分钟)
关于命名,模式如下:https://<service-name>-<project-hash>.run.app/
推荐阅读
- javascript - 基于条件JS的数组操作
- mongodb - 如何根据`parent`字段获取数据
- mybatis - HSQL 中的条件插入失败
- objective-c - Swift 泛型有线语法确实有效,但可以用不同的方式编写吗?
- google-earth-engine - 如何从 Google Earth Engine FeatureCollection 可视化给定纬度/经度点和给定像素分辨率的值?
- mysql - MySql 访问冲突不在 YEAR MONTH 和 MAX 组中
- javascript - TypeScript - 如何使用数组映射到 ES 6 映射?
- angular6 - 我在 Angular 6 中使用 ng serve 命令运行我的新项目时遇到问题,这里附上我的问题
- javascript - javascript 新手对 Web 前端有疑问
- android - 消息加倍