SpringCloud简介

一. Netflix公司简介

Netflix(Nasdaq NFLX)成立于1997年,是一家在线影片租赁提供商,主要提供Netflix超大数量的DVD并免费递送,总部位于美国加利福尼亚州洛斯盖图.

Netflix已经连续五次被评为顾客最满意的网站.可以通过PC、TV及iPad、iPhone收看电影、电视节目,可通过Wii,Xbox360,PS3等设备连接TV. 

这是一家全球性的流媒体公司,在各种美剧或者电影的开头,经常会看到该公司的名字.Netflix公司拍摄的比较有名的美剧有《纸牌屋》、《毒枭》、《怪奇物语》.Springcloud的微服务就是基于Netflix这家公司的开源产品来做的.

Netflix的开源框架组件已经在Netflix公司的大规模分布式微服务环境中经过多年的生产实战验证,正逐步被社区接受为构造微服务框架的标准组件.Spring Cloud的开源产品,主要是基于对Netflix开源组件的进一步封装,方便Spring开发人员构建微服务基础框架. 对于一些打算构建微服务框架体系的公司来说,充分利用或参考借鉴Netflix的开源微服务组件(或Spring Cloud),在此基础上进行必要的企业定制,无疑是通向微服务架构的捷径.

二. Spring Cloud简介

1. Spring Cloud概述

Spring Cloud 是一个相对比较新的微服务框架,2016 才推出 1.0 的 Release 版本.但是其更新特别快,几乎每 1-2 个月就有一次更新,虽然 Spring Cloud 推出的时间最短,但是相比 Dubbo 等 RPC 框架,Spring Cloud 提供了完整的分布式系统解决方案.

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式.使用 Spring Cloud 的开发者可以快速的启动服务或构建应用,同时能够快速和云平台资源进行对接.

2. Spring Cloud构成

采用了微服务这种架构之后,项目的数量会非常多,Spring Cloud为我们提供了一整套相关技术来完成微服务的开发.


Day17_03_SpringCloud教程之SpringCloud简介_Cloud

  • Eureka: 服务治理组件,包含服务注册中心、服务注册与发现,这是Spring Cloud的核心. 目前Spring Cloud主要通过整合Netflix的相关产品来实现这方面的功能(Spring Cloud Netflix),包括用于服务注册和发现的Eureka, 断路器Hystrix,调用端负载均衡Ribbon,Rest客户端Feign,智能服务路由Zuul,用于监控数据收集和展示的Spectator、Servo、Atlas,用于配置读取的Archaius和提供Controller层Reactive封装的RxJava. Feign和RxJava并不是Netiflix的产品,但是被整合到了Spring Cloud Netflix中.对于服务的注册和发现,除了Eureka,Spring Cloud也整合了Consul和Zookeeper作为备选,但是因为这两个方案在CAP理论上都遵循CP而不是AP,所以官方并没有推荐使用;
  • 分布式链路监控: Spring Cloud Sleuth提供了全自动、可配置的数据埋点,以收集微服务调用链路上的性能数据,并发送给Zipkin进行存储、统计和展示;
  • Spring Cloud Stream: 通过Redis、Rabbit或者Kafka实现的消息驱动的消息组件. Spring Cloud Stream对于分布式消息的各种需求进行了抽象,包括发布订阅、分组消费、消息分片等功能,实现了微服务之间的异步通信;
  • Spring Cloud Config: 配置管理工具,支持使用Git存储配置内容,可以实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等;
  • Hystrix: 容器管理组件,实现断路器模式,倘若依赖的服务出现延迟或故障,则提供强大的容错功能;
  • Spring Cloud Security: 安全工具包,提供Zuul代理中对OAuth2客户端请求的中继器. Spring Cloud Security基于OAuth2这个开放的网络安全标准,提供了微服务环境下的单点登录、资源授权、令牌管理等功能;
  • Ribbon: 客户端负载均衡的服务调用组件;
  • Feign: 基于Ribbon和Hystrix的声明式服务调用组件;
  • Zuul: 网关组件,提供智能路由、访问过滤等功能;
  • Archaius: 外部化配置组件;
  • Spring Cloud Bus: 事件、消息总线;
  • Spring Cloud Consul: 服务发现与配置管理工具;
  • Spring Cloud CLI: 用于在Groovy中快速创建Spring Cloud应用的Spring Boot CLI插件,以命令行和脚本的方式来管理微服务及Spring Cloud组件;
  • Spring Cloud Cluster: Spring Cloud Cluster提供了集群选主、分布式锁(暂未实现)、一次性令牌(暂未实现)等分布式集群需要的技术组件,针对ZooKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现.
  • Spring Cloud Cloudfoundry: 与Pivotal Cloudfoundry的整合支持;
  • Spring Cloud AWS: 简化和整合Amazon Web Service;
  • Spring Cloud Sleuth: Spring Cloud应用的分布式跟踪实现,可以整合Zipkin;
  • Spring Cloud ZooKeeper: 基于ZooKeeper的服务发现与配置管理组件;
  • Spring Cloud Starters: Spring Cloud的基础组件,是基于Spring Boot风格项目的基础依赖模块.

3. Spring Cloud的优势

微服务的框架那么多,比如dubbo、Kubernetes,为什么就要使用Spring Cloud的呢?

  • 产出于Spring家族,Spring在企业级开发框架中无人能敌,可以保证后续的更新、完善;
  • 提供了一整套的组件,可以开箱即用;
  • Spring Cloud 活跃度很高,教程很丰富,遇到问题很容易找到解决方案;
  • 轻轻松松几行代码就完成了熔断、均衡负责、服务中心的各种平台功能.

4. Spring Cloud 的核心功能

  • 分布式/版本化配置;
  • 服务注册和发现;
  • 路由;
  • 服务间调用;
  • 负载均衡;
  • 断路器;
  • 分布式消息传递.

5. Spring Cloud架构的项目协作关系


Day17_03_SpringCloud教程之SpringCloud简介_断路器_02

  • 所有请求都统一通过 API 网关(Zuul)来访问内部服务;
  • 网关接收到请求后,从注册中心(Eureka)获取可用服务;
  • 由 Ribbon 进行均衡负载后,分发到后端的具体实例;
  • 微服务之间通过 Feign 进行通信处理业务;
  • Hystrix 负责处理服务超时熔断;
  • Turbine 监控服务间的调用和熔断相关指标.

三. Spring Boot与Spring Cloud的关系

Spring Boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务;Spring Cloud是一个基于Spring Boot实现的云应用开发工具. Spring boot专注于快速、方便集成的单个个体.Spring Cloud是关注全局的服务治理框架.Spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置;Spring Cloud很大的一部分是基于Spring boot来实现的,所以Spring Cloud的开发必须基于Spring Boot.

Spring boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring boot,属于依赖的关系.

Spring -> Spring boot > Spring cloud