SpringCloud核心组件讲解-程序员宅基地

技术标签: 微服务  java  spring cloud  

SpringCloud入门

一、微服务与SpringCloud
1.1 微服务

百度百科定义:“一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等。”

概念:通俗的说,微服务就是“微小的服务”,微小体现在服务的体量小,复杂度低。所谓的“服务”,是指完成某一项功能的模块。它的代码量小,易于维护。它可以帮助用户解决一个或一组问题,多个微服务组成的微服务架构是新兴架构。

优点

  • 微服务具有良好的可扩展性,随着业务的增加,微服务的体积和代码量都会急剧增加。此时,我们可以根据业务再次拆分微服务。
  • 微服务可独立开发、部署和运行,且代码量较少,因此启动和运行速度较快。
  • 微服务通常部署在容器上,实现快速构建和部署。
  • 微服务还具有良好的故障隔离能力,服务之间耦合度低。当应用程序中某个微服务发生故障时,不会波及其他服务而导致系统瘫痪。
1.2 SpringCloud

概念:SpringCloud是一款基于Spring Boot实现的微服务框架。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发。服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

组成:SpringCloud包含七大组件,负责不同的功能实现,分别是Eureka、Ribbon、Feign、Hystrix、Config、Zuul、Bus。一个典型的SpringCloud组件使用,架构图如下所示:

在这里插入图片描述

SpringCloud实现:SpringCloud并不是一个拿来即用的框架,它是一种微服务规范,它有两代实现,第一代实现,是SpringCloud Netflix。第二代实现,是SpringCloud Alibaba。

二、SpringCloud组件
2.1 SpringCloud组件总览

​ SpringCloud 包括 Spring Cloud Gateway、Spring Cloud Config、Spring Cloud Bus 等近 20 个服务组件,这些组件提供了服务治理、服务网关、智能路由、负载均衡、熔断器、监控跟踪、分布式消息队列、配置管理等领域的解决方案,它的常用组件如下表所示:

SpringCloud组件 描述
Spring Cloud Netflix Eureka Spring Cloud Netflix 中的服务治理组件,包含服务注册中心、服务注册与发现机制的实现。
Spring Cloud Netflix Ribbon Spring Cloud Netflix 中的服务调用和客户端负载均衡组件,它基于HTTP和TCP实现。微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续将要的Feign,它也是基于Ribbon实现的工具。
Spring Cloud Netflix Hystrix 防止服务故障“雪崩”效应,Spring Cloud Netflix 的容错管理组件,为服务中出现的延迟和故障提供强大的容错能力。
Spring Cloud Netflix Feign Feign是一个声明性web服务客户端,基于 Ribbon 和 Hystrix 的声明式服务调用组件。
Spring Cloud Netflix Zuul Spring Cloud Netflix 中的网关组件,它的核心是一系列Filters,提供了智能路由、访问过滤等功能。
Spring Cloud Gateway 一个基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关框架,它使用 Filter 链的方式提供了网关的基本功能,例如安全、监控/指标和限流等。
Spring Cloud Config Spring Cloud 的配置管理工具,支持使用 Git 存储配置内容,实现应用配置的外部化存储,并支持在客户端对配置进行刷新、加密、解密等操作。
Spring Cloud Bus Spring Cloud 的事件和消息总线,主要用于在集群中传播事件或状态变化,以触发后续的处理,例如动态刷新配置。
Spring Cloud Stream Spring Cloud 的消息中间件组件,它集成了 Apache Kafka 和 RabbitMQ 等消息中间件,并通过定义绑定器作为中间层,完美地实现了应用程序与消息中间件之间的隔离。通过向应用程序暴露统一的 Channel 通道,使得应用程序不需要再考虑各种不同的消息中间件实现,就能轻松地发送和接收消息。
Spring Cloud Sleuth Spring Cloud 分布式链路跟踪组件,通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。
2.2 五大核心组件

​ SpringCloud微服务框架的五大核心组件分别是:Eureka、Ribbon、Feign、Hystrix、Gateway,下面分别介绍这五个组件。

2.2.1 Eureka

​ 在分布式微服务架构中,服务众多,如何确定哪台服务器对应哪个服务,Eureka就是这样一个组件,用于服务注册与发现。Eurake分为两大组成部分,Eureka客户端负责将信息注册到Eureka服务端内,Eureka服务端内有注册表,相当于注册中心,连接各个服务,如下图所示:

在这里插入图片描述

2.2.2 Ribbon

​ 在分布式微服务架构中,为了保证高可用性,通常采用集群架构。一个服务通常布置在多个服务器节点上,通过Ribbon可以起到负载均衡的效果,采用轮询算法,选择最终的服务器节点。下图,表示它的使用:

在这里插入图片描述

2.2.3 Feign

​ Feign是一个声明性web服务客户端,通过Eureka知道各个服务的位置后,可以通过Feign调用服务。只需要在调用服务的地方,写上对应的注解。Fegin会根据注解,与指定的服务建立连接、发起请求、获取响应、解析响应等。Feign底层是动态代理,它的工作流程可以用下图表示:

在这里插入图片描述

2.2.4 Hystrix

​ Hystrix是一个容错管理组件,为服务中出现的延迟和故障提供强大的容错能力。Hystrix是隔离、熔断以及降级的一个框架,能够防止雪崩效应。在一个APP中,通常需要使用到多个服务,多线程高并发的情况下,如果某一个服务环节阻塞出错。Hystrix可以熔断和降级,不至于什么都不做,最后返回一个超时异常,工作原理如下图所示:

在这里插入图片描述

2.2.5 Gateway

​ Gateway是一个基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关框架,它使用 Filter 链的方式提供了网关的基本功能,例如安全、监控/指标和限流等。zull也是一个网关组件,它的核心是一系列Filters,提供了智能路由、访问过滤等功能。由于微服务架构中,服务众多,有时候甚至上百个服务。前端直接访问服务不大现实,这时候可以交给zull,它会根据请求中的一些特征转发给后台的各个服务。Gateway也是API网关的一种实现,它的工作流程如下图所示:

在这里插入图片描述

2.3 其余组件
Config与Bus组件

​ 在分布式微服务架构中,服务的数量以及配置信息日益增多,比如各种服务器参数配置、各种数据库访问参数配置、各种环境下配置信息的不同、配置信息修改之后实时生效等等,传统的配置文件方式或者将配置信息存放于数据库中的方式已无法满足开发人员对配置管理的要求。

​ Spring Cloud Bus 使用一个轻量级的消息代理来构建一个公共的消息主题 Topic(默认为“springCloudBus”),这个 Topic 中的消息会被所有服务实例监听和消费。当其中的一个服务刷新数据时,Spring Cloud Bus 会把信息保存到 Topic 中,这样监听这个 Topic 的服务就收到消息并自动消费。它们的使用如下图所示:

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44183721/article/details/126274228

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue