微服务架构入门

微服务架构入门

背景

微服务架构诞生的背景:

对于比较小的单体项目,通过使用编辑器,创建maven创建工程,然后基于spring boot,spring mvc,mybatis等框架进行整合,在写一些controller,service,mapper层以及一些配置文件进行业务的调用,然后打包成jar包/war包,最后将包放到tomcat等,最后发布到Linux服务器上跑业务,然后呢,通过服务提供的访问端口发送http请求,通过springweb组件,进行代码层层调用,像这种项目访问量不大,体积较小,一个小团队即可完成.但是一个庞大的服务,需要庞大的代码组成,维护起来非常困难,如何解决这个问题,就需要抽丝剥茧,将业务按要求分离出来单独开发,这个问题就迎刃而解了.

解决臃肿的大的服务,拆成若干个小系统,各司其职,假如某个系统出问题,保证整个系统依然正常运行,比如一个城市有多座火车站,一个火车站出问题,不影响其他.

SpringCloud Alibaba 微服务解决方案

概述

SpringCloud Alibaba是SpringCloud中的一个子项目,由阿里巴巴团队开发维护,致力于一站式解决微服务开发的解决方案,此项目包含开发分布式微服务的必要组件,方便程序员通过SpringCloud中的模型轻松式样这些组件来开发分布式微服务应用

重要核心组件

SpringCloud Alibaba默认提供了一下功能组件

  • 服务限流降级:
    • 默认支持WebService,OpenFeign,RestTemplate,SpringCloud GateWay,RocketMQ限流降级功能的直接接入,可以在运行时通过控制台实时修改限流降级规则,还支持限流降级Metrics监控.

什么是限流降级:例如,电商在搞秒杀活动时,会将秒杀服务的等级提高,限制其他服务访问等级,使秒杀互动正常运行.

有点断臂求生的意思.

  • 服务注册与发现
    • 基于SpringCloud服务注册与发现标准,通过Nacos后台管理进行实现,默认集成Ribbo
  • 分布式配置管理
    • 基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新
  • 消息驱动能力
    • 基于SpringCloud Stream为微服务应用构建消息驱动能力
  • 分布式事务
    • 使用@GlobalTransactionan注解,高效并且对业务零侵入地解决业务分布式事务问题
  • 分布式任务调度
    • 提供秒级,精准,高可靠,高可用的定时(基于Cron表达式)任务调度服务,同时提供分布式的任务执行模型,如网格任务,网格任务支持海量子任务均匀分配到所有Worker上执行

SpringCloud Alibaba 架构设计

在这里插入图片描述

接下来我们通过创建一个Maven工程一步步的实现分布式微服务的业务逻辑.我们会涉及到的知识内容有,Maven,SpringBoot,Nacos,SpringMVC等.

创建工程

工程结构

微服务一般创建聚合工程结构,便于资源的共享以及简化开发

创建一个空文件目录并配置maven环境

在这里插入图片描述

Maven版本使用的3.8.4,Maven仓库最好创建到其他磁盘,否则默认在系统盘下,随着依赖越来越多,C盘承受不住~.

在这里插入图片描述

设置版本为8

在这里插入图片描述

在这里插入图片描述

配置父级pom文件
在这里插入图片描述

    <dependencyManagement>
        <dependencies>
            <!--spring boot 核心依赖版本定义(spring官方定义)-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--Spring Cloud 微服务规范(由spring官方定义)-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type><!--假如scope是import,type必须为pom-->
                <scope>import</scope><!--引入三方依赖的版本设计-->
            </dependency>

            <!--Spring Cloud alibaba 依赖版本管理 (参考官方说明)-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--第二步: 添加子工程的所需要的公共依赖-->
    <dependencies>
        <!--lombok 依赖,子工程中假如需要lombok,不需要再引入-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope><!--provided 表示此依赖仅在编译阶段有效-->
        </dependency>
        <!--单元测试依赖,子工程中需要单元测试时,不需要再次引入此依赖了-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope><!--test表示只能在test目录下使用此依赖-->
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--其它依赖...-->
    </dependencies>
    <!--第三步: 定义当前工程模块及子工程的的统一编译和运行版本-->
    <build><!--项目构建配置,我们基于maven完成项目的编译,测试,打包等操作,
    都是基于pom.xml完成这一列的操作,但是编译和打包的配置都是要写到build元素
    内的,而具体的编译和打包配置,又需要plugin去实现,plugin元素不是必须的,maven
    有默认的plugin配置,常用插件可去本地库进行查看-->
        <plugins>
            <!--通过maven-compiler-plugin插件设置项目
            的统一的jdk编译和运行版本-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <!--假如本地库没有这个版本,这里会出现红色字体错误-->
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

创建子类工程-服务提供方工程

注意创建位置,在父级工程下创建子工程
在这里插入图片描述

创建子类工程-服务消费方工程

在这里插入图片描述

创建网关服务工程

在这里插入图片描述

服务关系以及调用关系架构

在这里插入图片描述

我们会基于此架构,完成分布式微服务的业务流程.

在下一篇博客中我们将介绍注册中心Nacos的相关内容.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值