目录

一、前言

1、什么是微服务

2、微服务的优点

3、什么是SpringCloud Alibaba

4、使用SpringCloud Alibaba的优点

5、SpringCloud Alibaba官方介绍

6、SpringCloud Alibaba组件

6.1、官方介绍

6.2、中文描述组件以及补充

7、SpringCloud Alibaba系列主题脉络以及要点

7.1、环境搭建篇

7.2、SpringCloud Alibaba微服务第1章

7.3、Nacos篇

7.4、网关篇

7.5、服务负载均衡篇

7.6、ORM框架之MyBatis-plus篇

7.7、分库分表篇

7.8、服务容错篇

7.9、消息中间件篇

7.10、分布式事务篇

7.11、Oauth2篇

7.12、系统部署篇


一、前言

1、什么是微服务

微服务(microservice) 一词最早由Martin Fowler与James Lewis于2014年共同提出来的,它是一种新的软件架构风格,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是松耦合的,通过RPC或者是Rest协议来进行通信,可以按照业务领域来划分成独立的单元,比如一个电商系统可以分割成会员订单商品积分优惠券等不同的小型服务,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。

2、微服务的优点

  • 高可用:与传统的单机系统比,它的可用性高。举个例子说明下:单机系统如果挂了,那么整个系统的服务就不能提供服务了,这给使用它的商家带来很大的经济损失。而微服务不同,某个服务挂了,可能并不会影响其它微服务继续对外提供服务。而且新开发的功能点或更改的功能点集中在一个服务上面,即使部署上线出了问题,也不会影响其它服务的业务。
  • 松耦合:无论是在开发阶段或部署阶段都是独立的,富有单一职责原则之称,从而保障高可用。
  • 模块化:它将一个整体应用程序分解成一系列服务,每个模块都有它相应的职责,提高了维护与扩展性。在分工方面也有一定好处,可由小团队单独开发。

3、什么是SpringCloud Alibaba

SpringCloud Alibaba顾名思义是中国阿里以SpringCloud为原型,在此基础上面提供了自己生产实践的组件,组合而成的框架。它是用于开发微服务应用的一系列组件的集合。Spring Cloud Alibaba应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序, 提供与外部系统的集成。SpringCloud Alibaba与Spring Boot不是走我行我素之风,而是相辅相成的关系。Spring cloud Task, 一个生命周期短暂的微服务框架, 用于快速构建执行有限数据处理的应用程序。

4、使用SpringCloud Alibaba的优点

使用 Spring Boot 开发分布式微服务时, 我们面临以下问题:

  • 与分布式系统相关的复杂性:这种开销包括网络问题、延迟开销、带宽问题、安全问题。
  • 服务发现:服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录, 在该目录中注册服务, 然后能够查找并连接到该目录中的服务。
  • 冗余:分布式系统中的冗余问题。
  • 负载平衡:负载平衡改善跨多个计算资源的工作负荷, 诸如计算机, 计算机集群, 网络链路, 中央处理单元, 或磁盘驱动器的分布。
  • 性能问题:由于各种运营开销导致的性能问题。
  • 部署复杂性:Devops 技能的要求。

SpringCloud Alibaba是SpringCloud的实践者,那么它碰到生产上的问题就在SpringCloud Alibaba进行了改良。

5、SpringCloud Alibaba官方介绍

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker

 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服 务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
  依托 Spring Cloud Alibaba ,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接 入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

6、SpringCloud Alibaba组件

6.1、官方介绍

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_02

6.2、中文描述组件以及补充

  • Sentinel :把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳 定性。
  • Nacos :一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • RocketMQ :一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠 的消息发布与订阅服务。
  • Seata :阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  • Dubbo : Apache Dubbo™ 是一款高性能 Java RPC 框架。
  • Alibaba Cloud ACM :一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心 产品。
  • Alibaba Cloud OSS : 阿里云对象存储服务( Object Storage Service ,简称 OSS ),是阿里云提 供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和 访问任意类型的数据。
  • Alibaba Cloud SchedulerX : 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精 准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  • Alibaba Cloud SMS : 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速 搭建客户触达通道。

7、SpringCloud Alibaba系列主题脉络以及要点

7.1、环境搭建篇

主要介绍了Nacos是什么,可以做哪些工作,给我们的项目带来了那些方便。同时介绍了在不同操作系统安装Nacos

7.2、SpringCloud Alibaba微服务第1章

开始初始化项目的结构,详细的图文讲解,加上完整代码,运行结果截图。

7.3、Nacos篇

1)SpringCloud Alibaba微服务第2章之Nacos

注册配置中心是一个集中化管理中心,它不仅仅可以管理多个系统,还可以管理各种环境。那么Nacos是如何进行管理的呢?要确保它们之间没有互相干预,那就得确保相互独立,于是命名空间就应运而生。......

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_03

2)SpringCloud Alibaba微服务第3章之Nacos

本文主要面向 Spring Cloud 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理。这篇文章主角就是Nacos,无论是日常开发还是实际生产环境,作为程序员,都得熟悉Nacos的web端管理与维护,详细地罗列了Nacos的配置数据的存放位置,Nacos的配置管理、命名空间等细节。图文并茂,细节到位。

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_04


关于 Nacos Spring Cloud 的详细文档

  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。

3)SpringCloud Alibaba微服务第4章之Nacos

直接上代码实战了一回生产者与消费者使用Nacos的服务发现功能

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_05


7.4、网关篇

1)SpringCloud Alibaba微服务第5章之Gateway

API Gateway 是一个服务器,也可以说是进入系统的唯一节点(插入个面试者的描述:面试官心想既然你了解微服务,那么想问你微服务的 入口 是什么,面试者假装沉思:注册中心、微服务、配置中心...然后以肯定的语速回答了--网关。面试官面无表情地只回了个“嗯”)。这跟面向对象设计模式中的 Facade 模式很像。API Gateway 封装内部系统的架构,并且提供 API 给各个客户端。它还可能有其他功能,如授权、监控、负载均衡、缓存、请求分片管理、静态响应处理等。

详细介绍了网关模块的搭建过程,启动类、配置、依赖等代码。

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_06


测试结果如下成功

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_07


2)SpringCloud Alibaba微服务第6章之Gateway

Gateway模块高级玩法,介绍了权限、验证码等过滤器的玩法。

通俗一点地讲网关就像大学的门口,有门卫在那里坚守。如果你想进入园区,你得亮出你的学生证、绿色健康码、行程卡,门卫可能检查比对看看是否是本校学生。

    下图展示了一 个适应当前架构的 API Gateway。

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_08

7.5、服务负载均衡篇

1)Spring Cloud Alibaba微服务第7章之负载均衡Ribbon

主要介绍Ribbon实现负载均衡

我们都知道在微服务架构中,微服务之间总是需要互相调用,以此来实现一些组合业务的需求。例如用户下单,由于下单信息里有用户信息,所以订单服务就得调用用户服务来获取用户信息。要实现远程调用就需要发送网络请求,而每个微服务都可能会存在有多个实例分布在不同的机器上,那么当一个微服务调用另一个微服务的时候就需要将请求均匀的分发到各个实例上,以此避免某些实例负载过高,某些实例又太空闲,所以在这种场景必须要有负载均衡器。负载均衡,一定程度上也保障了服务的高可用

图1

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_09

图2

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_10

2)Spring Cloud Alibaba微服务第8章之OpenFeign

介绍了使用OpenFeign实现负载均衡,feign集成了Ribbon,以接口编程式风格使得代码优雅。

测试结果

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_11

7.6、ORM框架之MyBatis-plus篇

1)Spring Cloud Alibaba微服务第9章之MyBatis-plus

主要介绍它的特性以及插件使用等。

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

框架结构

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_12

2)Spring Cloud Alibaba微服务第10章之MyBatis-plus

主要介绍MyBatis-plus的API

通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
泛型 T 为任意实体对象
建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
对象 Wrapper 为 条件构造器

3)Spring Cloud Alibaba微服务第11章之MyBatis-plus

MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。话不多说,直接上代码。

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_13

7.7、分库分表篇

1)Spring Cloud Alibaba微服务第13章之分库分表

主要介绍中间件的几种架构,中间件的优点

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_14

2)Spring Cloud Alibaba微服务第14章之分库分表

主要介绍如何实现分库、分表功能,整合中间件

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_15

图1

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_16

图2 

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_17

7.8、服务容错篇

1)Spring Cloud Alibaba微服务第15章之服务容错

主要介绍了服务雪崩概念、常见场景、服务容错解决方案

流量控制

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_18

熔断降级

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_19

2)Spring Cloud Alibaba微服务第16章之服务容错

主要讲述了Sentinel 控制台的使用、项目整合Sentinel 

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_20

限流测试

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_21

降级测试

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_22

7.9、消息中间件篇

1)Spring Cloud Alibaba微服务第17章之消息服务

主要讲述了常见中间件,项目使用的中间件优点、使用场景、如何确保消息正确地发送至中间件? 如何确保消息接收方消费了消息?消息传输、分发、路由,如何确保消息不丢失?等等

2)Spring Cloud Alibaba微服务第18章之消息服务

主要介绍了如何整合消息中间件,消息中间件控制台的使用查看,消息生产者与消息消费者代码实战

测试结果:

图1

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_23

 图2

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_24

7.10、分布式事务篇

1)Spring Cloud Alibaba微服务第19章之分布式事务

主要介绍分布式事务的中间件的几种设计模式、工作机制、使用场景等

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_25

2)Spring Cloud Alibaba微服务第20章之分布式事务

主要介绍中间件的安装、将配置上传Nacos

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_26

3)Spring Cloud Alibaba微服务第21章之分布式事务

传统的spring提供的声明式事务解决方案并不能解决分布式事务问题,只能解决单机事务。业界也提供了不少解决方案,其中阿里提供的seata项目受到了很多大型企业的认可,社区也很活跃。故我们采用Seata帮助我们解决分布式事务,下面就以实战经验,一起再来看看分布式事务的项目是如何实现的。
图1

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_27

图2

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_28

7.11、Oauth2篇

1)Spring Cloud Alibaba微服务第22章之Oauth2

概述:新版本的Spring OAuth2.0 ,不再作为一个独立模块,而是Spring Security中的一个子模块。OAuth2提供项目安全认证(包括身份,权限,角色认证等)。

其中OAuth2为我们提供了四种授权方式:

授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)
而较常用的则为密码模式和授权码模式,而授权码模式又是最为安全的模式,常见的第三方授权登录就是基于Oauth2标准。完整的项目结构分为:客户端服务,认证服务,资源服务。客户端需要访问资源服务的资源时,则需要得到认证服务的认证。

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_29

2)Spring Cloud Alibaba微服务第23章之Oauth2授权码模式

主要介绍Oauth2的授权码模式的使用

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_30

7.12、系统部署篇

1)Spring Cloud Alibaba微服务第24章之Docker部署

主要介绍Docker如何部署前后端完全分离的项目

容器是一个标准的软件单元,它打包代码及其所有依赖项,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。Docker 容器镜像是一个轻量级的、独立的、可执行的软件包,包括运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。

容器镜像在运行时变成容器,在 Docker 容器的情况下——镜像在Docker Engine上运行时变成容器。可用于 Linux 和基于 Windows 的应用程序,容器化软件将始终以相同的方式运行,无论基础设施如何。容器将软件与其环境隔离开来,并确保尽管开发和暂存之间存在差异,但它仍能统一工作。

在 Docker Engine 上运行的 Docker 容器:

标准: Docker 为容器创建了行业标准,因此它们可以在任何地方移植
轻量级:容器共享机器的操作系统系统内核,因此每个应用程序不需要操作系统,从而提高服务器效率并降低服务器和许可成本
安全:应用在容器中更安全,Docker 提供业界最强的默认隔离能力

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_31

2)Spring Cloud Alibaba微服务第25章之Jenkins

主要介绍了Docker安装Jenkins、JDK、Maven

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Docker_32

3)Spring Cloud Alibaba微服务第26章之Jenkins

主要介绍Jenkins的一些配置,如JDK、Maven、Git等

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_33

4)Spring Cloud Alibaba微服务第27章之Jenkins

主要介绍系统部署级别的配置

图1

java cloud alibaba微服务真的需要一个服务部署一台机器吗_Cloud_34

图2

java cloud alibaba微服务真的需要一个服务部署一台机器吗_微服务_35

上述就是SpringCloud Alibaba系列的内容要点