当前位置: 首页 > 面试题库 >

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

柯正谊
2023-03-14
问题内容

这是一个普遍的问题,但是出于论证的缘故,您可以并假设我们有一个通过AMQP和HTTP组合进行html" target="_blank">通信的进程集合。有两种情况需要考虑。

简单的一个:

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

较难的:

  • 问)监视过程如何向A发送消息(其他原因促使了这种愿望-例如B说A向我发送了错误的请求)
  • 问)监视过程如何终止或重新启动A。

这可能像杀死主机+ pid或pod或pod + container

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

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

查看此问题的另一种方法。在过去,很容易确定一个过程。

主机名(或IP地址)+ PID

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

现在,将容器添加到混合物中,容器不一定具有自己的IP地址。一个主机+PID可识别的容器
,但你可能不知道的主机,如果你正在运行kubernetes或码头群。

现在,我们不再谈论流程,而是谈论服务。过去足以使用主机名(或IP地址)和端口来标识服务(YMMV-
IP地址和端口号可以一起唯一地标识进程ID吗?。

现在,我们有了负载平衡器和其他技巧(例如,缓存代理),可以将消息重定向到实际提供服务的其他内容。

包含多个容器的容器或容器可能会提供服务,在这种情况下,您可能需要处理容器或容器。例如查看kubernetes在pod中重新启动容器看起来每个docker实例的容器名称都是唯一的,但除此之外没有。

因此,您可能想通过几种不同的方式来处理消息。有一个好的标准方法吗?

在我看来,要使用的显而易见的东西是URI(但是我可能错了)。是否有推荐的URI形式来处理 所有 可能的情况?(显然,对于简单的情况,我们有
procotocl :// hostport /)


问题答案:

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

  • 您的PID可能含义不明确。它可以是容器名称空间或主机的PID。

  • 如果要从容器外部引用进程,则需要使用主机的PID,而不要使用容器中出现的PID,因为它位于单独的进程名称空间中。例如,请参见“ 好奇的情况下,pid名称空间”

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

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

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

现在,URI是指端口而不是PID,因此URI在这里不合适。PID @ HOST可能是一个明智的表示法,但请注意与user @ host混淆。

除了容器和Pod
ID外,还有其他更方便的方式来标识处理资源,例如有状态集



 类似资料:
  • 我正在做一个WSDL的申请。但实际上我不明白是什么使“呢?wsdl”参数以及我将如何处理返回的XML。例如: https://adwords.google.com/api/adwords/cm/v201309/CampaignService?wsdl 这个URL返回和XML字符串,但我该怎么办? 我可以使用jaxb(xjc)将模式文件转换为java类,但我不明白如何正确使用此WSDL? 感谢您的回

  • 目标 我试图建立一个应用程序,其中整个世界地图分裂成大量的六边形。这些六边形一旦生成,就会覆盖地图上的相同区域。然后,给定某些地理坐标,如果这些坐标位于地图的边界内,就会在地图上绘制出一个六边形。这些六边形需要非常小,每边大约。5000万--这提出了主要问题。 第一次尝试 然而,这将产生非常倾斜的六边形,这导致我相信试图为整个世界生成十六进制网格通常是一个坏主意。 乐观计算 我的最后一次尝试是在地

  • 2.2.1 根据类型执行代码 前一节的示例提出了一个要求:需要做出根据类型执行不同代码。要达成这一目的,模板并不是唯一的途径。比如之前我们所说的重载。如果把眼界放宽一些,虚函数也是根据类型执行代码的例子。此外,在C语言时代,也会有一些技法来达到这个目的,比如下面这个例子,我们需要对两个浮点做加法, 或者对两个整数做乘法: struct Variant { union { int x

  • 我刚刚试着写一个Minecraft模型。IntelliJ IDEA突出显示了这行代码:

  • 我发现自己经常编写代码,例如 加速一个缓慢的矢量化“纯”函数,其中每个输入项理论上可以单独计算,并且输入预计包含许多重复项。 现在我想知道这是否是实现这种加速的最佳方式,或者是否有一些函数(最好是在基本R或tidyverse中)同时执行诸如和之类的操作? 谢谢你提供的答案。我编写了一个小型基准测试套件来比较这些方法: 目前,基于rcpp的方法在我的机器上的所有测试设置中都是最好的,但几乎没有超过独

  • 问题内容: 作为Java编程领域的新手,这个问题一直困扰着我。我首先相信所有Java文件都会被压缩并随后运行,但是我很快意识到情况并非总是如此。有人可以向我解释我们如何将Java应用程序实际上编织到日常生活的真实产品中吗? TL; DR:我们如何实现实际使用的代码? 问题答案: 这取决于应用程序。有许多选项,取决于您希望用户如何使用您的应用程序。通常将其包装为罐子或专用罐子(战争,耳朵)。 从理论