《Spring Cloud微服务架构进阶》笔记

Spring Cloud微服务架构进阶

微服务架构介绍

微服务架构的出现

  • 单体应用架构

    • 特点

      大部分Web工程是将所有的功能模块打包到一起部署和运行,例如Java应用程序打包为一个war包

    • 架构图

    • 优点

      集成简单
      易于调试
      易于部署
      通过负载均衡,运行多个服务实例,轻松实现应用扩展

    • 缺点

      低可靠性。每个bug都可能会影响到整个应用的可靠性。
      复杂性高。单体应用代码库巨大,不利于新成员,难以理解和迭代。
      持续部署困难。为了更新一个组件,必须重新部署整个应用。可能影响无关服务。
      扩展能力有限。单体架构只能通过运行多个应用服务实例来扩容。
      阻碍技术创新:单体应用往往使用统一案解决所有问题,成员必须使用相同的语言和架构,想要引入新的框架或技术平台非常困难

  • SOA架构

    通过服务的流程化来实现业务的灵活性,但还可能是单一的系统

  • 微服务架构

    微服务没有给出明确定义

    • 组成

      服务注册于发现:服务提供方将自己调用地址注册到服务注册中心,让服务调用方能够方便地找到自己;服务调用方从服务注册中心找到自己需要调用的服务的地址。
      负载均衡:服务提供方一般以多个实例的形式提供服务,负载均衡功能能够让服务调用方连接到合适的服务节点。并且,服务节点选择的过程对服务调用方是透明的。
      服务网关:服务网关是服务调用的唯一入口,可以在这个组件中实现用户鉴权、动态路由、灰度发布、A/B测试、负载限流等功能。
      配置中心:将本地话配置信息注册到配置中心
      集成框架:以配置形式将所有微服务组件集成到统一的界面框架下,让用户能够在统一的界面中使用系统。
      调用链监控:记录完成一次请求的先后衔接和调用关系,并将这种穿行或并行的调用关系展示出来。
      支撑平台:系统的部署、运维、监控等都比单体应用架构更加复杂,大部分工作需要自动化。

    • 优点

      通过将单体应用分解为多个服务的方法解决复杂性问题。
      团队并行开发得以推进。
      每个服务独立都是部署的。
      每个服务易于独立扩展。

    • 挑战

      运维要求较高。需要保证几十甚至几百个服务的正常运行。
      分布式的复杂性。系统容错、网络延迟、分布式事务等。
      接口调整成本高。微服务之间通过接口进行通信。如果修改某个微服务的API,可能所有使用了该接口的微服务都需要做调整。
      重复劳动。很多服务可能使用先沟通的功能,但这个功能并没有达到分级为一个微服务的程度。
      可测试性的挑战。难以进行可视化及全卖你测试。

微服务架构的流派

ZeroC IceGrid、基于消息队列、Docker Swarm和Spring Coud。

Spring Cloud总览

Spring Cloud架构

Spring Cloud特性

Spring Boot

作用

帮助开发者自动配置Spring的相关依赖

Spring Boot与Spring Cloud

Spring Cloud基于Spring Boot框架开发应用,为微服务开发中的架构问题提供一套解决方案

服务注册与发现:Eureka

简介

Eureka是一个RESTfule风格的服务注册于发现的基础服务组件。Eureka由两部分组成,一个是Eureka Server,提供服务注册和发现功能;Eureka Client,简化了客户端与服务端之间的交互。

搭建Eureka服务注册中心

声明式RESTful客户端:Spring Cloud OpenFeign

声明式RESTful网络请求客户端

断路器:Hystrix

Hystrix能够在依赖服务失效的情况下,通过隔离系统依赖服务的方式,防止服务级联失败;提供失败回滚机制,使系统能够更快地从异常中恢复

基础应用

  • 功能

    在通过第三方客户端访问依赖服务出现高延迟或者失败时,为系统提供保护和控制。
    在复杂地分布式系统中防止级联失败(服务雪崩效应)。
    快速失败同时能快速恢复。
    提供失败回滚和优雅地服务降级机制。
    提供近实时的监控、报警和运维控制手段。

  • RestTemplate与Hystrix

  • OpenFeign与Hystrix

客户端负载均衡器:Spring Cloud Netflix Ribbon

Ribbon是管理HTTP和TCP服务客户端的负载均衡器。

API网关:Spring Cloud Gateway

为什么引入API网关

  • 微服务不用网关的问题

    客户端需求和每个微服务暴露的细粒度API不匹配。
    部分服务使用的协议不是Web友好协议。可能使用Thrift二进制RPC,也可能使用AMQP消息传递协议。
    微服务难以重构。如果合并两个服务,或者将一个服务拆分成两个或更多服务,这类重构非常困难

  • API网关

    API网关自身是一个服务,并且是后端服务的唯一入口。类似于外观模式。API网关封装了系统内部架构,为每个客户端提供一个定制的API 。还可以负责身份验证、监控、负载均衡、限流、降级与应用检测等功能。

介绍

Spring Cloud Gateway是构建在Spring生态之上的API网关。旨在提供简单有效的途径来转发请求,并未他们提供横切关注点。

  • 特征

    基于Java 8
    支持Spring 5
    支持Spring Boot 2
    支持动态路由
    支持内置到Spring Handler映射中的路由匹配
    支持基于HTTP请求的路由匹配(path、method、header、host等)
    过滤器作用域匹配的路由
    过滤器可以修改下游HTTP请求和HTTP响应(修改头部、修改请求参数、修改请求路径等)
    通过API或配置驱动
    支持Spring Cloud DiscoveryClient配置路由,与服务发现与注册配合使用

基础使用

配置中心:Spring Cloud Config

基于Config服务器,就可以集中管理各种环境下的各种应用的配置。不仅适用于所有的Spring应用,而且对于任意语言的应用都能够使用。

常见配置中心实现方法

硬编码,缺点是需要修改代码,风险大
放在xml等配置文件中,和应用一起打包,缺点是更新需要重新打包和重启
文件系统,缺点是依赖操作系统等
读取系统的环境变量,缺点是有大量的配置需要人工设置到环境变量中,不便于管理,且依赖平台
云端存储,缺点是与其他应用耦合

Config Client

Config Server

消息驱动:Spring Cloud Stream

Spring Cloud Stream是Spring Cloud微服务框架中构建消息驱动能力的组件。Stream可以进行基于消息队列的消息通信,它使用Spring Integration链接消息中间件以实现消息事件驱动。基于Stream,开发者可以实现与消息队列相关的消息驱动型引用,Spring Cloud的消息总线Bus就是基于Stream实现的。

注意

如果使用RabbitMQ,一定要先安装它,可以使用docker安装,最好是management。
远程RabbitMQ要配置uri、端口、账号、密码

消息总线:Spring Cloud Bus

总线作为中枢系统,提供统一的服务入口,实现了服务统一管理、服务路、协议转换、数据格式转换等功能。将不同系统连接起来,并大大降低连接数。

配置服务器

配置客户端

认证与授权:Spring Cloud Security

基础应用

应用的安全主要关注两方面:认证和授权

  • 中心化的权限管理系统

    对用户的身份和权限进行统一的管理,可以做到一次授权,多次多点使用

  • 将安全控制分散到各个微服务中

    由各个微服务根据自身的业务对用户的访问进行管理和控制。安全管理过于分散,甚至每个微服务都有自己的一套实现方式,不利于统一管理。

服务链路追踪:Spring Cloud Sleuth

链路监控组件介绍

基础应用

你可能感兴趣的:(《Spring Cloud微服务架构进阶》笔记)