Spring框架之我见(六)——Spring Cloud

聊完Spring Boot,我们来看看Spring Boot最重要的一方面的应用——Spring Cloud。

Spring Cloud

再聊SpringCloud之前我们先聊聊微服务。

什么是微服务?

微服务(Micro Service):微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

微服务为什么会出现?

  • 大型整体式应用维护困难。
  • 传统架构升级困难。
  • 新的轻量级协议(RESTful)、容器化(Docker)的出现。

说完了什么是微服务,我们在开来看Spring Cloud。

什么是Spring Cloud?

提到spring Cloud 大家可能以为他是和云计算相关的框架。其实不是,Spring Cloud是一套用于微服务的、简单易懂、易部署和易维护的分布式系统开发工具包。
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

Spring Cloud如何实现微服务?

  • Eureka(注册中心):负责所有微服务的管理。
  • Ribbon(服务发现):主要负责客户端的负载均衡
  • Feign(接口伪装):使微服务之间的调用像本地调用一样简单。
  • Hystrix(熔断处理):在微服务出现问题时防止出现雪崩效应。
  • Zuul(代理机制):安全认证、动态路由、流量管理、服务器负载均衡
  • Config(配置管理):管理所有微服务的配置文件(GIT/SVN)。

具体的实现流程如下:

Spring框架之我见(六)——Spring Cloud

  • 将使用Spring Boot写的用户微服务注册于Eureka,使其受Eureka统一的调度管理。
  • 在Eureka外部再包裹一个Ribbon组件,再用户去访问用户微服务的时候,由Ribbon负责多个用户微服务之间的负载均衡。Ribbon有一个‘心跳’机制,去检测用户微服务的状态,在用户微服务出现问题时能够及时发现,并处理。
  • 在Ribbon的外层,还有一个feign组件用于给微服务做接口伪装,有了feign在用户调用微服务时就像调用本地的接口一样简单,完全隐藏了微服务的存在。
  • 再聊Hystrix之前,我们的先聊一下什么是雪崩效应?以及它有什么危害?先来看一张微服务之间相互调用的关系图:

Spring框架之我见(六)——Spring Cloud

假如说用户希望调用一下微服务A,微服务A又会调用微服务B,微服务B又会去调用微服务C,这时候微服务C出现故障,不能被使用了,如果没有Hystrix,微服务B所有的调用微服务C的线程都会阻塞,直到把微服务B给拖垮,微服务B一挂,那么微服务A和微服务Y也就挂了。最后微服务X也挂了。这就是雪崩效应。Hystrix就是用来解决这个问题的,假如有了Hystrix,微服务B在调用微服务C出现问题,线程并不会一直等待,而是直接调用微服务B的一个CallBack的回调方法,直接给微服务A返回一个错误消息。再过一段时间之后,微服务B会再次尝试调用微服务C看微服务C是否已经恢复。这就给了整个微服务的集群一个自我恢复的能力。

  • Zuul就是一个微服务的代理,我们前面说到的代理能干的事它都能干。
  • Config是用于微服务的配置文件管理的,虽然在Spring Boot的加持下微服务的配置文件已经很少了,但是,在成百上千的微服务集群中,配置文件还是应该有一个组件统一管理和部署。Config使用SVN或者GIT做到配置文件的统一管理,还是十分的方便。

当然Spring Cloud不仅仅只有这几个工具,其他更有用的工具要靠大家自己发掘了。