Spring Cloud笔记 —— 什么是Spring Cloud?

引言:
在写这篇博客之前,其实吧,博主很久之前有过一段时间的Spring Cloud的案例项目开发经验,就是一个案例项目开发而已,也说不上有多高大上,那个时候,我其实也是从众而已罢了,毕竟现在的面试动不动都是分布式,微服务项目等等。

本来嘛,我其实不想如个系列的坑的,毕竟网上这个系列一大堆的,并且有好多的Spring Cloud系列讲的还蛮好,甚至带你对源码进行分析,我觉得这样挺好的,但是吧,我发现我还是自己搞一套吧,毕竟属于自己的才是我的,适合自己的才是符合我的身价,哈哈,开个玩笑,我一个程序员有什么身价。总之就是想写一个属于自己系列的Spring Cloud系列吧。

高并发在面试都已经成为常态了,说句搞笑的话,在校大学生,如果没有实习的,都是自己搭个项目来玩玩罢了,练练手,考虑问题也是在自己在项目开发中碰到的问题罢了,怎么能够和企业有需求任务,有客户的项目需求推动的开发者比呢,就算是有实习的,绝大多数人也接触不到高并发,微服务等。

并且微服务项目在一定的场景下也是不可用的,比如游戏开发项目,用微服务的话,你觉得网络延迟如何,并且微服务项目的数据通讯绝大多少都是通过RPC进行,你可否了解RPC通讯的好处与坏处?

对于Spring Cloud的使用,网络上一直存在争议,有人说使用Spring Cloud利大于弊,有人则说他弊大于利。好吧,题外话说多了,等下人都跑了。那么你觉得如何?
往下看,咱们首先了解Spring Cloud

Spring Cloud

Spring Cloud是一个基于Spring Boot实现的云原生微服务开发工具集,它为开发者提供了在分布式系统环境下快速构建一些常见模式的(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)工具。Spring Cloud利用Spring Boot的开发便利性,简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器等。

Spring Cloud的好处包括但不限于:

  • 简化分布式系统开发:Spring Cloud简化了分布式系统的复杂性,提供了一套快速构建分布式系统的工具,让开发者可以专注于业务逻辑。
  • 配置管理:通过Spring Cloud Config,可以实现集中化的外部配置管理,方便在不同环境下的配置自动化和一致性。
  • 服务发现:Spring Cloud Eureka等组件提供服务注册与发现机制,使得服务间的调用更加灵活和可靠。
  • 断路器:Spring Cloud Hystrix提供断路器功能,防止服务间的级联故障。
  • 智能路由:如Spring Cloud Zuul和Spring Cloud Gateway等组件提供智能路由,实现API网关功能,管理微服务的入口。
  • 分布式跟踪:如Spring Cloud Sleuth和Zipkin等组件提供链路追踪,帮助定位服务间的问题。

Spring Cloud框架包含的组件非常多,这里列举一些常用的:

Spring Cloud Netflix(包含Eureka、Hystrix、Zuul等)
Spring Cloud Config
Spring Cloud Bus
Spring Cloud Consul
Spring Cloud Gateway
Spring Cloud Security
Spring Cloud Sleuth
Spring Cloud Stream
Spring Cloud OpenFeign

解答一个开头的问题,我们所说的,Spring Cloud究竟有没有是我们想的那么好?

Spring Cloud是否真的那么好,这取决于具体的使用场景和需求。对于需要构建大规模微服务架构的企业来说,Spring Cloud提供了一套成熟的解决方案,但对于小型项目或者不需要微服务的场景,使用Spring Cloud可能会带来不必要的复杂性。

微服务架构中的通讯

在微服务架构中,服务之间的通信可以通过多种方式实现,其中远程过程调用(RPC)是一种常见的通信机制。RPC允许一个服务直接调用另一个服务的方法,就像调用本地方法一样,这种方式隐藏了网络通信的复杂性。

RPC通信的好处包括:

  • 强类型接口:RPC通常与IDL(接口定义语言)一起使用,这意味着服务之间的接口是强类型的,可以在编译时检查类型安全。
  • 高效:RPC框架通常针对性能进行了优化,可以使用二进制协议(如gRPC使用的Protocol Buffers)来减少传输数据的大小。
  • 简单直观:对于开发者来说,调用远程服务的方法与调用本地方法类似,降低了学习曲线。
  • 同步或异步:RPC支持同步和异步调用,开发者可以根据需要选择最合适的调用方式。

RPC通讯的缺点:
这个问题,就又回到我们上边的那个点上去了,为啥在游戏项目中,普遍不使用Spring Cloud项目,就这样说吧,你在玩王者荣耀,延迟高一点你都难受,在Sping Cloud项目中,我们会有在发送请求,并等待请求响应的过程,但是作为一个游戏项目,服务玩家那数量可不少,那么对性能的要求也高,并且各个模块直接的数据通讯也是一个问题。

  • 网络延迟:任何基于网络的通信都会受到网络延迟的影响。RPC调用需要在网络上发送请求并等待响应,这可能会导致性能瓶颈,尤其是在高延迟的网络环境中。
  • 可靠性:RPC调用依赖网络,网络不稳定可能会导致调用失败。虽然可以通过重试机制、断路器等方式来提高可靠性,但无法保证信息一定能被传递过去。
  • 耦合:RPC调用可能导致服务之间的耦合增加,因为服务消费者需要知道服务提供者的接口细节。
    -序列化开销:RPC调用涉及到数据的序列化和反序列化,这会带来额外的CPU开销。

在Spring Cloud有几种常用的策略:

  • 服务发现:使用服务发现机制(如Eureka、Consul)来动态地查找服务实例,减少硬编码的服务地址。
  • 负载均衡:使用客户端或服务端负载均衡(如Ribbon、Istio)来分散请求,减少单点压力。
  • 断路器(熔断机制):使用断路器模式(如Hystrix)来防止服务间的级联故障。
  • 重试机制:在合理的范围内实施重试机制,以应对临时的网络问题。
  • 异步通信:在适合的场景下使用异步消息传递(如使用RabbitMQ、Kafka)来减少对实时响应的依赖。

在这里插入图片描述
这个是我们Spring Cloud的架构图。

咱们介绍一下Spring Cloud的核心组件和相关概念,虽然在上述我们都有涉及,这里将提高更为详细的:

配置管理(Spring Cloud Config):

提供集中化的外部配置支持,可以与各种环境无缝地工作,支持配置文件的热加载。

服务发现(Spring Cloud Netflix Eureka):

服务注册与发现机制,允许服务相互查找并通信。Eureka Server作为注册中心,各个微服务作为Eureka
Client注册到Eureka Server上。

客户端负载均衡(Spring Cloud Netflix Ribbon):

在客户端实现负载均衡,可以在进行远程调用时根据某种策略(如轮询、随机)从服务注册中心获取可用服务列表,并选择一个服务实例进行调用。

断路器(Spring Cloud Netflix Hystrix):

提供了断路器功能,防止服务间的级联故障,通过隔离服务的点对点调用,Hystrix可以控制服务间的交互。

声明式服务调用(Spring Cloud OpenFeign):

一个声明式的Web服务客户端,使得编写Web服务客户端变得更加简单。

API网关(Spring Cloud Gateway/Zuul):

提供动态路由、监控、弹性、安全等边缘服务的支持。API网关是微服务架构中的重要组成部分,它负责请求的路由、过滤和转发。

分布式跟踪(Spring Cloud Sleuth/Zipkin):

提供服务链路追踪的解决方案,帮助开发者了解服务间的调用链路和性能瓶颈。

消息驱动的微服务(Spring Cloud Stream):

提供了一套创建消息驱动微服务的模型,包括发布/订阅、消费组和消息分区的概念。

服务总线(Spring Cloud Bus):

用于将分布式系统的节点与轻量级消息系统连接起来,用于广播状态更改或其他管理指令。

分布式事务(Spring Cloud Alibaba Seata):

提供分布式事务解决方案,保证跨服务调用的数据一致性。

安全(Spring Cloud Security):

提供安全相关的功能,如OAuth2认证。

Spring Cloud的架构设计遵循了微服务的核心原则,如服务自治、去中心化治理、弹性设计、配置管理等。通过这些组件和概念,Spring Cloud为开发者提供了一套相对完整的微服务解决方案,帮助开发者在复杂的分布式系统中实现快速开发和部署。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 设计模式系列:代理模式

文章目录 介绍静态代理基本介绍应用实例静态代理优缺点 动态代理基本介绍JDK 中生成代理对象的 API Cglib 代理基本介绍实现步骤 介绍 1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象 2&#xff09…

JOSEF 快速中间继电器 KZJ-4H-L DC220V 导轨安装

快速中间继电器KZJ-4H-LDC220V导轨安装导轨安装是广泛用于电力系统,能够断货开或开通大负载,并且具有较强的断弧能力,适用于交流50/60Hz。电压24380V,直流电压24280V自动控制电路中以增加保护和控制回路的触点数量与触点容量。 KZJ系列快速中…

leetcode 209. 长度最小的子数组(优质解法)

代码&#xff1a; //时间复杂度 O(N) ,空间复杂度 O(1) class Solution {//采用滑动窗口的方法解决public int minSubArrayLen(int target, int[] nums) {int numsLengthnums.length;int minLengthInteger.MAX_VALUE;int left0;int right0;int sum0;while (right<numsLengt…

详解原生Spring框架下的方法切入点表达式

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

C++/Qt读写xml文件

今天介绍C/Qt如何读写xml文件&#xff0c;xml文件一般用于作为配置文件使用。 C C读写xml文件需要借助第三方来实现&#xff0c;比较好用的有tinyxml2和pugixml&#xff0c;对应的网址链接。 tinyxml2 pugixml 以tinyxml2为例&#xff0c;下载后进行解压可以看到以下文件&…

Python---格式化输出与%百分号----涉及转义符 \ 反斜杠的使用

相关链接Python--格式化输出中的转义符号----\t 制表符&#xff08;空格的&#xff09;和\n&#xff08;换行的&#xff09;_唯元素的博客-CSDN博客 Python---字符串&#xff08;用单、双引号、 三单/双引号定义。反斜杠 \ 转义&#xff0c;单在双内/双在单内 &#xff09;-CS…

【电路笔记】-串联和并联电阻

串联和并联电阻 文章目录 串联和并联电阻1、概述2、串联和并联电阻示例13、串联和并联电阻示例2 电阻器可以无限数量的串联和并联组合连接在一起&#xff0c;形成复杂的电阻电路。 1、概述 在之前的教程中&#xff0c;我们学习了如何将各个电阻器连接在一起以形成串联电阻器网…

混沌系统在图像加密中的应用(基于哈密顿能量函数的混沌系统构造1.5)

混沌系统在图像加密中的应用&#xff08;基于哈密顿能量函数的混沌系统构造1.5&#xff09; 前言一、自治非哈密顿系统的构造、动态特性分析1.相关理论基础2.两个四维自治非哈密顿系统3.数值分析 python代码 前言 续接混沌系统在图像加密中的应用&#xff08;基于哈密顿能量函…

重生奇迹MU再生原石

通过坎特鲁提炼之塔的NPC艾尔菲丝提炼成功就可以可获得再生宝石。 重生奇迹mu里的再生原石的用法&#xff1a; 1、打怪获得再生原石去提炼之塔&#xff08;进入坎特鲁遗址的141188位置的传送台&#xff09;。 2、找到&#xff08;艾儿菲丝&#xff09;把原石提炼成再生宝石。…

MySQL安全相关——TDE和数据脱敏功能介绍

MySQL作为一款广泛使用的开源关系型数据库管理系统(RDBMS)&#xff0c;其安全性一直是开发者和企业关注的重点。在MySQL中&#xff0c;有一些与安全相关的功能&#xff0c;其中包括Transparent Data Encryption(TDE)和数据脱敏。本文将对这些功能进行介绍。 一、Transparent Da…

深度学习实战63-利用自适应混合金字塔网络实现人脸皮肤美颜效果,快速部署与实现一键美颜功能

大家好,我是微学AI,今天给大家介绍一下深度学习实战63-利用自适应混合金字塔网络实现人脸皮肤美颜效果,快速部署与实现一键美颜功能。在本文中,我将介绍一种新颖的自适应混合金字塔网络(ABPN),该网络可以实现对超高分辨率照片的快速局部修饰。该网络主要由两个组件组成:一…

最简单的梅花吉凶表

以下是梅花易数吉凶表&#xff0c;使用方式&#xff1a; 随机报2组数字&#xff1a;第1个数除8得余数作为上爻&#xff0c;第2个数除8得余数作为下爻&#xff0c;然后对照以下表格&#xff0c;得到吉凶预测结果。 说明&#xff1a;经过个人不断实践&#xff0c;[大吉转大吉] …

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示功能菜单应用

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示功能菜单应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单介绍掉…

Android : SQLite 增删改查—简单应用

示例图&#xff1a; 学生实体类 Student.java package com.example.mysqlite.dto;public class Student {public Long id;public String name;public String sex;public int age;public String clazz;public String creatDate;//头像public byte[] logoHead;Overridepublic St…

分享一个判断曲线的趋势的Demo

需求背景 最近在处理数据&#xff0c;横坐标是时间&#xff0c;纵坐标是价格&#xff0c;需要判断一段时间内&#xff0c;由这些点绘制成的曲线的走势&#xff0c;比如趋势朝上&#xff0c;趋势朝下&#xff0c;水平调整这三种趋势。尝试了不少方法&#xff0c;下面这个效果还…

以热爱的态度对待生活,就是最自己的温柔

粉色系拼接款羽绒服 90白鸭绒&#xff0b;连帽立领设计 防风又保暖&#xff0c;柔软蓬松舒适感十足 衣服上加了时尚的字母印花元素 袖口做了魔术贴设计 下摆也做了可调节抽绳 防风保暖五部做到实处哦 宽松版型&#xff0c;很耐穿保暖性又很强 简单大方&#xff0c;搭配…

Flutter:视频下载案例

前言 最近在研究视频下载&#xff0c;因此打算一边研究一边记录一下。方便以后使用时查看。 使用到的库有&#xff1a; permission_handler 11.1.0 &#xff1a;权限请求 flutter_downloader 1.11.5&#xff1a;文件下载器 path_provider 2.1.1&#xff1a;路径处理 视频…

基于springboot 图书馆管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

网络编程之套接字

端口 && IP 在学习套接字编程之前&#xff0c;我们必须了解一下前缀知识。首先是IP和端口的作用。 在这之前&#xff0c;我们要明白一件事。那就是把数据从一台主机发送到另一台主机&#xff0c;是目的吗&#xff1f;&#xff1f;&#xff1f;当然不是&#xff01;&a…

Hdoop学习笔记(HDP)-Part.20 安装Flume

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …