当前位置:首页 > 服务端 > 微服务注册与发现

微服务注册与发现

2022年11月09日 10:34:25服务端21

微服务架构下多服务间通信,需要解决的一个问题就是如何实现服务发现。本文将从为什么需要服务发现、什么是服务发现、如何实现服务发现等四个方面对其进行简要介绍。

为什么需要服务发现

在进行服务间调用时,一个服务需要知道另一个服务的网络位置(IP地址和端口)。在物理硬件上运行的应用来书,服务实例的网络位置通常是静态的。但在云原生时代,通常不那么简单。在基于云构建的服务实例,其网络位置更具动态性。示例如下图: 微服务注册与发现 _ JavaClub全栈架构师技术笔记
以上图为例,在基于云创建服务实例时,服务实例具有动态分配的IP地址。因为服务实例可以在任一时刻创建或销毁,所以无法让某一服务实例占用固定IP,而是每次服务创建时随机使用一个IP,服务销毁时回收这个IP。

什么是服务发现

服务调用方无法通过配置IP地址的方式访问服务提供方的接口。相反,应用或基础设施需提供动态服务发现机制。服务发现在概念上非常简单:服务发现的关键组件是服务注册表,它是包含服务实例网络位置信息的一个数据库。
服务实例启动或停止时,服务发现机制会更新服务注册表。当客户端调用服务器时,服务发现机制会查询服务注册表,以获取可用服务实例的列表,并将请求路由到其中一个服务实例。细心的同学可以发现,这块原理与DNS类似。其实,服务发现原理就是借鉴DNS原理实现。

如何实现服务发现

实现服务发现有以下两种主要方式:
(1) 服务调用方和服务提供方直接与服务注册表交互,也即应用层服务发现模式。
(2) 通过部署基础设施来处理服务发现,也即平台层服务发现模式。

应用层服务发现模式

实现服务发现的一种方法是服务调用方和服务提供方直接与服务注册表交互。服务提供方使用服务注册表注册其网络位置。服务调用方首先通过查询服务注册表获取服务实例列表来调用服务,然后向其中一个实例发送请求。示例如下:
微服务注册与发现 _ JavaClub全栈架构师技术笔记

从上图可知,服务实例在初始化时,会调用注册API向服务注册表来注册其网络位置。另外,服务注册表还可能要求服务实例定期调用心跳API以防止其注册过期。当服务调用方需要调用服务接口时,它会查询服务注册表以获取服务实例的列表。然后服务调用方使用负载均衡算法来选择服务实例。接着它向已选择的服务实例发出请求。
在微服务架构发展的早期,应用层服务发现模式获得极大推广。主流的应用层服务发现组件有Netflix的Eureka。这也是Spring Cloud框架之前默认的服务发现组件(Eureka现在已停止维护)。
应用层服务发现的一个优势是它可以处理多平台部署的问题(服务发现机制与底层部署的平台无关)。
应用层服务发现的一个劣势是每个服务发现库都是语言或框架相关的。如Eureka只能帮助基于Java开发人员。如果需要使用GoLang或其他语言,则必须使用其他服务发现组件。

平台层服务发现模式

实现服务发现的另一种方法是通过部署基础设施来处理服务发现。许多现代部署平台(如Docker和Kubernetes)都具有内置的服务注册表和服务发现机制。部署平台为每个服务提供DNS名称、虚拟IP(VIP)和解析为VIP地址的DNS名称。服务调用方向DNS名称和VIP发出请求,部署平台自动将请求路由到其中一个可用服务实例。因此,服务注册、服务发现和请求路由完全由部署平台处理。示例如下:
微服务注册与发现 _ JavaClub全栈架构师技术笔记
部署平台包括一个服务注册表,用于跟踪已部署服务的IP地址。当服务启动后,部署平台的注册器将服务实例的地址写入注册表。每个服务都有一个网络位置、一个DNS名称和虚拟IP地址。服务调用方向部署平台的路由器请求服务提供方的网络位置。然后部署平台的路由器查询注册表并在可用服务实例之间负载均衡请求。
由平台提供服务发现机制的主要好处是服务发现的所有方面都完全由部署平台处理。服务提供方和服务调用方都不包含任何服务发现代码。因此,无论使用哪种语言或框架,服务发现机制都可供所有服务提供方和服务调用方使用。
平台提供服务发现机制的一个劣处是它仅限于支持使用该平台部署的服务。如基于Kubernets的发现仅适用于在Kubernets上运行的服务。
从微服务架构的发展来看,平台层服务发现模式已经成功业内主流,笔者参与的云服务开发,就是基于平台层服务发现模式。

参考

微服务设计 Sam Newman 著, 崔力强 等 译
微服务架构设计模式 Chris Richardson 著, 陈斌 等 译
https://itdks.su.bcebos.com/307ea09e7ef34bbfa58b845bf0f3d74b.pdf 微服务架构开发及平台演进

作者:夜雨风云
来源链接:https://blog.csdn.net/wangxufa/article/details/125584892

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68794.html

标签: 微服务
分享给朋友:

“微服务注册与发现” 的相关文章

深入理解分布式、微服务中CAP定律和BASE理论

深入理解分布式、微服务中CAP定律和BASE理论

一、背景 随着互联网的快速蔓延,各种传统项目(单体应用的架构)已经不能够满足当前各种复杂的需求场景,都逐渐向分布式服务、微服务做转换,而如今分布式、微服务架构已经普遍存在互联网公司的项目中,像大型电商网站等几乎都是分布式、微服务架构的。因此分布式和...

RabbitMQ(三) 微服务 RabbitMQ 入门案例

RabbitMQ(三) 微服务 RabbitMQ 入门案例

一、创建案例项目  打开 https://start.spring.io/  ,在“Dependencies”中搜索RabbitMQ和web,生成spring-boot项目 点击生成按钮,即下载了一个包含RabbitMQ的项目。...

一个项目的SpringCloud微服务改造过程

一个项目的SpringCloud微服务改造过程

分享一个项目进行SpringCloud微服务改造的过程与实践。 SSO是公司一个已经存在了若干年的项目,后端采用SpringMVC、MyBatis,数据库使用MySQL,前端展示使用Freemark。今年,我们对该项目进行了一次革命性的改进,改造成SpringClou...

springboot+springcloud微服务入门

springboot+springcloud微服务入门

MicroService实现技术:   用springBoot来创建单个服务,用SpringCloud来管理这些微服务。   ##SpringCloud的五大神兽   #1.注册/服务发现——Netflix Eureka     管理服务器地址和ip的   ...

Springboot整合dubbo(一):搭建一个springboot + dubbo的微服务

Springboot整合dubbo(一):搭建一个springboot + dubbo的微服务

现在越来越多的公司开发项目中使用了springboot作为搭建服务的框架,因为springboot集成了一套完整项目所需要的基本的开发工具的jar包,无需再像之前开发一个spring项目中需要引入各种配置,只需要引入简单的几个配置就能达到项目的启动,大大减少了开发周期,使开发越来...

微服务常见安全认证方案Session token cookie跨域

微服务常见安全认证方案Session token cookie跨域

HTTP 基本认证 HTTP Basic Authentication(HTTP 基本认证)是 HTTP 1.0 提出的一种认证机制,这个想必大家都很熟悉了,我不再赘述。HTTP 基本认证的过程如下: 客户端发送 HTTP Request 给服务器。 因为 Req...

2019年7月最新Java微服务资料

2019年7月最新Java微服务资料

大家好,废话不多说,整理了精心收集了各类资源。 声明,如侵犯个人利益,请联系小编,会立即删除相关资料。领取方式在文末 求转发列表 好了,由于资源太多啦,就不一一列举了。大家按照下面的步骤获取吧! 领取方式:...

SpringCloud从入门到进阶(一)——懂生活就懂微服务

SpringCloud从入门到进阶(一)——懂生活就懂微服务

内容   本文通过生活中的实际场景解释单体应用和微服务应用的关系,以及SpringCloud中各组件的功能和含义。 适合人群   Java开发人员 说明   转载请说明出处:SpringCloud从入门到进阶(一)——懂生活就懂微服务   GitHu...

SpringCloud微服务笔记-Nginx实现网关反向代理

SpringCloud微服务笔记-Nginx实现网关反向代理

背景 当前在SpringCloud微服务架构下,网关作为服务的入口尤为重要,一旦网关发生单点故障会导致整个服务集群瘫痪,为了保证网关的高可用可以通过Nginx的反向代理功能实现网关的高可用。 项目源码:https://github.com/taoweidong/Micro-...

分享一个集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo+SkyWalking的微服务开发框架

分享一个集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo+SkyWalking的微服务开发框架

集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服务开发框架 Github源代码地址 https://github.com/PeyShine/Demo.MicroSe...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。