springcloud介绍

文章内容来自 《springcloud微服务架构开发实战》 董超 胡炽维

代码开发时有GoF的经典开发模式可以供我们参考使用一样,对于微服务架构,业界也有一些成功的模式和实践,Spring Cloud就是微服务架构应用的集大成者。

在这里插入图片描述

1.微服务的服务治理

作为消费者如何访问并调用服务提供者所提供的服务,作为服务提供者如何能让服务消费者知道并进行消费。在进行快速扩展时我们不可能预先知道所有的服务实例地址并告知服务消费者,而且也无法确定有哪些、有多少消费者会来消费。

通过服务发现,消费者通过相应的服务名称就可以实现服务调用。服务注册机制,可以让服务提供者在上线时将所提供的服务信息注册到服务治理服务器中,供服务消费者使用。当服务下线时将将自己从服务治理服务器中注销,避免服务消费者调用而造成的异常。

2.微服务的负载均衡

对于负载均衡,传统应用通常会在用户请求的入口通过负载均衡设备(如F5等)或通过Ngnix反向代理方式实现负载均衡。在微服务架构下负载均衡不仅仅指的是用户请求入口,还包含了微服务之间的调用。业界提出了客户端负载均衡的概念,也称之为软负载均衡。

核心思想就是在服务消费者(也就是客户端)保存有一份服务者列表,这份服务者列表通常是从服务治理服务器中动态获取,也可以采用固定配置方式,然后通过某种负载均衡策略来决定每次服务调用时所使用的具体服务实例,从而实现微服务之间的负载均衡。

3.微服务的统一入口

微服务是众多的,而且大部分都会对外提供某种服务接口。对于前端或者第三方开发者来说,一定不愿意与多个服务地址打交道。那么如何将这么多微服务入口统一到一个入口进行管理呢?可能首先映入你脑海的就是门户模式,通过门户模式可以有效地隐藏后端的复杂性,对客户提供统一访问入口。

对于微服务也是,API服务网关就是为微服务提供了一个统一入口,并能够附加一些路由规则,使得不同的微服务通过路由规则提供一致的访问入口

4.微服务的容错

微服务架构的应用是一种高度分布式架构应用,如何有效防止服务调用失败而引起的“雪崩效应”呢?针对微服务架构的容错提出了断路器、服务降级等模式,这些模式都可以有效防止微服务调用失败而引起的连锁反应,并且在必要时可以通过这些模式主动实施应用的降级处理,从而保证核心业务的正常运行。

5.微服务的统一配置

众多的微服务会存在一些共同的配置数据。

6.微服务的监控

在微服务监控中提供了日志聚合、日志可视化分析、调用链跟踪等解决方案,都可为我们所构建的微服务应用的运维提供强有力的武器。

7.微服务的部署

自动化工具,一方面可以提升工作效率,另一方面通过自动化的方式才能够保障所构建和部署的服务实例一致化。因此,业界针对这种需求提出了相应的解决方案,包括通过构建—发布管道来构建自动化发布流程。可以通过Docker工具来快速部署,通过k8s来构建自动化部署编排等。


Spring Cloud技术概览

使用Spring Boot风格将这些比较成熟的微服务框架组合起来。核心功能包含:·基于Netflix实现服务治理、客户端负载均衡和声明式调用;·服务网关;·微服务容错管理;·整合消息中间件提供消息驱动式开发;·基于Spring Security提供微服务安全、单点登录功能;·分布式、版本化的统一配置管理;·微服务调用链及追踪管理。

版本号:“发布列车”的概念,Angel、Brixton及Dalston,Edgware和Finchley,伦敦地铁;


Spring Cloud子项目

两类:1是对现有成熟的第三方开源项目Spring Boot化,封装继承,方便使用;2是新增开发所需的基础设施,如Spring Cloud Config提供了统一配置中心、SpringCloud Stream则充当了与Kafka、RabbitMQ等消息中间件快速集成的桥梁。

在这里插入图片描述

1.Spring Cloud与Spring Boot

Spring Boot可以说是微服务架构的核心技术之一。通过在Spring Boot应用中添加Spring MVC依赖,就可以快速实现基于REST架构的服务接口,并且可以提供对HTTP标准动作的支持。而且Spring Boot默认提供JackJson序列化支持,可以让服务接口输入、输出支持JSON,可谓如虎添翼

2.Spring Cloud与服务治理

提供了Consul和Netflix的Eureka。https://cloud.spring.io/spring-cloud-consul/。

Spring Cloud对**Eureka(**netflix)进行了二次封装,形成了SpringCloud Netflix子项目.Eureka提供了服务注册中心、服务发现客户端,以及注册服务的UI界面应用。即使所有服务注册节点都宕机,Eureka客户端中所缓存的服务实例列表信息,也可让服务消费者能够正常工作.

3.Spring Cloud与客户端负载均衡

对Netflix微服务开源项目中的Ribbon再次封装,实现了客户端负载均衡。

Ribbon默认与Eureak进行无缝整合,当客户端启动的时候,从Eureka服务器中获取一份服务注册列表并维护在本地,当服务消费者需要调用服务时,Ribbon就会根据负载均衡策略选择一个合适的服务提供者实例并进行访问。

在微服务调用时通过RestTemplate进行调用,这时需要开发者处理参数、调用路径等,Spring Cloud通过集成Netflix的Feign项目,为开发者提供了声明式服务调用.默认Feign项目集成了Ribbon,使得声明式调用也支持客户端负载均衡功能。

4.Spring Cloud与微服务容错、降级

在Spring Cloud中,将再一次拥抱Netflix,通过集成其下子项目Hystrix,通过所提供的@HystrixCommand注解可以轻松为我们所开发的微服务提供容错、回退、降级等功能。此外,Hystrix也默认集成到Feign子项目中。

Hystrix是根据“断路器”模式而创建。当Hystrix监控到某服务单元发生故障之后,就会进入服务熔断处理,并向调用方返回一个符合预期的服务降级处理(fallback),而不是长时间的等待或者抛出调用异常,从而保障服务调用方的线程不会被长时间、不必要地占用,避免故障在应用中的蔓延造成的雪崩效应。

而Hystrix的仪表盘项目(Dashboard)可以监控各个服务调用所消耗的时间、请求数、成功率等.

5.Spring Cloud与服务网关

集成Netflix中的Zuul实现API服务网关功能,提供对请求的路由和过滤两个功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

通过Zuul,可以将细粒度的服务组合起来提供一个粗粒度的服务,所有请求都导入一个统一的入口,对外整个服务只需要暴露一个API接口,屏蔽了服务端的实现细节。

通过Zuul的反向代理功能,可以实现路由寻址,将请求转发到后端的粗粒度服务上,并做一些通用的逻辑处理。

此外,Zuul默认会与Eureka服务器进行整合,自动从Eureka服务器中获取所有注册的服务并进行路由映射,实现API服务网关自动配置

6.Spring Cloud与消息中间件

提供了Stream子项目,通过建立消息应用抽象层,构建了消息收发、分组消费和消息分片等功能处理,将业务应用中的消息收发与具体消息中间件进行解耦,使微服务应用开发中可以非常方便地与Kafka和RabbitMQ等消息中间件进行集成。

此外,Spring Cloud Bus基于Stream进行扩展,可以作为微服务之间的事件、消息总线,用于服务集群中状态变化的传播。比如Spring Cloud Config借助Bus,可以实现配置的动态刷新处理

7.Spring Cloud与分布式配置中心

Spring Cloud Config具有中心化、版本控制、支持动态更新和语言独立等特性。在Config子项目中将微服务应用分为两种角色:配置服务器(Config Server)和配置客户端(Config Client)。使用配置服务器集中地管理所有配置属性文件,配置服务中心可以将配置属性文件存储到Git、SVN等具有版本管理仓库中,也可以存放在文件系统中。默认采用Git的方式进行存储,因此可以很容易地对配置文件进行修改,并实现版本控制。

8.Spring Cloud与微服务链路追踪

Spring Cloud中的Sleuth子项目为开发者提供了微服务之间调用的链路追踪。Sleuth核心思想就是通过一个全局的ID将分布在各微服务服务节点上的请求处理串联起来,还原了调用关系,并借助数据埋点,实现对微服务调用链路上的性能数据的采集。因此,通过Sleuth可以很清楚地了解到一个用户请求经过了哪些服务、每个服务处理花费了多长时间,从而可以对用户的请求进行分析。

此外,通过将采集的数据发送给Zipkin进行存储、统计和分析,从而可以实现可视化的分析和展示,帮助开发者对微服务实施优化处理。

9.Spring Cloud与微服务安全

SpringCloud Security为我们提供了一个认证和鉴权的安全框架,实现了资源授权、令牌管理等功能,同时结合Zuul可以将认证信息在微服务调用过程中直接传递,简化了我们进行安全管控的开发。

此外,因为Spring Cloud Security默认支持OAuth 2.0认证协议,因此单点登录也可以非常容易实现,并且OAuth2.0所生成的令牌可以使用JWT的方式,进一步简化了微服务中的安全管理。

10.Spring Cloud的其他子项目

·Spring Cloud Cli:提供了以命令行和脚本的方式来管理微服务。

·Spring Cloud Data Flow:一个用于开发、执行大数据处理的统一编程模型和托管服务。其基于原生云,并重新对Spring XD进行设计,简化了大数据应用的开发,为基于微服务的分布式流处理和批处理数据通道提供了一系列模型和最佳实践。

·Spring Cloud Task:用于短时的任务管理和调度微服务管理,通常与Data Flow一起使用。

·Spring Cloud Starters:类似于Spring Boot的启动项目,为基于Spring Cloud的微服务开发提供开箱即用的依赖管理。

·Spring Cloud Contract:这是面向Java的契约框架,消费者驱动的,旨在帮助开发者完成微服务测试的子项目。


为何选择Spring Cloud

容器、k8s、ServiceMesh、Cloud Native、gRPC等新技术、新理念不断涌出

优点:作为Spring Boot的传承,遵循约定优于配置的原则,///大部分子项目开箱即用,采用自动化配置机制Spring Cloud的口号就是开发“面向云环境的应用程序”///抛弃了传统的RPC通信,采用了基于HTTP的REST方式,使得微服务接口更为灵活,服务提供者和消费者之间的依赖只需要一纸契约即可,而不存在代码级别的强依赖///·Spring Cloud并没有限制所使用的环境,可以与异构系统进行整合。同时对于所提供的各组件服务既可单独部署,又可集中部署,方便了运维和管理.


Spring Cloud版Hello World示例

@FeignClient(value=“HP-SERVICE”,fallback=HelloServiceFallback.class)

value属性表示所要调用的具体服务名称HP-SERVICE,而fallback属性设置为HelloServiceFallback.class,表示当所调用的微服务不可用时,使用该类所提供功的能替代原服务,也就是微服务容错功能。

服务提供者

服务消费者:消费者调用HelloService接口;

HelloService接口:使用@FeignClient,调用服务提供者路径下接口;

服务治理微服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值