SpringCloud

SpringCloud

架构
  • 单体式

          简单说就是所有的功能打包在一个包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)中,适用于没有并发,业务较小的项目中

  • SOA

          面向服务的结构(Service-Oriented Architecture),将controller/service+dao拆分为两种包,controller和service+dao层中间加一层ZK,实现多个service层的轮询及心跳,在两端添加一个存根,每次请求不需要三次握手。SpringCloud出现之前,SOA是非常优秀的分布式架构方案。但它也有弊端,暴露在外的接口层和数据层代码连接太过紧密,这会给维护工作带来非常大的障碍,当数据层一个接口发生变动时(例如改package位置、改参数等),外层接口也得跟随发生变化。

  • 微服务

          按照功能去拆分一个应用,基于Restful,多个不同功能的服务之间进行通讯。这种架构按照功能拆分应用本身就是优势,让代码轻松解耦,让数据结构彻底分离,当数据量大到一定程度时可以轻松分库,而不是通过水平扩展这种库间耦合性极强的方式。在通讯方面Restful虽然没有SOA的RPC请求高效,但它有Hystrix、Eureka、bus等完整的组件,充分的降低了频繁通讯带来的弊端。

组件整理
  • 核心组件

    springCloud的核心组件是netflix下的Eureka(注册中心)、Hystrix(断路器)、Zuul(智能路由)和Ribbon(客户端负载平衡)

  • 外围组件

    Dashboard(单点监控器)、turbine(集群监控器)、Feign、config(配置中心)、stream/bus消息总线、Sleuth(性能侦查机)

组件介绍
  • Eureka

          Eureka负责服务端的负载,是整个集群包括Config、Zuul、turbin等的注册中心,各应用通过它的心跳检测(存活检测)来实现负载均衡

  • Ribbon

          Ribbon负责客户端请求的负载,通过给restTemplate添加拦截器,实现请求的轮询,默认采用权重模式,通过对服务端响应时间的检测,指定出一个响应时间越小,权重越大的RULE。Ribbon可以自动化配置,包含负载机制和轮询机制等机制。

  • hystrix断路器

          hystrix包含了降级(断路),仓壁,缓存,请求合并等强大功能。降级其实就是对失败请求(服务端失联)的处理,防止请求堆积导致程序崩溃,仓壁模式是在客户端请求的出口处统一添加一个线程池达到效率上的提升,缓存相当于Spring Cache,在客户端出口处建立缓存屏障以减少数据库IO甚至通信频率的降低从而极大的提升集群性能。请求合并也就是将一定时间区间或一定累计数量的请求合并在一起发送,从而也能达到降低通信频率的目的。

          我们看看一个启用了断路器所有功能的请求是如何发送的

    1. 客户端接收到用户发来的请求

    2. 检查结果是否被缓存,如果已缓存,则从缓存中取出直接返回,如果未缓存则进行下一步

    3. 检查断路器是否被打开了,打开则直接进入第6步Fallback,未打开则下一步

    4. 线程池/请求队列/Semaphore是否占满,占满则直接进入第6步Fallback,未占满则下一步,通过仓壁模式实现,依赖服务之间建立仓壁,不会互相影响

    5. 检查计数器中统计的健康度,根据一定时间区间内的请求成功次数计算,默认断路值50%

    6. fallback处理,执行指定的fallback方法进行服务降级处理,也可级联降级,最终的降级策略必须能稳定的返回结果,降级时也使用观察者订阅者来观察回退处理是否成功

    7. success处理。
      在这里插入图片描述

  • Dashboard监控器/turbine集群监控器

  • Feign

          Feign是对Ribbon的进一步封装,将客户端与服务端通讯接口方法封装在一个jar中,并同时依赖它,那么更新方法时两端会自动更新,是非常方便的一个组件

  • Zuul网关

          Zuul是SpringCloud中的Nginx,它也集成到了Feign中,用来通过域名转发请求,防止将各服务暴露到外网,一般在网关处理鉴权等服务。

  • config配置中心

          config是一个非常好用的组件,它可以将所有的配置文件整合在一个文件夹中并提供端口号来查询,还可以连接git将文件共享,最令人欣慰的是它可以通过服务的/refresh(post请求)端口号无缝式的热更新配置。而且还可以对配置文件进行加密,但它目前只支持部分配置,对一些核心配置比如Eureka的配置及Hystrix,ribbon的配置是不支持动态刷新的。

  • stream/bus消息总线

          stream是SpringCloud对消息队列的封装,只需要简单配置就可以在项目中使用,在及时性不强的通讯场景中是一个非常完美的解决方案。bus其实是对stream的封装,在所有服务间建立一条消息总线,可被所有服务共享。

  • Sleuth性能侦查机

          Sleuth通过在所有服务的请求中添加日志,并对其解析,实现动态监测通讯情况,让我们对请求量以及服务之间的通讯频率一目了然。

三种组件组合
  1. Eureka + Hystrix + Ribbon + Turbin

在这里插入图片描述

  1. Eureka + Hystrix + Ribbon + Turbin + Feign + Zool

在这里插入图片描述

  1. Eureka + Hystrix + Ribbon + Turbin + Feign + Zool + Config + Sleuth/Zipkin + Bus

在这里插入图片描述

  • 笔者已将以上三套架构的代码整合完成,免费提供给大家,下面是Github地址
  1. https://github.com/yuzhou152/springcloud-v1.git
  2. https://github.com/yuzhou152/springcloud-v2.git
  3. https://github.com/yuzhou152/springcloud-v3.git

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值