我们在Azure VM上托管了一个API微服务基础架构。每个VM将托管多个API,这些API是在Kestrel上运行的独立站点。所有外部流量都通过RP(在IIS上运行)进入。
我们有一些API用于接受外部请求,而另一些API仅用于内部API。
内部API托管在scaleset上,每个scaleset VM都是托管所有内部API的副本。在scaleset前面有一个内部负载平衡器(ILB)/ vip。根本问题是我们有内部API调用托管在同一scaleset上的其他内部API。理想情况下,这些呼叫将转到VIP(使用内部DNS),VIP将路由到scaleset中的一台机器。但看起来Azure根据文档不允许这样做:
You cannot access the ILB VIP from the same Virtual Machines that are being load-balanced
那么人们如何通过微服务来解决这个问题呢?我可以看到三种方式,其中没有一种是理想的:
关于其他人如何接近这一点的任何指示都将受到赞赏。
谢谢!
答案 0 :(得分:0)
我认为您的问题与服务发现有关。
负载平衡器显然不是为此而设计的。您应该考虑专用软件,例如Eureka(可以在AWS之外工作)。 服务发现使您的微服务在被发现后直接相互调用。
另请参阅客户端负载平衡工具,例如Ribbon。
答案 1 :(得分:0)
@Cdelmas的回答在服务发现上很棒。请允许我添加我的想法:
对于像您这样的服务,您还可以查看Netflix的ZUUL代理服务器和客户端负载平衡。您甚至可以在Eureka上使用Histrix来实现延迟和容错。 Netflix在此方面遥遥领先。
如果您想使用GO语言,您也可以查看Consul.io产品。它具有可编写脚本的配置,可以更好地管理您的服务,允许高级安全配置和非休息端点的使用。 Eureka也做了这些,但要求你使用ZUUL / Sidecar添加配置服务器(Netflix Archaius,Apache Zookeeper,Spring Cloud Config),编码安全性和支持访问。