Rest 微服务编排的低级协议

Rest 微服务编排的低级协议,rest,redis,network-programming,apache-zookeeper,microservices,Rest,Redis,Network Programming,Apache Zookeeper,Microservices,最近我开始使用Microservices,我编写了一个服务发现库,使用Redis存储每个服务的url和端口号,以及条目的TTL值。事实证明,这是一种昂贵的方法,因为对任何其他服务的每次跨服务调用都需要对Redis进行一次调用。缓存似乎不是一个好主意,因为服务不会一直处于运行状态,也可能会出现停机 所以我想写一个单独的微服务来处理编排部分。为此,我需要找出一个真正的低级网络协议来处理心跳的交换(这将帮助我找出是否有任何服务实例不可用)。zookeeperClient、redisClient等应用程

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

所以我想写一个单独的微服务来处理编排部分。为此,我需要找出一个真正的低级网络协议来处理心跳的交换(这将帮助我找出是否有任何服务实例不可用)。zookeeperClient、redisClient等应用程序如何处理心跳

此外,跨服务呼叫的行业首选协议是什么? 我一直在通过HTTP调用RESTAPI,消除了跨不同集合连接的所有可能性

有更好的方法吗

谢谢。

我认为“编排”这个词不适合你的要求。根据我目前在微服务领域所遇到的情况,“编排”一词是在涉及复杂业务流程时使用的,而不是用于服务发现。您需要的是与
负载平衡器相结合的。你可以找到你需要的所有信息。以下是这篇伟大文章的一些相关附加内容:

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

客户端发现模式

使用客户端发现时,客户端负责确定可用服务实例的网络位置以及跨这些实例的负载平衡请求。客户端查询服务注册表,该注册表是可用服务实例的数据库。然后,客户端使用负载平衡算法选择一个可用的服务实例并发出请求

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

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

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

服务器端发现模式

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

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

HTTP服务器和负载平衡器(如和NGINX)也可以用作服务器端发现负载平衡器。例如,post描述了如何使用动态重新配置NGINX反向代理。Consor Template是一种工具,它可以根据存储在中的配置数据定期重新生成任意配置文件。每当文件更改时,它都会运行任意shell命令。在博客文章描述的示例中,concur模板生成一个nginx.conf文件,该文件配置反向代理,然后运行一个命令,告诉nginx重新加载配置。更复杂的实现可以使用以下两种方法动态地重新配置NGINX Plus

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

服务器端发现模式有几个优点和缺点。这种模式的一大好处是,发现的细节从客户端抽象出来。客户端只需向负载平衡器发出请求。这样就不需要为服务客户端使用的每种编程语言和框架实现发现逻辑。此外,如上所述,一些部署环境免费提供此功能。然而,这种模式也有一些缺点。除非部署环境提供了负载平衡器