文章目录

  • 前言
  • SpringCloud
    • 配置
    • 微服务技术栈
    • SpringCloud和Springboot关系
    • Dubbo和SpringCloud技术选型
      • 分布式+服务治理Dubbo
      • Dubbo和SpringCloud对比
    • 分布式结构图
    • 官网的版本问题
    • 学习参考网站
    • Euraka
      • 三大角色
    • Ribbon负载均衡
    • Feign负载均衡
    • Hystrix服务熔断
      • 服务降级
      • 服务监控
      • 服务雪崩
      • 服务熔断
    • Zuul路由网关
    • SpringConfig配置中心
  • 实例
    • 提供者和消费者
    • Eureka服务
      • Eureka集群
      • CAP原则
    • Ribbon
      • 自定义负载均衡算法

前言

记录学习SpringCloud

SpringCloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。(百度百科)

微服务架构核心问题

1.服务很多,客户端怎么访问?

2.服务很多,服务之间如何通信?

3.服务很多,如何治理?服务注册与发现

4.服务挂了怎么办?

解决方案:

1.SpringCloud NetFilx

​ 一站式解决方案

服务多,用API网关zuul组件通信问题,Feign基于httpclient,http同步阻塞 服务注册与发现,Eureka熔断机制,Hystrix

2.Apache Dubbo Zookeeper

半自动需要整合别人的

没有api网关,需要自己找组件,或者自己实现
通信方式Dubbo,RPC
服务注册与发现,Zookeeper
没有,借助Hystrix

3.SpringCloud Alibaba

一站式解决方案

新概念:服务网格,istio

关键:

1.API

2.通信

3.服务注册和发现

4.熔断机制

配置

application.yaml 用户级别的配置

bootstrap.yaml 系统级别的配置 优先度高

微服务技术栈

微服务条目 落地技术
服务开发 Springboot,Spring,SpringMVC
服务配置与管理 Netfilx公司的Archaius,阿里的Diamond
服务注册和发现 Eureka,Consul,Zookeeper
服务调用 Rest,RPC,gRPC
服务熔断器 Hystrix,Envoy
负载均衡 Ribbon,Nginx
服务接口调用(客户端调用服务的简化工具) Feign
消息队列 Kafka,RabbitMQ,ActiveMQ
服务配置中心管理 SpringCloudConfig,Chef
服务路由(API网关) Zuul
服务监控 Zabbix,Nagios,Metrics,Specatator
全链路追踪 ZipKin,Brave,Dapper
服务部署 Docker,OpenStack,Kubernetes
数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit,Kafka等发送接收消息
事件消息总线 SpringCloud Bus

SpringCloud和Springboot关系

Springboot构建微服务,专注于开发微服务

SpringCloud协调微服务,关注微服务协调的治理框架,将Springboot开发的一个个微服务整合起来,提供:配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞选,分布式会话等

Springboot可以离开SpringCloud,但是SpringCloud不能离开Springboot

Dubbo和SpringCloud技术选型

分布式+服务治理Dubbo

成熟的互联网架构:应用服务化拆分+消息中间件

Dubbo和SpringCloud对比

看社区活跃度github

区别

Dubbo Spring
服务注册中心 Zookeeper SpringCloud Netfilx Eureka
服务调用方式 RPC REST API
服务监控 Dubbo-monitor SpringBoot Admin
断路器 不完善 Spring Cloud Netfilx Hystrix
服务网关 Spring Cloud Netfilx Zuul
分布式配置 Spring Cloud Config
服务跟踪 Spring Cloud Sleuth
消息总线 Spring Cloud Bus
数据流 Spring Cloud Stream
批量任务 Spring Cloud Task

最大的区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于Http的REST方式

SpringCloud牺牲了服务调用性能,但是避免了RPC带来的问题,REST比RPC更灵活

分布式结构图

官网的版本问题

学习参考网站

Spring Cloud Netflix: https://springcloud.cc/spring-cloud-netflix.html

Spring Cloud: https://springcloud.cc/spring-cloud-dalston.html

Spring Cloud中国社区: http://springcloud.cn/

Spring Cloud中文网: https://springcloud.cc

Euraka

服务注册与发现

采用的是AP原则

NetFlix的子模块之一

基于REST风格

采用的CS架构,EurekaService作为服务注册功能的服务器,他是服务注册中心

系统中的其他微服务,使用Eureka的客户端连接到EurekaServer并维持心跳连接

心跳:每隔一段时间发送消息,如果没有,就认为死亡

就可以通过心跳来监控各个微服务是否正常运行

Eureka Client是一个java客户端,客户端同时也具备一个内置的,使用轮询负载算法的负载均衡器,在应用启动后,会想EurekaServer发送心跳默认是30秒,如果EurekaServer在多个心跳周期内没有接收到某个节点的心跳,EurkaServer将会从服务注册列表中把这个服务节点移除掉,默认是90秒

一般的步骤是

导入依赖

编写配置文件

开启这个功能@Enable功能

配置类

三大角色

Eureka Service:提供服务注册与发现,zookeeper客户端

Service Provider:将自身服务注册到Eureka中,从而使消费方能够找到

Service Consumer:服务消费方从Eureka中获得注册服务列表,从而找到消费服务

Ribbon负载均衡

NetFlix里的客户端负载均衡的工具

主要提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起,就是在配置文件中列出LoadBalancer(简称LB,负载均衡)后面所有的机器

LoadBalancer,LB,负载均衡

负载均衡有一种方法是轮询,如果有5个服务器,第一个人是第一个服务器,第二个人是第二个服务器,第三个人是第三个服务器,不断轮询,减少每一个服务器的压力

另一种为随机连接

Ribbon作用:

负载均衡简单来说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)

常见的负载均衡软件有Nginx,Lvs(中国开发的linux虚拟服务器)等等apache+tomact也可以

dubbo、Springcloud中均提供了负载均衡,Springcloud的负载均衡算法可以自定义

负载均衡减分分类:

1.集中式LB:

即在服务的消费方和提供方之间使用独立的LB设施,如Nginx(反向代理服务器)由该设施负责把访问请求通过某种粗略转发至服务的提供方

2.进程式LB:

将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器

Ribbon就属于进程内LB,他只是一个类库,集成于消费方进程,消费方通过他来获取到服务提供方的地址

Ribbon通过服务注册中心获得服务列表,然后通过负载均衡算法来选择服务的提供者

Feign负载均衡

Feign是声明式的web serveer客户端,使用Feign提供负载均衡的Http客户端

Feign是通过接口和注解进行微服务访问

Ribbon是通过微服务名字

Feign使代码可读性变高,但是性能稍差一点点

Hystrix服务熔断

用于处理分布式系统的延迟和容错,Hystrix能够保证在一个依赖出问题后,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性

当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个服务预期的,可处理的备选响应,而不是长时间的等待或者抛出调用方法无法处理的异常,这样可以保证了服务调用方的线程不会被长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩

https://github.com/Netflix/Hystrix/wiki

**也就是说,当一连串的服务中有一个服务I崩溃后,服务熔断系统将服务I进行一个复制,但不是复制功能,而进行一个服务替换,也就是将服务I替换成服务I1,这样整体的服务就不会崩溃,服务I1的作用是给客户端返回一些错误信息或者异常信息等情况。**最重要的就是,整体服务不会因为一个服务崩溃,而全盘崩溃

服务降级

当有A,B,C三个服务的时候,A服务爆满,B,C服务很少使用的时候,可以先将B,C关闭,腾出内存给A使用

熔断是在消费者,服务端,某一个服务超时或者异常,引起熔断,

降级是在消费者,客户端,从整体网站请求负载考虑,当某个服务熔断或关闭后,服务不在被使用,但是仍旧正常访问,,可以在客户端可以准备一个FallbackFactory,返回一个默认值(缺省值),整体的服务水平下降了,好歹能用,比直接挂掉强

服务监控

设置一个新的微服务,导入dashboard包,修改端口号, 在主启动类中加入开启注解,服务端需要actuator,还需要增加dashboardbean

http://localhost:9001/hystrix

进入监控页面,

灰色最近10s错误百分比,绿色是成功,黄色超时数,红色失败异常数,蓝色熔断数,青色错误请求数

host服务请求频率,circuit断路状态

服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C又调用其他的微服务,这就是所谓的:扇出。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的雪崩效应

服务熔断

熔断机制是雪崩效应的一种微服务链路保护机制。

当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息

熔断机制的注解是@HystrixCommand

Hystrix作用:

服务降级

服务熔断

服务限流

接近实时的监控

Zuul路由网关

用来隐藏localhost本机地址

包含了对请求的路由过滤两个重要功能

路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。路由是用来跳转

过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。

zuul和Eureka进行整合,将zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

zuul服务最终还是会注册进Eureka

提供:代理+路由+过滤三大功能

https://github.com/Netflix/zuul

用户需要先进入网关才能进入服务

SpringConfig配置中心

用来解决很多微服务自己带着的application.yaml问题,也就是说将多个服务的配置文件放在配置管理中心,方便修改和增加

分为服务端和客户端

客户端是微服务,服务端指配置中心是一个独立的微服务

配置服务器默认采用git来存储配置信息,有助于对环境配置进行版本管理,并可以通过git客户端工具来方便的管理和访问配置内容

功能

集中管理配置文件

不同环境,不同配置,动态化的配置更新,分环境部署,比如/dev/test/prod/beta/release

运行期间动态调整配置,不需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息

当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置

将配置信息以REST接口的形式暴露

首先生成SSH密钥
在想要的位置,创建Git目录
git clone 地址        复制仓库文件
修改文件
git add .     添加修改的文件到缓存区
git status    查看更新了什么文件
git commit -m "first commit" 将修改的文件提交
git push
将文件上传到github

config服务

导包config,actuator,web
写配置文件
启动类开启服务
通过端口号访问
http://localhost:3344/application-dev.yaml
访问格式看文档

配置文件

server:port: 3344
spring:application:name: springcloud-config-servercloud:config:server:git:uri: https://gitee.com/HoneySquid/springclouds.git  # httpsusername: 13191810255password: jinhang1

实例

提供者和消费者

Eureka服务

当注册的服务被突然停止后,会等待30秒后,报错,出现保护机制

如果某一个时刻,一个微服务不可用后,Eureka不会立刻清理掉,而是继续保存该微服务的信息,但是无法访问。

可以使用配置,把自我保护模式禁用,但是不推荐

监控信息

监控信息配置

<!--完善监控信息actuator-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置好后,status的url就可以访问,并且有配置的信息出现

Eureka集群

CAP原则

C:强一致性

A:可用性

P:分区容错性

CAP的三进二:CA,AP,CP,也就是说,会满足2个其中的两个条件,必不可能是3个

nosql和mongdb满足CAP原则

CA:单点集群,满足一致性,可用性的系统,通常可扩展性较差

CP:满足一致性,分区容错性的系统,通常性能不是特别高

AP:满足可用性,分区容错性的系统,通常可能对一致性要求低一些

P是要一定满足的,所以一般是CP或者AP

Zookeeper保证是CP

当向注册中心查询服务列表时候,可以容忍注册中心返回的是几分钟以前的注册信息,但不接受服务直接down掉。zookeeper会出现这种情况,当master节点因为网络故障与其他节点失去联系的时候,剩下的节点会重新进行leader选举。而选举时间很长,30s-120s,而且选举期间整个zk集群都是不可用的,会导致服务瘫痪

Eureka保证是AP

Eureka设计的时候优先保证了可用性,Eureka各个节点都是公平的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务,Eureka的客户端在向某个Eureka注册时,如果发现连接失败,则会自动切换其他节点,只要一个Eureka还在,就能保证注册服务的可用性,只是,查到的信息可能不是最新的。

除此之外,Eureka还有自我保护机制,如果15分钟内超过85%的节点都没有正常心跳,那么Eureka就认为客户端与注册中心发生网络故障,会出现以下情况

1、Eureka不再从注册列表中移除因为长时间没有收到心跳而应该过期的服务

2、Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上(即保证当前节点依然可用)

3、当网络稳定时,当前实例新的注册信息会被同步到其他节点中

因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像Zookeeper那么使整个注册服务瘫痪

Ribbon

自定义负载均衡算法

负载均衡的核心实现为

IRule
实现类
AvailabilityFilteringRule :会先过滤掉,(跳闸)崩溃的服务,剩下的进行轮询
RoundRobinRule 轮询:
RandomRule:随机
RetryRule:会先按照轮询获取服务,如果服务获取失败,则会在指定的时间内进行继承AbstractLoadBalancerRule类

SpringCloud的简单使用相关推荐

  1. 使用SpringCloud构建简单的服务者和消费者

    0.SpringCloud的特点 Springcloud具有下列特点: - 约定优于配置: - 开箱即用,快速启动(springboot可以以jar或war的方式启动) - 适用于多种环境(Pc Se ...

  2. springcloud的简单使用_微服务架构:初识Spring Cloud

    现在无论大小公司,都会讲究微服务设计,无论应用大小,都会进行微服务架构,面试的时候,也会把微服务当成必谈的知识点.那么什么是微服务呢? "微服务"一词源于Martin Fowler ...

  3. 我对spring springcloud的简单理解

    1.说说你对Spring IOC的理解? 1)IOC就是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到Spring容器 中,并由容器根据配置文件去 ...

  4. SpringCloud Gateway入门

    本文是介绍一下SpringCloud Gateway简单路由转发使用. SpringCloud Gateway简介 SpringCloud是基于Spring Framework 5,Project R ...

  5. SpringCloud学习一(回顾之前学的微服务知识点、springcloud入门概述、服务提供者和消费者)

    一.回顾之前,如何学习springcloud 回顾之前的知识? JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot Dubbo ...

  6. SpringBoot_入门-课程简介

    我们主要说SpringBoot的使用和内部原理,SpringBoot场景的整合,包括SpringBoot的配置文件,SpringBoot和日志框架,SpringBoot底层的选择,以及整合使用,Spr ...

  7. 自定义注解事务课程回顾

    你们对事务的基本原理理解了没有,事务的整个原理,声明式事务的原理,就相当于我完全自动化的,他自动通过扫包或者注解,给我进行实现的,这种方式我们都叫做声明式的,还是不够底层,封装的还不够好,今天就有点难 ...

  8. 你准备好了吗,he is coming

    好久不见,CSDN 好久一段时间没有发博客了,这一段时间一直在看一些东西,学习一些技术. 从今天开始我黑某人又回来了,打算在接下来的一段时间开始整理一下,这一段时间学习的东西.大概的话有以下几个方面: ...

  9. Hystrix流程分析及断路器工作原理

    上一篇转载的文章主要讲了Hystrix的应用场景.基础组件概念以及从源码的角度阐述了基本应用.本篇文章主要借鉴官方文档介绍Hystrix的工作流程及断路器的原理,最后说一下与SpringCloud的简 ...

最新文章

  1. Android 四大组件之——Service(一)
  2. python最适合做什么生意赚钱投资小_2018做什么投资小赚钱快(适合穷人做的简单生意)...
  3. pycharm中安装可以贴图片的Markdown插件
  4. 【HM】第2课:JavaScript基础
  5. 转: SMTP 服务器无法识别在 Mac 2011 Outlook 中发送电子邮件时错误。错误 17092...
  6. 项目在linux下运行情况,Linux系统下部署项目的设置方法
  7. 计算机程序设计vb怎么保存,VB编程:读取文本文件和保存文本文件的方法
  8. python在统计专业的应用_Python统计学statistics实战
  9. I/O模型(同步、非同步、阻塞、非阻塞)总结
  10. webstorm中使用nodemon
  11. Kali Linux系统安装
  12. 帝国国王科技大学上机题解
  13. GAN之父离开苹果重返谷歌,SpaceX最新估值达1250亿美元,美国官方公布UFO进展,今日更多大新闻在此...
  14. 埃拉托斯特尼(Eratosthene)筛法
  15. 推特CEO继任者曝光:带着老婆孩子睡公司,钢铁侠20年嫡系,现在掌舵挖洞公司...
  16. TCP BBR Startup gain计算总结和Startup失速问题
  17. 亚马逊asin关键词排名追踪_图文实操:手把手教你优化亚马逊关键词的自然排名!...
  18. WPS office根目录在哪?_wps和office的区别是什么
  19. 小米OJ 54(数独游戏)
  20. 怎样在证件照片底部加文字

热门文章

  1. NREC Max-Pac 8.72 中文版 高级教程 初级教程 nrec教程 nrec8.72
  2. 超级神基恩号matlab仿真,RG吉恩号、MG Ka沙、Ka牛、Ka掉毛,又一波超值新品上架!...
  3. pdf怎么转图片?pdf文件转化成图片的步骤
  4. OS2.2.2:进程调度的时机、切换过程、调度方式
  5. java毕业生设计高校设备采购审批管理系统计算机源码+系统+mysql+调试部署+lw
  6. 高等数学--向量代数运算与模(八)
  7. js向input的value赋值
  8. 安卓手机与opensuse15.4互传文件的方法
  9. 最好的远程协助软件AnyDesk
  10. M$spszi$y是嘛意思