SpringCloud 学习总结

学习回顾

1.Maven依赖管理

​ 在微服务项目中,我们一般是先创建一个父项目模块对整个项目的依赖进行版本限定和依赖控制,子模块继承父模块后,不需要再考虑版本和依赖问题,只需要引入相对应的依赖即可。那么在父模块的pom文件中我们可以使用以下标签来对依赖进行管理和版本控制。

<properties></properties>
<dependencyManagement></dependencyManagement>

​ 标签用于对部分需要指定版本的依赖进行版本限定。

​ 标签用于引入依赖,并且进行版本控制和引入管理。设置好后,因为Springboot里自带了常用依赖的版本号,所以子模块引入依赖不需要提供版本号,只需关注在依赖引入上。

2.微服务中服务消费者和服务提供者的关系

概念:

  • 服务提供者:被其他微服务的调用的微服务。

  • 服务消费者:调用其他服务的微服务。

    服务提供者就是指处理用户需求业务,并且提供数据和反馈的微服务应用。而服务消费者就是接收用户的需求后调用消费者来进行用户的需求。

    用户->服务消费者->服务提供者 这样一个流程。

3.服务注册和服务发现

​ 在微服务项目中,我们不再是指定某一个IP地址,某一个端口来进行服务调用,而是通过服务中心,来获取能够提供服务的机器的地址。举个栗子:我们可以拿服务中心比作我们的小区物管,拿微服务应用来比作便利店,假如便利店要进驻小区,那么必须要先向物管注册,然后才能够正常营业。而我们想要找到便利店首先要先问物管,物管告诉你便利店在哪,你就能直接找到。

​ 微服务提供者要先通过服务注册向服务中心注册,然后服务消费者通过服务名向服务中心获取能够提供服务的地址。

服务发现就是新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。

服务注册,就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到1个公共的组件上去

4.服务调用

​ 消费者通过注册中心获取服务提供者的信息后调用提供者,那么这种调用就是服务调用。目前常用的服务调用的工具有Ribbon和OpenFeign,Ribbon是一个客户端负载均衡调用的工具。Ribbon默认的负载均衡的算法为轮训算法,我们也能够通过编写自己的算法来替代轮训算法,通过Ribbon,我们可以负载均衡的调用服务中心上已注册的服务提供者。

5.服务降级,熔断

​ 服务降级:系统有限的资源的合理协调

​ 概念:服务降级一般是指在服务器压力剧增的时候,根据实际业务使用情况以及流量,对一些服务和页面有策略的不处理或者用一种简单的方式进行处理,从而释放服务器资源的资源以保证核心业务的正常高效运行。

​ 服务熔断:应对雪崩效应的链路自我保护机制。可看作降级的特殊情况。

​ 概念:应对微服务雪崩效应的一种链路保护机制,类似股市、保险丝

​ 其实服务降级和熔断不是很细分的话,可以看作一个整体,服务熔断是机制,服务降级是手段

设想一个情况,假如服务A调用B,服务B调用C,那么如果服务C出现异常,那么服务B的请求得不到响应,那么服务B的资源会被消耗殆尽,导致服务A也出现问题,这种就是雪崩效应,由于上游的问题,导致下游压力过大。那么这种时候就需要类似于我们生活中的保险丝一样的功能,当某个服务出现异常或响应慢等情况达到某个阈值,就会触发熔断,那么所有的请求都将不可用,等正常了,再关闭"保险丝",恢复正常的请求调用。

​ 更细看的话,熔断机制能够运行起来,也是因为通过服务降级这个手段。

6.服务网关

​ 由上图可以看出,服务网关的作用是非常关键的,服务网关就像我们微服务的一扇大门,把一切不速之客都挡之门外

​ 服务网关通过一系列的过滤器和断言匹配机制,保护着微服务的安全,同时也能够有效隐藏真实的服务地址。我们也可以把服务网关看作我们和服务提供者的中间商。

7.配置中心

​ 设想一下,假如我们现在有几十个微服务应用,每一个微服务应用都配置了数据库的地址,账户和密码,那么某一天数据库的地址发生了改变,那我们岂不是要停止这几十个微服务应用,然后逐一对配置文件进行修改?这将是个灾难,我相信如果要这么做,那么运维直接Say no不干了。

​ 那么针对这个情况,我们引出一个组件----配置中心。

我们通过配置中心,把一些公有的配置发到服务器上,然后当更新配置后,通过消息队列广播到各个微服务应用上,这样子就能解决以上问题了。当然我们也能够通过配置中心来简便的切换各个开发环境,如测试环境,开发环境和生产环境。

8.链路跟踪

​ 当我们需要对每一个微服务的健康状况进行监控,甚至要细化到接口上的时候,我们就需要一个微服务组件----链路跟踪。

​ 什么是链路跟踪?链路跟踪就像我们路口上一个个监控摄像头,你的车子只要行驶过去,你的速度,驾驶人,车牌等等信息都会被摄像头所获取,那么我们的微服务也一样,链路跟踪能够把我们每一次调用的各种信息都获取到,包括调用方法,调用类,调用时间等。

9.服务限流

​ 服务限流这个词顾名思义就是对微服务应用进行流量限制,常用的组件是阿里巴巴的Sentinel,服务限流细分有两个策略,一个是QPS限流,一个线程数限流。那么就说说QPS限流和线程数限流的区别。

每秒查询率(QPS,Queries-per-second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。

​ 通过以上文字,我们可以知道QPS就是每秒的请求量。那么通过QPS限流的含义就很明显了,就是设置一个QPS的阈值,然后当达到这个阈值后,请求将失败,警告或者排队。

​ 线程数,当请求A过来访问该接口,该请求处理的很慢,还没有返回数据;此时请求B也过来访问该接口,这个时候处理请求B需要额外开启一个线程,请求B则会报错;

​ 我们可以通过一个小小举例来认识QPS和线程数的区别。假设有一个银行,银行内只有一个窗口,外面有很多人想要办理业务就必须通过该窗口来办理,那么QPS限流就是,不管业务窗口能处理多少个业务,他只管把人放进来,当人数超过阈值时,则会把所有人都赶出去,任何业务都无法办理。而线程数限流就是,逐一的把人放进来,当排队的人超过指定的线程阈值,则进行限流。

​ QPS单纯的代表每秒的访问次数,只要访问次数到达一定的阈值,这进行限流操作。

​ 线程数,代表的是每秒内访问该api接口的线程数,如果该接口的操作比较长,当排队的线程数到达阈值的时候,进行限流操作,相反的如果接口的操作很快,即是每秒内的QPS很大,同样不会进行限流操作。

总结

一个完整的微服务包括的组件:注册中心,配置中心,熔断,限流,链路跟踪,路由

在微服务中,有些组件为必须组件(必须启动存在),客户端才能正常调用

  • 必须组件:注册中心,后台服务(Provider)
  • 非必须组件:配置中心,熔断,限流,链路跟踪,路由

SpringCloud 学习总结的更多相关文章

  1. SpringCloud学习之Ribbon

    一.负载均衡与Ribbon 负载均衡,在集群中是很常见的一个“名词”,顾名思义是根据一定的算法将请求分摊至对应的服务节点上,常见的算法有如下几种: 轮询法:所有请求被依次分发到每台应用服务器上,每台服 ...

  2. SpringCloud学习之feign

    一.关于feigin feigin是一种模板化,声明式的http客户端,feign可以通过注解绑定到接口上来简化Http请求访问.当然我们也可以在创建Feign对象时定制自定义解码器(xml或者jso ...

  3. SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)

    前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netfl ...

  4. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  5. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  6. springCloud学习总览

      写完最后一篇特意去看了看第一篇是什么时候写的---2018/11/19,到现在三个月多一点,总的来说这三个月通过<Spring 微服务实战>这本书,算是对微服务进行了一次扫盲学习.   ...

  7. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  8. SpringCloud学习笔记(3):使用Feign实现声明式服务调用

    简介 Feign是一个声明式的Web Service客户端,它简化了Web服务客户端的编写操作,相对于Ribbon+RestTemplate的方式,开发者只需通过简单的接口和注解来调用HTTP API ...

  9. SpringCloud学习笔记(4):Hystrix容错机制

    简介 在微服务架构中,微服务之间的依赖关系错综复杂,难免的某些服务会出现故障,导致服务调用方出现远程调度的线程阻塞.在高负载的场景下,如果不做任何处理,可能会引起级联故障,导致服务调用方的资源耗尽甚至 ...

  10. SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

    简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控.本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化. 项目介绍 sc ...

随机推荐

  1. Color Theme of Emacs

    Choose color theme interactively: M-x customize-themes, or M-x color-theme-select (use key "q&q ...

  2. 移动端 CPU 的深度学习模型推理性能优化——NCHW44 和 Record 原理方法详解

    用户实践系列,将收录 MegEngine 用户在框架实践过程中的心得体会文章,希望能够帮助有同样使用场景的小伙伴,更好地了解和使用 MegEngine ~ 作者:王雷 | 旷视科技 研发工程师 背景 ...

  3. Servelt&&JSP进阶

    Servlet与JSP进阶 来自mkw的视频课程的总结 1.前言 内容包括 掌握Java Web核心特性,Servlet核心对象以及JSP九大内置对象.主要有以下的内容: 请求结构 && ...

  4. Arduino连接L298n驱动板驱动小车的电机

    1.L298N介绍 先来讲讲电机驱动,驱动一般使用L298N,L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vT ...

  5. noip30

    T1 一眼看,觉得是个状压,然而又觉得不太行,去打暴力了,然而暴力都打挂的我biss. 正解: 还是暴力,考虑 \(meet \; in \; the \; middle\) 显然对于每个数,只有三种 ...

  6. .net core 通过动软连接数据库

    .net core 与动软 首先创建asp.net core 或者 .net core 控制台程序.不需急着创建web.config 文件. 通过NuGet加个ado的包 System.Data.Sq ...

  7. CycliBarriar和CountdownLatch(计数器)

    CyclicBarrier可以重复使用,而CountdownLatch不能重复使用. countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行. 是通过一个计数器来实现的,计数器的初 ...

  8. HttpURLConnection 中Cookie 使用

    方式一: 如果想通过 HttpURLConnection 访问网站,网站返回cookie信息,下次再通过HttpURLConnection访问时,把网站返回 cookie信息再返回给该网站.可以使用下 ...

  9. 数据结构解析-HashMap

    概要 HashMap在JDK1.8之前的实现方式 数组+链表,但是在JDK1.8后对HashMap进行了底层优化,改为了由 数组+链表+红黑树实现,主要的目的是提高查找效率. 如图所示: JDK版本 ...

  10. Commons-Collections(一)之list

    Bag Bag继承自Collection接口,定义了一个集合,该集合会记录对象在集合中出现的次数. 假设你有一个包,包含{a, a, b, c}.调用getCount(a)方法将返回2,调用uniqu ...