02SpringCloud简介

Published on in java with 118 views

#SpringCloud简介

微服务应该具备的功能

1.服务的注册与发现

服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如服务名、IP地址等〉告知服务注册中心。服务发现是指当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所要消费服务的实例信息(如服务名、 IP 地址等〉。通常情况下,一个服务既是服务提供者,也是服务消费者。服务消费者一般使用 HTTP 协议或者消息组件这种轻量级的通信机制来进行服务消费。
服务注册中心会提供服务的健康检查方案 ,检查被注册的服务是否可用。通常一个服务实例注册后,会定时向服务注册中心提供“心跳”,以表明自己还处于可用的状态 。

2.服务的负载均衡

在微服务架构中,服务之间的相互调用一般是通过 HTTP 通信协议来实现的 。网络往往具有不可靠性,为了保证服务的高可用( High Availability ),服务单元往往是集群化部署。例如将服务提供者进行集群化部署,那么服务消费者该调用哪个服务提供者的实例呢?这就涉及到了服务的负载均衡。
服务的负载均衡一般最流行的做法是所有的服务都向服务注册中心注册,服务注册中心持有每个服务的应用名和IP地址等信息,同时每个服务也会获取所有服务注册列表信息。服务消费者集成负载均衡组件,该组件会向服务消费者获取服务注册列表信息,并每隔一段时间重新刷新获取该列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(开发者可以配置),选择一个服务提供者的实例 ,向该实例进行服务消费,这样就实现了负载均衡。

3.服务的容错

微服务落地到实际项目中,服务的数量往往非常多,服务之间的相互依赖性也是错综复杂的,一个网络请求通常需要调用多个服务才能完成。如果一个服务不可用,例如网络延迟或故障,会影响到依赖于这个不可用的服务的其他服务。一个微服务系统有很多个服务,当服务F因某些原因导致了服务的不可用,来自于用户的网络请求需要调用服务F。由于服务F无响应,用户的请求都处于阻塞状态,在高并发的场景下 ,短时间内会导致服务器的线程资源消耗殆尽。另外,依赖于服务F的其他的服务,服务E、服务G、服务J,也会等待服务F的响应,处于阻塞状态,导致这些服务的线程资源消耗殆尽,进而导致它们的不可用,以及依赖于它们的服务的不可用,最后导致整个系统处于瘫痪的状态也就是雪崩效应。

4.服务网关

微服务系统通过将资源以 API 接口的形式暴露给外界来提供服务。在微服务系统中,API接口资源通常是由服务网关(也称 API 网关)统一暴露,内部服务不直接对外提供API 资源的暴露。这样做的好处是将 内部服务隐藏起来,外界还以为是一个服务在提供服务,在一定程度上保护了微服务系统的安全。API 网关通常有请求转发的作用,另外它可能需要负责一定的安全验证,例如判断某个请求是否合法,该请求对某一个资源是否具有操作权限等。通常情况下,网关层以集群的形式存在。在服务网关层之前,有可能需要加上负载均衡层,通常为 Nginx双机热备,通过一定的路由策略,将请求转发到网关层。

5.服务配置的统一管理

在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置、日志输出级别的配置等,而往往这些配置在不同的环境中也是不一样的。随着服务数量的增加,配置文件的管理也是一件非常复杂的事。在微服务架构中,需要有统一管理配置文件的组件。

6.服务链路追踪

微服务系统是一个分布式架构的系统,微服务系统按业务划分服务单元,一个微服务系统往往有很多个服务单元。由于服务单元数量很多且业务复杂,服务与服务之间的调用有可能非常复杂,一旦出现了异常和
错误,就会很难去定位。所以在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而使每个请求链路清晰可见,出了问题很快就能定位。
目前,常见的链路追踪组件有 Google 的 Dapper、 Twitter 的 Zipkin,以及阿里的 Eagleeye(鹰眼)等,都是非常优秀的链路追踪开源组件。

SpringCloud

Spring Cloud 是基于 Spring Boot 的 。Spring Cloud 的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。Spring Cloud 是通过包装其他技术框架来实现的,例如包装开源的 Netflix oss 组件,实现了一套通过基于注解、Java 配置和基于模版开发的微服务框架 。
Spring Cloud 提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、 智能路由 、微代理、控制总线、全局锁、分布式会话等。

常用组件

1.服务注册和发现组件 Eureka

利用 Eureka 组件可以很轻松地实现服务的注册和发现的功能。 Eureka 组件提供了服务的健康监测,以及界面友好的 UI。另外 Spring Cloud 也支持 Consul 和 Zookeeper,用于注册和发现服务 。

2.熔断组件 Hystrix

Hystrix 是一个熔断组件,它除了有一些基本的熔断器功能外,还能够实现服务降级、服务限流的功能。另外 Hystrix 提供了熔断器的健康监测,以及熔断器健康数据的 API 接 口。

3.负载均衡组件 Ribbon

Ribbon 是一个负载均衡组件,它通常和 Eureka、Zuul 、RestTemplate、Feign 配合使用。Ribbon 和 Zuul 配合,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实例中。Ribbon和RestTemplate、Feign 配合,在消费服务时能够做到负载均衡 。

4.路由网关 Zuul

路由网关Zuul有智能路由和过滤的功能。内部服务的API接口通过 Zuul网关统一对外暴露,内部服务的API接口不直接暴露,防止了内部服务敏感信息对外暴露。在默认的情况下,Zuul和Ribbon 相结合,能够做到负载均衡、智能路由。

5.Spring Cloud Config

Spring Cloud Config 组件提供了配置文件统一管理的功能。

6.Spring Cloud Security

Spring Cloud Security 是对 Spring Security 组件的封装。Spring Cloud Security 向服务单元提供了用户验证和权限认证。

7.Spring Cloud Sleuth

Spring Cloud Sleuth 是一个分布式链路追踪组件,它封装了 Dapper、 Zipkin 和 Kibana 等组件,通过它可以知道服务之间的相互依赖关系,并实时观察链路的调用情况 。

8.Spring Cloud Stream

Spring Cloud Stream 是 Spring Cloud 框架的数据流操作包,可以封装 RabbitMq、ActiveMq、Kafka、Redis 等消息组件, 利用 Spring Cloud Stream 可以实现消息的接收和发送。

Responses