Amazon web services 针对微服务体系结构,每个ECS服务的AWS ALB与每个ALB的多个服务

Amazon web services 针对微服务体系结构,每个ECS服务的AWS ALB与每个ALB的多个服务,amazon-web-services,microservices,amazon-elb,amazon-route53,amazon-alb,Amazon Web Services,Microservices,Amazon Elb,Amazon Route53,Amazon Alb,起初,我认为每个ALB侦听器都有多个具有不同路径模式的服务,以适当地分发API调用是显而易见的选择。但在健康检查方面(如果其中一项服务出现故障),我不知道有哪种聪明的方法可以将该服务的流量转移到其他地区 如果我有一个带有加权路由53记录的活动设置,它将在运行状况检查时进行故障切换,那么除了切断整个ALB流量并转移到另一个区域,或者忽略1停机服务并继续向部分故障的ALB发送流量之外,我看不到任何其他解决方案 ALB到服务的一对一映射修复了此解决方案,但增加了成本和复杂性方面的额外开销 主动微服务体

起初,我认为每个ALB侦听器都有多个具有不同路径模式的服务,以适当地分发API调用是显而易见的选择。但在健康检查方面(如果其中一项服务出现故障),我不知道有哪种聪明的方法可以将该服务的流量转移到其他地区

如果我有一个带有加权路由53记录的活动设置,它将在运行状况检查时进行故障切换,那么除了切断整个ALB流量并转移到另一个区域,或者忽略1停机服务并继续向部分故障的ALB发送流量之外,我看不到任何其他解决方案

ALB到服务的一对一映射修复了此解决方案,但增加了成本和复杂性方面的额外开销


主动微服务体系结构的推荐模式是什么?

如果所有服务都在一个主机名下访问,那么DNS当然必须指向一个位置,因此重新路由基本上是全有或全无的前景

然而,有一个有效的解决办法

为每个服务配置一个“机密”主机名。(“Secret”,意思是客户端不需要知道它。)我们将这些称为“服务端点”。这些主机名的目的是将请求路由到每个服务。。。svc1.api.example.com、svc2.api.example.com等

配置每个DNS记录以指向主负载平衡器或故障转移负载平衡器,其中包含路由53条目和路由53运行状况检查,该检查专门检查每个平衡器上的一个服务的运行状况

此时,您拥有的是每个服务的主机名,这些服务将具有正确指向首选健康端点的DNS应答

您还没有一种方法来确保客户机请求到达正确的位置

为此,创建一个CloudFront发行版,将您的公共API主机名作为备用域名。为每个服务端点定义一个CloudFront原点(将“原点路径”留空),然后使用适当的路径模式(例如
/api/svc1*
)为每个服务创建缓存行为,并选择匹配的原点。列出API需要查看的所有HTTP头

最后,将主主机名的DNS指向CloudFront

客户端将自动连接到最近的CloudFront edge位置,CloudFront在匹配路径模式以发现发送请求的位置后,将检查DNS以查找特定于服务的端点,并将请求转发到相应的平衡器


CloudFront,在这个应用程序中,它本身不是一个“CDN”,而是一个全局分布的反向代理--从逻辑上讲,它是所有流量的单一目的地,因此不需要对API的主主机名进行故障切换配置。。。因此,没有更多的全部或无路由。在CloudFront的背面,这些服务端点主机名确保根据Route 53运行状况检查将请求路由到正常的目的地。CloudFront尊重这些DNS记录的TTL,不会缓存它不应该缓存的DNS响应。

当我们决定将服务迁移到基于ALB路径的路由时,我们为此绞尽脑汁了一段时间。对于active-active,我们在ALB后面运行多个ECS群集。像OAuth2.0这样的支持服务驻留在一个集群中,多个任务分布在ec2实例中。另一个集群处理大多数轻型服务,同样,每个服务一次至少在2个ec2上分配多个任务。对于到另一个区域的故障切换,我们现在使用一个温暖的站点。如果声明了一个事件,我们会在那个时候切断DNS。发生故障时,您对正常运行时间和RTB的要求是什么?当您说您切断DNS时,您是说您完全将流量从该ALB切换到另一个区域的ALB吗?我的场景涉及大约10个服务,为大量流量提供服务,完全将所有服务流量削减到另一个“温暖”区域确实是我想要避免的事情。正常运行时间要求应尽可能接近100%。根据AWS支持:“从我的测试中,我可以看出,对于与ALB侦听器关联的服务,R53不可能在每个服务的基础上使流量失败。您只能对整个ALB实施故障切换,这将导致与ALB关联的所有服务的故障切换。“是的,确切地说,当一个事件发生时,我们将故障转移到温暖的站点。这是我们行业监管机构提出的业务连续性要求。100%的正常运行时间始终是目标,但你要听命于你的云提供商。我们温暖的网站是为类似去年S3和lambda崩溃这样的事件准备的。在主区域内,我们利用在不同机器上运行的冗余任务,最好是在不同的az中。我们使用多个较小的集群,像流量服务一样运行。我们发现这是最划算的。对不起,我帮不上什么忙了。