注册中心与配置中心,是分?是合?

news2024/11/15 13:25:53

一零年代初,我还自己动手写过socket连接来做服务注册发现,后来有了zookeeper就方便多了,那时候zookeeper也直接做配置中心使用。后来出现了一些专门的服务注册发现组件如Eureka\etcd\consul,专门的配置中心比如spring cloud config\apollo。但是spring cloud全家桶后来又用nacos把注册发现和配置中心合在一起了。

为什么它们能合在一起用同一个服务提供?

因为本质上,注册中心和配置中心都是数据变化了,各个服务可以实时感知。对注册中心来说,服务状态作为了一种特殊的数据。它们核心都在做一件事:数据变化动态感知。

61729435b674099cde0d7e06bcc64e33.png

zookeeper采用的是基于会话的长连接,wacher监听机制,对变更事件进行发布监听。zookeeper能承载的连接数是可扩展的。咱们使用基于zookeeper的框架,比如dubbo\hadoop这些,都需要在客户端配置zookeeper集群节点,比如:

server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

如果连服务端采用的是随机数算法,即随机选一台服务器进行长连接的话,服务端数量增加,可支持的客户端就可以增加。

但是zookeeper能承载的数据量因为数据模型类似于文件系统,是树状结构,不易于分割,所以受限于硬件。

配置中心在业务上是有约束的,它必须是一个CP的系统。就是说对数据一致性的要求是要高于可用性的。而zookeeper刚好是一个CP的系统。

为什么要将注册中心与配置中心分开?

zookeeper所谓的配置中心和etcd配置中心是一个道理。

将etcd拆开来看,ETC +D(distributed),也就是为分布式系统存储配置信息(这可能和小部分开发者认为的etcd的作用有些出入,很多人潜意识认为etcd就是用于服务发现、发布订阅等,其实这和配置信息没有冲突),当然这个配置信息功能又和业务侧使用的apolo等配置中心有些差异,apolo等配置中心主要用于最上层的业务开发的信息配置,而ETCD则是用于服务注册中心等基本架构的配置。

业务开发的信息配置相比较而言,虽然同样需要数据变更感知,但是数据结构上灵活性大,存储上也更灵活。所以出现了专门的配置中心,比如spring cloud config将数据存储在git仓库中,apollo存储在数据库中。但是它们依赖于注册发现,比如apollo架构上就依赖于eureka。

e1bf2bc054d9e4656ba75221b9495d19.png

而只作为注册中心的Eureka不需要像zookeeper一样既可以注册永久节点又可以注册临时节点。Eureka只支持注册临时节点。它是一个AP的系统。

为什么spring cloud全家桶后来又用nacos把注册发现和配置中心合在一起了?

Nacos在注册时可以选择注册临时节点或者永久节点,如果在Nacos上注册临时节点,那么Nacos就是AP服务,保证高可用。如果Nacos上注册永久节点,那么Nacos就是CP服务,保证数据一致性。有了这个条件,距离配置中心,只差一个支持数据库这样的外部存储。

3e7d82332739c01f6bf1d9cc0df268b4.png

而现代微服务架构更倾向于一体化解决方案,同时兼顾高可用性、‌数据一致性、‌集群扩展性以及多地域部署和容灾支持,‌构建一个功能丰富、‌易于使用的平台。两个功能同时提供,总体成本更低,维护性更好。

总结

注册中心与配置中心核心都是数据变化动态感知,但使用场景不同。其演变过程经历了根据不同的开发场景进行针对性设计的过程,最终经过对前面设计的去粗取精,结合现代微服务架构的特点进行了一体化设计。

其他

在实际使用eureka的过程中出现过两次线上问题。两次线上问题的本质原因是eureka服务端资源不足,造成排队上下线。

0641185464d24cefadae28046e0b7e4b.png

第一次问题是在服务上线时,我猜测线程池队列应该已经溢出,任务直接丢弃了。当时有提过需要加大Eureka的资源,但是负责同学说资源够用,因为监控覆盖的原因,没有直接证据,所以当时没有处理。

第二次问题是在服务下线时,下线有延迟,之后自动恢复。当时的处理有减小缓存时间从默认30s改成10s。但客户端实际1分多才会真正下线,这个时间不是本质原因。本质还是资源不足,任务排队。后来负责同学找到了资源瓶颈点:JVM限制。进行扩容之后解决。在客户端也做了相应的容灾:如果下线失败,重新执行下线。

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

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

相关文章

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(2)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案(第1批次)(2) 第21题:在一个大型信息系统项目中,项目经理发现尽管已经建立了沟通机制,但团队间的沟通依然不畅,项目风险…

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的语法元素2. 使用了不正确的字符或符号3. JSON 格式错误4. 字符串未正确闭合 四、解决方案与预防措施1. 检查语法元素2. 正确使用符号和字符3. 修正 JSON 格式4. 字符串闭合 五、示例代码和实践建议…

C++基础语法:STL之迭代器

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 C基础:STL概述-CSDN博客 上一篇梳理了一些同STL有关的概念.同时对理解迭代器需要的类包含,内部类,链表等内容做了分析,这篇从<C Prime Plus> 6th Edition(以下称"本书")的P684,大标题16.4泛型编…

Sortable.js板块拖拽示例

图例 代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 页面加载后显示 拖拽效果 源代码 由于js库使用外链&#xff0c;所以会加载一会儿 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&qu…

Pycharm 导入 conda 环境

使用时经常在此处卡壳&#xff0c;在此做个记录。 这个位置选择 conda 安装路径下的 python.exe 文件即可

书生浦语大模型实战营---Linux 基础知识

创建开发机 开建开发机首先填写开发机名称&#xff0c;选择镜像和配置资源&#xff0c;最后选择立即创建 ssh免密钥登陆 1、本地执行ssh-keygen -t rsa&#xff0c;然后一路回车就可以了 2、执行cat ~/.ssh/id_rsa.pub 3、回到开发机平台&#xff0c;在首页点击配置SSH Key…

手机数据恢复篇:如何从 Android 设备内恢复数据

如何从 Android 内部存储恢复数据&#xff1f; 要从 Android 内部存储恢复已删除的文件&#xff0c;您需要一个 Android 内部存储恢复应用或程序。请继续阅读以获取可靠的 Android 数据恢复软件&#xff0c;并让它帮助您从 Android 手机的内部存储恢复数据。 是否有可能恢复 An…

工业大数据是什么?应用工业大数据时面临哪些挑战?

在当今快速发展的工业领域&#xff0c;大数据已成为推动企业转型升级的核心动力。工业大数据&#xff0c;以其独特的价值和潜力&#xff0c;正逐渐改变着传统的生产、管理和决策模式。然而&#xff0c;伴随着大数据的快速发展&#xff0c;一系列挑战也随之浮现。本文将深入探讨…

刷题之单词规律同构字符串(leetcode)

同构字符串 单词规律 两个都是映射关系&#xff0c;用两张哈希表记录互相映射就可以了 同构字符串&#xff1a; class Solution { public:bool isIsomorphic(string s, string t) {//用两张哈希表做映射if(s.size()!t.size()){return false;}unordered_map<char,char&…

零基础学JS之APIS

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

算法day04 位运算 插入排序 二分法 对数器

位运算: 1&#xff09;有一个数组只包含这样的数&#xff0c;有几个数出现偶数次&#xff0c;有1个数出现奇数次&#xff0c;要求时间复杂度不超过o(n),怎么求出现奇数次的数。 使用 ^ 异或运算整个数组&#xff0c;偶数次运算结果为0&#xff0c;只留下最后一个奇数次的数。 …

【零基础】学JS之APIS第四天

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

网络层重点协议—IP协议

在复杂的网络环境中确定一个合适的路径 协议头格式如下&#xff1a; 4位版本号(version) 指定协议的版本&#xff08;IPV4-4,IPV6-6&#xff09; 4位首部长度(header length) IP头部的长度是多少个32bit&#xff0c;也就是length*4的字节数。4bit表示最大的数字是15&#x…

记一次TIDB开启TLS失败导致PD扩容失败案例

作者&#xff1a; Dora 原文来源&#xff1a; https://tidb.net/blog/8ee8f295 问题背景 集群之前由于TIUP目录被删除导致TLLS证书丢失&#xff0c;后续需要重新开启TLS 在测试环境测试TLS开启步骤&#xff0c;导致后续两台PD扩容失败&#xff0c;步骤如下&#xff1a; …

Linux Win 10 Windows上安装Ollama部署大模型qwen2 7b/15配置启动 LangChain-ChatChat 0.2.10进行对话

Win 10 Window安装Ollama部署qwen2 7b LangChain-ChatChat 环境说明 Win 10 Python 3.11.9 LangChain-ChatChat 0.20 Ollama 0.2.10 Qwen2 1.5b/7b Windows 安装Ollama 下载并安装Windows版Ollama https://ollama.com/download#/ 下载大模型qwen2:1.5b或者qwen2:7b 在命令…

电子技术员基础

这是介绍电子技术员必须掌握的基础知识&#xff0c;在维修和测试中可能有所帮助。放在电脑里有几十年了&#xff0c;是我早期在做电子技术员期间做的文档&#xff0c;所有插图都是自己做的&#xff0c;当初学习态度是绝对认真。如果把这股子劲用在考研上呢&#xff0c;... ...&…

Dataset for Stable Diffusion

1.Dataset for Stable Diffusion 笔记来源&#xff1a; 1.Flickr8k数据集处理 2.处理Flickr8k数据集 3.Github&#xff1a;pytorch-stable-diffusion 4.Flickr 8k Dataset 5.dataset_flickr8k.json 6.About Train, Validation and Test Sets in Machine Learning Tarang Shah …

python-28-零基础自学python-json存数据、读数据,及程序合并

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版 知识点&#xff1a; import json引入、 try-except-else return def函数、打开文件、 练习内容&#xff1a; 练习10-11&#xff1a;喜欢的数 编写一个程序&#xff0c;提示用户输入喜欢的数&#xff…

机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习

机器学习一些基本概念&#xff1a; 监督学习 监督学习是机器学习中最常见的形式之一&#xff0c;它涉及到使用带标签的数据集来训练模型。这意味着每条训练数据都包含输入特征和对应的输出标签。目标是让模型学会从输入到输出的映射&#xff0c;这样当给出新的未见过的输入时…

06:串口通信一

串口通信初识 1、串口的基本认识2、串口的电平3、接线方式4、通过单片机向PC发送每隔1s发送一个字符A 1、串口的基本认识 串口也就是接口&#xff0c;称串行通信接口或串行通讯接口(通常指COM接口)&#xff0c;是采用串行通信方式的扩展接口。用来进行数据一位一位地顺序传送。…