前言
现在分布式系统基本上都是标配了,如果你现在还在玩儿单机,没有接触过这些东西的话,权当是为你打开一扇新的大门吧。
大的单体项目
以前我们做单机系统的时候,所有的代码都在一个项目里面,只是不同的模块按照包名来划分的。我们以前做的一个某省的教育项目,有学生信息和就业系统、有高校培训系统、有一个人资系统等一共六个,4个小伙伴都在一个代码里面进行开发,各个系统之间有一定的联系,但是大部分是不相关的,但管理页面在一起。
那时候我们都在一个项目里面码代码,每次启动好几分钟,还有就是包版本冲突问题,搞得真是蛋疼。大家经历过大型的单体项目开发,相信你有体会的。
还有各系统的使用量也不一样,有的比较大。比如学生信息和就业系统,面向的是所有高校,特别是快毕业那段时间,每个学校会上报就业率等信息,还有就是打印报到证呀什么的。有的系统就使用比较少,比如人资、培训系统 使用的基本上就教育厅的一些员工,和部分老师,流量不大,勉强能扛得住。
模拟业务背景
大点的企业,比如做电商的,用户几十万的,日活几万的,背后好几十人上百人的团队在支撑开发,单体系统就不太合适了。
比如现在有一个下单买东西的需求,就需要订单系统、库存系统、仓库系统和积分系统 等来进行处理。如下图:
订单系统、库存系统、仓储和积分系统都是部署到不同的机器上的。
当用户下单了,那么订单服务会发进行扣件库存、通知仓储系统要发货、通知积分系统累加积分的操作。
如果我们此时需要用到 Spring Cloud 来做一个分布式架构的话,那么我们需要什么东西呢?每个东西都是干嘛的呢?
如果使用 Spring Cloud 来实现,需要哪些组件?
Eureka
首先,我们需要一个注册中心 Eureka ,主要负责每个服务的注册和发现。
每个微服务中都有一个Euraka client组件,专门负责将这个服务的服务id(serviceId)、ip、端口等信息注册到Eureka server中。
Euraka Server是一个注册中心,该组件内部维护了一个注册表,保存了各个服务所在的机器ip和端口号等信息。
Feign
其次每个服务还需要一个远程服务调用的组件 Feign ,他主要负责与其他服务建立连接,构造请求,然后发起请求来调用其他服务来获取数据。
Ribbon
然后我们一个服务可能会部署很多台机器,那么我们使用Feign 去调用这个服务的时候,到底把请求发送到哪台机器上去呢?此时我们就需要一个组件来根据一定的策略来选择一台机器。不管怎么选的,总之得选一台机器给 Feign 去调用就好了。
这个组件就是 Ribbon,Ribbon 主要负责就是负载均衡。Ribbon 会定期去从Eureka 注册中心拉取注册中心,缓存到本地,每次发起远程调用的时候,Ribbon 就会从 Eureka 注册表拉取下来的数据中挑选一个机器让 Feign 来发起远程调用。
Zuul
我们这么多的微服务,如果一个服务一个IP,使用方都需要进行调用的话,是不是得知道每一个服务的IP地址才行呢?那得记住多少才行呀,多不好管理。
如果有一个统一的地址,然后根据不同的请求路径来跟我进行转发多少是不,比如 /user/* 是转发到用户服务 ,/product/* 是转向到商品服务等等。我使用的时候,只需要访问同一个IP ,只是路径不一样,就行了。
Spring Cloud 也给我们提供了一个组件,那就是 Zuul ,他是一个网关,就是负责网络的路由的。每个请求都经过这个网关,我们还可以做统一鉴权等等很多事情。
Hystrix
还有一个东西也得说一下,就是 Hystrix,它是一个隔离、熔断以及降级的一个框架 。
在微服务的相互调用过程中,可能会出现被调用服务错误或者超时的情况,从而导致整个系统崩溃不可用,也就是我们常说的服务雪崩问题,Hystrix 的存在就是为了解决这种问题的。
整体架构
我们按照以上使用到的这些组件,来往下单这个流程来套一下:
整个调用流程:
  1. 首先每个服务启动的时候都需要往注册中心进行注册。
  2. 用户先对网关发起下单请求,网关收到请求后发现呃,是下单操作,要到订单系统,然后把请求路由到订单系统。
  3. 订单系统啪啦啪啦一顿操作,然后通过 Feign 去调用 库存系统减库存,通知仓储服务发货,调用积分系统加积分。
  4. 在发起调用之前,订单系统还得通过Ribbon 去注册中心去拉取各系统的注册表信息,并且挑一台机器给 Feign 来发起网络调用。
总结
OK,以上就是整个Spring Cloud 的核心架构了,面试题额,别错过了,朋友。这只是给大家一些普及,面试的时候遇到了可以这么去说的。
回过头来再看看这8道Spring Cloud微服务面试题你能回答对几道?
1.什么是 Spring Cloud?
2.使用 Spring Cloud 有什么优势?
3.服务注册和发现是什么意思?Spring Cloud 如何实现?
4.负载平衡的意义什么?
5.什么是 Hystrix?它如何实现容错?
6.什么是 Hystrix 断路器?我们需要它吗?
7.什么是 Netflix Feign?它的优点是什么?
8.什么是 Spring Cloud Bus?我们需要它吗?
最后
欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!

搞清楚Spring Cloud架构原理的这4个点,轻松应对面试的更多相关文章

  1. Spring Cloud底层原理(转载 石杉的架构笔记)

    拜托!面试请不要再问我Spring Cloud底层原理 原创: 中华石杉 石杉的架构笔记   目录 一.业务场景介绍 二.Spring Cloud核心组件:Eureka 三.Spring Cloud核 ...

  2. 拜托!面试请不要再问我Spring Cloud底层原理[z]

    [z]https://juejin.im/post/5be13b83f265da6116393fc7 拜托!面试请不要再问我Spring Cloud底层原理 欢迎关注微信公众号:石杉的架构笔记(id: ...

  3. [转帖]spring cloud架构

    spring cloud架构 https://www.cnblogs.com/xuzhaoyang/p/11010859.html 我们首先来说一下spring cloud的诞生的背景和意义 1 背景 ...

  4. [转帖]Spring Cloud底层原理

    拜托!面试不要再问我Spring Cloud底层原理 https://mp.weixin.qq.com/s/ZH-3JK90mhnJPfdsYH2yDA 毫无疑问,Spring Cloud 是目前微服 ...

  5. Spring Cloud 架构 五大神兽的功能

    什么是微服务 微服务的概念源于2014年3月Martin Fowler所写的一篇文章“Microservices”. 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调 ...

  6. 不用找了,300 分钟帮你搞定 Spring Cloud!

    最近几年,微服务架构一跃成为 IT 领域炙手可热的话题,大量一线互联网公司因为庞大的业务体量和业务需求,纷纷投入了微服务架构的建设中,像阿里巴巴.百度.美团等大厂,很早就已经开始了微服务的实践和应用. ...

  7. 微服务&spring cloud架构系列汇总

    为了方便查找,把微服务&微服务架构之spring cloud架构系列文章按时间正序整理了一下,记录如下:   1. 微服务架构之spring cloud 介绍 2. 微服务架构之spring ...

  8. Spring cloud架构中利用zuul网关实现灰度发布功能

    蓝绿发布.金丝雀发布(灰度发布).AB测试 首先,了解下这几种发布方式的基础概念. 目前常见的发布策略有蓝绿发布.金丝雀发布(灰度发布).AB测试这几种,在国内的开发者中,对这几个概念有独立的理解.蓝 ...

  9. 拜托!面试请不要再问我Spring Cloud底层原理

    概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...

随机推荐

  1. BootStrap中的collapse插件堆叠效果

    通过网络上的一系列查找,总结出的collapse插件堆叠效果(网上没有找到,只能自己弄了,帮助那些和我遇到一样状况的同学) 首先感谢一位网友的知识总结给了我灵感,在这里先帮他推荐一波(https:// ...

  2. Python3安装mysql模块

    pip3 install mysql 1.错误1 原因:在 Python 3.x 版本后,ConfigParser.py 已经更名为 configparser.py 所以出错! 解决,将模块cp一份为 ...

  3. Day01第一天 Python基础一

      变量 就是将一些运算的中间结果暂时存在内存中,以便后续代码的调用. >命名规则: 1,只能以字母,数字,下划线自由组合,且,不能以数字开头.2,不能是 Python 中的关键字.3,要具有可 ...

  4. 缓冲&缓存&对象池概念的理解

    一).缓冲 作用:缓解程序上下层之间的性能差异. 1).当上层组件的性能优于下层组件时加入缓冲机制可以减少上层组件对下 层组件的等待时间. 2).上层组件不需要等待下层组件接收全部数据,即可返回操作, ...

  5. Deep attention tracking via Reciprocative Learning

    文章:Deep attention tracking via Reciprocative Learning 出自NIPS2018 文章链接:https://arxiv.org/pdf/1810.038 ...

  6. java8 Optional优雅非空判断

    java8 Optional优雅非空判断 import java.util.ArrayList;import java.util.List;import java.util.Optional; pub ...

  7. 菜鸟系列Fabric源码学习 — peer节点启动

    Fabric 1.4 源码分析peer节点启动 peer模块采用cobra库来实现cli命令. Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具.Cobra同时也是一个程序, ...

  8. Reactor和Proactor模型

    背景 前面介绍了I/O多路复用模型,那有了I/O复用,有了epoll已经可以使服务器并发几十万连接的同时,还能维持比较高的TPS,难道还不够吗?比如现在在使用epoll的时候一般都是起个任务,不断的去 ...

  9. 【JavaEE】之MyBatis的ParameterType的使用

    在MyBatis的Mapper.xml文件中,参数的表示方法有两种:一种是使用 “#{XXX}” 的方式表示的,另一种是使用 “${XXX}” 的方式表示的.今天来介绍以下这两种方式的不同之处. 1. ...

  10. 11-kubernetes RBAC 及授权

    目录 RBAC role 和 clusterrole rolebinding 和 clusterrolebinding 公共权限 clusterrole user 创建测试 创建role案例 创建 r ...