目录
Spring Cloud for?Spring Foundry
Spring Cloud Stream App Starters
Spring Cloud?for Amazon Web Services
一、基本定义
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
二、Spring Cloud相关组件成员框架
Spring Cloud Eureka
Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务。
Spring Cloud将它集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务发现功能。
目前Eureka 项目相当活跃,代码更新频繁,且Eureka 2.0也在开发中,2.0将会带来更强的功能和更好的扩展性,但是由于还没有Release,故而不作讨论。
Spring Cloud Ribbon
SpringCloudRibbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于NetflixRibbon实现。
通过SpringCloud的封装,可以让我们轻松地将面对服务的REST模块请求自动转换成客户端负载均衡的服务调用。SpringCloudRibbon几乎存在于每一个SpringCloud构建的微服务和基础设施中。
Spring Cloud Feign
Feign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign。
Spring Cloud Hytrix
在一个分布式系统中,必然会有部分系统的调用会失败。
Hystrix是一个通过添加超时容错和失败容错逻辑来帮助你控制这些分布式系统的交互。
Hystrix通过隔离服务之间的访问,阻止他们之间的级联故障以及提供后背选项来实现这些,所有新而这些都用来提高系统的整体弹性。
Spring Cloud Zuul
Zuul是Netflix开源的微服务网关组件,具有动态路由、过滤、压力测试、监控、弹性伸缩和安全等功能。
Zuul和Ribbon以及Eureka相结合,可以实现智能路由和负载均衡的功能,可以将流量按照某种策略分发到集群中的多个实例。
Zuul统一对外暴露接口,外界系统不需要知道微服务系统中各服务之间调用的复杂性,也保护了内部微服务的api接口。
Zuul可以统一做用户身份认证,权限验证,这样就不用在每个微服务中进行认证了。
Zuul可以统一实现监控、日志的输出。
客户端请求多个微服务时,可以只请求Zuul一次,在Zuul中请求多个微服务,减少客户端和微服务的交互次数。
Spring Cloud Gateway
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关
Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
这里需要注意一下gateway使用的netty+webflux实现,不要加入web依赖,需要加入webflux依赖。
gateway与zuul的区别的简单比较:gateway使用的是异步请求,zuul是同步请求,gateway的数据封装在ServerWebExchange里,zuul封装在RequestContext里。
过滤器:gateway有两种filter,一种是GlobalFilter一种是GatewayFilter,全局过滤器默认对所有路由有效,gatewayFilter需要进行指定。
Spring Cloud Config
Spring Cloud 为开发人员提供了一系列的工具来快速构建分布式系统的通用模型 。
例如:配置管理、服务发现、断路由、智能路由、微代理、控制总线、一次性Token、全局锁、决策竞选、分布式session、集群状态等等。
分布式系统的协助需要一大堆的模型,使用Spring Cloud开发者能快速的建立支持实现这些模式的服务和应用程序。他们将适用于任何分布式环境,无论是开发者的个人电脑还是生产环境,还是云平台。
Spring Cloud Admin
Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度量信息。下面我们来了解如何使用spring-boot-admin来监控我们的系统。
Spring Cloud Bus
Spring Cloud Bus将Spring的事件处理机制和消息中间件消息的发送和接收整合起来,可以轻松的将分布式应用中连接有消息中间件的多个服务节点连接起来,实现消息互通。
Spring Cloud forSpring Foundry
将应用程序与Pivotal Cloudfoundry集成。
提供服务发现实现,还可以轻松实现通过SSO和OAuth2保护资源,还可以创建Cloudfoundry服务代理。
Spring Cloud Sleuth
适用于Spring Cloud应用程序的分布式跟踪,与Zipkin,HTrace和基于日志(例如ELK)跟踪兼容。
Spring Cloud Data Flow
针对现代运行时的可组合微服务应用程序的云本地编排服务。
易于使用的DSL,拖放式GUI和REST-API一起简化了基于微服务的数据管道的整体编排。
Spring Cloud Security
在Zuul代理中为负载平衡的OAuth2休眠客户端和认证头中继提供支持。
Spring Cloud Consul
Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件。
Spring Cloud Zookeeper
Zookeeper的服务发现和配置管理。
Spring Cloud Stream
轻量级事件驱动的微服务框架,可快速构建可连接到外部系统的应用程序。
使用Apache Kafka或RabbitMQ在Spring Boot应用程序之间发送和接收消息的简单声明式模型。
Spring Cloud CLI
基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。
Spring Cloud Stream App Starters
Spring Cloud任务应用程序启动器是Spring Boot应用程序,可能是任何进程,包括不会永远运行的Spring Batch作业,并且它们在有限时间的数据处理之后结束/停止。
Spring Cloud Cluster
提供在分布式系统中的集群所需要的基础功能支持。
Spring Cloud Connectors
使PaaS应用程序在各种平台上轻松连接到后端服务,如数据库和消息代理(以前称为“Spring Cloud”的项目)。
Spring Cloudfor Amazon Web Services
轻松集成托管的Amazon的Web Services服务。它通过使用spring的idioms和APIs便捷集成AWS服务,例如缓存或消息API。开发人员可以围绕托管服务,不必关心基础架构来构建应用。
Spring Cloud SkyWalking
被用于追踪、监控和诊断分布式系统,特别是使用微服务架构,云原生或容积技术。主要功能如下:分布式追踪和上下文传输、应用、实例、服务性能指标分析、根源分析、应用拓扑分析、应用和服务依赖分析、慢服务检测、性能优化
Spring Cloud Dubbo
由于遗留Dubbo系统比较庞大,短期之内无法完成技术栈的迁移。
因此需要“分步走”,即:初期实现两者共存,后期逐步绞杀Dubbo应用,最终实现技术栈的统一。
借助Ribbon调用Dubbo应用
使用Sidecar,Dubbo微服务必须实现健康检查(对于Spring Boot程序即:添加spring-boot-starter-actuator依赖)。
将Dubbo应用也注册到Eureka上。
相关代码:
Spring Cloud Servicemesh
Service Mesh又称为服务网格,本质上就是我们前面介绍过的模式三。
之所为称之为服务网格是因为按照模式三的结构,每个主机上同时运行了业务逻辑代码和代理,此时这个代理被形象地称之为SideCar(业务代码进程相当于主驾驶,共享一个代理相当于边车),服务之间通过SideCar发现和调用目标服务,从而形成服务之间的一种网络状依赖关系,然后通过独立部署的一种称之为**控制平面(ControlPlane)**的独立组件来集中配置这种依赖调用关系以及进行路由流量调拨等操作,如果此时我们把主机和业务逻辑从视觉图上剥离,就会出现一种网络状的架构,服务网格由此得名。
参考书籍、文献和资料:
【1】郑天民. 微服务设计原理与架构. 北京:人民邮电出版社,2018.
【2】https://blog.csdn.net/zhanglu0223/article/details/80613213.
【3】https://blog.csdn.net/chengqiuming/article/details/81120921.
【4】http://www.cnblogs.com/xiaojunbo/p/7094377.html.
【5】https://blog.csdn.net/hzq472583006/article/details/81110443.
【6】https://blog.csdn.net/chayangdz/article/details/81533659.
【7】https://www.cnblogs.com/meetzy/p/9670279.html.
【8】https://www.cnblogs.com/zhangjianbin/p/6322476.html.
【9】https://blog.csdn.net/u014320421/article/details/79708622.
【10】https://blog.csdn.net/xichenguan/article/details/77535694.
【11】https://blog.csdn.net/longdan3105/article/details/79062274.
【12】http://spring.io/projects/spring-cloud.
【13】https://blog.csdn.net/u014172271/article/details/83511202.