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 Boot写的用户微服务注册于Eureka,使其受Eureka统一的调度管理。
- 在Eureka外部再包裹一个Ribbon组件,再用户去访问用户微服务的时候,由Ribbon负责多个用户微服务之间的负载均衡。Ribbon有一个‘心跳’机制,去检测用户微服务的状态,在用户微服务出现问题时能够及时发现,并处理。
- 在Ribbon的外层,还有一个feign组件用于给微服务做接口伪装,有了feign在用户调用微服务时就像调用本地的接口一样简单,完全隐藏了微服务的存在。
- 再聊Hystrix之前,我们的先聊一下什么是雪崩效应?以及它有什么危害?先来看一张微服务之间相互调用的关系图:
假如说用户希望调用一下微服务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不仅仅只有这几个工具,其他更有用的工具要靠大家自己发掘了。