参考资料地址:
官方文档:https://spring.io/projects/spring-cloud/
中文文档:https://www.springcloud.cc/
Spring Cloud 是什么
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
总之Spring Cloud就是用来做分布式系统的。
Spring Cloud的组件
Spring Cloud下面是有很多子项目,大致可分成两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用。
组件列表
-
Spring Cloud Eureka
Eureka 是Spring Cloud Netflix 微服务套件中的一部份,它是基于Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能 -
Spring Cloud Ribbon
Ribbon是一个基于HTTP和TCP的客户端负载均衡器 -
Spring Cloud Hystrix
断路由,主要是为了解决某个方法调用失败后,调用后备方法来替代失败的方法,以达到容错、阻止级联错误组件 -
Spring Cloud Feign
它是基于Netflix Feign实现,整合了Spring Cloud Ribbon 与 Spring Cloud Hystrix,除了提供两者的强大功能外,还提供一种声明式的Web服务客户端定义方式 -
Spring Cloud Zuul
Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul默认使用的HTTP客户端是Apache HTTPClient,也可以使用RestClient或okhttp3.OkHttpClient。 Zuul的主要功能是路由转发和过滤器。 -
Spring Cloud Config
将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件 -
Spring Cloud Bus
Bus是分布式消息队列总线,是对Kafka, MQ的封装 -
Spring Cloud Stream
Stream是消息中间件组件,它集成了 kafka 和 rabbitmq -
Spring Cloud Sleuth
sleuth其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。
微服务
概念
所谓的微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。微服务设计原则:1、各司其职 2、服务高可用和可扩展性。他是一种新型软件架构
微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
微服务的优点
微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源。这是因为它们通过扩展组件来处理功能瓶颈问题。这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序的全新迭代。最终的结果是有更多的资源可以提供给其它任务。
微服务应用程序的另一个好处是,它们更快且更容易更新。当开发者对一个传统的单体应用程序进行变更时,他们必须做详细的QA测试,以确保变更不会影响其他特性或功能。但有了微服务,开发者可以更新应用程序的单个组件,而不会影响其他的部分。测试微服务应用程序仍然是必需的,但它更容易识别和隔离问题,从而加快开发速度并支持DevOps和持续应用程序开发。
第三个好处是,微服务架构有助于新兴的云服务,如事件驱动计算。类似AWS Lambda这样的功能让开发人员能够编写代码处于休眠状态,直到应用程序事件触发。事件处理时才需要使用计算资源,而企业只需要为每次事件,而不是固定数目的计算实例支付。
分布式
概念
将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。

上面:Service A、B、C、D 分别是业务组件,通过API Geteway进行业务访问,业务A、B、C和D分别在不同的机器上。
而微服务的应用不一定是分散在多个服务器上,也可以是同一个服务器。
微服务与分步式的关系
- 将不同微服务分部在不同机器上,就是分布式系统-微服务
- 将不同微服务分部在同一机器上,就是非分布式系统-微服务
网友评论