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


    微服务系统架构概述

    单体应用架构

    以电商平台为例,如图所示,在传统单体应用中,所有模块代码,都会写在一个应用下,然后我们一般开发完成后,打成一个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>
  • 相关阅读:
    Java基础之IO流,使用File类以树形结构打印指定文件目录
    Java基础之IO流,以字节流的方式操作读写文件FileOutputStream和FileInputStream的使用
    Java基础之IO流,自定义字节流缓冲区装饰类(模仿)
    Java基础之IO流,转换流应用InputStreamReader,OutputStreamWriter
    碰撞处理游戏的原型
    flash中物体运动基础之六方向与角度
    flash中物体运动基础之七碰撞处理
    推导坐标旋转公式
    flash中物体运动基础之一匀速运动
    flash中物体运动基础之五障碍物
  • 原文地址:https://www.cnblogs.com/wcl111/p/12989578.html
Copyright © 2020-2023  润新知