专栏文章 Java 微服务框架-spring cloud

opentest-oper@360.cn · 2020年03月11日 · 最后由 LTV 回复于 2020年10月27日 · 2662 次阅读

Spring Cloud 是什么

Spring Boot 让我们从繁琐的配置文件中解脱了出来,而 Spring Cloud,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
 

Spring Cloud 组成

微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,springcloud 就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,springcloud 需要管理好这些微服务需要很多框架支持。
下图是 Spring Cloud 所包含的框架图:

 

常用组件详细介绍

服务治理
服务注册与发现是 Spring Cloud 中最核心的组件之一,整个系统中所有的服务都可以注册到注册中心,然后由注册中心进行统一调度,方便后续的水平扩展以及故障转移等。目前 Spring Cloud 主要通过整合 Netflix 的相关产品来实现这方面的功能(Spring Cloud Netflix),包括用于服务注册和发现的 Eureka,调用断路器 Hystrix,调用端负载均衡 Ribbon,Rest 客户端 Feign,智能服务路由 Zuul,用于监控数据收集和展示的 Spectator、Servo、Atlas,用于配置读取的 Archaius 和提供 Controller 层 Reactive 封装的 RxJava。除此之外,针对于服务的注册和发现,除了 Eureka,Spring Cloud 也整合了 Consul 和 Zookeeper 作为备选,但是因为这两个方案在 CAP 理论上都遵循 CP 而不是 AP,所以官方并没有推荐使用。

分布式链路监控
Spring Cloud Sleuth 提供了全自动、可配置的数据埋点,以收集微服务调用链路上的性能数据,并发送给 Zipkin 进行存储、统计和展示。

消息组件
既然是微服务架构,那服务间的调用肯定是无法避免的。Spring Cloud Stream 对于分布式消息的各种需求进行了抽象,包括发布订阅、分组消费、消息分片等功能,实现了微服务之间的异步通信。Spring Cloud Stream 也集成了第三方的 RabbitMQ 和 Apache Kafka 作为消息队列的实现。而 Spring Cloud Bus 基于 Spring Cloud Stream,主要提供了服务间的事件通信(比如刷新配置)。

配置中心
随着服务的不断增多,同时每个服务也会有多个环境(开发环境、测试环境、生产环境等),每个环境的配置文件又会有所不同,但是其中又有许多配置是可以共用的,如果每个服务自己去管理这些配置,会给维护带来很大的麻烦,这时候,我们就需要引入配置中心去统一管理这些配置。基于 Spring Cloud Netflix 和 Spring Cloud Bus,Spring 又提供了 Spring Cloud Config,实现了配置集中管理、动态刷新的配置中心概念。配置通过 Git 或者简单文件来存储,支持加解密。

安全控制
Spring Cloud Security 基于 OAuth2 这个开放网络的安全标准,提供了微服务环境下的单点登录、资源授权、令牌管理等功能。

命令行工具
Spring Cloud Cli 提供了以命令行和脚本的方式来管理微服务及 Spring Cloud 组件的方式。

集群工具
Spring Cloud Cluster 提供了集群选主、分布式锁(暂未实现)、一次性令牌(暂未实现)等分布式集群需要的技术组件。

 

Spring Cloud 各个组件如何来配套使用

如上图:Spring Cloud 各个组件相互配合,合作支持了一套完整的微服务架构。
其中:
1.Eureka 负责服务的注册与发现,很好将各服务连接起来
2.Hystrix 负责监控服务之间的调用情况,连续多次失败进行熔断保护
3.Hystrix dashboard,Turbine 负责监控 Hystrix 的熔断情况,并给予图形化的展示
4.Spring Cloud Config 提供了统一的配置中心服务
5.当配置文件发生变化的时候,Spring Cloud Bus 负责通知各服务去获取最新的配置信息
6.所有对外的请求和服务,都通过 Zuul 来进行转发,起到 API 网关的作用
7.最后使用 Sleuth+Zipkin 将所有的请求数据记录下来,方便进行后续分析
 

SpringCloud 和 Dubbo

SpringCloud 和 Dubbo 都是现在主流的微服务架构
SpringCloud 是 Apache 旗下的 Spring 体系下的微服务解决方案
Dubbo 是阿里系的分布式服务治理框架
对比图如下:

最大区别:SpringCloud 抛弃了 Dubbo 的 RPC 通信,采用的是基于 HTTP 的 REST 方式。 从技术维度上,其实 SpringCloud 远远的超过 Dubbo,Dubbo 本身只是实现了服务治理,而 SpringCloud 现在以及有 21 个子项目以后还会更多。
所以其实很多人都会说 Dubbo 和 SpringCloud 是不公平的,但是由于 RPC 以及注册中心元数据等原因,在技术选型的时候我们只能二者选其一,所以我们常常用他俩来对比。
Dubbo 和 Spring Cloud 并不是完全的竞争关系,两者所解决的问题域不一样:Dubbo 的定位始终是一款 RPC 框架,而 Spring Cloud 的目的是微服务架构下的一站式解决方案

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

spring 一定得好好学学

恒温 回复

好好学学 哈哈

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册