《Spring Cloud 微服务项目实战》课程笔记(二)

微服务全家桶和实战项目介绍

Spring Cloud 与 Spring Boot 的关系

  • Spring Cloud 和 Spring Boot 达成了一种默契的配合:
    • Spring Boot 主内,通过自动装配和各种开箱即用的特性,搞定了数据层访问、RESTful 接口、日志组件、内置容器等等基础功能,让开发人员不费吹灰之力就可以搭建起一个应用。
    • Spring Cloud 主外,在应用集群之外提供了各种分布式系统的支持特性,帮助你轻松实现负载均衡、熔断降级、配置管理等诸多微服务领域的功能。

Spring Cloud 组件库和版本更新

《Spring Cloud 微服务项目实战》课程笔记(二)_第1张图片

  • 大部分开源项目以数字版本进行更新迭代,Spring Cloud 在诞生之初就别出心裁使用了字母序列,以字母 A 开头,按顺序使用字母表中的字母标识重大迭代发布的大版本号。
  • Spring Cloud 自 2015 年发布之始就保持了极其旺盛的生命力,早期版本每半年就有一个大的版本号迭代,即便发展至今,也保持着几乎一年一升版的快速更新节奏。

优惠券平台项目的整体功能和模块

  • 我们的实战项目就是要搭建一个简化版的营销优惠计算系统,实现优惠券模板的创建、用户领取优惠券、下单核销优惠券和订单价格试计算等功能。
  • 使用模板的好处是可以对优惠券消费规则做一层抽象,比如满减类、打折类这些优惠券只是具体的优惠金额不同,但是玩法类似,我们把相类似的玩法功能抽象成一个模板,就可以简化具体优惠券的创建和核销流程。
  • 整个项目划分为优惠券模板服务计算服务用户服务平台类组件这四大模块。
    • 优惠券模板服务
      • 模板规则是创建具体优惠券的前置条件,每种类型的模板都是一个计算公式,这个公式约定了优惠计算的方式。
      • 模板服务实现了模板规则的创建、克隆、分页查找等功能。
    • 优惠计算服务
      • 这个模块是根据用户购物车中的商品信息(单价、数量、所属门店)和优惠券信息,来计算当前订单优惠后的价格。
      • 另外,如果用户有多张优惠券,还提供了“优惠金额试算”服务,帮助用户挑选最省钱的优惠券。
    • 用户服务
      • 暴露给外部用户使用的接口,它依赖于模板服务和优惠计算服务完成底层逻辑,主要业务场景是用户领券、订单价格试算、下单核销和订单金额试算等功能。
    • 平台类组件
      • 主要包括一些业务无关的中心化组件,比如 Gateway 网关等等。
  • 从整体来看,优惠券模板服务和优惠计算服务是基础服务,用户服务是对用户开放的接口,它依赖于这两个基础服务来完成业务逻辑。而平台类组件则提供了横向的微服务特性支持,比如微服务网关、链路追踪功能等等,可以把它们理解为“微服务中间件”。

Spring Boot 实战项目规划

  • 从项目实施的角度来看,Spring Boot 阶段的任务相对简单。
    • 使用 spring-data-jpa 和 spring-web 搭建一个单体应用版的优惠券模板服务。
      • spring-data-jpa 是用来实现数据库 CRUD 操作的组件。
      • spring-web 是开发 RESTFul 风格的 API 接口所需要用到的组件。
    • 使用同样的技术搭建订单优惠计算服务和用户服务。
  • 在 Spring Boot 的阶段,用户服务是一个“超级单体应用”,优惠券模板服务和订单优惠计算服务都被打包到了用户服务中,跨模块的服务调用都是通过本地方法完成的,因此你只用启动用户服务就可以执行所有模块的业务功能。

Spring Cloud 实战项目全景规划

  • 整个微服务框架由浅入深分为了三个不同的阶段:
    • 第一阶段:搭建基础的微服务功能,实现微服务之间的通信
      • 将用户微服务、优惠券模板服务和订单优惠计算服务拆分为独立部署的业务系统,通过注册中心来实现服务注册和服务发现,让各个微服务可以互相调用。
      • 这个阶段涉及的关键技术是 Nacos 注册中心、Loadbalancer 客户端负载均衡组件和 OpenFeign 服务间调用组件。
        • Nacos 是 Alibaba 出品的服务治理组件,它作为一个注册中心组件,负责收集所有服务节点的地址信息并维护服务注册表,所有服务上线之后都会向它汇报状态。
        • Loadbalancer 则承担了负载均衡的任务,在客户端发起服务调用的时候,它会负责从 Nacos 的注册表中挑选一台目标服务器。
        • OpenFeign 组件是一个“锦上添花”的组件,它能够简化基于 HTTP 的远程服务调用,让我们就像使用本地接口一样方便地发起远程服务调用。
    • 第二阶段:为各个模块构建服务容错分布式配置中心分布式链路追踪能力
      • 利用服务容错提高微服务架构的可用性。
      • 搭建全链路的分布式链路追踪能力。
      • 实现统一的配置管理和动态属性推送。
      • 这个阶段涉及的技术组件是 Nacos Config、Sentinel、Sleuth+Zipkin+ELK。
        • Sentinel 作为服务容错组件。Sentinel 秉承了阿里系“大而全”的传统,只这一款组件就可以实现降级熔断流量整形等多种服务容错途径。
        • 链路追踪也是微服务架构中一个很重要的功能,线上异常排查全靠它提供线索。Spring Cloud 官方开源的 Sleuth 实现了日志打标功能,使用全局唯一标记将一次跨微服务调用链上的各个环节全部串联起来。
        • Zipkin 组件实现调用链的可视化检索,将调用链上各个阶段的请求按顺序显示在页面上,这样可以一目了然定位到线上异常发生在哪个环节。
        • 业界主流的 ELK 组合(Elastic Search + Logstash + Kibana)作为日志检索系统。
        • 借助 Nacos Config 可以轻松实现配置项的远程获取和动态推送,在配置项的应用隔离和环境隔离方面 Nacos 也是一把好手。
    • 第三阶段:进一步实现微服务网关消息驱动分布式事务
      • 搭建微服务网关作为统一流量入口。
      • 使用消息驱动组件对接 RabbitMQ。
      • 通过分布式事务保证数据一致性。
      • 这个阶段涉及的技术组件是 Gateway、Stream 和 Seata。
        • 微服务网关是架设在外部网关和内部微服务之间的一座桥梁。Spring Cloud Gateway 作为网关组件,不光担任了路由转发的重任,同时它提供了丰富的谓词组合实现复杂的路由判断逻辑。除此以外,还可以在网关层定义拦截器,对来访请求执行一段特殊的业务逻辑。
        • Spring Cloud 开源的消息驱动组件“Stream”可以大幅降低应用系统和消息组件之间的对接流程。
        • 分布式事务是微服务环境下保证事务一致性的终极手段。其中,两种比较有代表性的 Seata 分布式事务解决方案分别是没有代码侵入的 Seata AT 方案资源锁定 + 补偿型的 Seata TCC 方案
  • 搭建微服务之间的通信
    • 服务治理
      • 服务治理的重点是搭建基础的跨服务调用功能。
      • 把用户服务、优惠计算服务和订单服务改造成可以独立启动的微服务,并借助 Nacos 的服务发现功能,通过 Webflux 组件中的 WebClient 实现基于 HTTP 的跨服务间的调用。
    • 负载均衡
      • 在服务治理的基础上,引入 Loadbalancer 组件为跨服务调用添加负载均衡的能力。
      • 除此之外,对 Loadbalancer 组件的扩展接口做自定义开发,实现一个金丝雀测试的负载均衡场景。
    • 简化服务调用
      • 使用 OpenFeign 组件对用户服务进行改造,将原先复杂的 WebClient 调用替换为简洁的 OpenFeign 调用。
  • 保障微服务架构的高可用
    • 配置管理
      • 配置管理的重点是将三个微服务应用接入到 Nacos Config 配置中心,使用远程配置中心存储部分配置项。
    • 服务容错
      • 搭建 Sentinel Dashboard 控制台,通过控制台将降级规则和流量整形规则应用到业务埋点中。
    • 链路追踪
      • 这部分的重点是搭建分布式链路追踪与日志系统。

你可能感兴趣的:(微服务,微服务,spring,cloud,java)