文章目录

(一)项目分类
(二)电商行业
(三)专业术语
(四)项目介绍
(五)技术选型
(六)开发环境
(七)搭建后台环境:父工程
(八)搭建后台环境:eureka
(九)搭建后台环境:zuul
(十)搭建后台环境:商品微服务
(十一)搭建后台环境:测试商品微服务
(十二)搭建后台环境:通用工具模块
(十三)总结

(一)项目分类

项目分类:主要从需求方、盈利模式、技术侧重点这三个方面来看它们的不同

传统项目:各种企业里面用的管理系统(ERP、HR、OA、CRM、物流管理系统。。。。。。。)

  • 需求方:公司、企业内部
  • 盈利模式:项目本身卖钱
  • 技术侧重点:业务功能

互联网项目:门户网站、电商网站:baidu.com、qq.com、taobao.com、jd.com …

  • 需求方:广大用户群体
  • 盈利模式:虚拟币、增值服务、广告收益…
  • 技术侧重点:网站性能、业务功能

(二)电商行业

电商行业的技术特点

  • 技术范围广
  • 技术新
  • 高并发(分布式、静态化技术、缓存技术、异步并发、池化、队列)
  • 高可用(集群、负载均衡、限流、降级、熔断)
  • 数据量大
  • 业务复杂
  • 数据安全

电商行业的一些常见模式

  • B2C:商家对个人,如:亚马逊、当当等
  • C2C平台:个人对个人,如:闲鱼、拍拍网、ebay
  • B2B平台:商家对商家,如:阿里巴巴、八方资源网等
  • O2O:线上和线下结合,如:饿了么、电影票、团购等
  • P2P:在线金融,贷款,如:网贷之家、人人聚财等
  • B2C平台:天猫、京东、一号店等

(三)专业术语

  • SaaS(Software-as-a-Service):软件即服务

      SaaS出现之前,软件厂家只售卖软件,买家需要自己准备服务器等资源环境SaaS出现后,一条龙服务,买家只需要购买一个软件即可,不需要自己部署和维护
    
  • SOA:面向服务

  • RPC:远程过程调用

  • RMI:远程方法调用

  • PV:(page view),即页面浏览量

       用户每1次对网站中的每个网页访问均被记录1次。用户对同一页面的多次访问,访问量累计
    
  • UV:(unique visitor),独立访客

      指访问某个站点或点击某条新闻的不同IP地址的人数在同一天内,uv只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数
    
  • PV带宽

      计算带宽大小需要关注两个指标:峰值流量和页面的平均大小计算公式是:网站带宽= ( PV * 平均页面大小(单位MB)* 8 )/统计时间(换算到秒)为什么要乘以8?网站大小为单位是字节(Byte),而计算带宽的单位是bit,1Byte=8bit这个计算的是平均带宽,高峰期还需要扩大一定倍数
    
  • PVQPS并发

      QPS是指每秒处理的请求数量比如你的程序处理一个请求平均需要0.1S,那么1秒就可以处理10个请求QPS自然就是10,多线程情况下,这个数字可能就会有所增加
    

    由PV和QPS如何计算需要部署的服务器数量?

      根据二八原则,80%的请求集中在20%的时间来计算峰值压力:(每日PV * 80%) / (3600s * 24 * 20%) * 每个页面的请求数  = 每个页面每秒的请求数量然后除以服务器的QPS值,即可计算得出需要部署的服务器数量
    

(四)项目介绍

  • 乐优商城是一个全品类的电商购物网站(B2C)
  • 用户可以在线购买商品、加入购物车、下单
  • 可以评论已购买商品
  • 管理员可以在后台管理商品的上下架、促销活动
  • 管理员可以监控商品销售状况
  • 客服可以在后台处理退款操作
  • 希望未来3到5年可以支持千万用户的使用


整个乐优商城可以分为两部分:后台管理系统、前台门户系统

后台系统主要包含以下功能:

  • 商品管理,包括商品分类、品牌、商品规格等信息的管理
  • 销售管理,包括订单统计、订单退款处理、促销活动生成等
  • 用户管理,包括用户控制、冻结、解锁等
  • 权限管理,整个网站的权限控制,采用JWT鉴权方案,对用户及API进行权限控制
    统计,各种数据的统计分析展示

后台系统会采用前后端分离开发,而且整个后台管理系统会使用Vue.js框架搭建出单页应用(SPA)

前台门户面向的是客户,包含与客户交互的一切功能:

  • 搜索商品
  • 加入购物车
  • 下单
  • 评价商品等等

前台系统我们会使用Thymeleaf模板引擎技术来完成页面开发
出于SEO优化的考虑,我们将不采用单页应用

无论是前台还是后台系统,都共享相同的微服务集群,包括:

  • 商品微服务:商品及商品分类、品牌、库存等的服务
  • 搜索微服务:实现搜索功能
  • 订单微服务:实现订单相关
  • 购物车微服务:实现购物车相关功能
  • 用户中心:用户的登录注册等功能
  • Eureka注册中心
  • Zuul网关服务

(五)技术选型

前端技术

  • 基础的HTML、CSS、JavaScript(基于ES6标准)
  • JQuery
  • Vue.js 2.0以及基于Vue的框架:Vuetify(UI框架)
  • 前端构建工具:WebPack(类似于tomcat,用来运行项目
  • 前端安装包工具:NPM(类似于maven,用来管理依赖
  • Vue脚手架:Vue-cli
  • Vue路由:vue-router
  • ajax框架:axios
  • 基于Vue的富文本框架:quill-editor

后端技术

  • 基础的SpringMVC、Spring 5.x和MyBatis3
  • Spring Boot 2.0.7版本
  • Spring Cloud 最新版 Finchley.SR2
  • Redis-4.0
  • RabbitMQ-3.4
  • Elasticsearch-6.3
  • nginx-1.14.2
  • FastDFS - 5.0.8
  • MyCat
  • Thymeleaf
  • mysql 5.6

(六)开发环境

我们在开发的过程中,为了保证以后的生产、测试环境统一,尽量都采用域名来访问项目

一级域名:www.leyou.comleyou.comleyou.cn
二级域名:manage.leyou.com/itemapi.leyou.com

我们可以通过switchhost工具来修改自己的host对应的地址
只要把这些域名指向127.0.0.1,那么跟你用localhost的效果是完全一样的

(七)搭建后台环境:父工程


<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion><groupId>com.leyou.parent</groupId><artifactId>leyou</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging> <!-- 聚合工程的打包方式是pom --><name>leyou</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.SR2</spring-cloud.version><mybatis.starter.version>1.3.2</mybatis.starter.version><mapper.starter.version>2.0.2</mapper.starter.version><druid.starter.version>1.1.9</druid.starter.version><mysql.version>8.0.18</mysql.version><pageHelper.starter.version>1.2.3</pageHelper.starter.version><leyou.latest.version>1.0.0-SNAPSHOT</leyou.latest.version><fastDFS.client.version>1.26.1-RELEASE</fastDFS.client.version></properties><dependencyManagement><dependencies><!-- springCloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- mybatis启动器 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.starter.version}</version></dependency><!-- 通用Mapper启动器 --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>${mapper.starter.version}</version></dependency><!-- 分页助手启动器 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pageHelper.starter.version}</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--FastDFS客户端--><dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>${fastDFS.client.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

在父工程中引入了SpringCloud等,很多以后需要用到的依赖,以后创建的子工程就不需要自己引入了
可以删除src目录,工程结构如下:

(八)搭建后台环境:eureka

继续创建子模块,首先创建eureka,如下:


效果如下:

导入maven依赖,如下:

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

覆盖leyou-registry默认配置,如下:

server:port: 10086
spring:application:name: leyou-registry
eureka:client:service-url:defaultZone: http://localhost:10086/eurekaregister-with-eureka: false #eureka自己不注册fetch-registry: false #不拉取服务server:enable-self-preservation: false #关闭自我保护eviction-interval-timer-in-ms: 10000 #失效剔除,默认是60s,改成10s

创建引导类,如下:

(九)搭建后台环境:zuul

接下来用同样的步骤搭建zuul,结果如下:

导入maven坐标,如下:

    <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>

覆盖leyou-gateway默认配置,如下:

server:port: 10010
spring:application:name: leyou-gateway
eureka:client:service-url:defaultZone: http://localhost:10086/eurekaregistry-fetch-interval-seconds: 5 #5秒拉取一次服务
zuul:prefix: /api#等到有微服务的时候再来配置路由

最后创建引导类,如下:

(十)搭建后台环境:商品微服务

我们要把实体类(pojo)抽取出来,便于统一修改,如下:

首先创建leyou-item,如下:


接下来再选中leyou-item去创建子模块,如下:
(leyou-item-interface用于存放实体类异常处理等等)


最后创建leyou-item-service(编写微服务逻辑),如下:


配置leyou-item-service的依赖,如下:

    <dependencies><!-- web启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- eureka客户端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!-- jdbc启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- mybatis的启动器 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!-- 通用mapper启动器 --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId></dependency><!-- 分页助手启动器 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId></dependency><!--        引入interface--><dependency><groupId>com.leyou.item</groupId><artifactId>leyou-item-interface</artifactId><version>1.0.0-SNAPSHOT</version></dependency><!--        单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency></dependencies>

覆盖leyou-item-service的默认配置,如下:

server:port: 8091
spring:application:name: item-servicedatasource:url: jdbc:mysql://127.0.0.1:3306/ssm?useSSL=true&serverTimezone=UTCusername:  rootpassword:  123
eureka:client:service-url:defaultZone: http://localhost:10086/eurekainstance:lease-renewal-interval-in-seconds: 5 #心跳时间lease-expiration-duration-in-seconds: 15 #过期时间
mybatis:type-aliases-package: com.leyou.item.pojo

注意:因为刚才在pom.xml中引入了interface,所以可以直接扫描

最后为leyou-item-service编写一个引导类,如下:

回到leyou-gateway配置路由,如下:

(十一)搭建后台环境:测试商品微服务

我们在leyou-item-service导入测试接口依赖,如下:

    <!-- springboot检测服务启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

导入后无需我们自己编写mapperservice进行测试,可以自动化测试,如下:

测试结果成功,可以正常连通,如下:

(十二)搭建后台环境:通用工具模块

有些工具或通用的约定内容,我们希望各个服务共享,因此需要创建一个工具模块:leyou-common
右键leyou父工程,使用maven来构建module,如下:


现在先留空,以后需要的时候再写代码进去

(十三)总结

乐优商城之项目搭建(四)相关推荐

  1. 学习乐优商城中遇到的坑

    本人暑假期间学习了乐优商城这个项目,历时二十天,遇到了许多的麻烦,应该会有挺多人遇到.所以想记录一下,让大家跳坑. 首先,我建议jar包的版本,都选择和老师的一样,不然会出现一些莫名奇妙的报错. 在本 ...

  2. 【javaWeb微服务架构项目——乐优商城day03】——(搭建后台管理前端,Vuetify框架,使用域名访问本地项目,实现商品分类查询,cors解决跨域,品牌的查询)

    乐优商城day03 0.学习目标 1.搭建后台管理前端 1.1.导入已有资源 1.2.安装依赖 1.3.运行一下看看 1.4.目录结构 1.5.调用关系 2.Vuetify框架 2.1.为什么要学习U ...

  3. leyou商城项目搭建(1)-电商行业及乐优商城介绍

    leyou商城项目搭建(1)-电商行业介绍 1.了解电商行业 1.1.项目分类 1.1.1.传统项目 1.1.2.互联网项目 1.2.电商行业的发展 1.2.1.钱景 1.2.2.数据 1.2.3.技 ...

  4. 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能

    0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 源码笔记及资料: 链接:https://pan.baidu.com/s/1_opfL63P1pzH3rzLnbFiNw 提取码:v ...

  5. 乐优商城(四)商品规格管理

    文章目录 1. 商品规格 1.1 SPU 和 SKU 1.2 分析商品规格的关系 1.3 数据库设计 1.3.1 商品规格组表 1.3.2 商品规格参数表 2. 商品规格组 2.1 商品规格组前端 2 ...

  6. 【javaWeb微服务架构项目——乐优商城day05】——商品规格参数管理(增、删、改,查已完成),SPU和SKU数据结构,商品查询

    乐优商城day05 0.学习目标 1.商品规格数据结构 1.1.SPU和SKU 1.2.数据库设计分析 1.2.1.思考并发现问题 1.2.2.分析规格参数 1.2.3.SKU的特有属性 1.2.4. ...

  7. Java实战项目——乐优商城 常见错误集锦(一) ERROR com.zaxxer.hikari.pool.HikariPool:HikariPool-1-Exception during pool

    前言 错误信息:com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - 在初始化期间出现异常,具体异常信息如下: mysql连接出现问题?经过查阅资料,出 ...

  8. 乐优商城(十)用户注册

    文章目录 1. 搭建用户微服务 1.1 用户微服务的结构 1.2 创建 leyou-user 1.3 创建 leyou-user-interface 1.4 创建 leyou-user-service ...

  9. 乐优商城之分类查询品牌查询(八)

    文章目录 (一)编写分类查询 (二)跨域问题 (三)cors跨域原理 (四)解决跨域问题 (五)品牌查询页面分析 (六)品牌查询后台代码 (七)分页查询排序的原理 (八)axios (一)编写分类查询 ...

最新文章

  1. Opencv java 角点检测 preCornerDetect(15)
  2. 存储过程---角色权限叠加
  3. 工厂三兄弟之抽象工厂模式
  4. java perm 查看_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细
  5. python数据库操作框架_python bottle 框架操作数据库
  6. Arduino笔记-WeMos D1开发环境搭建及亮灯
  7. github api常用操作
  8. Python字符串详解
  9. C语言——变量篇(一)变量关键字static、auto、extern、register
  10. SQL Server 2014新特性:其他
  11. Spring中的两种AOP织入方式
  12. 常用软件的静默安装参数
  13. 电力线载波 Prime PLC 通讯技术简介
  14. 波特率和比特率的关系
  15. linux64位系统 addr2line使用
  16. H5写搜索框:将搜索图标放入搜索框之内
  17. 大数据揭秘| 《少年的你》大火之后,流量明星对电影意味着什么?
  18. 互联网大厂轮流买单,春晚红包却不再“药到病除”?
  19. 内存频率,CPU频率,主板频率之间的制约
  20. html在浏览器中的渲染原理,浏览器渲染原理

热门文章

  1. Redis6在Liunx系统下的安装、启动和关闭
  2. 一亩三分地新手上路答案
  3. 量化交易 第一课 简介
  4. Oracle EBS财务模块(二)基本组成模块
  5. css3实现各种角度的三角形
  6. 简单用CSS实现三角形
  7. 【第二十篇】C#微信H5支付 非微信内浏览器H5支付 浏览器微信支付
  8. 微信公众号-上传永久素材-中文文件名乱码 问题记录
  9. APK 控件逆向工程(36氪,作业盒子)
  10. 探索多维数据极端值处理方法