微服务系统架构概述
单体应用架构
以电商平台为例,如图所示,在传统单体应用中,所有模块代码,都会写在一个应用下,然后我们一般开发完成后,打成一个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>