微服务架构

2023-11-09


前言

参考资料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》

注册中心用来集中管理微服务,实现服务的注册,发现,检查等功能;


1. 服务发现基础知识

1.1 注册中心与服务发现的联系

  • 注册中心是用来集中管理微服务,实现服务的注册,发现,检查等功能;
  • 服务 A 与服务 B 注册进注册中心 C,形成服务注册表(表里登记了服务 A 和服务 B 的地址等相关信息)。当 A 服务想要访问 B 服务时,可以通过注册中心 C 的服务发现机制,获取服务注册表进而找到服务 B;

1.2 使用 DNS 与负载均衡器发现服务的弊端

基于 DNS 与负载均衡的传统服务发现模型

  • 这种模型适用于在企业数据中心内部运行的应用程序,以及在一组静态服务器上运行少量服务的情况;
  • 对基于云的微服务应用程序不使用,理由如下:
    • 单点故障:如果负载均衡器出现故障,那么依赖它的每个应用程序都会出现故障;
    • 有限的水平可伸缩性:大多数商业负载均衡器使用热插拔模型实现冗余,只能使用单个服务器来处理负载,跨多个服务器水平伸缩负载均衡基础设施的能力有限;
    • 静态管理:大多数传统的负载均衡器不是为快速注册和注销服务设计的。它们使用集中式数据库来存储规则的路由;
    • 复杂:需要手动定义和部署服务的映射规则;

1.3 云中的服务发现应该具备的特点

  • 高可用:如果一个节点变得不可用,集群中的其他节点应该能够接管工作;
  • 点对点:每个节点共享服务实例的状态;
  • 负载均衡:在所有服务实例之间动态地对请求进行负载均衡;
  • 有弹性:务发现的客户端应该在本地缓存服务信息;
  • 容错:需要检测出服务实例什么时候是不健康的,并从可以接收客户端请求的可用服务列表中移除该实例;

1.4 服务发现架构

  • 服务发现需要关注的四个概念:
    • 服务注册;
    • 服务地址的客户端查找;
    • 信息共享;
    • 健康监测;
      传统服务发现架构
  • 这种方法很脆弱,因为服务客户端完全依赖于服务发现引擎来查找和调用服务;

客户端负载均衡架构

1.5 服务治理的概念

  • 在传统的 RPC 远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系;
  • 可以实现:服务调用、负载均衡、容错等,实现服务发现与注册;

1.6 服务注册的概念

  • 在服务注册与发现中,有一个注册中心;
  • 当服务器启动的时候,会把当前自己服务器的信息。如:服务地址通讯地址等以别名方式注册到注册中心上;
  • 另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地 RPC 调用 ;

1.7 RPC 远程调用框架核心设计思想

  • 在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念);
  • 在任何RPC 远程框架中,都会有一个注册中心,用于存放服务地址相关信息(接口地址);

1.8 Eureka 与 Dubbo 的系统架构对比图

Eureka 与 Dubbo 的系统架构对比图

1.9 注册中心的 CAP 理论

  • CAP 含义:
    • C:Consistency 强一致性:注册一个服务,集群下多节点必须全部注册成功后才能进行访问和使用;master节点挂掉了需要等待重新选举成功后才能使用,选举期间服务不可用; (所有节点在同一时间具有相同的服务);
    • A:Availability 可用性:注册一个服务,只要有一个节点注册成功就可以对外提供访问;master节点挂了也可以正常使用; (保证每个请求不管成功或者失败都有响应);
    • P:Partition tolerance 分区容错性:把服务注册到每个节点,增强容错机制 (系统中任意信息的丢失或失败不会影响系统的继续运作);
  • CAP 理论关注粒度是数据,而不是整体系统设计的策略;
  • CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求;因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三大类:
    • CA 原则:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大;
    • CP 原则:满足一致性,分区容忍性的系统,通常性能不是特别高;
    • AP 原则:满足可用性,分区容忍性的系统,通常可能对一致性要求低一些;
  • 经典CAP图

经典CAP图

1.10 AP 架构和 CP 架构

  • AP 架构
    • 当网络分区出现后,为了保证可用性,系统 B 可以返回旧值,保证系统的可用性;
    • 结论:违背了一致性 C 的要求,只满足可用性和分区容错,即 AP;
      AP 架构
  • CP 架构
    • 当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性;
    • 结论:违背了可用性 A 的要求,只满足一致性和分区容错,即 CP;
      CP架构

1.10 目前几种流行的注册中心对比

  • 基础对比
名称 厂商 CAP 模型 控制台管理 对外暴露接口 社区活跃度
Eureka Netflix AP 支持 HTTP 低(2.x 版本闭源)
Nacos Alibaba AP+CP 可切换 支持 HTTP/DNS/UDP
Zookeeper Apache CP 不支持 TCP 客户端
Consul HashiCorp CP 支持 HTTP/DNS
  • 功能与支持性对比
比较项 Eureka Nacos Zookeeper Consul CoreDNS
健康检查 Client Beat TCP/HTTP/MySQL/Client Beat Client Beat TCP/HTTP/gRPC/CMD /
负载均衡 Ribbon 权重/DSL/metadata/CMDB / Fabio RR
雪崩保护 支持 支持 / / /
自动注销实例 支持 支持 支持 / /
监听支持 支持 支持 支持 支持 /
多数据中心 支持 支持 / 支持 /
跨注册中心 / 支持 / 支持 /
Spring Colud 集成 支持 支持 支持 支持 /
Dubbo 集成 / 支持 支持 支持 /
kubernates 集成 / 支持 / 支持 支持

Nacos 服务发现实例模型


2. Eureka

Eureka 是 Netflix 开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的;
Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务发现功能;


3. Nacos

Nacos 致力于解决微服务中的统一配置、服务注册与发现等问题。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理;


4. Zookeeper

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等;


5. Consul

Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。它提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案;



最后

新人制作,如有错误,欢迎指出,感激不尽!
欢迎关注公众号,会分享一些更日常的东西!
如需转载,请标注出处!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务架构 的相关文章

  • SpringCloud概述

    SpringCloud概述 1 SpringCloud是什么 2 SpringCloud和SpringBoot关系 3 Dubbo和SpringCloud技术选型 4 SpringCloud作用 1 SpringCloud是什么 现代化的J
  • Dubbo远程传输协议详解

    前言 上次小编为大家带来了Dubbo调用及容错机制详解 不知道大家有没有去看小编最后留下的问题 欢迎对文章进行评论也希望大家和小编多多交流 今天接着为大家带来Dubbo的内容 传输协议 上次调用机制中并没有涉及Dubbo传输的协议 这次容小
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 教你5步学会用Llama2:我见过最简单的大模型教学

    在这篇博客中 Meta 探讨了使用 Llama 2 的五个步骤 以便使用者在自己的项目中充分利用 Llama 2 的优势 同时详细介绍 Llama 2 的关键概念 设置方法 可用资源 并提供一步步设置和运行 Llama 2 的流程 Meta
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • MQ - KAFKA 高级篇

    kafak是一个分布式流处理平台 提供消息持久化 基于发布 订阅的方式的消息中间件 同时通过消费端配置相同的groupId支持点对点通信 适用场景 构造实时流数据管道 用于系统或应用之间可靠的消息传输 数据采集及处理 例如连接到一个数据库系
  • MQ - KAFKA 基础篇

    1 KAFKA的核心组件 API Producer API 它允许应用程序向一个或多个 topics 上发送消息记录 Consumer API 允许应用程序订阅一个或多个 topics 并处理为其生成的记录流 Streams API 它允许
  • RabbitMQ避免重复消费

    在Java中 可以使用消息队列来实现消息的异步处理 其中常用的消息队列有 RabbitMQ ActiveMQ Kafka 等 什么是幂等性 幂等性是指无论操作执行多少次 都是得到相同的结果 而不会产生其他副作用 在rabbitMQ中 什么是
  • 微服务测试是什么?

    微服务测试是一种特殊的 测试类型 因为它涉及到多个独立的服务 以下是进行微服务测试的一般性步骤 1 确定系统架构 了解微服务架构对成功测试至关重要 确定每个微服务的职责 接口 依赖项和通信方式 了解这些信息可以帮助您更好地规划测试用例和测试
  • 一文图解 Transformer,小白也看得懂(完整版)

    原作者 Jay Alammar 原链接 https jalammar github io illustrated transformer 1 导语 谷歌推出的 BERT 模型在11项NLP任务中夺得SOTA结果 引爆了整个NLP界 而BER
  • Hadoop3.x完全分布式模式下slaveDataNode节点未启动调整

    目录 前言 一 问题重现 1 查询Hadoop版本 2 集群启动Hadoop 二 问题分析 三 Hadoop3 x的集群配置 1 停止Hadoop服务 2 配置workers 3 从节点检测 4 WebUI监控 总结 前言 在大数据的世界里
  • Docker与微服务:构建和部署微服务架构的完整指南

    微服务架构已经成为现代应用开发的主要范式之一 而Docker容器技术则为微服务的构建 部署和管理提供了理想的解决方案 本文将深入探讨如何使用Docker构建和部署微服务架构 提供更多示例代码和细致的指南 以帮助大家更全面地理解和运用这些关键
  • Zookeeper 和 Dubbo 的关系?

    Zookeeper的作用 zookeeper用来注册服务和进行负载均衡 哪一个服务由哪一个机器来提供必需让调用者知道 简单来说就是ip地址和服务名称的对应关系 当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现 但是如果提供服务
  • 消息队列选型:Kafka 如何实现高性能?

    在分布式消息模块中 我将对消息队列中应用最广泛的 Kafka 和 RocketMQ 进行梳理 以便于你在应用中可以更好地进行消息队列选型 另外 这两款消息队列也是面试的高频考点 所以 本文我们就一起来看一下 Kafka 是如何实现高性能的
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • C 库函数 - gmtime()

    描述 C 库函数 struct tm gmtime const time t timer 使用 timer 的值来填充 tm 结构 并用协调世界时 UTC 也被称为格林尼治标准时间 GMT 表示 声明 下面是 gmtime 函数的声明 st
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

    微服务彻底改变了应用程序开发世界 将大型整体系统分解为更小 更易于管理的组件 这种架构风格的特点是独立 松散耦合的服务 带来了从可扩展性 模块化到更高的灵活性等众多优势 DevOps 团队如何最好地利用这种方法来实现最高效率 答案在于理解并
  • spark相关

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门

随机推荐

  • react小练习-antd Form表单和Table表格的交互-Table动态添加数据

    文章目录 功能实现效果 代码背景 代码思路 代码实现 功能实现效果 点击添加按钮 输入表单内容 表单提交后数据动态添加到Table表格里 如图 初始数据 是在dva的mock文件模拟的死数据 点击添加 输入数据 表单提交后 数据添加到表格里
  • Android签名概述

    一 Android签名概述 我们已经知道的是 Android对每一个Apk文件都会进行签名 在Apk文件安装时 系统会对其签名信息进行比对 判断程序的完整性 从而决定该Apk文件是否可以安装 在一定程度上达到安全的目的 给定一个Apk文件
  • JAVA实现蛇形矩阵算法

    JAVA实现蛇形矩阵算法 蛇形矩阵是一种特殊的二维矩阵 其元素按照一定的规律排列成蛇形 这种算法可以通过JAVA编程语言来实现 本文将介绍如何使用JAVA编写代码来生成蛇形矩阵 并给出相应的源代码 蛇形矩阵的生成规则如下 第一行从左到右依次
  • 多租户系统设计

    多租户系统设计 SaaS 的系统分级 SaaS 系统架构成熟度模型的 5 个级别 从 混乱 到 乌托邦 第 0 级 混乱 每次新增一个客户 都会新增软件的一个实例 第 1 级 受控的混乱 所有客户都运行在软件的同一个版本上 而且任何的定制化
  • 当在浏览器中输入一个域名后,会发生什么

    今天 去哪儿网Geely老师分享了他在校招时的一个面试题 当输www qunar com时发生了什么 真不是做广告哈 因为学的并没有很扎实 不能更深更广的分析这个问题 遂 百度一下 发现这篇文章并转载保存下来 同时也分享一下 希望大家可以更
  • vue-cli3.0打包时如何忽略某个第三方依赖包

    前几天接到了用vue重构某个业务模块的需求 常规开发不做讨论 但是在打包时需要排除业务中使用的某个第三方依赖包 代码如下 main js import Vue from vue import Cesium from cesium Cesiu
  • 解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题

    搜索资料的时候发现个小问题 问题描述 在给ThinkPad T490做win7系统时 出现了 windows未能启动 原因可能是最近更改了硬件或软件 的问题 一直启动不来 在系统盘微PE中甚至还会出现 0x490 找不到元素 的问题 如何来
  • cuda安装笔记

    更新2023 3 4 我笔记本用vs编译后老是提示no kernel image is available for execution on the device 一直以为是驱动版本太高了或者cudatoolkit版本太高了 后来才知道是版
  • 【数据挖掘】知识点总结

    一 绪论 什么是数据挖掘 就是通过算法从大量的数据中搜索隐藏在其中的信息 数据挖掘的基本任务 聚类分析 异常检测 关联分析和预测建模 高维性和维灾难 随着维度的增加计算复杂度也随之增加 二 数据 不同的属性类型 标称 例如 邮政编码 定性数
  • 大数据应用——Linux常用的命令

    帮助命令 1 基本语法 help 命令 功能描述 获得shell内置命令的帮助信息 2 案例实操 1 查看cd命令的帮助信息 root hadoop01 help cd 常用快捷键 常用快捷键 功能 ctrl c 停止进程 ctrl l 清
  • Python(十五)读取Excel

    今天来实战演示如何封装读取Excel方法 第一步 准备一个Excel文件 sheet页命名为 login 学习技术交流群 704807680 第二步 编写代码找到Excel文件所在的文件夹路径 path os path dirname os
  • 机器学习算法——混淆矩阵(Confusion Matrix)之鸢尾花实例

    一 理论 什么是混淆矩阵 其实就是把所有类别的预测结果与真实结果按类别放置到了同一个表里 在这个表里我们可以清楚地看到每个类别正确识别的数量和错误识别的数量 混淆矩阵在什么情况下最好呢 答案是类别不平衡时 混淆矩阵是除了ROC曲线和AUC之
  • chatGPT高考作文

    百花齐放 春满人间 吹灭别人的灯 并不会让自己更加光明 阻挡别人的路 也不会让自己行得更远 这是一句古老而智慧的话语 告诉我们要尊重和包容他人 要与人和睦相处 要共同进步 同样的道理 也适用于文化的交流和发展 文化是一个民族的灵魂 是一个国
  • 华为OD机试真题-不爱施肥的小布

    题目描述 某农场主管理了一大片果园 fields i 表示不同果林的面积 单位 m 2 现在要为所有的果林施肥且必须在n天之内完成 否则影响收成 小布是果林的工作人员 他每次选择一片果林进行施肥 且一片果林施肥完后当天不再进行施肥作业 假设
  • C++复合类型

    1 数组 数组声明应该指出元素类型 数组名和元素个数 数组的初始化需要遵循以下规则 a 只有定义数组时才能使用初始化 此后就不能使用了 也不能将一个数组赋给另一个数组 int narray1 4 1 2 3 4 int narray2 4
  • 操作系统 实验二 银行家算法

    题目描述 已知进程 P0 P1 P2 P3 P4 有三类系统资源A B C的数量分别为10 5 7 在T0时刻的资源分配情况如下图所示 1 若进程P1请求资源 发出请求向量Request1 1 0 2 编写程序用银行家算法判断系统能否将资源
  • 【javascript-基础小练习】角度转弧度,已知角度90,转成弧度?

    角转弧度的公式为 jiao 180 pai hu 假设pai的值为 3 14
  • 数据库的事务及变量声明方法

    事务 简单来说事务就是为了保持数据一致性的一种手段 在事务中的sql语句作为一个整体一起向系统提交 要么都执行 要么都不执行 可以回滚到原来的状态 事务的语法 开始事务 begin tran 或者transaction 提交事务 commi
  • Spring为什么不推荐你使用@Autowired ?

    Spring为什么不推荐你使用 Autowired 我们总能发现当使用IDEA写代码的时候 Autowired注解会报黄 我们把鼠标悬停在上面 可以看到这个如下图所示的警告信息 当我们按住alt 回车键 idea就会帮我们修改成这样 我向来
  • 微服务架构

    3 注册中心与服务发现 前言 1 服务发现基础知识 1 1 注册中心与服务发现的联系 1 2 使用 DNS 与负载均衡器发现服务的弊端 1 3 云中的服务发现应该具备的特点 1 4 服务发现架构 1 5 服务治理的概念 1 6 服务注册的概