目录

  • 一、首先看一张springCloud的图片
  • 二、简单介绍下什么是springCloud?
  • 三、为了方便理解假设一个业务场景
  • 四、SpringCloud核心组件Eureka(类似于zookeeper)
  • 五、SpringCloud核心组件:Feign(类似于dubbo)
  • 六、springCloud核心组件:Ribbon
  • 七、SpringCloud的核心组件:Hystrix
  • 八、SpringCloud核心组件:zull(类似于服务器端的nginx)
  • 九、简单总结

一、首先看一张springCloud的图片

二、简单介绍下什么是springCloud?

“Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。” -----来自官网

三、为了方便理解假设一个业务场景

假设现在开发一个电商网站,要实现支付订单功能:流程如下–
1.创建一个订单后,如果用户立刻支付了这个订单,我们需要将这个订单状态更新为(已经支付)
2.扣减相对应的商品库存
3.通知仓储中心,进行发货
4.给用户这次购物怎加相对应的积分

针对上述流程,我们需要有订单服务、库存服务、仓储服务、积分服务,整个流程的大体思路如下:

  1. 用户针对一个订单完成支付后,就回去找订单服务,更新订单状态
  2. 订单服务调用库存服务,完成相应的功能
  3. 订单服务调用仓储服务,完成相应的功能
  4. 订单服务调用积分服务,完成相应的功能

整个过程可以如下图所示:

四、SpringCloud核心组件Eureka(类似于zookeeper)

首先考虑一个问题,订单服务要调用库存服务、仓储服务、积分服务,如何调用呢?
答:订单服务根本不知道上述服务在哪台服务器上,所以没法调用,而Eureka的作用就是来告诉订单服务它想调用的服务在哪台服务器上,Eureka有客户端和服务端,每一个服务上面都有Eureka客户端,可以把本服务的相关信息注册到Eureka服务端上,那么我们的订单服务就可以就可以找到库存服务、仓储服务、积分服务了
我们上述的业务使用Eureka后如下图:
总结:
Eurake客户端:负责将这个服务的信息注册到Eureka服务端中
Eureka服务端:相当于一个注册中心,里面有注册表,注册表中保存了各个服务所在的机器和端口号,可以通过Eureka服务端找到各个服务

五、SpringCloud核心组件:Feign(类似于dubbo)

通过上面的Eureka,现在订单服务确实知道库存服务、积分服务、仓储服务在哪了,但是我们如何去调用这些服务呢,如果我们自己去写很多代码调用那就太麻烦了,而SpringCloud已经为我们准备好了一个核心组件:Feign,接下来看如何通过Feign让订单服务调用库存服务,注意Feign也是用在消费者端的;
订单服务:

库存服务:

没有底层的建立连接、构造请求、解析响应的代码,直接就是用注解定义一个 FeignClient接口,然后调用那个接口就可以了。人家Feign Client会在底层根据你的注解,跟你指定的服务建立连接、构造请求、发起靕求、获取响应、解析响应,等等。这一系列脏活累活,人家Feign全给你干了。

问题来了,Feign是如何做到的呢?其实Feign的一个机制就是使用了动态代理:

六、springCloud核心组件:Ribbon

上面可以通过Eureka可以找到服务,然后通过Feign去调用服务,但是如果有多台机器上面都部署了库存服务,我应该使用Feign去调用哪一台上面的服务呢,这个时候就需要Ribbon闪亮登场了,它在服务消费者端配置和使用,它的作用就是负载均衡,然后默认使用的负载均衡算法是轮询算法,Ribbon会从Eureka服务端中获取到对应的服务注册表,然后就知道相应服务的位置,然后Ribbon根据设计的负载均衡算法去选择一台机器,Feigin就会针对这些机器构造并发送请求,如下图所示:

七、SpringCloud的核心组件:Hystrix

在微服务架构里,一个系统会有多个服务,以本文的业务场景为例:订单服务在一个业务流程里需要调用三个服务,现在假设订单服务自己最多只有100个线程可以处理请求,如果积分服务出错,每次订单服务调用积分服务的时候,都会卡住几秒钟,然后抛出—个超时异常。

分析下这样会导致什么问题呢?如果系统在高并发的情况下,大量请求涌过来的时候,订单服务的100个线程会卡在积分服务这块,导致订单服务没有一个多余的线程可以处理请求,这种问题就是微服务架构中恐怖的服务器雪崩问题,这么多的服务互相调用要是不做任何保护的话,某一个服务挂掉会引起连锁反应,导致别的服务挂掉,上述描述如下图所示:
但是我们想一下,即使积分服务挂了,那订单服务也不应该挂掉啊,我们只要让存储服务和仓储服务正常工作就可以了,至于积分服务我们后期可以手动给用户加上积分,这个时候就轮到Hystrix闪亮登场了,Hystrix是隔离、熔断以及降级的一个框架,说白了就是Hystrix会搞很多小线程池然后让这些小线程池去请求服务,返回结果,Hystrix相当于是个中间过滤区,如果我们的积分服务挂了,那我们请求积分服务直接就返回了,不需要等待超时时间结束抛出异常,这就是所谓的熔断,但是也不能啥都不干就返回啊,不然我们之后手动加积分咋整啊,那我们每次调用积分服务就在数据库里记录一条消息,这就是所谓的降级,Hystrix隔离、熔断和降级的全流程如下:

八、SpringCloud核心组件:zull(类似于服务器端的nginx)

该组件是负责网络路由的,假设你后台部署了几百个服务,现在有个前端兄弟,人家请求是直接从浏览器那儿发过来的。打个比方:人家要请求一下库存服务,你难道还让人家记着这服务的名字叫做inventory-service,并且部署在5台机器上,就算人家肯记住这一个,那你后台可有几百个服务的名称和地址呢?难不成人家请求一个,就得记住一个?哈哈哈

上面这种情况,压根儿是不现实的。所以一般微服务架构中都必然会设计一个网关在里面,像android、ios、pc前端、微信小程序、H5等等,不用去关心后端有几百个服务,就知道有一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。

九、简单总结

Eureka:
服务启动的时候,服务上的Eureka客户端会把自身注册到Eureka服务端,并且可以通过Eureka服务端知道其他注册的服务
Ribbon:
服务间发起请求的时候,服务消费者方基于Ribbon服务做到负载均衡,从服务提供者存储的多台机器中选择一台,如果一个服务只在一台机器上面,那就用不到Ribbon选择机器了,如果有多台机器,那就需要使用Ribbon选择之后再去使用
Feign:
Feign使用的时候会集成Ribbon,Ribbon去Eureka服务端中找到服务提供者的所在的服务器信息,然后根据随机策略选择一个,拼接Url地址后发起请求
Hystrix:
发起的请求是通过Hystrix的线程池去访问服务,不同的服务通过不同的线程池,实现了不同的服务调度隔离,如果服务出现故障,通过服务熔断,避免服务雪崩的问题 ,并且通过服务降级,保证可以手动实现服务正常功能
Zuul:
如果前端调用后台系统,统一走zull网关进入,通过zull网关转发请求给对应的服务
图片总结更清晰:

springCloud五大核心组件介绍相关推荐

  1. springcloud五大神兽之Eureka介绍

    一.springcloud简介 1.0 什么是微服务? ① 业务角度 从业务角度分析,就是将整体项目(传统的一站式应用)按照业务拆分,将每个业务拆分为一个个独立的服务,彻底解除业务模块之间的耦合,每个 ...

  2. 17-爬虫之scrapy框架五大核心组件工作流程及下载中间件介绍04

    scrapy的五大核心组件 引擎(Scrapy) 对整个系统的数据流进行处理, 触发事务(框架核心). 调度器(Scheduler) 用来接受引擎发过来的请求. 由过滤器过滤重复的url并将其压入队列 ...

  3. 深度学习框架太抽象?其实不外乎这五大核心组件

    许多初学者觉得深度学习框架抽象,虽然调用了几个函数/方法,计算了几个数学难题,但始终不能理解这些框架的全貌. 为了更好地认识深度学习框架,也为了给一些想要自己亲手搭建深度学习框架的朋友提供一些基础性的 ...

  4. Scrapy五大核心组件简介

    五大核心组件 scrapy框架主要由五大组件组成,他们分别是调度器(Scheduler),下载器(Downloader),爬虫(Spider),和实体管道(Item Pipeline),Scrapy引 ...

  5. controller怎么调用controller_SpringMVC五大核心组件及调用过程

    Spring Web MVC 五大核心组件 DispatcherServlet 控制器入口 负责分发请求 HandlerMapping 负责根据请求 找到对应的控制器 Controller 真正处理请 ...

  6. jsp调用controller方法_SpringMVC五大核心组件及调用过程

    Spring Web MVC 五大核心组件 DispatcherServlet 控制器入口 负责分发请求 HandlerMapping 负责根据请求 找到对应的控制器 Controller 真正处理请 ...

  7. springCloud五大组件--Gateway

    SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发 ...

  8. 学习 SpringCloud 五大组件后的总结 一

    学习 SpringCloud 五大组件后的总结 一 1.什么是微服务? 把某一功能独立出来单独作为一个进程类似的微小的服务.独立做某件事,与其他的服务直接不影响. 微服务之间的优缺点? 优点:每个服务 ...

  9. Z-Wave技术的五大协议介绍(ZWave中心)

    Z-Wave技术的五大协议介绍 Z-Wave协议是一个低带宽半双工传输协议,它为高可靠性的低功耗网状网络的无线通信而设计.协议的主要目的是在控制单元和一个或多个节点单元之间可靠地传输较短的控制信息. ...

最新文章

  1. AI:2020年6月23日北京智源大会顶级大佬邝子平、李开复 、陆奇、张亚勤、曹勖文进行云上圆桌论坛《探讨AI与创业》
  2. Linux常用命令(第二版) --压缩解压缩命令
  3. erlang精要(4)-等于与不等于
  4. 比特币地址可以查到本人吗_查看每一个地址有多少个比特币
  5. python笔记之函数参数(缺省参数,命名参数,不定长参数)
  6. DHCP服务器的的操作心得
  7. mysql select不走索引_避免写出不走索引的SQL, MySQL
  8. aixdb2安装手册_AIX下安装db2数据库步骤
  9. 类似构建的操作性工作,可以轮流值班
  10. 这十个Python实战项目,让你瞬间读懂Python!
  11. Web渗透测试----4、常见解析漏洞
  12. 耗时30分钟C++制作象棋程序,网友:优秀啊!
  13. STM32F103_study66_The punctual atoms(STM32 Temperature sensor experiment)
  14. 【历史上的今天】3 月 4 日:美团网正式上线;Dropbox 的创始人出生;PS2 游戏机问世
  15. 小程序动态隐藏分享按钮
  16. 图像平滑处理-中值滤波
  17. 手机录制连续点赞并周期执行(免代码)
  18. 支付宝移动支付之IOSApp调用支付宝钱包
  19. QT 中控件缩放比列设置
  20. eclipse导入import git项目

热门文章

  1. 对比传统自建数据库,华为云数据库 RDS for MySQL优势明显
  2. 【回顾九月份第一周】 为什么你的前端工作经验不值钱
  3. 小白怎么入门漫画,难学么?
  4. 安卓浏览器中video组件会显示播放按钮
  5. 江南大学计算机有博士点吗,江南大学新增3个一级学科博士点、13个一级学科硕士点...
  6. 如何开通小程序广告流量主
  7. 事件驱动的HLog写入模型
  8. 希望Revit2014或更高版提供什么API?(调查于2012年6月1日截止)
  9. 收银系统服务器有哪些,收银系统有哪些,国产收银系统十大排名
  10. 电影院选座问题----go