2015-11-27 57 views
5

我正在学习微服务架构,我实际上在想什么。微服务,amqp和服务注册中心/发现

对于使用(返回)服务发现在基于REST的微服务中发出请求的事实,我相当确定。我需要知道服务在哪里(或者至少在服务器集群的前端)发出请求。因此,在这种情况下能够发现ip:port是有意义的。

但是我想知道在处理AMQP(仅基于,没有HTTP可能的调用)时使用服务注册表/发现的目的是什么?

我的意思是,使用AMQP就像“我需要那个,我希望有人回答我”,我不知道是谁把服务器发回给我的回复。

那么,使用基于AMQP的微服务的服务注册/发现的目的是什么?

感谢您的帮助

+0

有趣的问题。我也曾认为MOM的工作方式类似于服务发现功能。它提供了位置透明度和弹性。 MOM就像一个服务注册表,所有你需要知道的是服务的名称,例如交换名称和MOM路由并将您的消息负载均衡到其中一个服务提供商(消费者),然后为您提供答案。坦率地说,我没有得到今天唯一答案中提供的观点。 –

回答

4

AMQP(MOM任何实际上)为过程,而不必介意实际IP地址,通信安全,路由,其他问题之间交流的方式。这并不一定意味着任何进程都可以信任或甚至没有任何有关它与之通信的进程的信息。

消息队列确实解决了一半过程:如何到达远程服务。但他们并没有解决另一半:哪一种服务对我来说是正确的。换句话说,其服务:

  • 有我需要
  • 可以信任(托管一个可靠的服务器上的资源,具有令人满意的服务实现,坐落在一个国家里,当地的法律与兼容您的要求等),你要付出什么样的(虽然人们很少讨论成本,当涉及到微服务)
  • 将处理您的服务所需要的全部时间窗口期间在那里
  • 费用 - 记住,服务器变得越来越不稳定。一些服务器实际上是可以持续几分钟的容器。

这两个问题几乎是线性无关的。为了解决第二类问题,您在网格计算中拥有资源代理。还有资源分配,以确保上面的最后一项正确管理。

还有一些替代策略,例如多播意图使用服务和等待回复的报价。例如,您可能会在这种情况下进行逆向拍卖。

简而言之,经验法则是,如果您没有关于要使用哪种服务(硬编码或某些配置文件)的先验知识,您的代理将不得不进行协商,其中包括动态服务发现。

+0

我很努力去理解你答案中的要点。您看到MOM将提供位置透明性,弹性和负载平衡,这是服务发现的关键特征。我不太明白“我需要的资源”或“可以信任”等,这可能是一个问题。我可以为新消费者添加尽可能多的临时码头集装箱,并且它们将弹性地来来去去。使用主题我可以控制诸如使用最接近的消费者或最便宜的方面,并且MOM很可能已经提供了安全功能。如果可以详细阐述一下,这将是非常棒的 –

+0

MOM将为您创建一个覆盖网络。如果您控制连接到此覆盖网络的所有进程,则可能不需要服务注册表或发现。您可以简单地创建一个协议,在其中发送广播消息,询问“谁可以为我做”并相信答案。 – Akira

+0

但问题是“在哪种情况下,我将受益于服务注册和发现”。一个可能的答案与先前没有对所有MOM参与者的信任有关。如果你不能或不想信任任何人,你只能信任注册表。如果注册表建议您应该使用资源A,那么您可以与A进行交互。在您的示例中,似乎您控制了所有参与者,因此拥有注册表不会在这方面提供任何其他功能。 – Akira