1. 简介
1.1 了解微服务架构
系统架构演变过程:单体架构 =》垂直架构 =》分布式架构 =》SOA 架构 =》微服务架构。
单体架构:早起的 SSM 或 SSH 架构模式,没有对业务逻辑代码拆分,所有的应用部署到一台服务器上。
- 优点:开发成本小;项目部署在同一个节点,维护方便;适用于小公司开发团队。
- 缺点:代码耦合性大,重复代码多,对于大型项目不易维护。
垂直架构:随着访问量增大,单体架构应用只能通过增加节点来应对,但是对于一些访问量不大的应用,增加节点又显得没有那么必要,为了解决这个问题,使用垂直架构将单体架构进行拆分,按照系统里的模块拆分开,这样对于需要水平扩展的节点,比较友好。比如我们的前台系统访问量增大,只需要增加前台系统相关节点即可。
- 优点:系统拆分实现了流量分担,并且可以针对不同模块进行优化和扩展;一个系统出现问题不会影响到其他系统,提高容错率。
- 缺点:系统之间相互独立,无法调用,并且会存在重复的开发任务,比如日志、权限等。
分布式架构:基于垂直架构的基础上,将重复的代码抽取出来,做成统一的业务层,由前端控制调用不同的业务层服务。
- 优点:抽取公共的代码作为服务,提高代码复用率。
- 缺点:系统间耦合度变高,前端调用关系错综复杂,难以维护。
SOA架构:在分布式架构下,当服务越来越多,逐渐会出现容量评估、小服务资源浪费等问题,使用 SOA 架构即增加一个调度中心对集群进行实时管理,比如我们的前台系统想要调用后台的多个服务,直接访问调度中心,由调度中心来调用服务返回结果。
- 优点:使用调度中心降低了服务间调用关系的复杂度。
- 缺点:服务间存在依赖关系,一旦某个环节出错影响较大(服务雪崩);服务关系复杂,导致测试、运维困难。
微服务架构:从SOA架构演变过来,讲究更加细致的拆分,比 SOA 架构粒度更加精细,服务与服务之间独立部署且互不影响,适用于互联网公司开发模式。
- 微服务架构倡导应用程序设计成多个独立、可配置、可运行和可微服务的子服务。服务与服务通讯协议采用 Http 协议,使用 restful 风格 API 形式来进行通讯,数据交换格式采用轻量级 json 格式通讯,整个传输过程中,采用二进制,所以 http 协议可以跨语言平台,并且可以和其他不同的语言进行相互的通讯。
微服务架构和 SOA 架构的区别?
- 微服务架构比 SOA 架构粒度会更加精细,每个服务于服务之间互不影响,微服务架构中,每个服务必须独立部署,微服务架构更加轻巧,轻量级。
- SOA 架构中可能数据库存储会发生共享,微服务强调独每个服务都是单独数据库,保证每个服务于服务之间互不影响。
1.2 了解Spring家族
- Spring:Spring 是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;
- SpringMVC:SpringMVC 是 spring 基础之上的一个 MVC 框架,主要处理 web 开发的路径映射和视图渲染,属于 Spring 框架中 WEB 层开发的一部分;
- SpringBoot:SpringBoot 相对于 springmvc 来说,更专注于开发后端接口,简化了项目开发配置流程,可以快速开发单个微服务。SpringBoot 实现了自动配置,降低了项目搭建的复杂度。
- SpringCloud:SpringCloud 基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。更精准的说,SpringCloud 是一套标准解决解决方案,具体实现项目有 Netflix 和 Alibaba。
1.3 了解SpringCloudAlibaba
SpringCloudAlibaba 是 SpringCloud 的具体实现,提供了微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
下面这张图很好的说明了 SpringCloud Alibaba 和 Spring Cloud 的关系:
- 图中深色的部分,其实它就是Spring Cloud标准,一共有3层。中间颜色最深的部分就是及整个微服务最核心的内容,包括了“RPC 调用”以及“服务注册与发现”。第二层,也就是围绕着核心的这一圈,是一些辅助微服务更好的工作功能,包括了负载均衡、路由、网关、断路器,分布式追踪等等。再外层的话,主要是些分布式云环境里通用能力。
- 最外面这一圈,是 Spring Cloud Alibaba 对 Spring Cloud 的实现。例如,我们通过 Dubbo 实现了RPC调用功能,通过Nacos实现了 “服务注册与发现”、“分布式配置”,通过Sentinel实现了断路器等等。左下部分是我们 Spring Cloud Alibaba 对阿里云各种服务的集成,因为单独使用微服务框架其实并不足以支撑我们去构建一个完整的系统,所以这部分是用阿里帮助开发者完成微服务以外的云产品集成的功能。
- 为什么要分成两个部分呢,这也是为了打消大家对于使用了 Spring Cloud Alibaba 以后就会被平台绑定的担忧。虽然在品牌商都叫做 SpringCloud Alibaba,但是在代码上,我们采用了两个独立的项目维护。分别是 Spring Cloud Alibaba 和 Aliyun Spring Boot。
1.4 版本依赖
每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本,如下表所示:
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2.2.7.RELEASE* | 1.8.1 | 2.0.3 | 4.6.1 | 2.7.13 | 1.3.0 |
2.2.6.RELEASE | 1.8.1 | 1.4.2 | 4.4.0 | 2.7.8 | 1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE | 1.8.0 | 1.4.1 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE | 1.8.0 | 1.3.3 | 4.4.0 | 2.7.8 | 1.3.0 |
下表为按时间顺序发布的 Spring Cloud Alibaba 以及对应的适配 Spring Cloud 和 Spring Boot 版本关系:
Spring Cloud Alibaba Version | Spring Cloud Version | Spring Boot Version |
---|---|---|
2.2.7.RELEASE | Spring Cloud Hoxton.SR12 | 2.3.12.RELEASE |
2021.1 | Spring Cloud 2020.0.1 | 2.4.2 |
2.2.6.RELEASE | Spring Cloud Hoxton.SR9 | 2.3.2.RELEASE |
2.1.4.RELEASE | Spring Cloud Greenwich.SR6 | 2.1.13.RELEASE |
2.2.1.RELEASE | Spring Cloud Hoxton.SR3 | 2.2.5.RELEASE |
2.2.0.RELEASE | Spring Cloud Hoxton.RELEASE | 2.2.X.RELEASE |
2.1.2.RELEASE | Spring Cloud Greenwich | 2.1.X.RELEASE |
1.5 项目集成
- SpringCloud Alibaba 技术栈:nacos 配置中心和注册中心,sentinel 熔断限流,dubbo 高性能 rpc 框架(open feign),springcloud gateway 网关等等。
- 安全框架:Spring Security Spring Cloud Oauth2。
- 分布式任务调度:elastic-job。
- 持久层框架:MyBatisPlus(SpingData Jpa)、通用Mapper4、Mybatis_PageHelper。
- 数据库连接池:Druid。
- 日志管理:Logback。
- 前端框架:Vue全家桶以及相关组件。
三方服务: 邮件服务、阿里云短信服务、七牛云文件服务、钉钉机器人服务、高德地图API。
2. 快速入门
2.1 引入依赖
```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0“ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0 com.xuwei 01-nacos 0.0.1-SNAPSHOT 01-nacos nacos config配置 11 2.2.7.RELEASE Hoxton.SR12 2.3.12.RELEASE com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring.cloud.alibaba.version} pom import org.springframework.cloud spring-cloud-dependencies ${spring.cloud.version} pom import org.springframework.boot spring-boot-dependencies ${spring.boot.version} pom import org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok