如何在容器化世界中独特地解决“流程”?

2024-03-30

这是一个普遍问题,但出于争论的目的,您可以假设我们有一组通过 AMQP 和 HTTP 组合进行通信的进程。有两种具体情况需要考虑。

最简单的一个:

  • Q) 如果 A 向 B 发送消息,B 如何识别 A 发送回复的位置。
  • A) A 必须以某种方式告诉 B 将其发送到哪里(交换为 AMQP,URL 为 http)

较难的:

  • 问)监控进程如何向 A 发送消息(其他因素促使了这种愿望 - 例如 B 说 A 向我发送了一个错误的请求)
  • Q) 监控进程如何终止或重启 A.

    这可能类似于杀死主机 + pid 或 pod 或 pod + 容器

    (例如参见kubernetes 在 pod 内重启容器 https://stackoverflow.com/questions/46123457/kubernetes-restart-container-within-pod)

    您可能希望重新启动整个服务或提供该服务的进程的某些子集。

现在您可以自己分配一个 UUID,但您需要一个表来映射它。 这可能有多个列,但有时单个 URI(或类似 URI 的东西)很有用,例如作为“源自/回复”地址。


另一种看待这个问题的方式。 在过去,识别流程很容易。

主机名(或 IP 地址)+ PID 就足够了

然后是虚拟化,IP 地址标识分配给 VM 的虚拟网络端口,PID 标识其中的进程。 主机名和 IP 地址仍然足够。 有时你也需要虚拟主机(尽管我不清楚为什么)

现在将容器添加到混合容器中,容器不一定有自己的 IP 地址。 Ahost+pid可以识别容器 https://stackoverflow.com/questions/39931316/what-is-the-pid-in-the-host-of-a-process-running-inside-a-docker-container?rq=1但如果您运行的是 kubernetes 或 docker swarm,您可能不知道主机。

现在我们不再谈论流程,而是谈论服务。 过去使用主机名(或 IP 地址)和端口来识别服务就足够了(YMMV -IP地址和端口号一起可以唯一标识进程ID吗? https://stackoverflow.com/questions/8731714/can-an-ip-address-and-a-port-number-together-uniquely-identify-a-process-id).

现在我们有负载均衡器和其他技巧(例如缓存代理)来将消息重定向到实际提供服务的其他东西。

服务可能由一个容器或包含多个容器的 Pod 提供,在这种情况下,您可能需要对 Pod 或容器进行寻址。 参见示例kubernetes 在 pod 内重启容器 https://stackoverflow.com/questions/46123457/kubernetes-restart-container-within-pod看起来每个 docker 实例的容器名称都是唯一的,但除此之外不会。

因此,您可能需要采用几种不同的方式来处理消息。 有一个好的标准方法可以做到这一点吗?

在我看来,显而易见的是要使用 URI(但我可能是错的)。 是否有推荐的 URI 形式来处理all可能的情况? (显然我们有原科托克://host:port/ 对于简单的情况)


经过一番考虑,我相信 host+pid 仍然足以(但不一定是最好的方法)来识别进程,只要您注意以下几点:

  • 你指的是谁的 PID 可能不明确。 它可以是容器命名空间或主机的 PID。

  • 如果您从容器外部引用进程,则需要使用主机的 PID,而不是容器内部出现的 PID,因为它位于单独的进程命名空间中。 参见示例pid 命名空间的奇怪案例 https://hackernoon.com/the-curious-case-of-pid-namespaces-1ce86b6bc900

  • 容器可能甚至能够识别主机和 PID 本身(毕竟它应该是一个沙箱)

  • IP 地址将相对于内部网络(正常情况下)

  • 主机名将通过 DNS 查找(正常)

现在 URI 指的是端口而不是 PID,因此 URI 在这里不合适。 PID@HOST 可能是一个合理的表示法,但要小心与 user@host 混淆。

除了容器和 Pod Id 之外,还有其他更方便的方法来识别处理资源,例如有状态集 https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在容器化世界中独特地解决“流程”? 的相关文章

随机推荐

  • CI for Qt 应用程序:使用不同的 Qt 版本进行构建

    我使用 Travis CI 为我的简单 Qt 应用程序进行持续集成 我的 travis yml 文件看起来像这样 基于这个要点 https gist github com jreese 6207161 language cpp before
  • 如何在 C# 中获取应用程序设置的名称?

    在Visual C 的应用程序设置中 我们可以创建一系列具有特定Name Type Scope和Value的设置 我可以通过代码访问该值 string color Myproject Properties Settings Default
  • 比较 Go 模板中的两个变量

    在我传递给模板的数据中 我有两个变量Type and Res Type我想比较为我的选择字段预先选择一个选项 为了说明我的问题 我创建了这个简化版本 package main import bufio bytes html template
  • python 中的交互式输入

    以下是我需要执行的操作的说明 你要编写一个完整的程序 获取三段数据 然后对它们进行处理 这三条信息是布尔值 字符串和整数 程序的逻辑是这样的 如果布尔值为 True 则打印字符串两次 一次带双引号 一次不带 否则打印两倍的数字 这是我到目前
  • 动态 HTML 到 PDF [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要能够将动态 HTML 通过 javascript 在页面加载时呈现的 html 转换为 PDF 我
  • 从 WiX 提升的安装程序运行未提升的自定义操作

    我正在尝试弄清楚如何从提升的 WiX 安装设置程序运行自定义操作 WiX 生成的 msi 文件由 DotNetInstaller 执行 在 WiX 中 我有一个 Package 部分 其中 InstallScope 设置为 perMachi
  • Ajax 调用在 IE8 中不起作用

    我正在阅读几篇关于此的文章 并对我的代码进行了一些更改 但没有成功 任何人都可以调查一下 看看这里发生了什么 或者也许是另一种方法来完成我需要的事情 使用 ziptastic 通过邮政编码检索城市 州 该代码在 Chrome 中运行良好 h
  • __del__ 在程序结束时

    假设有一个程序 在运行时其中有几个对象 程序结束时是否调用每个对象的 del 方法 如果是的话 我可以做这样的事情 class Client del self disconnect from server 有许多潜在的困难 http doc
  • 从非托管 C++ 创建 DLL

    我目前有一个用非托管 C 编写的控制台应用程序 源代码由一个入口点组成main以及其他一些功能 我需要从此代码创建一个 DLL 以便我可以从其他项目 特别是托管 C 使用它 另一个问题 我是否必须为此目的编写一个包装类 由于我对托管 非托管
  • 如何使用 FastAPI 返回 HTMLResponse

    是否可以在端点显示 HTML 文件 例如用户正在访问的主页 是的 FastAPI 可能有HTMLResponse 您可以返回一个HTMLResponse from fastapi import FastAPI from fastapi re
  • 无法修改函数以独立工作而不是依赖于返回的结果

    我用 python 编写了一个脚本 在向某些链接发送请求时使用代理 以便从那里解析产品名称 我目前的尝试完美地完成了这项工作 这个功能parse product 完全依赖于返回的结果 代理 以便以正确的方式重用相同的代理 我正在尝试修改pa
  • 当网格项与末端/底部对齐时,滚动不起作用

    我想使用创建聊天CSS grid并遇到了我无法合并的问题align self end and overflow y auto The ul包含所有消息并且应该与底部对齐 这样即使只有一条消息 它也会出现在底部 聊天的页眉和页脚是固定的 您只
  • ApplicationListener 的注解版本及类似接口

    您可以使用如下代码根据 Web 服务关闭 或刷新 启动 的时间执行一些事件 public class APIService implements ApplicationListener
  • 使用 jquery 移动元素

    我如何使用 jQuery 来移动元素 position absolute left 169px top 182px to position absolute left 169px top 230px 清晰的移动不仅是CSS 它也必须是移动的
  • 在 C# 中使用 ActiveX

    我有这样的 JavaScript 代码 o new ActiveXObject ASDFsome Application utilites WScript CreateObject ASDF Utilites UTF Converter u
  • 在记事本++中选择并删除整个列

    有没有办法在记事本 中选择并删除整个列 假设notepad 中有这样一条日志 Dec 14 14 49 34 Dec 14 14 49 35 Dec 14 14 49 36 Dec 14 14 49 37 我想选择并删除 JustDec在上
  • 重用 Runnable 的最佳方式

    我有一个实现的类Runnable目前我正在使用 Executor 作为线程池来运行任务 将文档索引到 Lucene executor execute new LuceneDocIndexer doc writer 我的问题是我的 Runna
  • fancyBox 3 中的转换

    是否可以指定在 fancyBox 3 中使用哪个转换 我对 3 个转变感兴趣 打开幻灯片 画廊 在幻灯片之间导航 关闭幻灯片 图库 默认情况下 fancyBox 3 对不同类型的内容使用不同的过渡 a href img jpg img sr
  • Android 意图数据库

    是否有一个意图数据库可以搜索发布公共服务的应用程序 例如 我可能有一个关于可以应用于照片应用程序中的照片的过滤器的想法 但是我应该出于什么目的发布我的过滤器以便其他应用程序可以找到它并使用它 所以问题是是否有一个或多或少标准的意图数据库以及
  • 如何在容器化世界中独特地解决“流程”?

    这是一个普遍问题 但出于争论的目的 您可以假设我们有一组通过 AMQP 和 HTTP 组合进行通信的进程 有两种具体情况需要考虑 最简单的一个 Q 如果 A 向 B 发送消息 B 如何识别 A 发送回复的位置 A A 必须以某种方式告诉 B