注册中心 Service Discovery --- Intro

注册中心 Service Discovery --- Intro

  • 为什么需要注册中心
  • 注册中心的原理
  • 常用的注册中心
  • 注册中心的高可用

为什么需要注册中心

  • 在微服务架构中,系统被拆分成了若干个独立的服务,因此服务之间需要进行通信和协作。为了实现服务的发现和调用,需要一个中心化的注册中心来进行服务的注册和发现。注册中心可以让服务通过名字进行访问,而不用关心服务的物理位置和实现细节
  • 服务注册中心就是在整个的微服务架构中单独提出一个服务,这个服务不完成系统的任何的业务功能,仅仅用来完成对整个微服务系统的服务注册和服务发现,以及对服务健康状态的监控和管理功能。

注册中心的主要作用是:

  • 服务的注册和注销:服务在启动时将自己的信息注册到注册中心,服务关闭时注销自己的信息。
  • 服务的发现和访问:客户端通过注册中心查询服务的信息,获取服务的地址和端口,然后进行调用。
  • 健康检查和服务摘除:主动的检查服务健康情况,对于宕机的服务将其摘除服务列表
  • 服务的负载均衡和路由:注册中心可以根据服务提供者的负载情况和调用方的请求路由选择合适的服务提供者。

注册中心的原理

主要架构
在这里插入图片描述

  • 各个微服务在启动时,将自己的网络地址等信息注册到注册中心,注册中心存储这些数据。
  • 服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口。
  • 各个微服务与注册中心使用一定机制(例如心跳)通信。如果注册中心与某微服务长时间无法通信,就会注销该实例。
  • 微服务网络地址发送变化(例如实例增加或IP变动等)时,会重新注册到注册中心。这样,服务消费者就无需人工修改提供者的网络地址了.

服务注册的实现

  • 服务进程在注册中心注册自己的元数据信息。通常包括主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的信息。
  • 服务注册有两种形式:客户端注册和代理注册。

客户端注册(调用方实现)

  • 客户端注册是服务自己要负责注册与注销的工作。当服务启动后注册线程向注册中心注册,当服务下线时注销自己.
  • 缺点:注册注销逻辑与服务的业务逻辑耦合在一起,如果服务使用不同语言开发,那需要适配多套服务注册逻辑。
    在这里插入图片描述
    代理注册
  • 代理注册由一个单独的代理服务负责注册与注销。当服务提供者启动后以某种方式通知代理服务,然后代理服务负责向注册中心发起注册工作.
    在这里插入图片描述

服务发现

  • 服务发现也分为客户端发现和代理发现

客户端发现(调用方实现)

  • 客户端发现是指客户端负责向注册中心查询可用服务地址,获取到所有的可用实例地址列表后客户端根据负载均衡算法选择一个实例发起请求调用
  • 这种方式非常直接,客户端可以控制负载均衡算法。但是缺点也很明显,获取实例地址、负载均衡等逻辑与服务的业务逻辑耦合在一起,如果服务发现或者负载平衡有变化,那么所有的服务都要修改重新上线。
    在这里插入图片描述

代理发现

  • 代理发现是指新增一个路由服务负责服务发现获取可用的实例列表,服务消费者如果需要调用服务A的一个实例可以直接将请求发往路由服务,路由服务根据配置好的负载均衡算法从可用的实例列表中选择一个实例将请求转发过去即可,如果发现实例不可用,路由服务还可以自行重试,服务消费者完全不用感知。
    在这里插入图片描述

心跳机制

  • 如果服务有多个实例,其中一个实例出现宕机,注册中心是可以实时感知到,并且将该实例信息从列表中移出,也称为摘机。
  • 心跳检测有主动和被动两种方式。
  • 被动检测是指服务主动向注册中心发送心跳消息,时间间隔可自定义,比如配置5秒发送一次,注册中心如果在三个周期内比如说15秒内没有收到实例的心跳消息,就会将该实例从列表中移除。
  • 主动检测是注册中心主动发起,每隔几秒中会给所有列表中的服务实例发送心跳检测消息,如果多个周期内未发送成功或未收到回复就会主动移除该实例
    ————————————————
                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_42774617/article/details/131740758

常用的注册中心

Zookeeper

  • 经典的服务注册中心中间件
    java体系中,大部分的集群环境都是依赖zookeeper管理服务的各个节点

Eureka

  • Netflix开发的服务发现框架
    基于REST的服务 用于服务注册、管理、负载均衡、服务故障转
  • 其组件特点:
    包含两个组件:EurekaServer 和 EurekaClient
    EurekaServer提供注册服务,服务节点的信息可以在界面中直观的看到
    允许在注册服务时,自定义实现检查自身状态的是够健康的方法
    EurekaClient简化与EurekaServer的交互,同时也是一个内置的、使用轮询负载算法的负载均衡器

Consule

  • 用于服务发现和配置的工具分布式的,高度可用的,并且具有极高的可伸缩性
  • 提供了功能齐全的控制面板, 主要特点:服务发现、健康检查、键值存储、安全服务通信、多数据中心、ServiceMesh
  • 提供多个数据中心支持,基于Fabio做负载均衡
    八卦池,其中包含给定数据中心的所有节点

Nacos

  • 用于微服务的发现、配置、管理. 更敏捷、容易地构建、交付、管理微服务平台

在这里插入图片描述

注册中心的高可用

  • 在微服务中,注册中心作为一个存储所有服务中心的地方必然不可能是单机的。因为如果注册中心无法使用,那么服务提供者就无法对外暴露自己的服务,消费者也无法获取自己需要调用的服务的具体地址,整个应用将会崩溃。首先需要保证的就是注册中心的高可用。
    一致性和可用性的抉择

一致性和可用性的抉择

  • 根据CAP理论, 分布式系统一般分为CP类型和AP类型

CP类型注册中心

  • Zookeeper是一个典型的CP类型的组件。
  • zookeeper实现了paxos算法,zookeeper集群有一个节点作为leader,如果leader节点挂了zk会通过ZAB协议来进行leader选举,但是在选举的过程中zk是不能对外提供服务的。
  • 而且当因为网络分区导致zk集群出现断裂问题时,由于ZAB协议需要半数以上的节点参与,所以可能会有部分或者全部的zk节点无法对外提供服务。但是zk可以保证所有可用节点都数据都是一致,即使节点崩溃,在恢复后也会和其他节点保持一致,这就是zk牺牲了可用性而保证的强一致性。

AP类型注册中心

  • 而类似与eureka的注册中心则是AP类型的。eureka实现高可用是通过启动多个eureka server服务,每一个eureka server即是提供者也是消费者,每个eureka server将自己作为服务注册给其他的eureka server,这样每个eureka server都是其他server 的replica。eureka这种模式中每个节点都是平等的,不存在leader、flower。
  • 当集群中某一个server节点宕机,请求可以直接转移到其他节点。即使发生了网络分区,尽管不同分区之间无法进行通信,但是在每一个分区内的节点是通信并且可以正常对外提供服务,这样就保证了在server节点宕机的情况下的注册中心的可用性。
  • 而问题在于由于不同分区无法通信,就导致可能一部分节点的数据和另一部分有差别,这就是牺牲了强一致性来换取系统可用性。

注册中心的选择

  • 首先我们应该明确的是其实注册中心的存在与否应该是不能直接影响服务的调用的。服务之间的调用时通过http或者rpc等协议直接调用的,注册中心只是提供一个调用地址。服务是否可以正常使用不能直接靠注册中心节点信息来决定。
  • 即使注册中心出现问题,只要服务本身没有宕机,理论上来说还是应该正常对外提供服务。所以很明显对于我们来说AP类型的注册中心是要优于CP类型的注册中心的
  • 当然在实际实现过程中很多框架都会尽可能的去修补这些问题,比如eureka会定时的同步各个节点的数据,尽可能的做到数据一致性。dubbo的zk注册中心实现过程中也会本地缓存服务信息并不是完全通过zk信息来决定是否剔除服务等。所以实际在选择时还是需要根据自身实际以及是否还有其他需求来确定。

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

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

相关文章

nginx 模块 常见内置变量 location

一、nginx 模块 ngx_http_core_module 核心模块 ngx_http_access_module 访问控制模块 deny allow ngx_http_auth_basic_module 身份验证 小红小名(虚拟用户) ftp也有虚拟用户 ngx_http_gzip_module 压缩模块 ngx_http_gzip_static_modul…

猫头虎分享已解决Bug || 超时错误:TimeoutError: Request timed out after 30000ms.

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

SORA技术报告

文档链接:https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

Dear ImGui的UE5.3集成实践

Dear ImGui一直较为火热,这是一个调试使用并且可以响应快速迭代的Gui库,甚至可以做到在任何代码块中调用API即显示。如果你想更多的了解一下可访问其官方网站:https://www.dearimgui.org/ 那么本文就来在UE5中尝试踩坑使用它。 UE4.26版本 …

LeetCode 2476.二叉搜索树最近节点查询:中序遍历 + 二分查找

【LetMeFly】2476.二叉搜索树最近节点查询:中序遍历 二分查找 力扣题目链接:https://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/ 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 qu…

微服务-微服务Spring Security6实战

1. Spring Security介绍 1.1 Spring Security定义 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框 架。 Spring Security 主要实现了 Authentication (认证,解决 who are you? ) 和…

R语言入门笔记2.6

描述统计 分类数据与顺序数据的图表展示 为了下面代码便于看出颜色参数所对应的值,在这里先集中介绍, col1是黑色,2是粉红,3是绿色,4是天蓝,5是浅蓝,6是紫红,7是黄色,…

公众号怎么线上公证?

公众号迁移有什么作用?只能变更主体吗?公众号迁移的作用可不止变更主体这一个哦!还可以把 A 账号的粉丝、文章素材、违规记录等迁移到 B 账号上。这样一来,你就可以在不失去原有粉丝的情况下,更好地管理和运营公众号啦…

Github 2024-02-23 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-02-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目4Python项目3TypeScript项目1HTML项目1Dart项目1Rust项目1 从零开始构建你喜爱的技术 创建周…

【前端素材】推荐优质后台管理系统XELORO平台模板(附源码)

一、需求分析 后台管理系统网站是指用于管理和控制网站、应用程序或系统后台运行的管理工具。它通常是网站或应用程序的管理者、管理员或内容编辑人员使用的界面,具有一系列功能来管理用户、内容、数据和系统设置。其功能和设计思路可以根据具体需求和系统复杂性有…

mybatis-plus 条件构造器的使用(QueryWrapper、UpdateWrapper和 LambdaQueryWrapper)

1、简介 为了实现简化操作,mybatis-plus 引入条件构造器简化基本 sql 操作,主要使用两种,一种是查询的条件构造器(QueryWrapper),另外一种是(UpdateWrapper),这些条件构造…

群晖NAS DSM7.2.1安装宝塔之后无法登陆账号密码问题解决

宝塔的安装就不在这赘述了,只说下,启动之后默认账号密码无法登陆的问题。 按照上面给出的账号密码,无法登陆 然后点忘记密码,由于是docker安装的,根目录下没有/www/server/panel 。 也没有bt命令 要怎么修改呢。 既然…

pclpy Ransac平面分割算法输出的索引从点云中提取点云的子集

pclpy Ransac平面分割算法输出的索引从点云中提取点云的子集 一、算法原理二、代码三、结果1.sor统计滤波2.Ransac内点分割平面3.Ransac外点分割平面 四、相关数据 一、算法原理 1、Ransac介绍 RANSAC(RAndom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outlier…

Linux遇到黑客入侵,如何应急响应

来自:DevOps技术栈 一、服务器入侵现象 近期有一个朋友的服务器(自己做了网站)好像遭遇了入侵,具体现象是:服务器 CPU 资源长期 100%,负载较高。服务器上面的服务不能正常提供服务。 朋友处理了一会没有解…

反序列化 [NPUCTF2020]ReadlezPHP1

打开题目 直接查看源代码 打开源代码发现了个./time.php?source 访问一下 审计代码: 现存在反序列化语句:$ppp unserialize($_GET["data"]);和执行漏洞:echo $b($a); 发现在__destruct()方法里面有 echo $b($a); 这个是php的…

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增

用友NC65与用友NCC对接集成NC65-凭证列表查询打通凭证新增 数据源平台:用友NC65 用友NC是为集团与行业企业提供的全线管理软件产品,由亚太本土最大的企业管理软件提供商用友公司研发提供,用友NC率先采用J2EE架构和先进开放的集团级开发平台UAP&#xff0…

外星文明会是朋友还是敌人?科学家用AI模拟揭示惊人答案!

引言:人类与外星文明的潜在互动 自古以来,人类就对外太空充满了好奇与向往,无数科幻作品中都描绘了人类与外星文明的潜在互动。然而,这些互动并非总是和平友好的,正如物理学家Stephen Hawking所警告的,盲目…

K线实战分析系列之六:启明星——空方力量减弱信号

KK线实战分析系列之六:启明星——空方力量减弱信号 一、星线二、多种反转形态三、启明星形态四、启明星形态的总结 一、星线 星线在单根K线形态上是属于纺锤线,之所以被称为星线,主要是因为它在行情当中的相对位置,区别于其他纺锤…

Unity(第四部)新手组件

暴力解释就是官方给你的功能;作用的对象上面如: 创建一个球体,给这个球体加上重力 所有物体都是一个空物体,加上一些组件才形成了所需要的GameObject。 这是一个空物体,在Scene场景中没有任何外在表现,因为…

Java零基础 - 条件运算符

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…