小言_互联网的博客

第3章 SpringCloud 简介

299人阅读  评论(0)

本章将会先从微服务架构应用的多个角度进行分析,了解一下微服务架构需要解决的核心问题,以及业界有哪些解决方案可以借鉴.

3.1 微服务架构的核心关键点

1. 微服务的服务治理


除上图之外,对于微服务架构应用来说还有一个重要考量因素:快速水平扩展;

Q:但是在进行快速扩展时,我们不可能预先知道所有的服务实例地址并告知服务消费者,而且也无法确定有哪些,有多少消费者会来消费
解决上述问题的方案,服务治理(服务注册以及服务发现)。

通过服务发现,消费者可以在预先不知道服务提供者物理地址的情况下,仅 通过相应的服务名称就可以实现服务调用。

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

2. 微服务的负载均衡

说起负载均衡,我们基本都是通过Ngnix反向代理方式来实现。

在微服务架构下,负载均衡就不仅仅指的是用户请求入口,还包含了微服务之间的调用。

因此,对于微服务的负载均衡:我们提出了客户端负载均衡也成为 软负载均衡

核心思想

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

3. 微服务的统一入口

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

4. 微服务的容错

微服务的架构的应用是一种高度分布式架构应用,各微服务之间的调用是通过网络完成的,但是网络访问是不可靠的. 所以,
如何在一个微服务不可用时不会影响其它微服务以及调用者?
如何有效防止服务调用失败而引起的雪崩?
如何在一个服务不可用时能对用户更友好,使整个应用非常具有弹性?

核心思想

针对以上问题, 在微服务架构的容错机制中,提出了断路器、服务降级等模式。来防止微服务调用失败引起的连锁反应,保证核心业务的正常运行;

5. 微服务的统一配置

6. 微服务的监控

微服务架构下,调试将变得非常艰难。
如何将分散在多个日志之间的调用串联起来,形成一个完整的请求调用链,将是另外一个非常大的挑战。

针对这个问题及需求:

在微服务监控中提供了日志聚合,日志可视化分析,调用链跟踪等解决方案;

7. 微服务的部署

  • Docker:快速部署
  • k8s:构建自动化部署编排

3.2 Spring Cloud 技术概览

Spring Cloud 是在 Netflix OSS等多家开源的基础上,将这些微服务框架 SpringBoot化,然后整合;

核心功能:

  • 基于 Netflix 实现服务治理、客户端负载均衡和声明式调用;
  • 服务网关;
  • 微服务容错管理;
  • 整合消息中间件提供消息驱动式开发;
  • 基于Spring Security 提供微服务安全、单点登录功能;
  • 分布式、版本化的统一配置管理;

3.2.1 SpringCloud 子项目

1. Spring Cloud 与 Spring Boot

Spring Boot
是微服务架构的核心技术之一。

其优点:

  • 快速启动
  • 通过在Spring Boot应用中添加 Spring MVC依赖,可以快速实现基于REST架构的服务接口,并可以提供HTTP标准动作的支持;
  • 默认提供JackJson序列化支持,可以让服务接口输入、输出支持JSON
2. Spring Cloud 与服务治理

服务治理是Spring Cloud 的核心,关于服务治理 Spring Cloud 为我们提供了两个选择 ConsulEureka

一般我们使用Eureka

Eureka 提供了服务注册中心、服务发现客户端,以及注册服务的UI界面应用。
Eureka 做到了,节点之间相互平等,有部分注册中心“挂掉” 也不会对整个应用造成影响。即使集群只剩一个节点存货,也可以正常的治理服务。即使所有服务注册中心都宕机,Eureka客户端中所缓存的服务实例列表信息,也可让服务消费者能够正常工作,从而保证微服务之间互相调用的健壮性和应用的弹性;

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

Spring Cloud 通过对Netflix微服务开源项目中的Ribbon再次封装,实现了客户端负载均衡。
Ribbon 默认与 Eureka 无缝整合,当客户端启动时, 从 Eureka 服务器中获取一份服务注册列表并维护在本地,当服务消费者需要调用服务时,Ribbon 就会根据负载均衡策略选择一个合适的服务提供者实例并进行访问。

Spring Cloud 通过集成 Netflix 的 Feign 项目,为开发者提供了声明式服务调用。默认Feign项集成了Ribbon,使得声明式调用也支持客户端负载均衡功能;

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

微服务容错、降级旨在为微服务架构提供更大的弹性,通过集成Netflix下的子项目 Hystrix,通过所提供的**@HystrixCommand**注解可以轻松为我们所开发的微服务提供容错、回退、降级等功能。

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

Hystrix 的仪表盘项目(Dashboard),可以监控各个服务调用所消耗的时间、请求数、成功率等。通过近乎实时的监控和告警,可以及时发现系统中潜在问题并进行处理。

5. Spring Cloud 与服务网关

Spring Cloud 通过集成 Netflix 中的Zuul 实现API服务网关功能,提供对请求的路由和过滤两个功能;

路由功能 负责将外部请求转发到具体的微服务实例上 ,是实现外部访问统一入口的基础。
过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

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

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

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

6. Spring Cloud 与消息中间件

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

此外,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 与微服务链路追踪
  • 子项目 Sleuth
    Sleuth 为开发者提供了微服务之间调用的链路追踪。

    核心思想

    通过一个全局的ID将分布在各微服务服务节点上的请求处理串联起来,还原了调用关系,并借助数据埋点,实现对微服务调用链路上的性能数据的采集。

  • 子项目 Zipkin

    通过将Sleuth 采集的数据发送给 Zipkin 进行存储、统计和分析,从而可以实现可视化的分析和展示。

9. Spring Cloud 与 微服务安全

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

  • spring Cloud Security 默认支持 OAuth 2.0认证协议,因此单点登录容易实现
  • OAuth2.0所生成的令牌可以使用JWT的方式,进一步简化了微服务中的安全管理。
10. Spring Cloud 的其他子项目
  • Spring Cloud Cli: 提供了以命令行和脚本的方式来管理微服务;
  • Spring Cloud Data Flow: 用于开发、执行大数据处理的同意编程模型和托管服务。
  • Spring Cloud Task: 用于短时的任务管理和调度微服务管理,通常与Data Flow一起使用。
  • Spring Cloud Starters: 类似于Spring Boot的 启动项目,为基于Spring Cloud 的微服务开发提供开箱即用的依赖管理。
  • Spring Cloud Contract: 这是面向Java的七月框架,消费者驱动的,旨在帮助开发者完成微服务测试的子项目。

转载:https://blog.csdn.net/hardworking_boy/article/details/102467488
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场