常用服务注册中心与发现(Eurake、zookeeper、Nacos)笔记(一)基础概念

基础概念

注册中心

在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按照服务名分类组织服务清单,服务注册中心还需要以心跳的方式去监控清单中的服务是否可用,若不可用需要从服务清单中剔除,达到排除故障服务的效果。

服务注册中心的作用就是服务注册与服务发现。注册中心解决的是服务管理和服务的依赖关系管理,为了解耦服务提供者和服务消费者。其架构图如下:

在这里插入图片描述

主要功能

(1)服务注册:服务提供方将自身路由信息发布到注册中心,供消费方获取由于提供方建立连接并发起调用

  • 路由信息: 注册服务节点ip、监听端口等路由信息;
  • 服务信息:序列化协议、路由规则、节点权重;

(2) 服务发现: 服务消费方通过访问注册中心获取服务提供方节点路由信息;

  • 启动拉取:服务消费方启动后,从注册中心提取提供方节点列表,建立连接,进行RPC调用。
  • 通知回调:接受注册中心变更通知,重新获取数据,更新节点列表;
  • 轮询拉取:服务消费方运行过程中定时拉取服务提供方节点列表,用来更新本地数据;

(3)健康检查:确保已注册节点健康度,能够及时准确剔除失效节点,保证服务发现正确性

  • 失效原因:部署重启,服务假死,异常终止
  • 解决方案:上报心跳,服务探测

(4)变更通知:当服务提供方节点发生变更时,注册中心应该能够第一时间把变更事件或变更后的数据推送到服务订阅方;

  • 注册中心内为每个服务提供方建立订阅列表,当服务方节点变更时通知所有订阅该服务的消费方节点

(5)服务治理:注册中心除了实现服务注册与发现,还可以用来实现服务治理相关功能

  • 服务扩容/缩容, 机器迁移,权重,灰度流量

设计要点

(1)数据可靠性:数据冗余存储,确保不会因为单节点故障导致数据丢失

(2)数据一致性:各节点间数据同步,保证数据一致性。采用什么协议来保证各个节点数据是一致的。我们可以采用Gossip 协议

  • Gossip协议基本思想就是:一个节点想要分享一些信息给网络中的其他的一些节点。于是,它周期性的随机选择一些节点,并把信息传递给这些节点。这些收到信息的节点接下来会做同样的事情,即把这些信息传递给其他一些随机选择的节点。一般而言,信息会周期性的传递给N个目标节点,而不只是一个;
  • 主要特点就是:周期性散播消息、随机选择N个节点散播、散播不重复不回传

(3)服务可用性:多节点对等的对外提供服务,由数据可靠性和一致性保证了服务的可用性。

CAP理论

CAP理论是分布式架构中重要理论;

  • 一致性(Consistency):所有节点在同一时间具有相同的数据;
  • 可用性(Availability): 保证每个请求不管成功或者失败都有响应;
  • 分隔容忍(Partition tolerance): 系统中任意信息的丢失或失败不会影响系统的继续运作。

在一个分布式系统中,强一致性(C)、高可用性(A)、分区容错(P)三个因素之间只能满足两个,不能同时满足三个。

AP: Availability(可用性)-Partition tolerance(分区容错性)系统,简单来说,AP系统是指在面对网络分区或失败的情况下,系统能够保证可用性,但不保证数据一致性;

CP:Consistency(一致性)-Partition tolerance(分区容错性)系统是指在面对网络分区或失败的情况下,系统能够保证数据一致性,但不保证可用性。

CAP 不可都取,只能取其中2个的原因如下:

(1)如果C是第一需求的话,那么会影响A的性能,因为要数据同步,不然请求结果会有差异,但是数据同步会消耗时间,期间可用性就会降低。

(2)如果A是第一需求,那么只要有一个服务在,就能正常接受请求,但是对于返回结果变不能保证,原因是,在分布式部署的时候,数据一致的过程不可能像切线路那么快。

(3)如果同时满足一致性和可用性,那么分区容错就很难保证了,也就是单点,也是分布式的基本核心。

AP 和 CP 系统的选择取决于我们的应用场景和需求。如果应用需要保证数据的一致性,那么我们应该选择 CP系统;如果应用需要保证可用性,并且可以容忍数据的不一致性,那么我们可以选择 AP 系统。

注册中心客户端组件功能

(1) 服务发现: 从注册中心查询可用provider实例清单;

(2)实例缓存: 将从注册中心查询到provider 实例清单缓存到本地,不需要在每次使用时都去注册中心临时获取。

服务发现

由于在服务治理框架下运行,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。

远程客户端组件

远程客户端组件与微服务提供者之间一般使用某种RPC 通信机制来进行服务消费,常见的RPC通信方式是Rest API, 底层为Http传输协议。远程客户端组件则通常以模块组件的方式完成REST API的远程调用。

微服务提供者provider

微服务提供者通常以Web服务的方式提供REST API接口。

微服务提供者的主要功能如下:

(1) 服务注册:Provider微服务实例在启动时将自己的信息注册到注册中心上的过程。

(2) 心跳续约:Provider实例会定时向服务注册中心提供“心跳”,以表明自己还处于可用的状态。当一个Provider实例停止心跳一段时间后,注册中心会认为该服务实例不可用了,就会将该服务实例从服务注册列表中剔除。如果被剔除的Provider实例过一段时间后继续向注册中心提供心跳,那么服务注册中心会将该Provider实例重新加入服务注册表中。

(3)健康状况查询:Provider实例能提供健康状况查看的API,注册中心或者其他的微服务Provider能够获取其健康状况。

微服务提供者的服务注册和心跳续约一般都会通过注册中心客户端组件来完成。。

注册中心、微服务提供者、远程客户端组件之间的关系大致如下:
在这里插入图片描述

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

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

相关文章

电力感知边缘计算网关产品设计方案-软件架构(业务流程)

软件架构(业务流程) 基于前端系统提供的硬件通信平台,后端系统以控制执行单元为核心,协同控制通信管理、驱动适配、存储单元等职能单元完成与前端系统的通信数据交互业务,在经历以下业务流程后,完成设备自适应通信业务功能。 1.外部设备通信前端系统 前端系统连接新的…

OpenAI

OpenAI,在美国成立的人工智能研究公司,核心宗旨在于“实现安全的通用人工智能(AGI)”,使其有益于人类。 OpenAI于2015年由一群科技领袖,包括山姆阿尔特曼(Sam Altman)、彼得泰尔(Peter Thiel&a…

设计师不能忽视的几个宝藏图标设计工具

在这个快速变化的时代,设计师对创新和实用工具的需求越来越大。这就要求我们及时跟上潮流,不断探索和尝试最新、最有价值的图标设计工具。只有这样,我们才能在竞争激烈的设计市场中脱颖而出。以下是我们精心挑选的2024年值得一试的图标设计工…

C语言实现求n以内最大的k个素数c

以下是C语言实现求n以内最大的k个素数的代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <math.h>bool is_prime(int num) { // 判断素数int i;if(num < 2) {return false;}for(i 2; i < sqrt(num); …

服务器安全如何保障

主机安全是指保护计算机主机&#xff08;也称为服务器、终端或主机设备&#xff09;免受潜在的安全威胁和攻击的一系列措施和实践。主机安全旨在防止未经授权的访问、数据泄露、恶意软件感染和其他安全漏洞的利用&#xff0c;主机一旦被黑客入侵&#xff0c;企业会面临很多安全…

相比其他关系型数据库,AntDB JDBC驱动特性有哪些不同之处

摘要&#xff1a;使用Java语言进行各类应用程序的快速开发成为目前比较主要且流行的开发方式。JDBC是 Java 语言中用来连接和操作关系型数据库的 API&#xff0c;在业务程序与关系型数据库通信时&#xff0c;必然会使用JDBC驱动。 本文将通过国产关系型数据库AntDB中的JDBC为大…

【Effective C++】 (六) 继承与面向对象设计

【六】继承与面向对象设计 条款32 &#xff1a; 确保public继承是"is a"的关系 Item 32: Make sure public inheritance models “is-a”. C面向对象程序设计中&#xff0c;最重要的规则便是&#xff1a;public继承应当是"is-a"的关系。当Derived public继…

3.1.2 Linux时间子系统 hrtimer示例使用

文章目录 结构体定义接口初始化启动修改取消示例示例1示例2示例3结构体定义 struct hrtimer {struct timerqueue_node node;ktime_t _softexpires;enum hrtimer_restart

生成目录结构图 tree命令

tree /f >info.txt tree命令可用于生成漂亮的目录结构图&#xff0c;在此之前&#xff0c;我一直以为是手打的…… .| index.html|\---static---css| bar.css| map.css| \---js

jQuery创建、插入、删除对象

jQuery库中的一些操作元素的方法 创建元素&#xff1a; $(htmlString)&#xff1a;这个构造器可以用来创建元素&#xff0c;其中htmlString是一个包含HTML标记的字符串。例如&#xff0c;$(<p>Hello, World!</p>)会创建一个<p>元素对象&#xff1b;$("&…

【uniapp】部分图标点击事件无反应

比如&#xff1a;点击这个图标在h5都正常&#xff0c;在小程序上无反应 css&#xff1a;也设置z-index&#xff0c;padding 页面上也试过click.native.stop.prevent"changePassword()" 时而可以时而不行&#xff0c; 最后发现是手机里输入键盘的原因&#xff0c;输…

大型养殖场需要哪些污水处理设备

大型养殖场是一个涉及环境保护和可持续发展的关键行业&#xff0c;对于处理养殖场产生的污水有着明确的要求和标准。为了确保污水得到有效处理和处理效果达到国家排放标准&#xff0c;大型养殖场需要配备一系列污水处理设备。以下是几种常见的污水处理设备&#xff1a; 1. 水解…

Python入门指南之基本概率和语法基础

文章目录 一、基本概念二、控制流三、函数四、模块五、数据结构六、面向对象的编程七、输入输出八、异常九、Python标准库关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战…

快速排序演示和代码介绍

快速排序的核心是(以升序为例)&#xff1a;在待排序的数据中指定一个数做为基准数&#xff0c;把所有小于基准数的数据放到基准数的左边&#xff0c;所有大于基准数的数据放在右边&#xff0c;这样的话基准数的位置就确定了&#xff0c;然后在两边的数据中重复上述操作

2023亚太地区数学建模B题思路分析+模型+代码+论文

目录 2023亚太地区数学建模A题思路&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名片 2023亚太地区数学建模B题思路&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名片 2023亚太地区数学建模C题思路&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名…

使用 Pinia 的五个技巧

在这篇文章中&#xff0c;想与大家分享使用 Pinia 的五大技巧。 以下是简要总结&#xff1a; 不要创建无用的 getter在 Option Stores 中使用组合式函数&#xff08;composables&#xff09;对于复杂的组合式函数&#xff0c;使用 Setup Stores使用 Setup Stores 注入全局变量…

基于Python的新浪微博爬虫程序设计与实现

完整下载&#xff1a;基于Python的新浪微博爬虫程序设计与实现.docx 基于Python的新浪微博爬虫程序设计与实现 Design and Implementation of a Python-based Weibo Web Crawler Program 目录 目录 2 摘要 3 关键词 4 第一章 引言 4 1.1 研究背景 4 1.2 研究目的 5 1.3 研究意义…

2 使用React构造前端应用

文章目录 简单了解React和Node搭建开发环境React框架JavaScript客户端ChallengeComponent组件的主要结构渲染与应用程序集成 第一次运行前端调试将CORS配置添加到Spring Boot应用使用应用程序部署React应用程序小结 前端代码可从这里下载&#xff1a; 前端示例 后端使用这里介…

冷链运输车辆GPS定位及温湿度管理案例

1.项目背景 项目名称&#xff1a;山西冷链运输车辆GPS定位及温湿度管理案例 项目需求&#xff1a;随着经济发展带动物流行业快速发展&#xff0c;运输规模逐步扩大&#xff0c;集团为了适应高速发展的行业现象&#xff0c;物流管理系统的完善成了现阶段发展的重中之重。因此&…

eNSP-直连通信实验

实验拓扑&#xff1a; 实验需求&#xff1a; 1. 按照图中的设备名称&#xff0c;配置各设备名称 2. 按照图中的IP地址规划&#xff0c;配置IP地址 3. 测试R1与R2是否能ping通 4. 测试R2与R3是否能ping通 5. 测试R1与R3是否能ping通 实验步骤&#xff1a; 1. 加入设备&…