随着程序规模的扩大以及复杂性的增加,越来越多的Java程序员选择使用微服务进行项目开发。微服务的出现有助于开发人员用更低的成本和更少的错误来开发程序,因此成为Java开发人员需要掌握的最重要的技术之一。Spring Cloud是Spring旗下的项目之一,Spring擅长的就是集成,把世界上的好框架“拿”过来,集成到自己的项目中。Spring Cloud的官方简介如下图所示。
Spring Cloud为开发人员提供了工具来快速构建分布式系统中的一些常见模式(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了“样板模式”,开发人员使用Spring Cloud可以快速实现这些模式的服务和应用程序。它们在任何分布式环境下都能很好地工作,包括开发者自己的笔记本计算机、裸机数据中心和云计算等托管平台。Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。
Spring Cloud有丰富的子组件,其架构如下图所示:
SpringCloud是一个完整的微服务框架(相较于Dubbo等其他微服务框架而言),涵盖服务治理、服务注册、服务调用、服务监控、负载均衡等,详见下表:
微服务条目 | 落地技术 |
服务开发 | SpringBoot、Spring、SpringMVC |
服务配置与管理 | Netflix公司的Archaius、阿里的Diamond等 |
服务注册与发现 | Eureka、Consul、zookeeper等 |
服务调用 | Rest、RPC、gRPC |
服务熔断 | Hystrix、Envoy等 |
负载均衡 | Ribbon、Nginx等 |
服务接口调用 | Feign等 |
消息队列 | Kafka、RabbitMQ、ActiveMQ等 |
服务配置中心管理 | SpringCloudConfig、Chef等 |
服务路由(API网关) | Zuul等 |
服务监控 | Zabbix、Nagios、Metrics、Spectator等 |
全链路追踪 | Zipkin、Brave、Dapper等 |
服务部署 | Docker、OpenStack、Kubernetes等 |
数据流操作开发包 | SpringCloudStream(封装Redis、Kafka、Rabbit等发送消息) |
事件消息总线 | SpringCloudBus |
- Spring Cloud Config:配置和管理开发工具包,可以把配置放到远程服务器,目前支持本地存储,Git存储以及Subversion存储。
- Spring Cloud Bus:事件、消息总线,用于在集群(如配置变化事件)中传播状态变化信息,可与Spring Cloud Config联合实现热部署。
- Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,包括Eureka、Hystrix、Zuul、Archaius等。
- Spring Cloud Eureka:云端负载均衡,一个基于REST的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。
- Spring Cloud Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,对延迟和故障提供更强大的容错能力。
- Spring Cloud Zuul:边缘服务工具,提供动态路由、监控、弹性、安全等的边缘服务。
- Spring Cloud Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
- Spring Cloud for Cloud Foundry:通过OAuth 2.0协议绑定服务到Cloud Foundry,Cloud Foundry是VMware推出的开源平台即服务(Platform as a Service, PaaS)云平台。
- Spring Cloud Sleuth:日志收集工具包,封装了Dapper、Zipkin和HTrace操作。
- Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。
- Spring Cloud Security:安全工具包,为应用程序添加安全控制,主要是指OAuth 2.0。
- Spring Cloud Consul:封装了Consul操作。Consul是一个服务发现与配置工具,与Docker可以无缝集成。
- Spring Cloud Zookeeper:操作ZooKeeper的工具包,用于使用ZooKeeper方式的服务注册和发现。
- Spring Cloud Stream:数据流操作开发包,封装了Redis、RabbitMQ、Kafka等发送、接收的消息。
- Spring Cloud CLI:基于Spring Boot CLI,可以以命令行方式快速建立云组件。