陌路lui  

  SpringCloud是基于SpringBoot的一整套实现微服务的框架。它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,基于SpringBoot,会让开发微服务架构非常方便。

一、SpringBoot简介

  传统单体架构在微小企业中比较常见,典型代表就是一个应用、一个数据库、一个web容器就可以运行一个项目,里面集成了所有的功能。这在小型项目里面是比较好维护的,功能不多,也不复杂,但扩展性和可靠性较差。因为所有功能集成在一个服务或者一个war包中,修改某个功能时,需要整个服务一起打包。前期开发较快,后期维护比较困难。

  后面出现了服务化架构,也称之为SOA架构,SOA代表面向服务的架构,将应用根据不同的指责分为不同的模块,不同的模块通过特定的协议和接口进行交互。这样整个系统切分成很多个组件来完成请求,当流量过大时通过水平扩展响应的组件来支撑,所有的组件通过交互来满足整体的业务需求。

  SOA服务的优点是,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。

  服务化架构是一套松耦合的架构,服务的拆分原则是服务内部高内聚、服务之间低耦合。一般使用dubbo来进行服务的治理,没有使用springCloud之前,基本都是使用dubbo来拆分服务,进行服务之间的调用。

  简单来说,微服务架构是 SOA 架构思想的一种扩展,更加强调服务个体的独立性、拆分粒度更小。微服务架构强调业务系统需要彻底的组件化和服务化,一个组件就是一个产品,可以独立对外提供服务,微服务不再强调传统SOA架构里面比较重的ESB企业服务总线。微服务强调每个微服务都有自己独立的运行空间,包括数据库资源。微服务架构本身来源于互联网的思路,因此组件对外发布的服务强调了采用HTTP Rest API的方式来进行,微服务的切分粒度会更小。

  微服务的好处有:服务独立、扩展性好、可靠性强,但同时,也面临一些新的问题,比如运维复杂性,分布式复杂性、监控复杂性等等。

Spring五大核心组件

Eureka:服务注册中心,同其他服务注册中心一样,支持高可用配置。如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中其他分片会把它们的状态再次同步回来。每一个服务中心都会有一个Eureka Client组件,这个组件负责将这个服务的信息注册到Eureka Server中。Eureka Server 是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。

 

Ribbon:Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到服务均衡的作用。当Ribbon和Eureka联合使用时,Ribbon的服务实例清单RibbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来去定服务端是否已经启动。

 

Feign:建立服务连接请求,首先,对某个接口定义了@FeginClient注解,Fegin就会针对这个接口创建一个动态代理,接着调用接口的时候,本质就是调用Fegin创建的动态代理,Fegin的动态代理会根据在接口上的@RequestMapping等注解,来动态构造要请求的服务的地址,针对这个地址,发起请求、解析响应。

 

Hystrix:在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定。为了解决这样的问题,产生了断路器等一系列的服务保护机制。在分布式架构中,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

  Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能,Hystrix使用舱壁模式实现线程池的隔离,它会为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响,而不会拖慢其他的依赖服务。

 

Zuul:微服务网关。这个组件是负责网络路由的。Zuul提供了一套过滤器机制,可以支持在API网关无附上进行统一调用来对微服务接口做前置过滤,已实现对微服务接口的拦截和校验

 

小结:

  • Zuul提供了一套过滤器机制,可以支持在API网关无附上进行统一调用来对微服务接口做前置过滤,已实现对微服务接口的拦截和校验
  • Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
  • Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
  • Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
  • Zuul:如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务

 

posted on 2020-08-19 15:30  陌路lui  阅读(367)  评论(0编辑  收藏  举报