热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地


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

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

提出问题

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

考虑因素

  • 服务的每个实例都在特定的位置(主机和端口)暴露一个远程 API,例如 HTTP/REST 或 Thrift 等

  • 服务实例的数量及其位置都会动态变化

  • 虚拟机和容器通常分配动态 IP 地址

  • 服务实例的数量可能动态变化。例如,AWS 的 EC2 自动扩容组可以根据 LOAD(负载)动态调整实例数量。


解决方案

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

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

举例

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

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

分析

  • 服务器端服务发现有许多优点:

    • 相比较客户端发现,客户端代码几乎没有侵入,因为它不需要处理发现。相反,客户机只是向路由器发出请求。

    • 一些云环境提供了这种功能,例如 AWS ELB


  • 它还存在以下缺点:

    • 除非云环境中有负载均衡器,否则需要部署这样一个额外组件,并且还需要多实例部署来满足可用性和负载能力。

    • 除非负载均衡器是基于 tcp 的路由器,否则必须支持必要的应用通信协议(例如 HTTP、grpc、thspace 等)。

    • 相对于客户端服务发现来说,需要更多的网络跳转



相关的设计模式

  • 负载均衡器使用注册中心

  • 负载均衡器可能会使用断路器调用服务

  • 客户端服务发现是另一种替代解决方案



推荐阅读
  • 分布式服务框架和原理简章
    应用架构演进这里的架构演进应该是从服务化的角度来说,应该说随着业务发展,应用规模扩大,系统的一些公共服务就会抽取出来,独立开发,部署,维护,用来解决并发,扩展,维护的问题。传统垂直 ... [详细]
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • 本文为转载,原连接:https:www.zhihu.comquestion40822826简单说一下吧做要解释这些要从netconf说起。netconf ... [详细]
  • k8s入坑之路(14)scheduler调度 kubelet管理及健康检查
    kubelet主要功能Pod管理在kubernetes的设计中,最基本的管理单位是pod,而不是container。pod是kubernetes在容器上的一层封装,由一组运行在同一 ... [详细]
  • ASP.NET CORE 简介
    ASP.NETCore是一个跨平台的高性能开源框架,用于生成启用云且连接Internet的新式应用。使用ASP.NETCore,您可以:生成Web ... [详细]
  • 聊聊Dubbo(一):为何选择 ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • Istio是一个用来连接、管理和保护微服务的开放平台。Istio提供一种简单的方式来为已部署的服务建 ... [详细]
  • 微服务下的几个难点问题及常见的解决方案
    原文链接:https:cloud.tencent.comdevelopernews1362051背景介绍1.1幂等性定义数学定义在数学里,幂等有 ... [详细]
  • 阿里云监控URL的配置笔记
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了阿里云监控URL的配置笔记相关的知识,希望对你有一定的参考价值。有很多细节需要记录 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
  • 在这分布式系统架构盛行的时代,很多互联网大佬公司开源出自己的分布式RPC系统框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。而在我们公司一直都在推荐使用d ... [详细]
author-avatar
當紅冷萱儿_422
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有