【SpringCloud Alibaba】01--微服务项目部署

一,微服务简介

1.背景分析

讲微服务之前,我们先分析以下单体应用。所谓单体应用一般是基于idea/eclipse,maven等建一个工程,然后基于SpringBoot,spring,mybatis框架进行整合,接下来再写一堆dao、mapper、service、controller,再加上一些的配置文件,有可能还会引入redis、elasticsearch、mq等其它项目的依赖,开发好之后再将项目打包成一个jar包/war包。然后再将包扔到类似tomcat这样的web服务中,最后部署到公司提供给你的linux服务器上。 接下来,你针对服务提供的访问端口(例如8080端口)发起http请求,请求会由tomcat直接转交给你的spring web组件,进行一层一层的代码调用。对于这样的设计一般适合企业的内部应用,访问量不大,体积比较小,5人以内的团队即可开发和维护。但对于一些大型互联网项目,假如需要10人以上的开发和维护团队,仅频繁的创建代码分支,编写业务功能,然后合并分支,就会出现很多代码冲突。每次解决这些大量的代码冲突,可能就会耗费好几天的时间。基于这样的背景微服务诞生了.

在微服务架构设计中,建议超出需要10人开发和维护的项目要进行系统拆分,就是把大系统拆分为很多小系统,几个人负责一个服务这样每个服务独立的开发、测试和上线,代码冲突少了,每次上线就回归测试自己的一个服务即可,测试速度快了,上线是独立的,只要向后兼容接口就行了,不需要跟别人等待和协调,技术架构和技术版本的升级,几个人ok就行,成本降低,更加灵活了。

2.什么是微服务

微服务架构(MSA)的基础是将单个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署。如图所示:
【SpringCloud Alibaba】01--微服务项目部署_第1张图片
这些服务使用轻量级 API 通过明确定义的接口进行通信。这些服务是围绕业务功能构建的,每项服务执行一项功能。由于它们是独立运行的,因此可以针对各项服务进行更新、部署和扩展,以满足对应用程序特定功能的需求。
程序中的微服务,就是将各个业务系统的共性再进行抽取,做成独立的服务,如图所示:
【SpringCloud Alibaba】01--微服务项目部署_第2张图片
总之,微服务是分布式系统中的一种流行的架构模型,它并不是银弹,所以,也不要寄希望于微服务构架能够解决所有的问题。微服务架构主要解决的是如何快速地开发和部署我们的服务,这对于一个能够适应快速开发和成长的公司是非常必要的。同时,微服务设计中有很多很不错的想法和理念,通过学习微服务架构我们可以更快的迈向卓越。

二,SpringCloud Alibaba微服务解决方案

1.概述

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

2.核心组件分析

Spring Cloud Alibaba 默认提供了如下核心功能:

  • 服务限流降级:
    默认支持 WebServlet、OpenFeign、RestTemplate、Spring Cloud Gateway, RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:
    基于Spring Cloud 服务注册与发现标准,借助Nacos进行实现,默认还集成了 Ribbon 的支持。
  • 分布式配置管理:
    基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:
    基于Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:
    使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
  • 分布式任务调度:
    提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker上执行。

3.解决方案架构设计

基于Spring Cloud Alibaba实现的微服务,解决方案设计架构如图所示:
【SpringCloud Alibaba】01--微服务项目部署_第3张图片

三,构建SpringCloud 聚合项目并进行环境初始化

1.创建空项目

打开Idea,创建一个空项目(Empty Project)
【SpringCloud Alibaba】01--微服务项目部署_第4张图片

2.项目初始化配置

第一步:配置maven环境(只要是新的工作区,都要重新配置),注意本地库选择新的位置不要与其它项目共用本地库.SpringCloud的依赖包版本与其它项目的版本包不一致。
【SpringCloud Alibaba】01--微服务项目部署_第5张图片
第二步:配置JDK编译环境
【SpringCloud Alibaba】01--微服务项目部署_第6张图片
第三步:配置项目编码方式
【SpringCloud Alibaba】01--微服务项目部署_第7张图片

3.创建聚合父工程

我们后续在创建微服务工程进行学习时,相关服务的依赖及版本的管理可以放在此工程下.
第一步:创建父工程模块
【SpringCloud Alibaba】01--微服务项目部署_第8张图片
第二步:删除工程中的src目录(父工程不需要这个目录),当然,留着也没事
第三步:添加核心依赖及版本管理
在pom文件,添加如下元素:


<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.cygroupId>
    <artifactId>01-scaartifactId>
    
    <packaging>pompackaging>
    <version>1.0-SNAPSHOTversion>
    
    <properties>
        <spring.boot.version>2.3.2.RELEASEspring.boot.version>
    properties>
    
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-dependenciesartifactId>
                <version>${spring.boot.version}version>
                <scope>importscope>
                <type>pomtype>  
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Hoxton.SR9version>
                <scope>importscope>
                <type>pomtype>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2.2.6.RELEASEversion>
                <scope>importscope>
                <type>pomtype>
            dependency>
        dependencies>
    dependencyManagement>
    
    <dependencies>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            
            <scope>providedscope>
        dependency>
    dependencies>
project>

其中,服务核心依赖版本可参考如下网址(涉及到一个兼容性问题,不能随意指定其版本)
微服务核心依赖版本
【SpringCloud Alibaba】01--微服务项目部署_第9张图片
最新版本目前无太多公司使用,存在着不确定性因数

4.创建子工程

【SpringCloud Alibaba】01--微服务项目部署_第10张图片
创建需要的个数,注意都在聚合父类下
【SpringCloud Alibaba】01--微服务项目部署_第11张图片

你可能感兴趣的:(SpringCloud,环境配置,java,spring,cloud,spring,cloud,alibaba)