带你走向技术前沿,打造畅购电商平台实战(第一章)。

微服务系统架构概述

单体应用架构

以电商平台为例,如图所示,在传统单体应用中,所有模块代码,都会写在一个应用下,然后我们一般开发完成后,打成一个war包放到tomcat中去运行。

随着用户流量的不断增长,业务复杂度的提升,这种单体应用架构的弊端也开始呈现出来。在高并发的场景下,因为请求量过大导致服务器缓慢或宕机都是随时可能出现的。

如果一个模块下的服务不可用,就可能会导致我们整个应用不可用,并且代码不容易去维护....这一系列的现象成了单体架构中不得不去解决的问题。

微服务架构

随着业务量的不断增长,我们于是把每一个模块抽离了出来,每一个模块形成一个单独的服务部署在不同的服务器上,模块与模块之间通过远程通信协议进行相互调用,这样我们就可以保证,一个模块不可用,其他的模块是可以正常运行的,在高并发的场景下,我们只要保证核心业务可用,其他服务低可用,或者不可用也是没有关系的。并且我们可以针对不同的模块进行单独的处理,比如商品模块访问量较大,那么我们可以针对于商品模块进行服务的限流、熔断、集群都是没有问题的。这样可以保证了每一个开发人员只专注与一个模块的维护与开发,提高了应用的质量与可用性。

畅购商城项目介绍

畅购商城是一个b2b的全品类电商平台。我们采用当前最主流的springcloud、springcloud Alibaba等框架进行项目的开发。

技术选型

  • SpringBoot
  • SpringCloud
  • SpringCloud Alibaba
  • Mybatis plus
  • Vue + Element UI
  • Nuxt

以上就是我们整个技术栈的核心框架。采用前后端分离的技术架构进行项目的开发。

环境搭建

1.创建centos7虚拟机,安装docker与mysql5.7

 2.导入数据库表

  把数据库创建好之后,资料中的每一个sql脚本执行一下。

3.后端工程搭建

导入相关依赖

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

4.创建公共模块 把entity导入到该模块下

导入依赖

<dependencies>
        <!--web起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- redis 使用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

5.创建数据库模块changgou_common_db,打包方式为pom,并导入以下依赖

<dependencies>
        <dependency>
            <groupId>com.changgou</groupId>
            <artifactId>changgou_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--mybatis-plus起步依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--MySQL数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

6.创建微服务模块changgou_service,打包方式为pom,并在该模块下创建子模块changgou_service_goods,添加changgou_common依赖

7.创建代码生成器模块changgou_gennerator

 <dependencies>
        <!--代码生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--freemarker模板引擎-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>
        <dependency>
            <groupId>com.changgou</groupId>
            <artifactId>changgou_common_db</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
原文地址:https://www.cnblogs.com/wcl111/p/12989578.html