注册中心(一)

news2024/10/6 6:50:55

注册中心(一)

业务痛点

项目的架构从以前的单体结构发展到现在的微服务。不仅服务的数量变的多了,而且服务都是多节点的部署。

假如在serviceA去调用serviceB,当serviceA会在配置中配置一个serviceB的ip和port进行通信。

当serviceB有10个节点的时候,我们就需要配置10个ip地址,这样做没有任何问题。

  • 服务配置困难:当serviceB其中的某一个节点挂掉的时候,serviceA去调用的时候,总会发现其中一些有异常。而挂掉的节点无法serviceA无法感知到,会导致serviceA服务的一些调用也出现异常。这种也可以基于域名去做,但是服务的上线与下线每次都需要对域名进行配置。

  • 服务上下线动态感知:当serviceB因为业务的增长,从10个节点扩展到12个节点,那么需要在serviceA中修改之前配置的10个ip地址。那么当serviceB被10个其他服务甚至更多的服务去调用的时候,那么这10个节点都需要进行更新。

如下图中,红色的serviceB是一个挂掉的服务,而虚线的是一个扩容的服务。

在这里插入图片描述

这两个问题如何解决,那么就有人去做一个注册中心的组件。

在这里插入图片描述

注册中心模型

注册中心的出现解决了我们的痛点。那么注册中心都会包含哪些功能呢

  • 服务地址统一管理:管理所有服务的所有地址信息,设计一个key,value形式的集合存储起来。

    serviceA在启动的时候,就会去注册中心去获取serviceB的通讯地址,而不用写到配置文件中了;

    serviceA这个时候只需要维护注册中心的ip和port就可以,根据目标服务的名称去调用目标服务。

  • 服务上下线动态感知:

    通过心跳机制或者探针机制去感知服务的状态,从而维护在注册中心的节点。java中一般是通过socket(TCP)来感知。

在这里插入图片描述

注册中心和服务间的通信

服务和注册中心之间一定存在通信,因为要获取到调用服务的地址。

pull

拉取的方式,serviceA自己维护一个定时器,每隔N秒就会去请求一次最新的serviceB的服务节点列表,然后存储在自己的缓存中。

  • 缺点
    • 有延迟,在上次请求和这次请求之间会存在服务列表不一致的情况出现,最坏的场景是N秒。
    • serviceA去请求注册中心会增加serviceA节点的开销,注册中心也有一定的压力。
  • 优点
    • 注册中心无需推送,注册中心的压力会比较小。

push

注册中心会维护一个通信通道,在serviceB节点地址列表发生变更的时候,主动去通知serviceA。

  • 缺点
    • 服务端需要维护通信通道,在服务节点特别多的时候,注册中心需要不断的检测通信通道是否正常(心跳包)。
  • 优点
    • 实时,维护一个通信通道,在注册中心地址发生变更的时候,第一时间通知到serviceA。

市面上流行的注册中心

  1. nacos
  2. redis
  3. etcd
  4. consule
  5. zookeeper
  6. eureka

注册中心对比

Nacos

数据存储:存储在内存中(ConcurrentHashMap)

通信协议:默认gRPC,支持http

心跳:自带心跳机制

数据变更推送方式:push(udp)、pull

CAP模型:支持AP和CP,默认AP

Eureka

数据存储:存储在内存中NodeDataBase(树形),持久化在文件中, 每次启动都会加载到内存中

通信协议:http

心跳:自带心跳机制

数据变更推送方式:pull(30s)

CAP模型:AP

zookeeper

数据存储:存储在内存中(ConcurrentHashMap)

通信协议:jute协议

心跳:自带心跳机制

数据变更推送方式:watch(push)

CAP模型:CP

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

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

相关文章

如何安装配置hbase

当完成hdfs、zookeeper的安装配置后,现在进入到hbase的安装和配置环节。这样的做的目的之一是要把海量的数据存入到hbase数据库中。JDK版本的要求hbase对JDK版本是有要求的,不是JDK版本越高越好,根据我走过的坑,目前最好的JDK版本…

LeetCode刷题复盘笔记—一文搞懂贪心算法之122. 买卖股票的最佳时机 II问题(贪心算法系列第三篇)

今日主要总结一下可以0贪心算法解决的一道题目,122. 买卖股票的最佳时机 II 题目:122. 买卖股票的最佳时机 II Leetcode题目地址 题目描述: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&am…

深度学习实战 —— LSTM轨迹预测

前言 最近写了一份用LSTM之类的序列模型+SeNet预测轨迹,经过一系列调试效果最后比较理想了。记录下~ 上效果: 一些效果图 训练误差图: 测试误差图: 训练损失: 测试损失: batch平均耗时: 拟合效果:

(day7) 自学Java——面向对象进阶

目录 1.static静态变量 ​编辑 2.继承 ​编辑 3.多态 4.包、final、权限修饰符、代码块 5.抽象类 6.接口 7.内部类 非原创,为方便自己后期复习 1.static静态变量 静态存储位置的数据是共享的 练习:定义数组工具类 需求:在实际开发…

深度卷积对抗神经网络 基础 第二部分 DC-GANs

深度卷积对抗神经网络 基础 第二部分 DC-GANs DC-GANs (DC-GANs Deep convolutional GAN)是基于GANs的一种专门对图片生成的一种模型,其通过卷积操作来进行图片的一些基本操作来实现模型的功能。 激活函数 Activations 激活函数是任何输入…

代码随想录--哈希表章节总结

代码随想录–哈希表章节总结 1. LeetCode242 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s &quo…

高德地图红绿灯读秒是怎么实现的?(二)

通过上一篇高德官方回复,以及一些科技大佬们的脑回路,做了一些简单的回复; 这次好好的从个人研究观点来阐述一下这个论题 目前有两种说法,一种说是靠大数据分析,一种说是靠交管部门数据。 从个人的研究来看&#xff0…

socket 2---TCP编程

目录 一、TCP编程流程 二、函数接口 2.1、监听接口 2.2、发起连接 connect 2.3、接收新连接 accept 2.4、收发接口 三、代码实现 问题: 要是创建多个客户端的话会怎么样呢? 那么怎么去真正解决这个问题呢? 一、TCP编程流程 这里…

数据结构与算法基础(王卓)(9):线性表的应用(有序表合并)(有序,可重复)

PPT:第二章P176; 合并为一个新的整体:有序表的合并(有序,可重复) 线性表: 对于该操作的具体实现的流程设计:(各模块) 创建一个空表C 依次从A或B(中&#…

移动云国产商用密码规模化应用

前言 为深入贯彻落实《密码法》,推动商用密码技术在工业和信息化行业领域的融合应用,工业和信息化部密码应用研究中心组织开展了“首届全国商用密码应用优秀案例征集”工作,并评审选出15项优秀案例。 同时,为持久发挥本次活动的…

CSAPP笔记

目录 第一章 一个典型的硬件组成 从键盘上读取hello指令​编辑 存储器结构示例 相对性能公式 计算机系统抽象 第二章--信息的表示和处理 按位 & | ^ ~ 与逻辑运算 && || 逻辑右移和算术右移 左移 定义计算机如何编码和操作整数的数学定义 补码编码的定义 补码…

【JavaWeb】前端开发三剑客之CSS(上)

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaWeb】 ✈️✈️本篇内容:CSS从零开始学习! 🚀🚀代码托管平台github:JavaWeb代码存放仓库! ⛵⛵作…

擎创动态 | 官宣!与深智城集团正式签约

近日,上海擎创信息技术有限公司与深圳市智慧城市科技发展集团有限公司(以下简称“深智城集团”)就“一体化协同办公平台项目”达成战略合作,签约仪式已圆满完成。 ​深智城集团副总经理罗介平、智城软件公司常务副总经理韩小宇、智…

android 读取assets配置文件

方法1-getAssets().open(“re.properties”) try {Properties props new Properties();props.load(getAssets().open("re.properties"));Log.e(TAG, "className:" props.getProperty("className"));} catch (IOException e) {e.printStackTrace…

支持加密的日记应用程序DailyTxT

本文完成于 12 月下旬,对应的版本为 1.0.10(2022_11_02); 什么是 DailyTxT ? DailyTxT 是一个加密的 Web 日记应用程序,用于写下您当天的故事并轻松地再次找到它们。它是用 Python Flask(后端)和 Vue.JS&am…

23种设计模式(十二)——外观模式【接口隔离】

外观模式 文章目录 外观模式意图什么时候使用外观真实世界类比外观模式的实现外观模式的优缺点亦称:Facade 意图 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容…

一直以来,人们都在探索互联网赋能实体的正确的途径和逻辑

一直以来,人们都在寻找互联网回归实体的正确的方式和方法;一直以来,人们都在探索互联网赋能实体的正确的途径和逻辑。然而,互联网似乎始终都游离于产业之外,似乎始终都超脱于产业之上。尽管经历了PC时代和移动互联网时…

分支预测详解

分支预测用于在微处理器中以流水线效率为目标来预测程序流。有许多方法来实现分支预测,通常在更好的预测结果和增加硬件做预测之间需要进行权衡。 目录 分支预测简介 静态分支预测 动态分支预测 启动分支预测 分支预测简介 要了解分支预测器,就不得…

QT当类有多个不同类型的同名信号时如何处理QOverload?

我们在设计类的信号时也许也会像设计类方法一样,给予多种不同参数类型的重载版本,这样一来我们就可以应对不同类型的参数输入或者输出。 但我们在使用有重载的信号版本时就不那么方便了,QT系统没有那么智能,不会自动匹配&#xff…

【实操案例三】进制转换、异常捕获、输出颜色设置、格式化字符串的设置等实例代码及运行效果图!

任务一:将指定的十进制数转换成二进制、八进制、十六进制 # 任务一:将指定的十进制数转换成二进制、八进制、十六进制 def fun():numint(input(请输入一个十进制整数:))print(num,的二进制数为:,bin(num)) # 第一种写法&#xff…