Loading

45-SpringCloud

1. 微服务架构

微服务架构设计的核心思想就是“微”,拆分的粒度相对比较小,这样的话单一职责、开发的耦合度就会降低、微小的功能可以独立部署扩展、灵活性强,升级改造影响范围小。

(1)服务注册与服务发现

  • 服务注册:服务提供者将所提供服务的信息(服务器 IP 和端口、服务访问协议等)注册/登记到注册中心;
  • 服务发现:服务消费者能够从注册中心获取到较为实时的服务列表,然后根究一定的策略选择一个服务访问。

(2)负载均衡

负载均衡即将请求压力分配到多个服务器(应用服务器、数据库服务器等),以此来提高服务的性能、可靠性。

(3)熔断

熔断即断路保护。微服务架构中,如果下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。

(4)链路追踪

微服务架构越发流行,一个项目往往拆分成很多个服务,那么一次请求就需要涉及到很多个服务。不同的微服务可能是由不同的团队开发、可能使用不同的编程语言实现、整个项目也有可能部署在了很多服务器上(甚至百台、千台)横跨多个不同的数据中心。所谓链路追踪,就是对一次请求涉及的很多个服务链路进行日志记录、性能监控。

(5)API 网关

微服务架构下,不同的微服务往往会有不同的访问地址,客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信可能出现:

  1. 客户端需要调用不同的 url 地址,增加了维护调用难度;
  2. 在一定的场景下,也存在跨域请求的问题(前后端分离就会碰到跨域问题,原本我们在后端采用 Cors 就能解决,现在利用网关,那么就放在网关这层做好了);
  3. 每个微服务都需要进行单独的身份认证。那么 API 网关就可以较好的统一处理上述问题,API 请求调用统一接入 API 网关层,由网关转发请求。API 网关更专注在安全、路由、流量等问题的处理上(微服务团队专注于处理业务逻辑即可),它的功能比如:
    • 统一接入(路由)
    • 安全防护(统一鉴权,负责网关访问身份认证验证,与“访问认证中心”通信,实际认证业务逻辑交移“访问认证中心”处理)
    • 黑白名单(实现通过 IP 地址控制禁止访问网关功能,控制访问)
    • 协议适配(实现通信协议校验、适配转换的功能)
    • 流量管控(限流)
    • 长短链接支持
    • 容错能力(负载均衡)

2. SpringCloud

开发分布式系统可能具有挑战性,复杂性已从应用程序层转移到网络层,并要求服务之间进行更多的交互。将代码设为“cloud-native(云原生)”就需要解决 12-factor,例如外部配置、服务无状态、日志记录以及连接到备份服务之类的问题,Spring Cloud 项目套件包含使您的应用程序在云中运行所需的许多服务。

云原生应用程序的 12 要素:

2.1 是什么

Spring Cloud 是一系列框架的有序集合(Spring Cloud 是一个规范)。

Spring Cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

需要注意的是,Spring Cloud 其实是一套用于构建微服务架构的规范,而不是一个可以拿来即用的框架(所谓规范就是应该有哪些功能组件,然后组件之间怎么配合,共同完成什么事情)。在这个规范之下第三方的 Netflix 公司开发了一些组件、Spring 官方开发了一些框架/组件,包括第三方的阿里巴巴开发了一套框架/组件集合 Spring Cloud Alibaba,这些才是 Spring Cloud 规范的实现。

SpringCloud 架构:

2.2 组件用途

Spring Cloud 规范及实现意图要解决的问题其实就是微服务架构实施过程中存在的一些问题,比如微服务架构中的服务注册发现问题、网络问题(比如熔断场景)、统一认证安全授权问题、负载均衡问题、链路追踪等问题。

2.3 技术栈

如前所述,Spring Cloud 是一个微服务相关规范,这个规范意图为搭建微服务架构提供一站式服务,采用组件(框架)化机制定义一系列组件,各类组件针对性的处理微服务中的特定问题,这些组件共同来构成 Spring Cloud 微服务技术栈。

Spring Cloud 生态圈中的组件,按照发展可以分为第一代 Spring Cloud 组件和第二代 Spring Cloud 组件。

2.4 补充说明

(0)组件协同工作

Spring Cloud 中的各组件协同工作,才能够支持一个完整的微服务架构。比如:

  • 注册中心负责服务的注册与发现,将各服务连接起来;
  • API 网关负责转发所有外来的请求;
  • 断路器负责监控服务之间的调用情况,连续多次失败进行熔断保护;
  • 配置中心提供了统一的配置信息管理服务,可以实时通知各个服务获取最新的配置信息。

(1)Spring Cloud 与 Dubbo 对比

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,基于 RPC 调用,对于目前使用率较高的 Spring Cloud Netflix 来说,它是基于 HTTP 的,所以效率上没有 Dubbo 高,但问题在于 Dubbo 体系的组件不全,不能够提供一站式解决方案,比如服务注册与发现需要借助于 Zookeeper 等实现,而 Spring Cloud Netflix 则是真正的提供了一站式服务化解决方案,且有 Spring 大家族背景。

前些年,Dubbo 使用率高于 SpringCloud,但目前 Spring Cloud 在服务化/微服务解决方案中已经有了非常好的发展趋势。

(2)Spring Cloud 与 Spring Boot 的关系

Spring Cloud 只是利用了 Spring Boot 的特点,让我们能够快速的实现微服务组件开发。若不使用 Spring Boot 的话,我们在使用 Spring Cloud 时,每一个组件的相关 Jar 包都需要我们自己导入配置以及需要开发人员考虑兼容性等各种情况。所以 Spring Boot 是我们快速把 Spring Cloud 微服务技术应用起来的一种方式。

请求 https://start.spring.io/actuator/info,然后 json 格式化响应结果查看对应关系。

3. 基础环境搭建

本次学习使用的环境:

dependency version
SpringCloud Hoxton.SR1
SpringBoot 2.2.2.RELEASE
CloudAlibaba 2.1.0.RELEASE
Java JDK8
Maven 3.5 及以上
MySQL 5.7 及以上

posted @ 2022-04-10 16:36  tree6x7  阅读(37)  评论(0编辑  收藏  举报