gpt4 book ai didi

rest - 微服务编排的低层协议(protocol)

转载 作者:IT王子 更新时间:2023-10-29 06:10:58 26 4
gpt4 key购买 nike

最近,我开始使用Microservices,我使用Redis编写了一个用于服务发现的库,用于存储每个服务的url和端口号以及该条目的TTL值。事实证明这是一种昂贵的方法,因为对于任何其他服务的跨服务调用都需要对Redis的调用。缓存似乎不是一个好主意,因为服务不会一直处于启动状态,因此也可能会出现停机。

因此,我想编写一个单独的微服务来处理业务流程部分。为此,我需要找出一个非常底层的网络协议(protocol)来处理心跳的交换(这将帮助我确定是否有任何服务实例不可用)。 ZookeeperClient,redisClient之类的应用程序如何处理心跳?

此外,跨服务 call 行业首选的协议(protocol)是什么?
我一直在通过HTTP调用REST Api,并消除了跨不同集合进行Join的所有可能性。

有一个更好的方法吗?

谢谢。

最佳答案

我认为“编排”一词对您的要求不好。根据我到目前为止在微服务 Realm 遇到的情况,术语“编排”用于涉及复杂业务流程而不用于服务发现的情况。您需要的是Service registryLoad balancer结合在一起。您可以找到here您需要的所有信息。这是一篇很棒的文章的相关内容:

有两种主要的服务发现模式:客户端发现和服务器端发现。首先让我们看一下客户端发现。

客户端发现模式

使用客户端发现时,客户端负责确定可用服务实例的网络位置,并在它们之间进行负载平衡请求。客户端查询服务注册表,该服务注册表是可用服务实例的数据库。然后,客户端使用负载平衡算法来选择可用的服务实例之一并发出请求。

enter image description here

服务实例的网络位置在启动时会在服务注册表中注册。实例终止时,将从服务注册表中将其删除。通常使用心跳机制定期刷新服务实例的注册。

Netflix OSS提供了客户端发现模式的一个很好的例子。 Netflix Eureka是服务注册表。它提供了一个REST API,用于管理服务实例注册和查询可用实例。 Netflix Ribbon是与Eureka一起使用的IPC客户端,可在可用服务实例之间平衡请求的负载。我们将在本文后面更深入地讨论Eureka。

客户端发现模式具有多种优点和缺点。这种模式相对简单,除服务注册表外,没有其他 Activity 部分。另外,由于客户端知道可用的服务实例,因此它可以做出智能的,特定于应用程序的负载平衡决策,例如一致地使用哈希。这种模式的一个重大缺陷是它将客户端与服务注册表耦合在一起。您必须为服务客户端使用的每种编程语言和框架实现客户端服务发现逻辑。

服务器端发现模式

enter image description here

客户端通过负载平衡器向服务发出请求。负载平衡器查询服务注册表,并将每个请求路由到可用的服务实例。与客户端发现一样,服务实例是通过服务注册表注册和注销的。

AWS Elastic Load Balancer(ELB)是服务器端发现路由器的示例。 ELB通常用于平衡来自Internet的外部流量。但是,您也可以使用ELB负载均衡虚拟私有(private)云(VPC)内部的流量。客户端使用其DNS名称通过ELB发出请求(HTTP或TCP)。 ELB在一组已注册的 flex 计算云(EC2)实例或EC2容器服务(ECS)容器之间平衡流量。没有单独的服务注册表。而是将EC2实例和ECS容器注册到ELB本身。

HTTP服务器和负载均衡器(例如NGINX Plus和NGINX)也可以用作服务器端发现负载均衡器。例如,this blog帖子描述了如何使用Consul Template动态重新配置NGINX反向代理。 Consul Template是一种工具,可从Consul service registry中存储的配置数据中定期重新生成任意配置文件。每当文件更改时,它将运行一个任意的shell命令。在博客文章描述的示例中,Consul模板生成一个nginx.conf文件,该文件配置反向代理,然后运行命令告诉NGINX重新加载配置。更复杂的实现可以使用its HTTP API or DNS动态重新配置NGINX Plus。

诸如Kubernetes和Marathon之类的某些部署环境在集群中的每个主机上运行一个代理。代理充当服务器端发现负载平衡器的角色。为了向服务发出请求,客户端使用主机的IP地址和服务的分配端口通过代理路由请求。然后,代理透明地将请求转发到在群集中某处运行的可用服务实例。

服务器端发现模式具有多个优点和缺点。这种模式的一大好处是发现细节从客户端被抽象出来了。客户只需向负载均衡器发出请求。这样就无需为服务客户端使用的每种编程语言和框架实现发现逻辑。另外,如上所述,某些部署环境免费提供此功能。但是,这种模式也有一些缺点。除非负载平衡器是由部署环境提供的,否则它是您需要设置和管理的又一个高度可用的系统组件。

关于rest - 微服务编排的低层协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45095183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com