服务与发现

news2025/1/12 6:07:27

文章目录

  • 服务与发现
  • 什么是服务发现
  • 应用层服务发现模式
  • 平台层服务发现模式

服务与发现

假设你正在编写一些调用具有 REST API 的服务的代码,为了发出请求,你的代码需要知道服务实例的网络位置(IP 地址和端口),在物理硬件上运行的传统应用程序中,服务实例的网络位置通常是静态的。例如,你的代码可以从偶尔更新的配置文件中读取网络位置,但在现代的基于云的微服务应用程序中,通常不那么简单,如下图所示,现代应用程序更具动态性。
云服务

服务实例具有动态分配的网络位置,此外,由于自动扩展、故障和升级,服务实例集会动态更改。因此,你的客户端代码必须使用服务发现。

什么是服务发现

正如刚才所见,你无法使用服务的 IP 地址静态配置客户端,相反,应用程序必须使用动态服务发现机制。服务发现在概念上非常简单:其关键组件是服务注册表,它是包含服务实例网络位置信息的一个数据库。

  1. 服务实例启动和停止时,服务发现机制会更新服务注册表。
  2. 当客户端调用服务时,服务发现机制会查询服务注册表以获取可用服务实例的列表,并将请求路由到其中一个服务实例。

实现服务发现有以下两种主要方式:

  • 服务及其客户直接与服务注册表交互。
  • 通过部署基础设施来处理服务发现。

来逐一进行分析。

应用层服务发现模式

实现服务发现的一种方法是应用程序的服务及客户端与服务注册表进行交互,服务实例使用服务注册表注册其网络位置,客户端首先通过查询服务注册表获取服务实例列表来调用服务,然后它向其中一个实例发送请求。如下图显示了它的工作原理:
应用层服务发现
这种服务发现方法是两种模式的组合。

第一种模式是自注册模式。服务实例调用服务注册表的注册 API 来注册其网络位置,它还可以提供运行状况检查 URL。运行状况检查 URL 是一个 API 端点,服务注册表会定期调用该端点来验证服务实例是否正常且可用于处理请求,服务注册表还可能要求服务实例定期调用“心跳” API 以防止其注册过期。

模式:自注册
服务实例向服务注册表注册自己。

第二种模式是客户端发现模式。当客户端想要调用服务时,它会查询服务注册表以获取服务实例的列表。为了提高性能,客户端可能会缓存服务实例,然后,服客户端使用负载平衡算法(例如循环或随机)来选择服务实例,然后它向选择的服务实例发出请求。

模式:客户端发现
客户端从服务注册表检索可用服务实例的列表,并在它们之间进行负载平衡。

应用层服务发现的一个好处是它可以处理多平台部署的问题(服务发现机制与具体的部署平台无关)。例如,想象一下,你在 k8s 上只部署了一些服务,其余服务在遗留环境中运行,在这种情况下,使用 Eureka(高可用的服务注册表) 的应用层服务发现同时适用于两种环境,而基于 k8s 的服务发现仅能用于部署在 k8s 平台之上的部分服务。

应用层服务发现弊端是:

  • 你需要为你使用的每种编程语言(可能还有框架)提供服务发现库。SpringCloud 只能帮助 Spring 开发人员,如果你正在使用其他 Java 框架或非 JVM 语言(如 Nodejs 或 GoLang),则必须找到其他一些服务发现框架。
  • 应用层服务发现的另一个弊端是开发者需要负责设置和管理服务注册表,这会分散一定的精力。因此,最好使用部署基础设施提供的服务发现机制。

平台层服务发现模式

你将了解许多现代部署平台(如 Docker 和 k8s)都具有内置的服务注册表和服务发现机制。部署平台为每个服务提供 DNS 名称、虚拟 IP 地址和解析为 VIP 地址的 DNS 名称。客户端向 DNS 名称和 VIP 发出请求,部署平台自动将请求路由到其中一个可用服务实例。因此,服务注册、服务发现和请求路由完全由部署平台处理。如下图显示了它的工作原理:
平台层服务发现
部署平台包括一个服务注册表,用于跟踪已部署服务的 IP 地址。在此示例中,客户端使用 DNS 名称 order-service 访问 OrderService,该服务解析为虚拟IP地址 10.1.3.4。部署平台会自动在 OrderService 的三个实例之间对请求进行负载均衡。

这种方法是以下两种模式的组合。

  • 第三方注册模式:由第三方负责(称为注册服务器,通常是部署平台的一部分)处理注册,而不是服务本身向服务注册表注册自己。
  • 服务端发现模式:客户端不再需要查询服务注册表,而是向 DNS 名称发出请求,对该 DNS 名称的请求被解析到路由器,路由器查询服务注册表并对请求进行负载均衡。

模式:第三方注册
服务实例由第三方自动注册到服务注册表。

模式:服务端发现
客户端向路由器发出请求,路由器负责服务发现。

由平台提供服务发现机制的主要好处是服务发现的所有方面都完全由部署平台处理,服务和客户端都不包含任何服务发现代码。因此,无论使用哪种语言或框架,服务发现机制都可供所有服务和客户使用。

平台提供服务发现机制的一个弊端是它仅限于支持使用该平台部署的服务。例如,如前所述,在描述应用程序级别发现时,基于 k8s 的发现仅适用于在 k8s 上运行的服务,尽管存在此限制,还是建议尽可能使用平台提供的服务发现。


《微服务架构设计模式》第三章 微服务的拆分策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

整型数据是如何在内存中存储的

🏖️作者:malloc不出对象 ⛺专栏:《初识C语言》 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一. 整型在内存中的存储1.1 整型…

Vue2生命周期详细图解和代码

加油&#xff0c;新时代打工人&#xff01;&#xff01;&#xff01; 话不多说&#xff0c;看图。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"…

C语言数据结构——链表

C语言数据结构——链表 链表包括单链表&#xff0c;双链表&#xff0c;循环链表等。 而今天要说的是单链表&#xff0c;它是一个线性表&#xff0c;它在内存中是无序的&#xff0c;由一个个指针来连接。 图示&#xff1a; 小方块代表的就是存储的数据&#xff0c;箭头就是指…

(46)STM32——FATFS文件系统实验

目录 学习目标 运行结果 文件系统 常用系统 FATFS 特点 结构图 移植步骤 disk_initialize disk_status disk_read disk_write disk_ioctl get_fattime 代码 总结 学习目标 我们要来介绍的是FATFS文件系统&#xff0c;这是一个为嵌入式设计的文件系统&#xff0c…

大学科目网课搜题接口

大学科目网课搜题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点…

【1024社区大奖】让你一小时内狂揽大奖[保姆级教程①]

四层挑战&#xff0c;一小时内拿捏&#xff01;&#xff08;上&#xff09;一、龙蜥社区大奖二、战前准备1.注册码云Gitee2.注册龙蜥社区三、开始挑战&#xff0c;包揽大奖&#xff01;①第一层&#xff1a;小龙推荐 [15分钟]②第二层随机试炼 [15分钟]一、龙蜥社区大奖 活动分…

【论文笔记】Transformer-based deep imitation learning for dual-arm robot manipulation

【论文笔记】Transformer-based deep imitation learning for dual-arm robot manipulation Abstract 问题&#xff1a;In a dual-arm manipulation setup, the increased number of state dimensions caused by the additional robot manipulators causes distractions and …

微信小程序入门与实战之更多电影列表与电影搜索

wx.request的更多参数详解 在网络请求中我们可以采用下面这种形式&#xff1a; 如果我们可以不采用直接写在url的方式我们可以采用data的方式&#xff1a; 默认请求方式是GET我们可以通过设置method修改请求方式&#xff1a; 更多电影页面 我们要实现的效果&#xff1a;…

应用层——HTTP协议

文章目录一、应用层1.1 应用层概念1.2 再谈协议二、网络版本的计算器网络计算器编码部分版本1&#xff1a;原生版本版本2&#xff1a;引入序列化和反序列化三、HTTP协议3.1 URL3.2 urlencode和urldecode3.3 HTTP协议格式3.3.1 请求报文3.3.2 响应报文3.4 HTTPDemo3.4.1改进3.4.…

这里不适合做技术

6点&#xff0c;の&#xff0c;下班了又是一个差不多一样的星期过去了&#xff0c;又是一个差不多的周末要到来了。我也差不多要离开这家公司了&#xff0c;入职4年多&#xff0c;那时候雄心壮志&#xff0c;决定干一番大事业&#xff0c;那个时候的自己&#xff0c;技术的炉火…

【图像融合】基于 DCT结合拉普拉斯金字塔的图像融合附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

论文理解与笔记【CVPR_2022.6】Region-Aware Face Swapping

论文理解与笔记【CVPR_2022】Region-Aware Face Swapping论文的缩写全拼&#xff1a;一、贡献二、介绍三、提出问题&#xff0c;也是论文解决的问题四、具体实现方案五、实验六、最终感想和总结论文地址&#xff1a;传送门或者传送门2 先看看效果&#xff1a; 论文的缩写全拼…

【单片机毕业设计】【mcuclub-jj-003】基于单片机的八层电梯的设计

最近设计了一个项目基于单片机的八层电梯系统&#xff0c;与大家分享一下&#xff1a; 一、基本介绍 项目名&#xff1a;八层电梯 项目编号&#xff1a;mcuclub-jj-003 单片机类型&#xff1a;STC89C52、STM32F103C8T6 功能简介&#xff1a; 1、通过3*4矩阵键盘实现电梯内部…

【Linux修炼】5.vim详解

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 Linux-yum&vim工具的使用本节目标1. Linux 软件包管理器 yum1.1 什么是软件包1.2 关于rzsz1.3 查看软件包1.4 如何安装软件1.5 如何卸载软件2. Linux编辑器-vim的使用&#xff08;重点&#xff09;2.1 什么是vim&#…

C++内存管理

1.C内存分布 学习C内存分布之前&#xff0c;先小试牛刀一下。 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd&quo…

webpack--》webpack底层深入讲解,从初识到精通,真正实现从0到1的过程

目录 webpack webpack的基本使用 安装 配置 修改自定义打包的入口与出口 优化js或图片的存放路径 配置webpack中符号的使用 webpack中相关插件安装 webpack-dev-server html-webpack-plugin clean-webpack-plugin webpack中的loader 打包处理css文件 打包处理les…

TPM分析笔记(十二)TPM PCR操作

目录一、PCR初始化&#xff08;Initializing PCR&#xff09;二、PCR的扩展&#xff08;Extend of a PCR&#xff09;2.1 其他PCR命令三、使用PCR Banks进行扩展&#xff08;Using Extend with PCR Banks&#xff09;四、事件记录&#xff08;Recording Events&#xff09;五、…

Java递归实现树形结构的两种方式

目录0、引言1、数据准备2、类型转化3、递归实现方法3.1、Java7及以下纯Java递归实现3.2、Java8及以上借助lamda表达式实现0、引言 在开发的过程中&#xff0c;很多业务场景需要一个树形结构的结果集进行前端展示&#xff0c;也可以理解为是一个无限父子结构&#xff0c;常见的…

【老师见打系列】:我只是写了一个自动回复讨论的脚本~

文章目录&#x1f31f;好久不见⛳️实现过程&#x1f334;老操作了兄弟们~&#x1f422;一步拿捏讨论&#x1f496;美图结束语专栏Python零基础入门篇&#x1f4a5;Python网络蜘蛛&#x1f4a5;Python数据分析Django基础入门宝典&#x1f4a5;小玩意儿&#x1f4a5;Web前端学习…

2022海德堡桂冠论坛(HLF)见闻录

今年9月下旬&#xff0c;我前往德国参加了第九届海德堡桂冠论坛。因疫情原因停摆两年后&#xff0c;海德堡桂冠论坛再次以线下形式举办&#xff0c;会场热闹非凡&#xff0c;作为计算机与数学界的社交盛宴当之无愧。 海德堡桂冠论坛&#xff08;Heidelberg Laureate Forum, HLF…