spring cloud《二》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35781178/article/details/82947397

spring cloud 作为Java语言的微服务框架,它依赖于springboot ,有快速开发,持续交付和容易部署等特点。spring cloud 的组件非常多,涉及微服务的方方面面。

微服务具有以下的特点:

按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
每个微服务都有自己独立的基础组件,例如数据库,缓存等,且运行在独立的进程中。

微服务之间的通信时通过HTTP协议或者消息组件,且具有容错能力。

微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
单个微服务能够集群化部署,并且有负载均衡的能力。
整个微服务系统应该有一个完整的安全机制,包括用户验证,权限验证,资源保护等。
整个微服务系统有链路追踪的能力。
有一套完整的日志系统。

微服务的功能主要体现在:

服务的注册和发现
服务的负载均衡
服务的容错
服务网关
服务配置的统一管理
链路追踪
实时日志。

2.服务的注册与发现:

   服务注册是指向服务注册中心一个服务实例,服务提供者将自己的服务信息告知服务注册中心,服务发现是指当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所要消费服务的实例信息。通常一个服务即是服务提供者,又是服务消费者。富足注册中心会提供服务的健康检查方案,检查被注册的服务是否可用。通常一个服务实例注册后,会定时向服务注册中心提供心跳,以表明自己还处于可用的状态。当一个服务实例停止向服务注册中心提供心跳一段时间后,那么,服务注册中心会人为该服务实例不可用,会将该服务实例从服务注册列表中剔除。

服务的负载均衡:

在微服务架构中,服务之间的相互调用一般是通过HTTP通信协议来实现的。网络往往具有不可靠性,为了保证服务的高可用,服务单元往往是集群化部署。

服务的负载均衡,就是所有的服务都向服务注册中心注册,服务注册中心持有每个服务的应用名和IP,同时每个服务也会获取所有的服务注册列表信息。服务消费者集成负载均衡组件,该组件会向服务消费者获取服务注册列表信息,并每隔一段时间重新刷新获取该列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略,选择一个服务提供者的实例,向该实例进行服务消费,这样就实现了负载均衡。

服务注册中心不但要定时接受每个服务的心跳,而且每个服务会定期获取服务注册列表的信息。当服务实例数量很多时,服务注册中心承担了非常大的负载。由于服务注册中心在微服务系统中祈祷了至关重要的作用,所以要实现高可用。一般的做法是将服务注册中心集群化,每个服务注册中心的数据实时同步。

服务的容错:

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

为了解决防止雪崩效应的出现,分布式系统引进了熔断器机制。当一个服务的处理请求的失败次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,服务正常。当服务处理用户请求的失败次数大于设定的阀值时,说明服务出现了故障,打开熔断器,这时所有的请求会执行快读失败,不执行业务逻辑。
 

熔断机制的意义,不仅能够防止系统的雪崩效应,还具有:

  • 将资源进行隔离,如果某个服务里的某个API接口出现了故障,指挥隔离该API接口。不会影响到其他API接口。被隔离的api接口会执行快速失败的逻辑,不会等待,请求不会阻塞。如果不进行这样隔离,请求会一直处于阻塞状态,直到超时。若有大量的请求同时涌入,都处于阻塞的状态,服务器的线程资源,迅速被消耗完。
  • 服务降级的功能。当服务处于正常的状态时,大量的请求在短时间内同时涌入,超过了服务的处理能力,这时熔断器会被打开,将服务降级,以免服务器因负载过高而出现故障。
  • 自我修复能力。当因某个微小的故障,例如网络服务商的问题,导致网络在短时间内不可用,熔断器被打开。如果不能自我监控,自我检测和自我修复,那么需要开发人员手动的去关闭熔断器,那么就会增加开发人员的 工作量。

服务网关:

微服务系统通过将资源以API接口的形式暴露给外界来提供服务。在微服务系统中,API接口资源通常是由服务网关统一暴露,内部服务不直接对外提供API资源的暴露。保证了微服务系统  的安全,通常情况,网关层以集群的形式存在。在服务网关之前,可能需要加上负载均衡层,通常为Nginx双机热备,通过一定的路由策略,将请求转发到网关层。

网关的意义:

  • 网关将所有的服务API接口资源统一聚合,对外统一暴露,外界系统调用的API接口都是网关对外暴露的API接口。
  • 网关可以做一些用户身份认证,权限认证,防止非法请求操作API接口,对内部服务起到保护作用。
  • 网关可以实现监控功能,实时日志输出,对请求进行记录。
  • 网关可以用来做流量监控,在高流量的情况下,对服务进行降级。
  • API接口从内部服务分离出来,方便做测试。

服务配置的统一管理:

在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置,日志输出级别的配置等。在微服务架构中,需要有统一管理配置文件的组件,例如spring cloud 的config 组件,阿里的diamond 等。

spring cloud :

spring cloud 是基于spring boot 的,简化了开发和部署的过程,简化了spring 复杂的配置和依赖管理,通过起步依赖和内置servlet 容器能够使开发者迅速搭起一个web 工程。

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

常用组件:

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

 利用Eureka 组件可以很轻松的实现服务的注册和发现的功能。Eureka 组件提供了服务的健康检测,以及界面友好的UI。通过Eureka 组件提供的UI,eureka 组件可以让开发人员随时了解服务单元的运行情况。另外,spring cloud 也支持consul 和zookeeper ,用于注册和发信啊服务。

2.熔断组件Hystrix

Hystrix 是一个熔断组件,它除了有一些基本的熔断器功能外,还能够实现服务降级,服务限流的功能。另外,Hystrix提供了熔断器的健康检测,以及熔断器健康数据的API接口。Hystrix Dashboard 组件提供了单个服务熔断器的健康状态数据的界面展示功能,Hystrix Turbine 组件提供了多个服务的熔断器的健康状态数据的界面展示功能。

负载均衡组件Ribbon:

Ribbon 是一个负载均衡组件,它通过和Eureka,zuul,restTemplate,feign配合使用。ribbon 和zuul 配合,很容易做到负载均衡。将请求根据负载均衡策略分配到不同的服务实例种。ribbon 和restTemplate,feign 配合,再消费服务时能够做到负载均衡。

路由网关Zuul:

路由网关Zuul 有智能路由和过滤的功能。内部服务的API接口通过Zuul网关统一对外暴露,内部服务的API接口不直接暴露,防止了内部服务敏感信息对外暴露。默认情况下,zuul 和ribbon 组合,能够做到负载均衡,智能路由。zuul 的过滤功能是通过拦截请求来实现的,可以对一些用户的角色和权限进行判断,起到安全验证的作用,同时也可以用于输出实时的请求日志。

spring cloud config:

spring cloud config组件提供了配置文件统一管理的功能。spring cloud config包括server 端和client端。server端读取本地仓库或者远程仓库的配置文件,所有的client向sever读取配置信息,从而达到配置文件统一管理的目的。通常情况下,spring cloud config 和spring cloud bus 相互配合刷新指定client或所有的client 的配置文件。

spring cloud security:

spring cloud security 是对spring security 组件的封装,spring cloud security向服务单元提供了用户验证和权限认证。一般来说,单独在微服务系统中使用spring cloud security是很少见的,一般它会配合spring security oauth2组件一起使用,通过搭建授权服务,验证token 或jwt (java web token)这种形式对整个微服务系统进行安全验证。

spring cloud sleuth:

spring cloud sleuth 是一个分布式链路追踪组件,它封装了dapper,zipkin,kibana 等组件,通过它可以直到服务之间的相互依赖关系,并实时观察链路的调用情况。

spring cloud stream:

 spring cloud stream是spring cloud 框架的数据流操作包,可以封装rabbitMQ,activeMQ,kafka,redis等消息组件,利用spring cloud strem 可以实现消息的接收和发送。

项目一览表
spring cloud config 服务配置中心,将所有的服务的配置文件放到本地仓库或者远程仓库,配置中心负责读取仓库的配置文件,其他服务向配置中心读取配置。spring cloud config 使得服务的配置统一管理,并可以在不人为重启服务的情况下进行配置文件的刷新。
spring cloud netflix 通过包装了Netflix 公司的微服务组件实现的,也是spring cloud核心的核心组件,包括eureka,hystrix,zuul,archaius等。
eureka 服务注册和发现组件
hystrix

熔断器组件。hystrix通过控制服务的api接口的熔断来转移故障,防止微服务系统发生雪崩。hystrix能够起到服务限流和服务降级的作用。使用hystrix dashboard 组件监控单个服务的熔断器的状态,使用turbine组件可以聚合多个服务的熔断器的状态。

zuul 智能路由网关组件。Netflix zuul能够起到智能路由和请求过滤的作用,是服务接口统一暴露的关键模块,也是安全验证和权限控制的一道门。
feign 声明式远程调度组件
ribbon 负载均衡组件
archaius 配置管理api的组件,一个基于Java的配置管理库,主要用于多配置的动态获取
spring cloud bus 消息总线组件,常和spring cloud config 配合使用,用于动态刷新服务的配置
spring cloud sleuth 服务链路追踪组件,封装了dapper,zipkin,kibana 等组件,通过它可以直到服务之间的相互依赖关系,并实时观察链路的调用情况。
spring cloud data flow 大数据操作组件,spring cloud data flow 是spring xd的替代品,也是一个混合计算的模型,可以通过命令行的方式操作数据流
spring cloud security 安全模块组件,是对spring security的封装,配合spring security oauth2组件一起使用,通过搭建授权服务,验证token 或jwt (java web token)这种形式对整个微服务系统进行安全验证。
spring cloud consul 该组件是spring cloud 对consul的封装,和eureka 类似,它是另一个服务注册和发现组件。
spring cloud zookeeper 该组件是spring cloud 对zookeeper的封装,和eureka,consul 类似,它是另一个服务注册和发现组件。
spring cloud stream  spring cloud stream是spring cloud 框架的数据流操作包,可以封装rabbitMQ,activeMQ,kafka,redis等消息组件,利用spring cloud strem 可以实现消息的接收和发送。
spring cloud cli 该组件是spring cloud 对spring boot cli 的封装,可以让用户以命令行方式快速运行和搭建容器
spring cloud task 该组件基于spring task ,提供了任务调度和任务管理的功能。
spring cloud connectors 用于paas 云平台连接到后端。

 dubbo: 

 dubbo 是阿里巴巴开源的一个分布式服务框架,致力于提高性能和透明化是RPC远程服务调用方案,以及SOA服务治理方案。

dubbo 的核心
RPC远程调用 封装了长连接NIO框架,如netty,mina等,采用的是多线程模式
集群容错 提供了基于接口方法的远程调用的功能,并实现了负载均衡策略,失败容错等功能
服务发现 集成了apache 的zookeeper组件,用于服务的注册和发现。

dubbo架构的流程如下:

1.服务提供者向服务中心注册服务

2.服务消费者订阅服务

3.服务消费者发现服务

4.服务消费者远程调度服务提供者进行服务消费,在调度过程中,使用了负载均衡策略,容错失败的功能。

5.服务消费者和提供者,在内存中记录服务的调用次数和调用时间,并定时每分钟发送一次统计数据到监控中心。

dubbo服务治理框架,具有的特性:
连通性 注册中心负责服务的注册。监控中心负责收集调用次数,调用时间;注册中心,服务提供者,服务消费者为长连接。
健壮性 监控中心宕机不影响其他服务的调用;注册中心集群,任意一个实例宕机自动切换到另一个注册中心实例;服务实例集群,任意一个实例宕机,自动切换到另外一个可用的实例。
伸缩性 可以动态增减注册中心和服务的实例数量
升级性 服务集群升级,不会对现有的架构造成压力。
spring cloud and dubbo diffence
微服务关注点 spring cloud dubbo
配置管理 config -
服务发现 eureka,consul,zookeeper zookeeper
负载均衡 ribbon 自带
网关 zuul -
分布式追踪 spring cloud sleuth -
容错 hystrix 不完善
通信方式 http ,message RPC
安全模块 spring cloud security -
spring cloud 和dubbo 一些细节区别
dubbo spring cloud
dubbo 更倾向于spring xml 的配置方式,dubbo官方也推荐这种方式 spring cloud 基于spring boot ,spring boot采用的是基于注解和java been配置方式的敏捷开发。
dubbo 的通信方式基于远程调用,对接口,平台,和语言有强依赖性。 spring cloud 的通信方式大多数是基于http restful 风格的,服务与服务之间完全无关,无耦合。由于采用的是http rest ,因此服务无关语言和平台,只需要提供相应api接口就可以相互调用。

kubernates:

kubernates 是一个容器集群管理系统,为容器化的应用程序提供部署运行,维护,扩展,资源调度,服务发现等功能。

猜你喜欢

转载自blog.csdn.net/qq_35781178/article/details/82947397