SpringCloud实战【一】:基础组件介绍

 目录

1 为什么选择Spring Cloud

2 Spring Cloud组件介绍

2.1 五大常用组件

Eureka

Ribbon

Hystrix

Zuul

Config

2.2 其他组件

3 小结

扫描二维码关注公众号,回复: 9858224 查看本文章

1 为什么选择Spring Cloud

        很多大公司都有自己的一套实现微服务的架构,比如:阿里的Dubbo/HSF、京东的JSF、新浪微博的Motan、当当网的DubboX等,每一种架构都有自己的优缺点、都经历了严格的考验存活到现在。但是当我们提到微服务首先会想到是Spring Cloud,就像我们提到电商首先想到淘宝,提到外卖首先想到美团一样。那么Spring Cloud到底有哪些优势能够在众多微服务架构中脱颖而出,成为佼佼者呢。

        要回答这个问题我们先看一下Spring Cloud的组成,如下图所示:

可以看到SpringCloud项目是有多个独立的子项目集合而成的,每个子项目都实现了不同的功能,解决了不同的问题,实现一个实际的微服务架构,需要哪个组件直接引用过来使用就可以了,而像dubbo这些需要好几个中间件组合起来才能实现微服务架构,这一点就像品牌机和组合机的区别。以dubbo为例和SpringCloud对比:

  SpringCloud Dubbo
注册中心 SpringCloud Eureka 借助Zookeeper
调用方式 REST API RPC
降级/熔断 SpringCloud Hystrix 不完善
负载均衡 SpringCloud Ribbon 借助Nginx
分布式配置 SpringCloud Config
批量任务 SpringCloud Bus
消息总线 SpringCloud Bus
网关 SpringCloud Zull
数据流 SpringCloud Stream
-------    

有了这个对比表格,我们想搭建一套微服务架构,技术选型就非常容易了,毫无疑问Spring Cloud是首选,我们不需要纠结于配置中心使用什么、网关怎么设计、熔断使用哪种技术,所有的这些已经提供了现成的组件,我们只需要拿过来使用即可。所以说Spring Cloud是微服务架构的集大成者。下面介绍一下常用的组件。

2 Spring Cloud组件介绍

2.1 五大常用组件

        Netflix是Spring Cloud非常核心的子项目,提供了Eureka、Ribbon、Hystrix、Zuul等基础组件,基本是实现微服务必不可少的。

Eureka

        实现了服务治理,提供服务注册与发现功能,类似于Zookeeper。服务提供者会注册服务到服务注册中心,并且每过一段时间都要发送心跳向服务注册中心续约,下线的时候也需要告知服务注册中心,还可以获取服务注册中心中的服务列表。服务消费者可以从服务注册中心中拉取服务列表。如下图所示:

由图可以看出消费者可以从服务注册中心拉取服务列表,然后就可以请求服务列表中的服务提供者,如果有很多服务消费者都请求到同一个服务提供者,就造成被访问的服务提供者压力特别大,而其他的服务提供者几乎没有流量,为解决这个问题就引入了Ribbon负载均衡器。

Ribbon

        Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,类似于Negnix。它基于Netflix Ribbon实现,通过Spring Cloud的封装,可以轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Ribbon的功能如下图所示:

        可以看出服务消费者拉取服务列表之后,交给Ribbon来确定访问哪一个服务,Ribbon起到负载均衡的作用,能保证所有的服务提供者根据配置分配不同的流量,但是如果流量特别大,超过了服务提供者整体的处理能力,Ribbon也无能为力,又或者某一个服务提供者出现故障无法处理访问,Ribbon也无法感知到,这时候Hystrix就登场了。

Hystrix

        Hystrix提供了请求通断与服务降级等能力。

        请求熔断: Hystrix维护了一个断路器,默认断路器是闭路状态(CLOSED),当请求后端服务失败数量超过一定比例(这个比例可以设置,比如50%),断路器切换到开路状态(OPEN),将后续所有请求直接失败而不会发送到后端服务。断路器保持在开路状态一段时间后(默认是5s),断路器进入半开路状态(HALF-OPEN),这时会判断下一次请求的返回情况,如果请求成功,断路器切回闭路状态, 否则重新切换到开路状态。如下图所示:

         服务降级:Fallback起到了降级的作用。可以实现一个fallback方法, 当请求后端服务出现异常的时候,可以使用fallback方法返回的值。fallback方法的返回值一般是设置的默认值或者来自缓存,告知后面的请求服务不可用。

         Hystrix还有很多功能,后面会有专门章节介绍,这里不再赘述。

Zuul

        Netflix提供了网关服务的组件Zuul,对于微服务架构,网关是非常重要,如果没有网关,客户端要请求服务需要知道ip和端口,把ip和端口暴露出去是非常不安全的,并且如果服务特别多,每一个服务都需要做一个鉴权,这样做非常的麻烦,但是引入网关就解决了这些问题,所有的外部请求都经过网关路由到不同的服务,把不同服务的公共模块(比如签名验签)都收拢在网关来处理,如下图所示:

简单来说,网关是请求服务的入口,就像海关一样,Zuul是专门提供网关服务的组件,用起来非常的方便。

Config

        SpringCloud Config为每一个微服务提供配置中心,分为服务端(Config Server)和客户端(Config Client)两部分。简单的来说,服务端负责管理配置,客户端负责加载配置

       我们在使用的时候服务端提供配置文件的存储,存储默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具,服务端以接口的形式将配置文件的内容提供出去。客户端通过接口获取数据、并依据此数据初始化自己的应用。如下图所示:

2.2 其他组件

        SpringCloud Bus:事件、消息总线,在集群中传播状态变化,可与Spring Cloud Config一起实现热部署;

        SpringCloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,可以与Docker容器实现无缝集成。

        SpringCloud Security:安全工具包,为应用程序添加安全控制,主要是指OAuth2;

        SpringCloud Cluster:微服务集群,提供了一组用于在分布式系统中构建集群功能的原语;

        SpringCloud Stream:数据流操作开发包,实现了Redis、Rabbit、Kafka等发送接收消息;

        SpringCloud Stream App Starters:基于Spring Boot的Spring Integration应用程序,可提供与外部系统的集成;

        SpringCloud CLI:基于 Spring Boot CLI,可以用命令行方式快速建立云组件;

        SpringCloud Contract:为通过CDC(Customer Driven Contracts)开发基于JVM的应用提供了支持。

        SpringCloud Sleuth:日志收集工具包,封装了Dapper、Zipkin、HTrace操作;

        SpringCloud Data Flow:大数据操作工具,通过命令行方式操作数据流。

        SpringCloud Connectors:微服务连接器,简化了云平台中连接服务和获取操作环境感知的过程。

        SpringCloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry;

        SpringCloud Zookeeper:封装了操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现;

        SpringCloud Task:微服务上下文运行任务;

        SpringCloud CloudFoundry ServiceBroker:开放式服务代理。

3 小结

        Spring Cloud将一系列优秀的组件进行了整合,我们在搭建微服务技术架构的时候,需要什么样的能力,找到对应的组件使用就可以了,省去了中间件技术选型的麻烦,像负载均衡,路由,熔断这些非常棘手的问题,Spring Cloud都提供了很成熟的组件,使用起来非常的方便。微服务解决了去中心化的问题,在业务架构非常清晰的情况下,拆分成多个子项目来实现,把开发人员按照业务模块拆分成多个小组,每个小组负责自己模块的开发、运维,大大提升了资源的利用率,SpringCloud完全符合这些特性,开发、发布、运维可以实现完全独立。综上所述,如果公司要实现微服务架构,可以首先考虑选用Spring Cloud,接下来的章节,会和大家一起探索常用组件的使用方法。

发布了32 篇原创文章 · 获赞 38 · 访问量 5475

猜你喜欢

转载自blog.csdn.net/u010482601/article/details/103440703