微服务-注册中心

news2024/11/15 9:10:16

一. 分布式系统架构与微服务

分布式系统架构和微服务是现代软件开发中常见的两种概念,它们通常结合使用来构建灵活、可扩展和高效的应用程序。

分布式系统架构:
分布式系统架构是指将一个单一的应用程序或服务拆分成多个独立的部分,这些部分可以在不同的计算机、服务器或者地理位置上运行,并通过网络进行通信和协作。分布式系统的设计旨在提高系统的可靠性、可用性和扩展性,同时减少单点故障的影响。

分布式系统架构主要特点:
分解性: 将整体系统分解成多个相互独立的模块或服务。
分布性: 这些模块可以部署在不同的硬件设备上,通过网络进行通信。
并发性: 多个模块可以并发地运行和处理请求。
透明性: 用户和应用程序不需要关心系统的分布性,系统应该提供一致的操作接口。

微服务架构:
微服务架构是一种分布式系统架构的特定实现方式,它将一个应用程序拆分成一组小型服务,每个服务都运行在自己的进程中,并通过轻量级的通信机制(通常是HTTP或消息队列)进行互相调用。每个微服务都专注于一个特定的业务功能,并且可以独立部署、升级和扩展。微服务架构是分布式架构的一种。

微服务架构的特点:
服务化: 将应用程序拆分成多个小型、自治的服务。
分布式管理: 每个服务可以由不同的团队开发、部署和管理。
松耦合: 每个微服务都可以独立开发、测试、部署和扩展,它们之间通过API或者消息传递进行通信,避免了传统单体应用程序中的紧耦合问题。
多语言和技术栈: 每个微服务可以使用最适合其需求的编程语言、数据库和技术栈。
微服务架构通过解耦和自治的服务单元来提高系统的灵活性、可维护性和可扩展性,同时也增加了复杂性和运维的挑战,因此在设计和实施时需要权衡各种因素。

二.什么是注册中心

注册中心:通常指的是分布式系统架构中的一个核心组件,主要用于服务发现和服务治理。注册中心在微服务架构中特别常见。具体来说,注册中心负责管理整个系统中所有的服务实例,包括它们的网络位置(如IP地址和端口号)以及运行状态。

服务实例: 注册在注册中心中的具体服务的运行实例,指的是具体提供某项服务的实际运行实例或者节点。例如,一个微服务架构中的某个具体服务(如用户管理服务)可能会运行多个实例,每个实例都会向注册中心注册自己的位置和状态,以便其他服务可以发现和调用它们。

配置中心: 配置中心用于集中管理和动态更新应用程序的配置信息。它提供了一个存储配置的地方,应用程序在运行时可以从配置中心获取最新的配置。配置中心通常支持配置的版本管理、动态刷新、权限控制等功能,以便于管理和维护应用程序的配置。 比如Nacos、Spring Cloud Config等配置中心,应用程序可以从这些中心获取数据库连接信息、日志级别、业务参数等配置,而不需要硬编码在应用中,从而实现配置和代码的分离。

注册中心与配置中心的区别:
主要功能不同: 注册中心关注服务实例的注册和发现,确保服务之间能够相互发现和通信;配置中心关注应用配置的集中管理和动态更新,确保应用程序在运行时能够获取最新的配置信息。
服务对象不同: 注册中心服务于服务实例,帮助它们相互发现和通信;配置中心服务于应用程序,提供配置管理和动态更新的功能,使得应用配置可以集中管理和动态调整。

三.注册中心主要功能:

服务注册(Service Registration):服务实例启动时,会向注册中心注册自己的信息,包括服务名称、版本号、网络位置(IP地址和端口号)等。注册中心将这些信息存储起来,形成服务注册表(服务注册表是分布式系统中用于管理和存储服务实例信息的重要组件。它通常由服务注册中心(Service Registry)来实现和维护。服务注册表在微服务架构中尤为重要,它使得服务之间的通信变得更加透明和可靠。常见的服务注册表包括ZooKeeper、Nacos,和Netflix的Eureka、Consul、etcd等)。

服务发现(Service Discovery):当服务消费者需要调用某个服务时,它可以向注册中心查询该服务的注册信息。注册中心返回该服务的可用实例列表,消费者可以根据负载均衡策略选择一个实例进行调用,而不需要事先配置服务的位置。

健康检查(Health Check):注册中心会定期检查注册的服务实例的健康状态,比如是否存活、负载情况,是否能够正常处理请求等。服务实例通常会定期发送心跳信号给注册中心,以表明自己的健康状态。如果发现某个服务实例不可用,注册中心将从注册表中移除该实例,以确保消费者不会再将请求发送到不可用的服务实例上。

负载均衡(Load Balancing):一些注册中心会提供负载均衡的功能,通过在多个服务实例之间分发负载,确保系统资源的高效利用。

故障转移和容错(Failover and Fault Tolerance):当某个服务实例发生故障时,注册中心可以快速将流量转移到其他健康的实例,从而提高系统的可用性和稳定性。

四.常见的注册中心:

常见的注册中心包括ZooKeeper、Nacos、Eureka、Consul等,它们通过提供REST API或其他协议与服务实例通信,管理和监控整个系统中的服务。
在这里插入图片描述

一致性算法:指定了每个系统使用的一致性算法。ZooKeeper使用ZAB(ZooKeeper Atomic Broadcast),Nacos和Consul使用RAFT。

服务发现:表示系统是否支持动态服务发现(其他服务通过服务注册中心查询服务信息,从而能够动态地调用其他服务而无需硬编码依赖)。所有四个系统都支持服务发现。

服务注册:表示系统是否支持服务注册(微服务启动时将自身信息注册到服务注册中心,包括服务名称、IP地址、端口号、健康状态等)。所有四个系统都支持服务注册。

健康检查:表示系统是否支持对服务实例的健康状态检查(定期检查服务实例的健康状态,包括运行状态、响应时间等,将不健康的实例从服务发现中移除,避免向其分发请求)。所有四个系统都支持健康检查。

负载均衡:表示系统是否提供负载均衡功能(负载均衡是指在多个服务实例之间分配请求的过程,以确保系统能够处理更多的请求并提高可靠性。比如,将请求均匀地分发到多个服务实例,避免某个实例过载或故障时影响整体服务可用性)。Consul内置了负载均衡,而其他系统大多依赖于客户端实现或第三方组件。

一致性保证:描述系统的一致性级别(系统在数据更新和分布式事务处理中的一致性级别。强一致性意味着在任何时刻,所有节点都能看到最新的数据,而一致性稍低的系统可能会在一段时间内存在数据不一致的情况)。ZooKeeper和Consul提供强一致性,Nacos和Consul提供一致性。

雪崩效应:指系统是否可能在某些条件下导致雪崩效应(多个服务实例在同一时间发生故障或不可用时,可能导致请求在系统中积累,最终导致整个系统不可用的情况。为了避免雪崩效应,系统设计通常包括故障隔离、超时控制、限流等策略)。各系统在架构设计和实现上采取不同措施来避免雪崩效应。

K8s集成:指系统是否直接支持和集成到Kubernetes中(一个系统是否直接支持和集成到Kubernetes容器编排平台中。Kubernetes可以管理和调度大规模的容器化应用,通过其服务发现、负载均衡等功能简化了微服务的部署和管理)。

配置管理:指系统是否提供配置管理功能(集中管理微服务的配置信息,确保不同环境(开发、测试、生产)的配置能够灵活切换和管理,减少人工操作和错误)。

五. 常用注册中心的区别:

Zookeeper: 最早流行的开源分布式协调服务框架之一,提供了分布式配置中心的功能。以高可用,一致性和可靠信著称,需要用户自己来开发实现分布式配置的功能。

ZooKeeper本身提供了一些基础的原语(如创建节点、写入数据、监听节点变化等),可以用于构建更高级的分布式系统和应用。但是,要实现一个完整的分布式配置中心,需要用户编写代码来管理和维护配置信息的存储、读取、更新和同步。这些功能包括:
配置管理:设计和实现配置的存储结构,如何将应用的配置信息存储在ZooKeeper节点上。
配置更新:监控配置的变化,并在配置更新时通知相关的应用程序。
版本控制:确保配置的一致性和可靠性,可能需要实现版本管理机制。
安全性:对配置信息的访问进行权限控制,确保只有授权的应用程序可以读取或修改配置。
因此,尽管ZooKeeper提供了可靠的基础设施来处理分布式系统中的协调问题,但用户仍需要自行开发额外的代码来利用这些基础设施构建特定于自己应用的分布式配置管理功能。

Nocos: 阿里巴巴开源的服务注册中心和配置中心,自带了配置中心功能,提供了更多可视化配置管理工具。

Eureba NetFlix开源的服务注册中心,被广泛应用在Spring Cloud微服务架构中。提供了易于使用的REST API 和web界面,支持基于Region与Zone的服务分组与负载均衡。

Consul: HashiCorp开源的服务注册中心和配置中心,提供了服务发现,健康检查,KV存储和多数据中心功能,有更丰富的健康检查和路由功能与丰富的API和WEB UI。

六.ZAB(ZooKeeper Atomic Broadcast)和RAFT

ZAB(ZooKeeper Atomic Broadcast)和RAFT都是一致性协议,用于确保分布式系统中多个节点之间的数据一致性和顺序性。

ZAB(ZooKeeper Atomic Broadcast):
ZAB是ZooKeeper中使用的一致性协议,它的设计目标是提供高可用性和严格的顺序一致性。ZAB的目标是提供强一致性,即所有节点在同一时间看到相同的数据状态。它通过选举Leader和使用基于日志的复制机制来保证这一点。

ZAB主要特点:
领导者选举: ZooKeeper集群中的一个节点被选举为Leader,负责处理客户端请求和更新操作。
原子广播: Leader接收客户端的写请求,并通过ZAB协议将其原子性地广播给所有的Follower节点。
基于日志的复制: Leader将每一个事务请求转换为一个事务提案,并将这些提案通过一种类似Paxos的协议进行广播,确保所有Follower按照相同的顺序接收和应用这些提案。

RAFT:
RAFT是一种由Diego Ongaro 和 John Ousterhout 提出的分布式一致性算法,目标是提供易理解和易实现的一致性协议。RAFT通过领导者选举和日志复制机制提供了一种可理解和实现的分布式一致性解决方案,广泛用于诸如Nacos和Consul等系统中。

RAFT的主要特点:
领导者选举: RAFT集群中的每个节点都可以是Candidate、Leader或Follower。选举Leader的过程通过投票来完成,确保每个任期内只有一个Leader。
领导者日志复制: Leader负责接收客户端的写请求,并将这些请求作为日志条目追加到其日志中。Leader通过RPC将这些条目复制到所有的Follower节点上。
安全性: RAFT确保只有在大多数节点确认了条目追加操作后,该条目才被视为已提交,从而保证数据的一致性和持久性。

ZAB和RAFT比较:
复杂度与实现: RAFT相对于ZAB来说更易于理解和实现,因此在许多新兴的分布式系统中得到了广泛应用,如Nacos和Consul。
历史与稳定性: ZAB在ZooKeeper中有着长时间的实际应用和稳定性验证,适用于需要强一致性和高可用性的场景。

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

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

相关文章

讲讲 JVM 的内存结构(附上Demo讲解)

讲讲 JVM 的内存结构 什么是 JVM 内存结构?线程私有程序计数器​虚拟机栈本地方法栈 线程共享堆​方法区​注意永久代​元空间​运行时常量池​直接内存​ 代码详解 什么是 JVM 内存结构? JVM内存结构分为5大区域,程序计数器、虚拟机栈、本地…

50、haproxy+keepalive+nginx

keepalivehaproxy 客户端:192.168.168.21haproxy1:192.168.168.43haproxy2:192.168.168.44vip:192.168.168.100nginx1:192.168.168.31nginx2:192.168.168.32haproxykeepalive做高可用nginx做后台haproxy1haproxy2一起操作&#x…

实验发现AI提高了个人创造力,但降低了整体创造力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

从链表中移除在数组中存在的节点 | 力扣题解

⭐简单说两句⭐ ✨ 正在努力的小叮当~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &a…

【自监督学习】iBOT in ICLR 2022

一、引言 论文: iBOT🤖: Image BERT Pre-Training with Online Tokenizer 作者: ByteDance 代码: iBOT 注意: 该方法是在另一个自监督预训练方法基础上的改进,学习之前建议掌握DINO。 特点: 对…

数据结构之初始二叉树(1)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 树型结构 树的概念 与树的有关概念 树的表示形式 树的应用 二叉树 概念 两种特殊的…

MFC流的形式读取图片

1.基于对话框布置控件 2.给控件绑定变量 3.给按钮控件添加响应函数 void CMFC流的形式读取图片Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码//HDC mECGDC; // 设备描述表句柄//CPen mECGDrawPen; // ECG波形画笔//RECT mECGRect; // 在该矩形区域内画…

Three.js相机简明教程

相机校准是 3D 计算机图形学中的一个基本概念,涉及设置虚拟相机以模拟真实世界相机的视角和行为。在 Three.js(一种流行的 3D 渲染 JavaScript 库)中,了解相机校准对于创建逼真且身临其境的 3D 场景至关重要。在本文中&#xff0c…

AIGC是什么,与AI绘画有什么关系,一篇文章带你了解AI绘画的前世今生

在讲解AIGC和AI绘画之前,我们先看看什么是AI以及AI的历史。 AI历史发展轨迹 什么是人工智能 人工智能(Artificial intelligence,简称AI)亦称机器智能,指由人制造出来的机器所表现出来的智能。通常人工智能是指用普通计算机程序来呈现人类智…

ConfigMap-secrets-静态pod

一.ConfigMap 1.概述 ConfigMap资源,简称CM资源,它生成的键值对数据,存储在ETCD数据库中 应用场景:主要是对应用程序的配置 pod通过env变量引入ConfigMap,或者通过数据卷挂载volume的方式引入ConfigMap资源 官方解释…

成为git砖家(1): author 和 committer 的区别

大家好,我是白鱼。一直对 git author 和 committer 不太了解, 今天通过 cherry-pick 的例子搞清楚了区别。 原理 例如我克隆了著名开源项目 spdlog 的源码, 根据某个历史 commit A 创建了分支, 然后 cherry-pick 了这个 commit …

240710_昇思学习打卡-Day22-条件随机场

240710_昇思学习打卡-Day22-条件随机场 在正式开始LSTMCRF序列标注之前,我们先来了解一下条件随机场,以下仅做简单介绍。 CRF全称Conditional Random Field,按照名字来理解,条件随机,随机输入,条件输出。…

vue中父子传递属性值

1、父传子属性值 自定义图库组件 在add.vue中应用tuku组件并给默认值 效果 2、 子传父,逆向赋值 add.vue和第一问中一样 修改tuku组件,传值给add.vue 3、多个传递 效果: 点击两个修改按钮后 4、使用defineModel简化父子传值 其他代码跟…

使用Tkinter库设计实现的中小学校疫情防控入校人员登记检测系统

Tkinter简介 Tkinter是Python标准库中用于GUI图形用户界面开发的工具包,它是基于Tcl/Tk的封装,提供了大量预定义的控件,如按钮、文本框、标签等,非常适合快速原型开发和小型应用的构建。本文将通过一个具体的案例——“中小学校疫…

【java】力扣 合并k个升序链表

文章目录 题目链接题目描述思路代码 题目链接 23.合并k个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表 思路 我在这个题里面用到了PriorityQueue(优先队列) 的知识 Prio…

鸿蒙语言基础类库:【@system.app (应用上下文)】

应用上下文 说明: 从API Version 7 开始,该接口不再维护,推荐使用新接口。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import app from system.app;app.getInfo …

MFC之对话框--重绘元文件

文章目录 实现示例展示需要绘制的窗口/位置控件位置更新下一次示例粗细滑动部分更新 重绘元文件(窗口变化内容消失)方法一:使用元文件方法二:兼容设备方法三:使用自定义类存储绘图数据除画笔外功能处理画笔功能处理 保…

【雷达原理】MIMO雷达技术

一、MIMO雷达原理 1.1 基本概念 多输入多输出(Multiple input multiple output,MIMO)雷达指该雷达具有多个发射天线和多个接收天线。 学术界对 MIMO 雷达的定义中,多输入是指同时发射多种雷达信号波形( 一般是多个天线同时发射不同的波形) ,…

藏着不为人知的泪水

在娱乐圈的璀璨舞台上,每一个光芒四射的背后,藏着不为人知的汗水与泪水。提及#张艺凡 出道位#,这段历程,不仅仅是个人奋斗的见证,更是关于勇气、坚持与自我证明的壮丽篇章。曾几何时,网络的喧嚣声中&#x…

【信息系统项目管理师】高项常见知识点与公式

绩效域、合同、配置、变更、招投标、安全、立项论文考到的话大致业是按下面相关知识点开写 八大绩效域及其要点 团干部策划开公交 合同管理 合同的签订->合同的履行管理->合同的变更管理->合同的档案管理->合同的违约\索赔管理 配置管理 制定配置管理计划配置识…