微服务-注册中心

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

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

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

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

微服务架构:
微服务架构是一种分布式系统架构的特定实现方式,它将一个应用程序拆分成一组小型服务,每个服务都运行在自己的进程中,并通过轻量级的通信机制(通常是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.rhkb.cn/news/376710.html

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

相关文章

第一部分:C++入门

目录 前言 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间的使用 3、C输入&输出 4、缺省参数 4.1、缺省参数的概念 4.2、缺省参数的分类 5、函数重载 5.1、函数重载的概念 5.2、C支持函数重载的原理 6、引用 6.1、引用的概念 6.2、引用特性 …

ensp实现ICMP重定向实验

1 概述 ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。路由器也会把初始数据包向它的目的地转发。 2 实验复现 拓扑如下 PC1配…

RedHat Linux8 修改root管理员账户密码命令

RedHat Linux8 修改root管理员账户密码命令: sudo passwd root RedHat重置root管理员密码: 1. 查看Linux系统版本信息 cat /etc/redhat-release2. 重置密码 2.1 进入内核编辑界面 重启Linux系统并出现引导界面,按下键盘上的e键进入内…

ftp服务

文章目录 一、概述1.1 标准模式1.2 被动模式 二、FTP作用与工作原理2.1 FTP的作用和模式以及通信方式2.2 FTP工作原理与流程2.2.1 主动模式的工作原理2.2.2 被动模式的工作原理2.2.3 主动和被动模式的区别 三、搭建和配置FTP服务3.1 安装前准备工作3.1.1 关闭防火墙和增强型安全…

交易平台Zero Hash现已支持SUI交易

Zero Hash是一家领先的加密货币和稳定币基础设施平台,为包括Stripe、Shift4和Franklin Templeton在内的公司提供支持,现在也支持对SUI的访问。此举使Zero Hash的客户及其终端用户能够使用SUI。 提供API和SDK以及专注于无缝连接法币、加密货币和稳定币的…

Linux rsync文件同步工具

scp的不足 1. 性能问题 单线程传输 SCP只使用单线程进行传输,这意味着在传输大文件或大量小文件时,其传输速度和效率可能不如其他多线程工具。 无法压缩数据传输 SCP不支持内置的压缩机制,这在传输大文件时会导致带宽使用效率较低。 2.…

【Python 项目】类鸟群:仿真鸟群

类鸟群:仿真鸟群 仔细观察一群鸟或一群鱼,你会发现,虽然群体由个体生物组成,但该群体作为一个整体似乎有它自己的生命。鸟群中的鸟在移动、飞越和绕过障碍物时,彼此之间相互定位。受到打扰或惊吓时会破坏编队&#xf…

香橙派AIpro:体验强劲算力,运行ROS系统

文章目录 前言一、香橙派AIpro开箱及功能介绍1.1香橙派AIpro开箱1.2香橙派AIpro功能介绍 二、香橙派AIpro资料下载及环境搭建2.1资料下载2.2环境搭建2.3使用串口启动进入开发板2.4使用HDMI线接入屏幕启动 三、部署ROS系统四、香橙派AIpro的使用和体验感受 前言 本篇文章将带体…

查找PPT中某种字体的全部对应文字

本文章的目的是找到某种字体的文字,而不是替换某种字体的文字,也不是将某种字体全部替换为另外一种文字。 第一步:在PPT中按下ALTF11 出现以下窗口 第二步:点击插入->模块 第三步:将以下代码输入到窗体中 Sub F…

[leetcode]partition-list 分隔链表

. - 力扣(LeetCode) class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode *smlDummy new ListNode(0), *bigDummy new ListNode(0);ListNode *sml smlDummy, *big bigDummy;while (head ! nullptr) {if (head->val &l…

钉钉扫码登录第三方

钉钉文档 实现登录第三方网站 - 钉钉开放平台 (dingtalk.com) html页面 将html放在 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>登录</title>// jquery<script src"http://code.jqu…

redis redisson(仅供自己参考)

redis 通过setnx实现的分布式锁有问题 如图&#xff1a; 解决的新的工具为&#xff08;闪亮登场&#xff09;&#xff1a;redisson redisson可重入锁的原理 实现语言lua&#xff1a; 加锁实现脚本语言&#xff1a; 释放锁的脚本语言&#xff1a; 加锁的lua -- 首先判断这个锁…

[GWCTF 2019]我有一个数据库

我起初以为是sql注入 抓包什么都没有 扫描一下吧 全是文件包&#xff0c;找找有没有有用的 没啥用&#xff0c;但是我们还扫到了一个东西 访问phpmuyadmin/index.php发现什么用 然后我把index.php搞掉了发现version CVE-2018-12613 那么我们看看哦 ?targetdb_sql.php%…

hutool处理excel时候空指针小记

如图所示&#xff0c;右侧的会识别不到 参考解决方案&#xff1a; /***Description: 填补空缺位置为null/空串*Param: hutool读取的list*return: 无*Author: y*date: 2024/7/13*/public static void formatHutoolExcelArr(List<List<Object>> list) {if (CollUtil…

SCI一区级 | Matlab实现GJO-CNN-LSTM-Multihead-Attention多变量时间序列预测

SCI一区级 | Matlab实现GJO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测 目录 SCI一区级 | Matlab实现GJO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GJO-CNN-LSTM-Mutilhead-Attention金豺优化算…

【C语言】指针(3):探索-不同类型指针变量

目录 一、字符指针变量 二、数组指针变量 三、二维数组传参的本质 四、函数指针变量 4.1 函数指针变量 4.2 函数指针变量的使用 4.3 函数指针变量的拓展 五、函数指针数组 六、转移表的应用 通过深入理解指针&#xff08;1&#xff09;和深入理解指针&#xff08;2&am…

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串&#xff08;String&…

【HTML入门】第十二课 - iframe框架

在早期没有出现Vue和React之前呢&#xff0c;做管理系统&#xff0c;iframe是非常普遍的技术。比如管理系统左侧有非常多的菜单&#xff0c;然后点击菜单后&#xff0c;右边就要展现不同的页面。 又或者呢&#xff0c;我们看一些网站&#xff0c;他们侧边展示着五彩绚烂的广告&…

docker安装mysql, 虚拟机连接mysql

docker已安装&#xff1a;安装教程docker和docker的安装-CSDN博客docker是容器技术&#xff08;软件&#xff09;&#xff0c;提供标准的应用镜像&#xff08;包含应用&#xff0c;和应用的依赖&#xff09;可以轻松在docker里安装应用&#xff0c;每个应用独立容器。https://b…

如何搭建互联网医院系统源码?医疗陪诊APP开发实战详解

今天&#xff0c;小编将为大家讲解如何搭建一个完整的互联网医院系统源码&#xff0c;并介绍医疗陪诊APP的开发实战。 一、互联网医院系统的架构设计 搭建一个完整的互联网医院系统&#xff0c;需要从架构设计开始。一个典型的互联网医院系统通常包含以下几个核心模块&#xf…