Spring Cloud作为Java语言的微服务框架,依赖于Spring Boot,具有快速开发、持续交付、易于部署等特点。
微服务的特点:
微服务的功能主要体现在:
微服务系统由大量微服务构成,每个微服务有众多实例,服务之间相互依赖成网状,需要服务注册中心来统一管理微服务实例。
服务注册是指向服务注册中心一个服务实例,服务提供者将服务信息(服务名、IP地址等)告知服务注册中心。
服务发现是指当服务消费者需要消费另一个服务时,服务注册中心告知服务消费者其消费的服务的实例信息。
通常情况下,一个服务既是服务提供者也是服务消费者。
服务注册中心提供服务的健康检查方式。通常一个服务实例注册后会定时向服务注册中心发送心跳,表明处于可用状态。当一个服务实例停止向服务注册中心提供心跳一段时间后,服务注册中心认为该服务实例不可用,将其剔除服务注册列表。如果服务实例继续向注册中心提供信条,服务注册中心会将其重新加入服务注册列表。
微服务系统中,所有的服务向服务注册中心注册,服务注册中心持有每个服务的服务名和IP地址等信息,同时每个服务也会获取服务注册列表信息。服务消费者集成负载均衡组件,向服务消费者获取服务注册列表信息,每隔一段时间刷新获取该列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例注册信息,并通过一定的负载均衡策略选择一个服务提供者实例,向该实例进行服务消费,这样就实现了负载均衡。
由于服务注册中心不但需要定时接收服务的心跳,还需要向服务提供注册列表信息,当服务实例数量较大时服务注册中心负载较重,此时需要实现服务注册中心高可用。一般做法是将服务注册中心集群化,每个服务注册中心的数据实时同步。
这里主要指分布式系统为解决雪崩效应引进的熔断器机制。当一个服务处理用户请求失败次数超过设定阀值时,打开熔断器,所有的请求不执行业务逻辑而直接执行快速失败。处于打开状态的熔断器,一段时间后会处于半打开状态,熔断器检测一部分请求是否正常,如果执行的请求成功,则关闭熔断器正常提供服务。
熔断器机制的优点:
微服务系统接口资源通常由服务网关统一暴露,内部服务不直接对外提供API接口。API网关通常有请求转发的作用,并可能负责一定的安全验证。服务网关层之前可能需要加负载均衡层(Nginx双机热备),通过一定的路由策略将请求转发到网关层,经过一系列的身份验证和权限判断转发到具体的服务。
网关层的功能特性:
微服务架构中需要有统一管理配置文件的组件。
首先,Config Server配置服务读取配置文件仓库的配置信息,配置文件仓库可以是本地仓库也可以是远程Git仓库;启动服务时,服务向配置服务读取配置信息;当服务配置信息执行修改后,向配置服务发送Post请求进行刷新,此时服务会向配置服务重新读取配置文件。
对于集群化的服务可以使用消息总线来刷新多个服务实例。
微服务架构中需要实现分布式链路追踪,来跟踪一个请求有哪些服务参与、参与的顺序如何,从而使请求链路清晰可见。
Google2010年发表的论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》是业内实现链路追踪的标杆和理论基础。常见的链路追踪组件有Dapper(Google)/Zipkin(Twitter)/Eagleeye(Alibaba)。
Spring Cloud是基于Spring Boot的。Spring Boot简化了Spring复杂的配置和依赖管理,通过起步依赖和内置Servlet容器能够使开发者迅速搭建一个Web工程。Spring Cloud的首要目标就是通过一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统,通过包装一系列技术框架,实现了一套基于注解、Java配置和基于模板开发的微服务框架,提供了服务注册发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等常用组件。
服务注册发现组件Eureka
熔断组件Hystrix
Hystrix除了基本的熔断器功能外,还能够实现服务降级、服务限流功能,另外还提供了熔断器健康监测。Hystrix Dashboard提供单个服务熔断器的健康状态数据UI,Hystrix Turbine提供多个服务熔断器的健康状态数据UI。
负载均衡组件Ribbon
Ribbon通常和Eureka、Zuul、RestTemplate、Feign配合使用。
路由网关Zuul
Zuul有智能路由和过滤的功能。Zuul与Ribbon结合能够做到负载均衡、智能路由。过滤功能是通过拦截请求实现的。
Spring Cloud Config
提供配置文件统一管理功能。通常情况下,Spring Cloud Config和Spring Cloud Bus相互配合刷新指定Client或所有Client的配置文件。
Spring Cloud Security
是对Spring Security的封装,提供用户权限验证。通常会配合Spring Security OAuth2使用。
Spring Cloud Sleuth
分布式链路追踪组件,封装了Dapper、Zipkin、Kibana等。
Spring Cloud Stream
数据流操作包,可以封装RabbitMQ、ActiveMQ、Kafka等消息组件。
一个简单的由Spring Cloud搭建的微服务系统通常由服务注册中心Eureka、网关Zuul、配置中心Config和授权服务Auth构成。
其他组件:
Dubbo是阿里巴巴开源的分布式服务框架。包含如下核心内容:
与Spring Cloud比较:
关注点 | Spring Cloud | Dubbo |
---|---|---|
配置管理 | Spring Cloud Config | - |
服务发现 | Eureka/Consul/Zookeeper | Zookeeper |
负载均衡 | Ribbon | 自带 |
网关 | Zuul | - |
分布式追踪 | Spring Cloud Sleuth | - |
容错 | Hystrix | 不完善 |
通信方式 | HTTP、Message | RPC |
安全模块 | Spring Cloud Security | - |
Kubernetes是Google开发的容器集群管理系统,具有以下特点:
Kubernetes提供的功能:
Kubernetes完全可以成为构建和部署为服务的一个工具,是从服务编排上实现的。
与Spring Cloud对比:
关注点 | Spring Cloud | Kubernetes |
---|---|---|
配置管理 | Spring Cloud Config | Kubernetes ConfigMap |
服务发现 | Eureka/Consul/Zookeeper | Kubernetes Services |
负载均衡 | Ribbon | Kubernetes Services |
网关 | Zuul | Kubernetes Services |
分布式追踪 | Spring Cloud Sleuth | Open tracing |
容错 | Hystrix | Kubernetes Health Check |
安全模块 | Spring Cloud Security | - |
分布式日志 | ELK | EFK |
任务管理 | Spring Batch | Kubernetes Jobs |