了解完 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
整个项目划分为了优惠券模板服务、计算服务、用户服务和平台类组件这四大模块。它们的功能是这样的:
从整体来看,优惠券模板服务和优惠计算服务是基础服务,用户服务是对用户开放的接口,它依赖于这两个基础服务来完成业务逻辑。而平台类组件则提供了横向的微服务特性支持,比如微服务网关、链路追踪功能等等,你可以把它们理解为“微服务中间件”。我们通过下面这幅图来看一下这四个模块之间的关联关系:
微服务框架基于 Spring Boot 项目,因此首先便是搭建 Spring Boot 业务模块,并按照模块之间的先后依赖顺序进行改造。Spring Boot 的阶段,用户服务是一个“超级单体应用”,优惠券模板服务和订单优惠计算服务都将打包到用户服务中,跨模块的服务调用都是通过本地方法完成的,因此只用启动用户服务就可以执行所有模块的业务功能。
搭建 Spring Boot 项目的过程中,涉及以下三个技术点:
在 Spring Boot 阶段搭建好优惠券平台的单体应用后,接下来就可以进行 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 Config、Sentinel、Sleuth+Zipkin+ELK。
这个阶段涉及的技术组件是 Gateway、Stream 和 Seata。
工欲善其事,必先利其器,搭建好项目的开发环境是很有必要的~
为了避免在项目实战环节碰到一些棘手的兼容性问题,开始写代码前就要约定好各个组件的安装版本,包括 Java、Maven 和各个中间件的版本。
本章节主要讲集成开发环境的搭建、数据库的安装和 DB 脚本的导入。
由于国内网络访问 Maven 中央仓库比较慢,在编译项目的时候,你会发现下载 Maven 依赖项的时间会比较久,这样的话可以修改 Maven 的 settings.xml 文件,将其默认镜像指向国内的镜像(比如阿里云镜像),这样可以大大加快依赖项下载速度。
安装完 Java 和 Maven 之后,我们再来安装集成开发工具。
本人还是推荐用 IDEA,当然 Eclipse 等其他编译器也可~
你可以在 JetBrains 的官网(IntelliJ IDEA)下载 IntelliJ IDEA,IDEA 的免费社区版足够完成复杂的开发任务了。
可以在本地安装 MySQL,我是直接在云服务器上安装了 MySQL,如果你还没有安装可视化 DB 工具,那么我推荐你使用 dbeaver,毕竟是免费的 。相关链接 :Docker 环境下安装 Mysql
Redis 是一个 key-value 数据库,我们在学习微服务网关的时候将会用 Redis 实现网关层限流。
相关链接:云服务器 Docker 环境下安装 Redis
到这里,我们的工具安装就结束了,建议大家实操安装下这些软件,可以说都是开发的必备工具,如果有不明白的百度即可。
后续进入到 Spring Cloud 微服务实战环节的时候,我们还会用到更多的中间件,比如注册中心、微服务网关、链路追踪组件、ELK 日志查询系统、分布式事务协调器等等,到时候可再安装这些软件。
大家如果有疑问都可以评论提出,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。