【发布时间】:2019-07-10 11:04:12
【问题描述】:
我对微服务的理解是,您可以根据需要“仅”启动同一服务的多个实例。
那么,我的问题是,如果您有 x 个微服务实例,分布在 y 个服务器上,那么在微服务上调用 API 的任何东西如何知道在哪里找到它?
我见过的一种方法是使用某种发现服务(可以路由到实例的固定 IP 地址,例如负载均衡器);但可以肯定的是,这只是将问题推回了一层——然后发现服务需要知道一切在哪里/什么时候失败等等?那么发现服务的高可用性呢(如果你有多个实例,你又回到不知道什么地方了)
另一种方法可能是使用 pub/sub 消息传递,但您仍然需要知道队列管理器在哪里(具有高可用性等);所以你基本上仍然遇到同样的问题 - 使用这种方法对查询的响应更加棘手。
另一个相关问题是,如果您有一个从 STOMP 提要中提取的微服务,您将如何实现 HA?您不能只拥有该服务的 x 个实例,否则您将订阅和读取数据 x 次,这意味着当数据传递到下游系统时,您最终会复制数据。所以你会想要某种主动/被动的方法,对吧?这意味着您需要一些东西来管理故障转移,这又会产生单点故障?
【问题讨论】:
标签: microservices communication api-design high-availability