摘要
是什么? SpringCloud是什么?用来干什么的?
为什么?为什么选用SpringCloud?他有哪些优势?
怎么做? 如何使用SpringCloud?以及SpringCloud的各个组件的作用?是什么?
1. Spring Cloud简单介绍
2. 官方介绍
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.3. 核心成员概览
服务注册中心 | Spring Cloud Netflix Eureka |
服务调用方式 | REST API |
服务监控 | Spring Boot Admin |
断路器 | Spring Cloud Netflix Hystrix |
服务网关 | Spring Cloud Netflix Zuul |
分布式配置 | Spring Cloud Config |
服务跟踪 | Spring Cloud Sleuth |
消息总线 | Spring Cloud Bus |
数据流 | Spring Cloud Stream |
批量任务 | Spring Cloud Task |
4. 和Spring Boot 是什么关系
spring -> spring boot > Spring Cloud 这样的关系。为什么?
1. Spring Cloud的优势?
2. 为什么选用SpringCloud?
- 产出于spring大家族,spring在企业级开发框架中无人能敌,来头很大,可以保证后续的更新、完善。比如dubbo现在就差不多死了
- 有Spring Boot 这个独立干将可以省很多事,大大小小的活Spring Boot都搞的挺不错。
- 作为一个微服务治理的大家伙,考虑的很全面,几乎服务治理的方方面面都考虑到了,方便开发开箱即用。
- Spring Cloud 活跃度很高,教程很丰富,遇到问题很容易找到解决方案
- 轻轻松松几行代码就完成了熔断、均衡负载、服务中心的各种平台功能
怎么用?
1. 核心模块介绍
- 为常用模块定义通用抽象。这是Spring的解耦理念的完美应用。每种模式都没有与具体实施紧密结合。以配置服务器为例; 您可以自由地更改后端存储而不会影响其他服务。
- 模块化组件。Spring Cloud不是一个全有或全无的解决方案,所有的模块都是可选的。
- 支持多种环境,如dev,test和prod。然后我们可以为所有环境构建一个包。
- 透明配置提取。 应该自动获取这些集中式配置,无需任何用户编码。
- 属性更改时自动刷新属性。应通过此类更改通知服务并重新加载新属性。
- 保持更改历史记录并轻松恢复到旧版本。 这是一个非常有用的功能,可以恢复生产环境中的错误更改。
- 服务注册 - 服务在中央注册表中注册其位置的过程。它通常注册其主机和端口,有时还会注册身份验证凭据,协议,版本和环境详细信息。
- 服务发现 - 客户端应用程序查询中央注册表以了解服务位置的过程。
- 容错 - 注册服务失败后会发生什么?有时它会在正常关闭时立即取消注册,但大多数情况下我们需要一个超时机制。服务不断发送心跳以确保活力。除此之外,客户还需要能够通过自动重试另一个服务来处理失败的服务。
- 负载均衡 - 如果在服务下注册了多个主机,我们如何平衡主机之间的负载?是否会在注册表端或客户端进行负载均衡?我们可以提供自定义负载均衡策略吗?
- 整合工作 - 整合过程有多复杂?它是否只涉及一些新的依赖和/或配置更改?还是侵入式发现代码?当您的语言不受支持时,有时候单独的sidekick过程是一个不错的选择。
- 可用性问题 - 注册表本身是否具有高可用性?可以在没有停机的情况下升级吗?注册表不应该是单点故障。
- 提供实现复杂企业集成解决方案的简单模型。
- 促进基于Spring的应用程序中的异步,消息驱动行为。
- 促进现有Spring用户的直观,渐进式采用。
- 组件应松散耦合,以实现模块化和可测试性。
- 该框架应该强制分离业务逻辑和集成逻辑之间的关注点。
- 扩展点本质上应该是抽象的,但是在明确定义的边界内,以促进重用和可移植性。
- 消费者集团。这是由Apache Kafka首先介绍和推广的。它可以在一个编程模型中支持发布 - 订阅和竞争队列。
- 分区。基于用户提供的分区密钥,在一个物理段中保证生成的具有相同分区密钥的消息。这在有状态处理中至关重要,因为出于性能或一致性的原因,需要一起处理相关数据。
- 自动内容协商。根据用户接受的消息类型自动进行消息类型转换。
- 我们之前讨论过对Spring Cloud Stream Binder的请求
- Spring MVC控制器收到的HTTP头
- 请求 RestTemplate
- ......以及Spring-ecology中的大多数其他类型的请求和回复
2. Netflix介绍
Netflix(/nɛtflɪks/,官方中文名:网飞,民间翻译:奈飞)是一间在世界多国提供网络视频点播的OTT服务公司[7],并同时在美国经营单一费率邮寄DVD出租服务。该服务是使用回邮信封寄送DVD和Blu-ray出租光盘至消费者指定的收件地址。公司由里德·哈斯廷斯和马尔克·兰多夫在1997年8月29日成立,总部位于加利福尼亚州洛斯盖图,1999年开始推出订阅制的服务。到了2009年,Netflix已可提供超过10万部电影DVD,订阅者数超过1000万人[8]。2007年2月25日,Netflix宣布已寄出第10亿份DVD。[9]2011年4月,Netflix在美国有超过2300万名订阅者,在世界其他国家共有超过2600万名订阅者。[10]在2011年,Netflix的数字总营收超过了150亿美元。[11]然而在2012年10月23日,Netflix宣布当年度第三季的营收下滑了88%[12]。2013年1月,Netflix宣布在2012年第四季期间在美国增加了200万名订阅者,美国的流服务总订阅者数达到2710万,世界其他国家则共有2940万名流服务订阅者。此外,在同一期间,Netflix的营收提升了8%,达到9.45亿美元。[13]2013年3月中旬,Netflix共有3300万名订阅者[14]。订阅者数在2013年4月达到3630万人(其中美国订阅者数为2920万人)[15]。其后Netflix的订户数与营收持续增长。截至2015年10月,Netflix在全世界共有6917万名订阅者,其中美国的订阅者超过4300万人。[16]
Netflix公司提供光盘出租和视频订阅服务,13年视频订阅者为六千万名,如此大的体量造就了Netflix在分布式应用方面的成就。
3. 核心组件介绍
- Spring Cloud Netflix Eureka
- Spring Cloud Netflix Hystrix
- Spring Cloud Netflix Zuul
- Spring Cloud Netflix Archaius
配置管理 API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
- Spring Cloud Netflix Ribbon 负载均衡。
- Spring Cloud Netflix Fegin REST客户端。
- Spring Cloud Bus
消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化。
- Spring Cloud Cluster
集群工具,基于 Zookeeper, Redis, Hazelcast, Consul 实现的领导选举和平民状态模式的抽象和实现。
- Spring Cloud Consul
基于 Hashicorp Consul 实现的服务发现和配置管理。
- Spring Cloud Cluster
将取代Spring Integration。提供在分布式系统中的集群所需要的基础功能支持,如:选举、集群的状态一致性、全局锁、tokens等常见状态模式的抽象和实现。
- Spring Cloud Consul
- Spring Cloud for Cloud Foundry
- Spring Cloud Security
安全控制,在 Zuul 代理中为 OAuth2 REST 客户端和认证头转发提供负载均衡。
- Spring Cloud Sleuth
分布式链路监控,SpringCloud 应用的分布式追踪系统,和 Zipkin,HTrace,ELK 兼容。
- Spring Cloud Task
短生命周期的微服务,为 Spring Booot 应用简单声明添加功能和非功能特性。
- Spring Cloud Zookeeper
服务发现和配置管理基于 Apache Zookeeper。
- Spring Cloud for Amazon Web Services
快速和亚马逊网络服务集成。
- Spring Cloud Starters
- Spring Cloud CLI
- Spring Cloud Connectors
简化了连接到服务的过程和从云平台获取操作的过程,有很强的扩展性,可以利用Spring Cloud Connectors来构建你自己的云平台。
- Spring Cloud Stream
创建消息驱动微服务应用的框架, 基于Spring Boot创建,用来建立单独的/工业级spring应用,使用spring integration提供与消息代理之间的连接。数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
- Spring Cloud Data Flow
用于大数据处理
Data flow 是一个用于开发和执行大范围数据处理其模式包括ETL,批量运算和持续运算的统一编程模型和托管服务。
对于在现代运行环境中可组合的微服务程序来说,Spring Cloud data flow是一个原生云可编配的服务。使用Spring Cloud data flow,开发者可以为像数据抽取,实时分析,和数据导入/导出这种常见用例创建和编配数据通道 (data pipelines)。
Spring Cloud data flow 是基于原生云对 spring XD的重新设计,该项目目标是简化大数据应用的开发。Spring XD 的流处理和批处理模块的重构分别是基于 Spring Boot的stream 和 task/batch 的微服务程序。这些程序现在都是自动部署单元而且他们原生的支持像 Cloud Foundry、Apache YARN、Apache Mesos和Kubernetes 等现代运行环境。
Spring Cloud data flow 为基于微服务的分布式流处理和批处理数据通道提供了一系列模型和最佳实践。
总结
1.SpringCloud是什么?
2.为什么选用SpringCloud?
- 基于http协议,使用RESTful风格,接口简洁方便,高效透明(Dubbo使用RPC协议,性能稍优于Http协议,但强耦合度较高)
- 依托于spring平台、使用Spring Boot来构建服务,功能全面且开箱即用
- 社区活跃度高文档丰富
3.如何使用SpringCloud?
- 请求统一通过 API 网关(Zuul)来访问内部服务。
- 网关接收到请求后,从注册中心(Eureka)获取可用服务。
- 由 Ribbon 进行均衡负载后,分发到后端具体实例。
- 微服务之间通过 Feign 进行通信处理业务。
- Hystrix 负责处理服务超时熔断。
- Turbine 监控服务间的调用和熔断相关指标。