Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务架构的服务发现机制

微服务架构的服务发现机制

作者头像
IMWeb前端团队
发布于 2019-12-03 10:00:41
发布于 2019-12-03 10:00:41
1.1K0
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb Jianglinyuan 原文出处:IMWeb社区 未经同意,禁止转载

微服务架构的服务发现机制

分布式微服务系统架构其最大一个特性即分布式,所以如何知道每个独立的微服务的服务器地址、端口、以及其他相关信息呢?同时,相对于传统分布式系统的部署:相关独立业务逻辑系统的部署都是在固定并且已知的位置(服务器地址与端口),现代分布式微服务的应用程序通常部署在虚拟化或者容器化环境当中。在这样的前提下,每个独立微服务的实例数量以及其位置都是动态变化的。所以服务发现机制在一套分布式微服务系统架构中显得尤为重要。

常用的服务发现机制分为两种:客户端服务发现服务端服务发现

简而言之客户端服务发现即由客户端负责决定可用的服务实例的"位置"以及与其相关的负载均衡策略。

无论使用客户端服务发现或者服务端服务发现都需要拥有一个服务注册中心客户端对微服务的"位置"的获取就是通过与服务注册中心。服务注册中心作为微服务架构最基础也是最重要的组件之一,服务注册中心的本质上市为了解耦服务提供者和服务消费者之间的关系。在客户端服务发现的模式下,客户端首先会跟服务注册中心交互,然在客户端使用一个相关的负载均衡算法决定去选择哪一个微服务实例。

客户端服务发现模式的主要优点是其相对直接,除了服务注册表并没有其他动态管理的部分了。而且,由于客户端知道可用的服务实例,所以可以做到智能的、应用明确的负载均衡策略,比如Hash算法。而其主要的弊端在于客户端与服务注册中心的注册表是一一对应的,必须要为服务客户端用到的每一种编程语言和框架实现客户端服务发现的逻辑。

服务端服务发现相对于客户端服务发现最大的不同是:其将客户端的与服务发现相关的逻辑搬离到了负载均衡层来做。客户端所有的请求只会通过负载均衡模块,其并不需要知会微服务实例在哪里,地址是多少。负载均衡模块会查询服务注册中心,并将客户端的请求路由到相关可用的微服务实例上。

服务端服务发现主要的优势是在这种设计模式下,服务发现的相关逻辑和细节可以从客户端完全抽离出来,客户端只需要向负载均衡模块发送请求,不需要为服务客户端使用的每一种语言和框架来实现相关逻辑。同时,这样做对前后端逻辑分离是非常友好的,前端还是关注整套业务系统的相关逻辑,而不用考虑太多后端的东西。这对一套业务系统的维护和开发都是有优势的。服务端服务发现的主要缺点是在这种模式下,相对于客户端服务发现,它需要另一个高可用、高性能的系统组件。

API网关Kong就是与服务端服务发现机制相呼应的。Kong就包含了负载均衡模块用来接收来自客户端的请求,Kong和服务注册中心交互得到相应的具体的微服务实例的"位置"。设计或者选型一个服务注册中心,首先要考虑的就是服务注册和发现机制。纵观当下各种主流的服务注册中心的解决方案,大致可以归为一下三类:

  • 应用内:直接集成到应用中,依赖于应用自身完成服务的注册和发现,最典型的就是Netflix提供的Eureka。
  • 应用外:把应用当成黑盒,通过应用外的某种机制将服务注册到注册中心,最小化对应用的侵入性,比如Airbnb的Smartstack,HashiCorp的Consul。
  • DNS:将服务注册为DNS的SRV记录,严格的来说,是一种特殊的应用外注册方式,SkyDNS就是其中最具有代表性的杰作。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
云原生微服务治理:服务发现、负载均衡与熔断策略
随着云原生架构的崭露头角,微服务已经成为构建现代应用程序的主要架构风格。然而,微服务架构的成功实施不仅仅涉及到服务的拆分和部署,还需要适当的治理机制来确保系统的稳定性和可靠性。本文将深入探讨云原生微服务治理的关键方面,包括服务发现、负载均衡和熔断策略,并提供示例代码来帮助读者更好地理解这些概念。
IT_陈寒
2023/12/13
6780
云原生微服务治理:服务发现、负载均衡与熔断策略
微服务技术架构
“ 微服务(MicroServices)架构是当前互联网业界的一个技术热点,大家是否明白一个微服务架构有哪些技术关注点(technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型呢?”
每天学Java
2020/06/01
1.3K0
微服务技术架构
服务发现的深入研究,不谈理念谈干货
服务发现是怎么“火”起来的 我们知道,在写代码的时候,为了完成服务请求的时候,代码需要知道服务实例的IP地址和端口。所以说,服务发现,发现的是服务实例的IP地址和端口。 那么,为什么服务发现这两年比较
魏新宇
2018/03/22
9320
服务发现的深入研究,不谈理念谈干货
分布式系统架构2:服务发现
服务发现指的是分布式系统中,服务实例动态注册自己的信息到注册中心,其他服务能发现这些实例的位置,实现服务间通信。
卷福同学
2024/12/16
2260
微服务系列(一)-服务发现
在微服务架构中,整个系统会按职责能力划分为多个服务,通过服务之间协作来实现业务目标。这样在我们的代码 中免不了要进行服务间的远程调用,服务的消费方要调用服务的生产方,为了完成一次请求,消费方需要知道服务 生产方的网络位置(IP地址和端口号)。 我们的代码可以通过读取配置文件的方式读取服务生产方网络位置,如下:
许喜朝
2021/01/06
3830
聊一聊微服务架构中的服务发现系统
导语:本文围绕服服务调用模式、一致性取舍、服务提供者的健康检查模式等方面,讨论了服务发现的技术选型和设计的各种优缺点,希望能够帮助大家在选择或者使用服务发现系统的时候更加顺畅。
腾讯云中间件团队
2021/03/24
8360
聊一聊微服务架构中的服务发现系统
微服务架构究竟应该怎么进行服务发现?
今天这篇,我们主要讲解微服务架构中,为什么需要服务发现,服务发现是什么,服务发现中有哪些重要角色,又有哪些具体发现模式供我们应用实践。
brookwang
2022/06/24
9490
微服务架构究竟应该怎么进行服务发现?
SpringCloud微服务架构开发实战:微服务的消费模式
基于HTTP的客户端经常被用作微服务的消费者。这类客户端往往有着平台无关性、语言无关性等特征,而被社区广泛支持,各类HTTP客户端框架也是层出不穷。
愿天堂没有BUG
2022/10/28
7710
SpringCloud微服务架构开发实战:微服务的消费模式
基于Spring Cloud的微服务架构分析
Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本。虽然Spring Cloud时间最短,但是相比Dubbo等RPC框架,Spring Cloud提供的全套的分布式系统解决方案。
用户4283147
2022/10/27
3870
基于Spring Cloud的微服务架构分析
微服务探索与实践—服务注册与发现
微服务从大规模使用到现在已经有很多年了,从之前的探索到一步步的不断完善与成熟,微服务已经成为众多架构选择中所必须面对的一个选项。服务注册与发现是相辅相成的,所以一般会合起来思索。其依托组件有很多,比如Zookeeper,Consul,Eureka等等。
苏先生
2019/05/04
5430
微服务探索与实践—服务注册与发现
微服务架构实践:服务注册与发现中负载方案选型
微服务架构不是银弹,在微服务架构中,我们将面临很多新的问题,这时候势必会引入一个服务注册发现问题。本文作者向大家介绍了随着负载均衡位置的不同,三种主要的服务注册与发现和负载均衡方案。 1.微服务架构下服务注册与发现机制 随着微服务架构深入人心,越来越多的企业将微服务架构付诸实践。相比于传统的单体应用架构,微服务架构有着得天独厚的优势;在传统的单体应用架构下,因为功能集中,代码中心化,一个发布包部署发布在一个进程的应用程序中,单体应用架构已经无法满足企业业务快速变化的需求。一方面,代码维护困难,扩展性较差,
yuanyi928
2018/04/02
1.1K0
微服务架构实践:服务注册与发现中负载方案选型
精读此文后你会感觉之前对微服务核心模块-服务注册中心一无所知
在微服务架构中,帮助开发者快速构建应用的脚手架技术无疑是非常重要的。以Spring Boot为代表的基底技术在继承了Spring框架思想的同时将简洁便利、约定优于配置、开箱即用等特性进一步发扬光大。然而仅仅依靠Spring Boot还不足以支撑微服务架构应对服务高可用、服务动态配置、服务高可扩展、服务负载均衡、服务容错与隔离等非功能需求,我们还需要相关基础设施提供服务治理及管控能力。
愿天堂没有BUG
2022/10/28
6220
精读此文后你会感觉之前对微服务核心模块-服务注册中心一无所知
分布式微服务架构概述初探
微服务架构(MSA)的起源应该要追溯到国外著名架构师Martinfowler于2014年编写的一篇博文中,其中阐述了微服务架构的整体设想。他用这样一句话概述了对微服务架构的评价:"今天在软件架构方面,除了微服务这个名称没有什么新的了"。
IMWeb前端团队
2019/12/03
1.1K0
分布式微服务架构概述初探
4、服务发现
本书主要介绍如何使用微服务来构建应用程序,现在是第四章。第一章已经介绍了微服务架构模式,并讨论了使用微服务的优点与缺点。第二章和第三章介绍了微服务间的通信,并对不同的通信机制作出对比。在本章中,我们将探讨服务发现(service discovery)相关的内容。
Java架构师历程
2018/09/26
2.3K0
4、服务发现
Service Discovery 与微服务架构有什么关系?
关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术
ayqy贾杰
2020/02/26
1.1K0
微服务模式系列之五:服务端服务发现
译者自序: 熟悉我的朋友都知道,我很不喜欢翻译东西,因为在两种语言的思维方式之间做频繁切换对我来说是件很痛苦的事情。但是这次不一样,公司和同事的大力支持降低了我的痛苦指数,让我能够坚持把Chris Richardson的微服务模式系列文章翻译完,今天发布第五篇——《服务端服务发现》。 背景 不同服务之间通常需要相互调用。在单体应用程序当中,服务间通过语言层级的方法或者过程实现相互调用。在传统的分布式系统部署下,服务在固定并且已知的位置(主机与端口)运行,从而确保各服务可利用HTTP/REST或者某种RPC
yuanyi928
2018/04/02
1.8K0
微服务模式系列之五:服务端服务发现
【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统
小尘要自信
2023/10/10
7710
【SpringCloud】深入探究Eureka:构建微服务架构中的高效服务发现系统
微服务:从设计到部署【笔记】
一、微服务简介 A.单体地狱 1.成功的应用有一个趋势,随着时间推移而变得越来越臃肿 2.复杂的单体应用本身就是持续部署的障碍 3.单体应用使得采用新框架和语言变得非常困难 B.微服务 — 解决复杂问题 1.思路是将应用程序分解成一套较小的互连服务。一个服务通常实现了一组不同的特性或功能。每个微服务都是一个迷你应用,包括了业务逻辑以及多个适配器 2.一些微服务会暴露一个供其他微服务或应用客户端消费的API,其他微服务可能实现了一个WebUI,在运行时,每个实例通常是一个云虚拟机(virtual machine,VM)或者一个Docker容器 3.他们之间的通信是由一个被称为API网关(API Gateway)的中介负责,API网关负责负载均衡、缓存、访问控制、API计量和监控 4.如果您想从微服务中受益,每一个服务都应该有自己的数据库模式,因为它能实现松耦合 C.微服务的优点 1.解决了复杂问题,把可能会变得庞大的单体应用程序分解成一套服务 2.这种架构使得每个服务都可以由一个团队独立专注开发 3.微服务架构模式可以实现每一个微服务独立部署 4.微服务架构模式使得每个服务能够独立扩展 D.微服务的缺点 1.微服务这个术语的重点过多偏向于服务的规模,有些开发者主张构建极细粒度的10至100LOC(代码行)服务,但小型服务只是一种手段,目标在于充分分解应用程序以方便应用敏捷开发和部署 2.微服务是一个分布式系统,使得整体变得复杂,开发者需要选择和实现基于消息或者RPC的进程间通信机制,模块间通过语言级方法/过程调用相互调用,这比单体应用要复杂得多 3.分区数据库架构,需要更新不同服务所用的数据库,通常不会选择分布式事务,不仅仅是因为CAP定理 4.测试微服务应用程序也很复杂,需要启动该服务及其所依赖的所有服务,或者至少为这些服务配置存根 5.实现了跨越多服务变更,在微服务中需要仔细规划和协调出现的变更至每个服务 6.部署基于微服务的应用程序也是非常复杂的 7.每个服务都有多个运行时实例,还有更多的移动部件需要配置、部署、扩展和监控,还需要实现服务发现机制,使得服务能够发现需要与之通信的任何其他服务的位置(主机和端口),需要开发人员能高度控制部署方式和高度自动化 二、使用API网关 A.客户端与微服务直接通信 1.问题:客户端的需求与每个微服务暴露的细粒度的API不匹配,公网下效率低下 2.问题:有可能使用了非web友好协议,一个服务可能使用了Thrift二进制rpc,而另一个可能使用AMQP消息协议,这些对浏览器还是防火墙都是不友好的,最好是在内部使用 3.缺点:难以重构微服务 B.使用API网关 1.API网关是一个服务器,是系统的单入口点,类似于面向对象设计模式中的门面(Facade)模式,封装了内部系统架构,并针对每个客户端提供一个定制API,还可用于认证、监控、负载均衡、缓存和静态响应处理 2.API网关负责请求路由、组合和协议转换,通常会调用多个微服务和聚合结果来处理一个请求,可以在Web协议(如HTTP和WebSocket)和用于内部的非Web友好协议之间进行转换 3.API还可以为每个客户端提供一个定制API,通常为客户端暴露一个粗粒度的API C.API网关的优点与缺点 1.主要好处是它封装了应用程序的内部结构,客户端只与网关通信,而不必调用特定的服务 2.缺点是它是另一个高度可用的组件,需要开发、部署和管理,API网关可能会成为开发瓶颈 3.重要的是更新API网关的过程应尽可能地放缓一些,否则,开发人员将被迫排除等待网关更新 D.实施API网关 1.在一个支持异步、非阻塞I/O平台上构建API网关是很有必要的。Node.js、Nginx Plus 2.API网关通过简单地把他们(请求)路由到适当的后端服务来处理一些请求。它通过调用多个后端服务并聚合结果来处理其他请求,API网关应该并发执行独立请求 3.使用传统的异步回调方式来编写API组合代码会很快使您陷入回调地狱,好的方式是使用响应式方法以声明式编写API网关代码 4.一个基于微服务的应用程序是一个分布式系统,必须使用一个进程间(inter-process)通信机制,有两种方案:一是使用基于消息的异步机制,如JMS、AMQP、ZeroMQ等;另一种采用了同步机制,如HTTP和Thrift;API网关需要支持各种通信机制 5.API网关需要知道与其通论的每个微服务的位置(IP地址和端口),需要使得系统的服务发现机制:服务端发现或客户端发现,API网关必须能够查询服务注册中心,该注册中心是所有微服务实例及其位置的数据库 6.当一个服务调用另一个响应缓慢或不可用的服务时,API网关不应该无期限地等待下游服务,如何处理故障问题取决于决定的方案和哪些服务发生故障 7.如果可以,API网关还可以返回缓存数据,通过返回默认数据或缓存数据,确保系统发生故障
硬核项目经理
2019/08/06
7870
微服务:从设计到部署【笔记】
SpringCloud微服务架构分析
微服务是一种架构风格,一个大型复杂软件应用应该由一个或多个微服务组成。系统中的各个微服务都可以被独立部署,每个服务仅关注于完成一件任务就行了,在所有情况下,每个任务都代表着一个小的业务能力。微服务架构其实就是一种架构风格,我们将整个项目划分为多个独立的小项目,也就是我们俗称的微服务,可以理解为每个微服务都单独处理某个功能模块,可以独立开发、测试、部署、监控和扩展,甚至可以用不同的编程语言开发它们。它有利于我们平时项目的开发,解决了一体化架构项目难以扩展,开发周期长,故障级联等问题。
全栈程序员站长
2022/07/02
5210
SpringCloud微服务架构分析
详细描述微服务架构模式 | 微服务系列第三篇
虽然微服务通常是单独部署的,但大多数企业级微服务架构要求服务彼此交互以及与其他外部服务交互。 使用进程间通信(IPC)机制实现该通信。 根据应用程序的要求,微服务之间的通信可以是同步的或异步的。
魏新宇
2018/08/16
9370
详细描述微服务架构模式 |  微服务系列第三篇
推荐阅读
相关推荐
云原生微服务治理:服务发现、负载均衡与熔断策略
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档