前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[翻译]微服务设计模式 - 5. 服务发现 - 服务端服务发现

[翻译]微服务设计模式 - 5. 服务发现 - 服务端服务发现

作者头像
干货满满张哈希
发布2021-04-12 12:08:42
7340
发布2021-04-12 12:08:42
举报
文章被收录于专栏:干货满满张哈希

原文地址:https://microservices.io/patterns/server-side-discovery.html

服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地址和端口是固定并且提前预知的,所以只需要简单的 HTTP/REST 调用或者其他的 RPC 机制直接调用即可。但是在当下的云原生微服务体系中,微服务大多在某个虚拟机或者某个容器下运行,服务实例数量以及提供服务的地址以及端口都是不固定的,可以理解为,这些服务实例都是临时的。所以,需要实现使服务客户端能够对一组动态变化的临时服务实例发请求的机制。

提出问题

某个服务的客户端,API网关或者一些其他需要发现服务实例的服务,如何知道服务实例的位置?

考虑因素

  • 服务的每个实例都在特定的位置(主机和端口)暴露一个远程 API,例如 HTTP/REST 或 Thrift 等
  • 服务实例的数量及其位置都会动态变化
  • 虚拟机和容器通常分配动态 IP 地址
  • 服务实例的数量可能动态变化。例如,AWS 的 EC2 自动扩容组可以根据 LOAD(负载)动态调整实例数量。

解决方案

当想请求一个服务时,客户端通过运行在已知位置的路由器(即负载均衡器)发出请求。这个负载均衡器查询注册中心要调用的服务有哪些实例,或者注册表其实就集成在负载均衡器中,然后把请求转发到对应的实例。如下图所示:

举例

AWS 弹性负载均衡器(ELB)是服务器端发现路由器的一个例子。客户端将 HTTP 请求(或者其他应用协议的 TCP 链接请求)发到 ELB,ELB 负责在一组 EC2 实例中负载均衡。ELB 可以负载均衡来自外网的请求,也可以部署在VPC中负载均衡内部的请求。ELB 也作为服务注册中心,EC2 实例可以通过 API 调用显式地向 ELB 注册,或者作为自动扩容组的一部分自动注册。

一些集群解决方案,例如 Kubernetes 和 Marathon, 在每个主机上运行一个作为服务端服务发现的代理。当需要访问一个服务的时候,客户端访问本地代理,这个代理会将请求转发到集群中相应的服务实例上。

分析

  • 服务器端服务发现有许多优点:
    • 相比较客户端发现,客户端代码几乎没有侵入,因为它不需要处理发现。相反,客户机只是向路由器发出请求。
    • 一些云环境提供了这种功能,例如 AWS ELB
  • 它还存在以下缺点:
    • 除非云环境中有负载均衡器,否则需要部署这样一个额外组件,并且还需要多实例部署来满足可用性和负载能力。
    • 除非负载均衡器是基于 tcp 的路由器,否则必须支持必要的应用通信协议(例如 HTTP、grpc、thspace 等)。
    • 相对于客户端服务发现来说,需要更多的网络跳转

相关的设计模式

  • 负载均衡器使用注册中心
  • 负载均衡器可能会使用断路器调用服务
  • 客户端服务发现是另一种替代解决方案
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 提出问题
  • 考虑因素
  • 解决方案
  • 举例
  • 分析
  • 相关的设计模式
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档