草庐IT

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

coder 2023-07-19 原文

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

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

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

有一个更好的方法吗?

谢谢。

最佳答案

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

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

客户端发现模式

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



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

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

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

服务器端发现模式



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

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/

有关rest - 微服务编排的低层协议(protocol)的更多相关文章

  1. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  2. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  3. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  4. ruby-on-rails - Restful 命令 - 2

    我是RESTful的新手。但是,我想在我的Rails应用程序中使用它。当我将它添加到我的routes.rbmap.resources:notes时,我得到了创建这些方法的路由:索引创建新编辑展示更新摧毁我想知道编辑/更新和创建/新建之间有什么区别?对于这些方法对如何变化以及每个方法对的作用,是否有任何标准定义? 最佳答案 标准定义如下:index-GET-所有(或部分)记录的Viewshow-GET-单个记录的View新-GET-发布以创建的表单创建-POST-创建新记录edit-GET-用于编辑单个记录的表单更新-PUT-更新记录

  5. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  6. ruby - 是否有 chrome 开关来抑制 'external protocol request' ? - 2

    是否有chrome开关来抑制“外部协议(protocol)请求”?我正在使用selenium-ruby​​-watirwebdriver自动化应用程序。我在网上搜索了绕过此窗口和对话的解决方案:http://productforums.google.com/forum/#!topic/chrome/K22hXwRy6zQ概述了我们如何手动执行此操作。但是对于Selenium-Chrome-Ruby,我需要通过可能设置一个chrome开关(chorme开关列表:=http://src.chromium.org/svn/trunk/src/chrome/common/chrome_swit

  7. ruby - Sinatra REST API 应用程序的身份验证 - 2

    我正在使用Sinatra构建一个API(在客户端使用Angular并希望其他人能够访问API)并且它也是一个OAuth提供者。我想知道采取什么最佳途径(利用现有的gem或从Warden推出自己的解决方案等)。在使用Rails之前使用过devise和doorkeeper进行身份验证和oauth,想知道Sinatra的最佳解决方案是什么。理想情况下,我不想要View或能够扩展/修改现有解决方案的操作,因为我纯粹将其作为API与之交互。 最佳答案 我最近使用S/O的以下答案做了同样的事情Whatisaverysimpleauthentic

  8. ruby-on-rails - Ruby on Rails URL 中的资源映射(RESTful API) - 2

    我很难给出正确的答案,所以我会在这里征求我的问题。我正在研究RESTFulAPI。自然地,我有多种资源,其中一些由父子关系组成,一些是独立资源。我有点困难的地方是弄清楚如何让那些将根据我的API构建客户端的人更容易。情况是这样的。假设我有一个“街道”资源。每条街道都有多个住宅。SoStreet:has_manytoHomes和Homes:belongs_toStreet。如果用户想要在特定的home资源上请求HTTPGET,以下应该可行:http://mymap/streets/5/homes/10这允许用户获取ID为10的房屋的信息。直截了当。我的问题是,我授予用户访问权限是否违反了

  9. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  10. ruby-on-rails - REST API 文档生成 - 2

    是否有库提供用于编写​​RESTAPI文档的标记?我见过几家公司使用类似的文档模式,例如:http://api.teamlab.com/2.0/http://www.fullcontact.com/docs/?category=person我想知道他们是否使用相同的库或服务。本质上,该库应该根据标记文本生成用于API导航、搜索和显示的页面(很像用于ruby​​文档的YARD)。这是我目前发现的:rapi_docgem.这是一个article讨论用法。 最佳答案 你绝对应该看看Swagger.它是开源的,被数百个API使用,也被3sc

随机推荐