SpringCloud

SpringCloud组件

  • 服务注册中心/服务治理
    • Eureka:Java 写的,官网停止更新,AP,可视化页面,可以设置自我保护机制开关
    • Zookeeper:CP,Java 写的,临时节点,没有可视化页面
    • Consul:Go语言写的,CP
    • Nacos:
  • 服务调用
    • Ribbon:负载均衡+RestTemplate调用,Eureka 内置了 Ribbon,
    • LoadBalancer
    • Feign:停止更新
    • OpenFeign:可以开启日志功能,查看详细调用过程
  • 服务降级
    • Hystrix:官网停止更新,既可以用在服务端,又可以用在客户端
    • Resilience4j:国内用的比较少
    • Sentinel:阿里巴巴开发,
  • 服务网关
    • Zuul:基于阻塞IO
    • Zuul2:还没有被springcloud整合
    • Gateway:基于非阻塞IO,通信框架是 Netty
  • 服务配置
    • Config
    • Nacos
  • 服务总线
    • Bus:配合 Spring Cloud Config 实现配置的动态刷新
    • Nacos

RestTemplate

提供了多种便捷访问远程 Http 服务的方法。
是一种简单便捷的访问 restful 服务模板类,是 Spring 提供的用于访问 Rest 服务的客户端模板工具类集。

服务治理

SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。
在传统的 RPC 远程调用框架中,管理每个服务与服务之间的依赖关系比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

服务注册与发现

Eureka 采用了 CS 的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server 并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

Eureka 的保护模式

保护模式主要用于客户端和 Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server 将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

为什么会产生 Eureka 自我保护机制

为了防止 EurekaClient 可以正常运行,但是与 EurekaServer 网络不通情况下,EurekaServer 不会立刻将 EurekaClient 服务剔除。自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可保留所有微服务也不盲目注销任何健康的微服务。使用自我保护模式,可以让 Eureka 集群更加健壮、稳定。

Consul

提供了微服务系统中的服务治理、配置中心、控制总线等功能。

  • 服务发现
  • 健康监测
  • KV 存储
  • 多数据中心
  • 可视化 Web 界面

Ribbon

Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具。
提供一系列完善的配置项如:连接超时、重试等。
简单的说,就是在配置文件中列出 Load Balancer 后年所有的机器,Ribbon 会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。

Ribbon和Nginx的区别

  • Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求。
  • Ribbon是本地负载均衡,在调用微服务接口时,会在注册中心上获取信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

Feign

Feign 是一个声明式 WebService 客户端,使用 Feign 能让编写 Web Service 客户端更加简单。
它的使用方法是定义一个服务接口然后在上面添加注解。
Feign 内置了 Ribbon。

Hystrix

用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix额能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
功能:

  • 服务降级 fallback:程序运行异常、超时、服务熔断触发服务降级、线程池/信号量打满
  • 服务熔断 break
  • 服务限流 flowlimit
  • 接近实时的监控

Spring Cloud Gateway

  • 动态路由:能够匹配任何请求属性
  • 可以对路由指定 Predicate (断言)和 Filter(过滤器)
  • 集成 Hystrix 的断路器功能
  • 集成 Spring Cloud 服务发现功能
  • 易于编写的 Predicate(断言)和 Filter(过滤器)
  • 请求限流功能
  • 支持路径重写

Spring Cloud Config

为微服务架构中的微服务提供集中化的外部配置支持。

Spring Cloud Bus

是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了 Java 的事件处理机制和消息中间件的功能。
目前支持 RabbitMQ 和 Kafka。

总线

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个公用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便的广播一些需要让其他连接在该主题上的实例都知道的消息。

Spring Cloud Stream

屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。
应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中的 binder 对象交互。
通过我们配置来 binding(绑定),而 Spring Cloud Stream 的 binder 对象负责与消息中间件交互。

Nacos

naming+configuration+service
注册中心+配置中心
支持AP CP切换
Nacos 默认使用嵌入式数据库实现数据的存储。所以启动多个默认配置下的 Nacos 节点,数据存储是存在一致性问题的。
为了解决这个问题,Nacos 采用了集中式存储的方式来支持集群化部署,目前只支持 MySQL 的存储。

Sentinel

面向原生微服务的流量控制、熔断降级组件

分布式事务

一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题

Seata

是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
1+3组件模型:
全局唯一的事务ID
TC:事务协调器。维护全局和分支事务的状态,驱动全局事务提交或回滚
TM:事务管理器。定义全局事务的范围:开启全局事务、提交或回滚全局事务
RM:资源管理器。管理分支事务处理的资源,与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚

步骤:

  • TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID
  • XID 在微服务调用链路的上下文中传播
  • RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖
  • TM 向 TC 发起针对 XID 的全局提交或回滚决议
  • TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求

AT 模式两阶段提交协议:

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源
  • 二阶段:提交异步化,非常快速的完成。/ 回滚通过一阶段的回滚日志进行反向补偿。

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

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

相关文章

GO学习之 数据库(Redis)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

Python 密码破解指南:10~14

协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【OpenDocCN 饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神,试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 十、加…

VSCode 如何解决 scanf 的输入问题——Code is already running!

文章如何使用 VSCode 软件运行C代码中已经介绍了如何在 VSCode 软件中运行C代码,但最近在使用 scanf 想从键盘输入时,运行代码后显示“Code is already running!”,如下图所示,在输出窗口是无法通过键盘输入的。 解决办法如下&am…

TCP编程流程

目录 1、主机字节序列和网络字节序列 2、套接字地址结构 3、IP地址转换函数 4、TCP协议编程: (1)服务器端: (2)客户端: 1、主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序 大端…

Qt 阴影边框

阴影边框很常见,诸如360以及其他很多软件都有类似效果,了解CSS3的同学们应该都知道box-shadow,它就是来设定阴影效果的,那么Qt呢?看过一些资料,说是QSS是基于CSS2的,既然如此,box-sh…

Docker安装Oracle数据库打开、链接速度很慢

问题: 使用Docker安装Oracle数据库打开、链接速度很慢,明显的在在转圈严重影响效率。 解决: 排查到DNS时,发现宿主机DNS配置清空后,通过JDBC连接目标Oracle数据库速度很快 进入容器中进行测试,发现清空DNS…

【核磁共振成像】方格化重建

目录 一、缩放比例二、方格化变换的基础三、重建时间四、方格化核 一、缩放比例 对于笛卡尔K空间直线轨迹数据可直接用FFT重建,而如果K空间轨迹的任何部分都是非均匀取样的 可用DFT直接重建,有时称为共轭相位重建,但此法太慢不实用。把数据再…

window如何实时刷新日志文件

1 安装windows git 下载地址:Git - Downloading Package (git-scm.com) 2 打开git bash 输入tail.exe -f 日志文件路径

CSS3盒模型+flex

1.盒模型 标准盒模型: wwidthpaddingborderhheightpaddingborder 怪异盒模型(ie盒模型) wwidth包含了(paddingborder)hheight包含了(paddingborder) 2.CSS3弹性盒(重点新版弹性盒) 弹性盒: 设置为弹性盒后,父元素为容器,子元素为项目弹性盒中存在两根轴,默认水平为主轴,垂…

chrom扩展开发配合百度图像文字识别实现自动登录(后端.net core web api)

好久没做浏览器插件开发了,因为公司堡垒机,每次登录都要输入账号密码和验证码。太浪费时间了,就想着做一个右键菜单形式的扩展。 实现思路也很简单,在这里做下记录,方便下次开发参考。 一,先来了解下chro…

浅谈APP自动化测试工具的优势和应用

随着移动应用市场的迅速发展,APP的质量和性能变得至关重要。为了确保APP的稳定性和用户体验,自动化测试工具成为开发者和测试团队的关键利器。那么,APP自动化测试工具的优势和应用是什么?下面,就跟随掌控智能小编一起来看看具体介…

LeetCode——二叉树篇(九)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 669. 修剪二叉搜索树 108. 将有序数组转换为二叉搜索树 538. 把二叉搜索树转换为累加树 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界…

【Jetpack】Navigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )

文章目录 一、页面跳转间的传统的数据传递方式1、传统的数据传递方式 - Bundle 传递数据1、Navigation 组件中的 Bundle 数据传递2、传统数据传递实现步骤3、FragmentA 完整代码示例4、FragmentB 完整代码示例5、执行结果 2、使用 Bundle 传递数据安全性差 二、页面跳转间的传统…

TCP的可靠性之道:确认重传和流量控制

TCP 全称为 Transmission Control Protocol(传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议,其中可靠性是相对于其他传输协议的优势点。TCP 为了确保数据传输的可靠性主要做了以下几点: 发送确…

电脑文件删除了可以找回吗?分享一种简单恢复删除电脑文件办法!

电脑文件删除了可以找回吗?可以。在原理上讲电脑删除的文件是有希望恢复的,因为操作系统在删除文件的时候并会不会立刻将文件彻底删除。当文件被删除的时候,其文件记录被删除,并且被文件占用的磁盘空间被标记为空闲。 这样对于用户…

1.1 VMware Workstation与Kali的安装和配置1

资源见专栏第一篇文章https://blog.csdn.net/algorithmyyds/article/details/132457258 安装VMware 不多加赘述,直接按顺序安装即可。 有以下需注意的地方: 1.建议选择增强型服务; 2.不要加入体验改进计划。是否开启提示更新看你的想法&…

Ubuntu22.0网络/网卡丢失

Ubuntu22.0开机突然连不上网了,右上角网络图标消失了,设置里网络也没有了“有线”,只剩下VPN了,试了好多种办法,最终终于解决了。 看到有些直接用的下面的两条命令,有解决的,不过我这不行。 s…

解决 KylinOS “Could not get lock /var/lib/dpkg/lock”错误

最近,我遇到了 “Could not get lock /var/lib/dpkg/lock”的错误,我既不能安装任何软件包,也不能更新系统。此错误也与“Could not get lock /var/lib/apt/lists/lock”错误密切相关。以下是 Ubuntu 20.04 上的一些样本输出。 Reading package lists… Done E: Could not…

Nvidia Jetson 编解码开发(7)Jetpack 4.x版本Multimedia API 硬件编码开发--输出端对接ROS publish

1.前言 Nvidia Jetson 编解码开发(6)Jetpack 4.x版本Multimedia API 硬件编码开发--输入端对接Camera V4L2采集_free-xx的博客-CSDN博客 基于上篇基于开发 需求: (1)2路Camera采集 + H265编码 (2)2路编码完的H265数据通过ROS 发布出去,上位机播放 2. 开发记录 2…

后端项目开发:分页功能的实现(Mybatis+pagehelper)

分页查询是项目中的常用功能&#xff0c;此处我们基于Mybatis对分页查询进行处理。 引入分页依赖 <!-- pagehelper --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId>…