目录
第一点: 什么是微服务架构
第二点:为什么需要学习Spring Cloud
第三点: Spring Cloud 是什么
第四点: SpringCloud的优缺点
1、SpringCloud优点
2、SpringCloud缺点
第五点: SpringCloud由什么组成
1)Spring Cloud Eureka
2)Spring Cloud Zuul
3)Spring Cloud Ribbon
4)Spring Cloud Feign
5)Spring Cloud Hystrix
6)Spring Cloud Config
总结
我们知道,Spring Cloud利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。 通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
那在深入学习SpringCloud前,我们需要对其全貌有一个基础了解,方能知道为什么学习SpringCloud。
在知道为什么学SpringCloud之前,我们需要先知道一个概念:微服务。
微服务架构,就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。
首先,SpringCloud是基于SpingBoot的优雅简洁,还记得我们被无数xml支配的恐惧场景吗?还记得SpringMVC,Mybatis错综复杂的配置吗?有了SpingBoot,这些东西就都不需要了,SpingBoot好处就不多说了。
而SpringCloud就是基于SpringBoot把市场上优秀的服务框架组合起来,通过Spring Boot风格进行再封装,并且屏蔽掉了复杂的配置和实现原理,做到了开箱即用,很多都是通过引入JAR包来完成。
另外,SpringCloud大多数子模块都是为了解决现有痛点,像Zuul解决的跨域,Fegin解决的负载均衡,Hystrix的熔断机制等。
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
1) 耦合度比较低。不会影响其他模块的开发。
2) 减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发。
3) 配置比较简单,基本用注解就能实现,不用使用过多的配置文件。
4) 微服务跨平台的,可以用任何一种语言开发。
5) 每个微服务可以有自己的独立的数据库也有用公共的数据库。
6) 直接写后端的代码,不用关注前端怎么开发,直接写自己的后端代码即可,然后暴露接口,通过组件进行服务通信。
1) 部署比较麻烦,给运维工程师带来一定的麻烦。
2) 针对数据的管理比麻烦,因为微服务可以每个微服务使用一个数据库。
3) 系统集成测试比较麻烦
4) 性能的监控比较麻烦。
SpringCloud组成有很多,这里我讲几个开发中重要的模块。
Spring Cloud Eureka是一套服务注册与发现组件 。Eureka区别于传统的ELB负载均衡。Eureka则属于客户端发现模式,客户端负责决定相应服务实例的网络位置,并且对请求实现负载均衡。客户端从一个服务注册服务中查询所有可用服务实例的库,并缓存到本地。
关于Spring Cloud Eureka的优势我们将在后面的文章进行分析。
Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul默认使用的HTTP客户端是Apache HTTPClient,也可以使用RestClient或okhttp3.OkHttpClient。 Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/demo/test转发到到demo服务。
zuul默认和Ribbon结合实现了负载均衡的功能。
Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
说明:Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的。
Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
Feign也支持可拔插式的编码器和解码器。
Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix通过将依赖服务进行资源隔离,进而组织某个依赖服务出现故障的时候,这种故障在整个系统所有的依赖服务调用中进行蔓延,同时Hystrix还提供故障时的fallback降级机制。
总而言之,Hystrix通过这些方法帮助我们提升分布式系统的可用性和稳定性。
Spring Cloud Config 是由 Spring Cloud 团队开发的项目,它可以为微服务架构中各个微服务提供集中化的外部配置支持。Spring Cloud Config 可以将各个微服务的配置文件集中存储在一个外部的存储仓库或系统(例如 Git 、SVN )中,对配置的统一管理,以支持各个微服务运行。
其他组件会在后面的课程当中注意介绍。
总的来说优点大过于缺点,目前看来Spring Cloud是一套非常完善的分布式框架,目前很多企业开始用微服务、Spring Cloud的优势是显而易见的。因此对于想研究微服务架构的同学来说,学习Spring Cloud是一个不错的选择。
以上!