【Java开发】Spring Cloud 02 :微服务项目介绍及开发环境

了解完 Spring Cloud 的发展背景以及各个组件库后,在敲代码前,本章节会聊一聊优惠券平台项目的整体功能和模块,以及每个功能点的技术选型和背后的依据,最后讲解下搭建项目所需的开发环境~

目录

1 优惠券平台项目

1.1 项目介绍

1.2 Spring Boot 实战规划

1.3 Spring Cloud 实战规划

① 第一阶段

② 第二阶段

③ 第三阶段

2 开发环境介绍

2.1 Java 和 Maven

2.2 IntelliJ IDEA

2.3 MySQL 和 DB 可视化工具

2.4 Redis


1 优惠券平台项目

1.1 项目介绍

整个项目划分为了优惠券模板服务、计算服务、用户服务和平台类组件这四大模块。它们的功能是这样的:

  • 优惠券模板服务:模板规则是创建具体优惠券的前置条件,每种类型的模板都是一个计算公式,这个公式约定了优惠计算的方式。在这个项目中,模板服务实现了模板规则的创建、克隆、分页查找等功能,并且项目里定义满减、随机立减、满折、晚间双倍优惠等多种券模板类型。
  • 优惠计算服务:这个模块是根据用户购物车中的商品信息(单价、数量、所属门店)和优惠券信息,来计算当前订单优惠后的价格。另外,如果用户有多张优惠券,还提供了“优惠金额试算”服务,帮助用户挑选最省钱的优惠券。
  • 用户服务:这是暴露给外部用户使用的接口,它依赖于模板服务和优惠计算服务完成底层逻辑,主要业务场景是用户领券、订单价格试算、下单核销和订单金额试算等功能。
  • 平台类组件:主要包括一些业务无关的中心化组件,比如 Gateway 网关等等,你将在 Spring Cloud 课程中逐渐接触到平台类组件的搭建。

从整体来看,优惠券模板服务和优惠计算服务是基础服务,用户服务是对用户开放的接口,它依赖于这两个基础服务来完成业务逻辑。而平台类组件则提供了横向的微服务特性支持,比如微服务网关、链路追踪功能等等,你可以把它们理解为“微服务中间件”。我们通过下面这幅图来看一下这四个模块之间的关联关系:

【Java开发】Spring Cloud 02 :微服务项目介绍及开发环境_第1张图片

1.2 Spring Boot 实战规划

微服务框架基于 Spring Boot 项目,因此首先便是搭建 Spring Boot 业务模块,并按照模块之间的先后依赖顺序进行改造。Spring Boot 的阶段,用户服务是一个“超级单体应用”,优惠券模板服务和订单优惠计算服务都将打包到用户服务中,跨模块的服务调用都是通过本地方法完成的,因此只用启动用户服务就可以执行所有模块的业务功能。

搭建 Spring Boot 项目的过程中,涉及以下三个技术点:

  • 项目搭建:分层构建项目结构,并借助 Maven 实现依赖项管理
  • 数据操作:将使用 mybatis-plus 替代 spring-data-jpa,分别通过 Mapper、Iservice、自定义 SQL 三种方式实现数据库 CRUD 操作
  • 开放对外 API:快速入门 spring-web 实战,通过注解对外暴露 RESTful 风格的 API

在 Spring Boot 阶段搭建好优惠券平台的单体应用后,接下来就可以进行 Spring Cloud 微服务化改造了。

1.3 Spring Cloud 实战规划

根据微服务学习的路径以及各个组件的难易程度,本专栏主要分为三个不同的阶段:

  • 第一阶段:搭建基础的微服务功能,实现微服务之间的通信
  • 第二阶段:为各个模块构建服务容错、分布式配置中心、分布式链路追踪能力
  • 第三阶段:进一步实现微服务网关、消息驱动和分布式事务。下面我们来看下每个阶段主要做些什么以及对应的技术选型

① 第一阶段

主要实现微服务之间的通信,将用户微服务、优惠券模板服务和订单优惠计算服务拆分为独立部署的业务系统,通过注册中心来实现服务注册和服务发现,让各个微服务之间可以互相调用。这个阶段涉及的关键技术是 Nacos 注册中心、Loadbalancer 客户端负载均衡组件和 OpenFeign 服务间调用组件。

微服务之间的服务通信有一个前提条件,就是你要知道将要调用的服务器地址是什么。这个寻址的任务是交由 Nacos 注册中心和 Loadbalancer 负载均衡器共同来完成的。

Nacos 是 Alibaba 出品的服务治理组件,它作为一个注册中心组件,负责收集所有服务节点的地址信息并维护服务注册表,所有服务上线之后都会向它汇报状态。Loadbalancer 则承担了负载均衡的任务,在客户端发起服务调用的时候,它会负责从 Nacos 的注册表中挑选一台目标服务器。而 OpenFeign 组件是一个“锦上添花”的组件,它能够简化基于 HTTP 的远程服务调用,让我们就像使用本地接口一样方便地发起远程服务调用。

至于为什么会选择 Nacos+Loadbalancer 作为选型方案呢?其实,在早期版本的 Spring Cloud 微服务架构选型中,Eureka + Ribbon 是一个使用最为广泛的组合,它们是 Netflix 公司贡献给 Spring Cloud 项目的服务治理 + 负载均衡组件。但是考虑到 Netflix 正在退出 Spring Cloud 的历史舞台。Eureka 和 Ribbon 已经进入了维护状态。其中,Ribbon 更是在 Spring Cloud I 版之后,就从官方组件库中被移除了。这意味着 Eureka 和 Ribbon 已经进入了“暮年”,不会再有重大的功能更新。

因此,在考虑技术选型的时候,我选择了后劲更足、功能更为强大的 Nacos 和 Spring Cloud 官方开源的 Loadbalancer 组件。大致来讲,在第一阶段,分为三个部分来带你搭建起微服务之间的通信:

  • 服务治理:服务治理的重点是搭建基础的跨服务调用功能。我会把用户服务、优惠计算服务和订单服务改造成可以独立启动的微服务,并借助 Nacos 的服务发现功能,通过 Webflux 组件中的 WebClient 实现基于 HTTP 的跨服务间的调用
  • 负载均衡:在这部分,我们将在服务治理的基础上,引入 Loadbalancer 组件为跨服务调用添加负载均衡的能力。除此之外,我会对 Loadbalancer 组件的扩展接口做自定义开发,实现一个金丝雀测试的负载均衡场景
  • 简化服务调用:我将使用 OpenFeign 组件对用户服务进行改造,将原先复杂的 WebClient 调用替换为简洁的 OpenFeign 调用

② 第二阶段

  • 利用服务容错提高微服务架构的可用性
  • 搭建全链路的分布式链路追踪能力
  • 实现统一的配置管理和动态属性推送

这个阶段涉及的技术组件是 Nacos Config、Sentinel、Sleuth+Zipkin+ELK。

③ 第三阶段

  • 搭建微服务网关作为统一流量入口
  • 使用消息驱动组件对接 RabbitMQ
  • 通过分布式事务保证数据一致性

这个阶段涉及的技术组件是 Gateway、Stream 和 Seata。

2 开发环境介绍

工欲善其事,必先利其器,搭建好项目的开发环境是很有必要的~

为了避免在项目实战环节碰到一些棘手的兼容性问题,开始写代码前就要约定好各个组件的安装版本,包括 Java、Maven 和各个中间件的版本。

本章节主要讲集成开发环境的搭建、数据库的安装和 DB 脚本的导入。

2.1 Java 和 Maven

  • Java:推荐使用 JDK8 最新小版本或者 OpenJDK16 的最新小版本
  • Maven:推荐使用 Maven 3.6 或以上的版本

由于国内网络访问 Maven 中央仓库比较慢,在编译项目的时候,你会发现下载 Maven 依赖项的时间会比较久,这样的话可以修改 Maven 的 settings.xml 文件,将其默认镜像指向国内的镜像(比如阿里云镜像),这样可以大大加快依赖项下载速度。

安装完 Java 和 Maven 之后,我们再来安装集成开发工具。

2.2 IntelliJ IDEA

本人还是推荐用 IDEA,当然 Eclipse 等其他编译器也可~

你可以在 JetBrains 的官网(IntelliJ IDEA)下载 IntelliJ IDEA,IDEA 的免费社区版足够完成复杂的开发任务了。

2.3 MySQL 和 DB 可视化工具

可以在本地安装 MySQL,我是直接在云服务器上安装了 MySQL,如果你还没有安装可视化 DB 工具,那么我推荐你使用 dbeaver,毕竟是免费的 。相关链接 :Docker 环境下安装 Mysql

2.4 Redis

Redis 是一个 key-value 数据库,我们在学习微服务网关的时候将会用 Redis 实现网关层限流。

相关链接:云服务器 Docker 环境下安装 Redis

到这里,我们的工具安装就结束了,建议大家实操安装下这些软件,可以说都是开发的必备工具,如果有不明白的百度即可。

后续进入到 Spring Cloud 微服务实战环节的时候,我们还会用到更多的中间件,比如注册中心、微服务网关、链路追踪组件、ELK 日志查询系统、分布式事务协调器等等,到时候可再安装这些软件。


总结

大家如果有疑问都可以评论提出,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。

你可能感兴趣的:(#,Spring,Cloud,微服务,java,微服务,spring,cloud,后端,spring,boot)