Spring Cloud初识

来源:互联网 发布:大数据时代要求我们 编辑:程序博客网 时间:2024/05/19 23:12

上个月这时候研究过一个礼拜的Spring Cloud,现在来做个总结吧,不管自己学习了多少,都要做到颗粒归仓。



一.Spring Cloud概念

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

SpringCloud项目的既定目标在于为Spring开发人员提供一整套易于使用的工具集,从而保证其轻松构建起自己需要的分布式系统方案。为了实现这一目标,Spring Cloud以Netflix OSS堆栈为基础将大量实现堆栈加以整合并打包。这些堆栈而后可以通过大家所熟知的各类基于注释的配置工具、Java配置工具以及基于模板的编程工具实现交付。


二.组成

Spring Cloud的子项目,大致可分成两类,总共17个,一类是对现有成熟框架”SpringBoot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka,ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用,如:

Eureka

一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个Java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支 持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

Ribbon

Ribbon,主要提供客户侧的软件负载均衡算法。

Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略:

- 简单轮询负载均衡

- 加权响应时间负载均衡

- 区域感知轮询负载均衡

- 随机负载均衡

 

Ribbon中还包括以下功能:

- 易于与服务发现组件(比如Netflix的Eureka)集成

- 使用Archaius完成运行时配置

- 使用JMX暴露运维指标,使用Servo发布

- 多种可插拔的序列化选择

- 异步和批处理操作(即将推出)

- 自动SLA框架(即将推出)

- 系统管理/指标控制台(即将推出)

Hystrix

断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正​​,应用程序可以尝试调用操作。


断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保 护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态。

Zuul


类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

Spring Cloud Config


完成集中化集群配置管理


三优缺点分析

首先要明确的是:SpringCloud是在SpringBoot基础之上构建的快速开发分布式系统的工具集。

优点

约定优于配置

开箱即用、快速启动

适用于各种环境

轻量级的组件

组件支持丰富,功能齐全

选型中立

缺点


因为刚出不久,文档略少,加上对Spring Boot的auto configuration loading等机制的封装, 给人感觉入门容易,但是如果没有完整学习spring的体系,碰到问题就一脸懵逼。原理性的问题还有待解决。

技术上还不够完善,国内研究的并不成熟,国际上比较火热,社区活跃度较高,对于企业来说,不够务实