【畅购电商】项目总结(一 )

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 【畅购电商】项目总结

1. 电商项目架构图

  • 技术框架/技术选型

1.1 系统架构

  • 该项目是一个B2C的电商项目(类似小米商城、京东商城、天猫商城)
  • 允许客户通过网络购买商品
  • 该项目主要完成的是电商项目前台的开发。
  • 采用前后端分离的方式进行开发的
  • 前端:vue全家桶(Vue、Router、Vuex、Axios、Nuxt、SSR等技术)。
  • 后端:Spring Cloud Gateway 网关、Spring Cloud alibaba技术栈(nacos、sentinel 等)分布式微服务架构。
  • 该项目共有6个微服务(不考虑集群):
  • gateway网关服务
  • service-auth 认证服务
  • service-cart 购物车服务
  • service-orders 订单服务
  • service-search 搜索服务
  • service-web 核心业务(基本业务)服务
  • 扩展:
  • MQ服务(消息队列服务)
  • SMS服务(短信服务)
  • 本项目使用Nacos作为服务的注册与发现中心,以及信息的配置中心。
  • 使用企业级消息队列RabbitMQ进行消息通信、应用解耦、流量控制、流量削峰。
  • 采用企业级搜索引擎Elasticsearch实现商品的在线实时搜索。
  • 该项目的追求目标:高并发、高可用、高稳定 。

1.2 技术架构

  • 前端:
  • Node.js :前端的服务器,用于启动vue相关的内容。
  • Vue.js:前端使用的是vue相关的技术
  • Element UI :vue的前端框架,提供通用的组件,减少CSS、特效等编写。
  • Nuxt.js :vue的前端框架,用于解决SSR(服务端渲染)问题,易于SEO。
  • 运维技术:
  • Nacos:服务中心、配置中心
  • redis:数据存储中心
  • elasticsearch:搜索服务中心
  • docker:用于部署项目(会将项目部署到linux系统中,在通过docker进行具体的部署)
  • canal: https://github.com/alibaba/canal 自学
  • 分布式架构
  • spring boot :项目结构基础
  • spring cloud alibaba:微服务架构
  • jwt + RSA:鉴权中心,
  • jwt用于生成token,
  • RSA进行加密操作,用于辅助生成或校验token。
  • 持久化技术栈:
  • MyBatis Plus:用于取代MyBatis、通用Mapper,提供更优的工具、性能也有对应提升。
  • Spring data redis:用于简化Java对redis操作
  • spring data elasticsearch:用于简化java对es操作
  • 数据库:
  • mysql:免费的
  • MyCat:用于数据库分库分表的。
  • 外部接口:
  • 阿里大鱼:发送短信
  • 微信支付接口

2. 介绍电商项目

  • 介绍一下你最熟悉的项目?
  • 介绍一下最近完成的一个项目?

2.1 后台和前台、后端和前端

  • 前台和后台均可以采用前后端分离的方式进行开发,也就形成了对应的前端和后端。
  • 后台:提供给管理员使用。
  • 电商的后台模块:会员管理、分类管理、快报管理、广告管理、商品管理、订单管理、财务管理、报表管理。
  • 前端:element ui、element ui admin
  • 后端:spring boot、spring cloud、spring cloud alibaba
  • 前台:提供给用户使用。目前完成的电商项目只是部分,完成了前台部分。
  • 电商的前台模块:注册、认证、无限极分类、快报、搜索、购物车、订单、支付。
  • 前端:nuxt.js
  • 后端:spring cloud alibaba

2.2 Vue全家桶包含哪些技术?

  • vue:核心组件,主要用于数据的双向绑定。(html标签 与 vue data数据 进行 双向绑定)
  • 生命周期、计算属性、过滤器、监听器 等
  • router:路由,映射作用,使访问路径可以映射到对应的vue资源。
  • 请求拦截器、响应拦截器 等
  • vuex:状态管理,用于在多个组件之间共享数组。
  • element ui :vue的组件库,提供通用的组件(内含CSS样式、JS特效)
  • Nuxt:vue的框架,用于实现SSR技术。
  • axios:第三方ajax框架

2.3 什么是Vuex?

  • vuex是什么?
  • vue全家桶的一个组件,进行状态管理,也就是在组件之间进行数据的共享
  • vuex组件:状态state(死爹)、方法mutations(模特神)、功能actions、(模块modules、获得getters)
  • 状态state:相当于变量,用于存放数据
  • 方法mutations:用于操作变量,对变量的数据进行修改的
  • 功能actions:用于调用方法,可以进行ajax操作。
  • 如何使用?
  • 基本使用:
  • state:获得值 this.$store.state.变量 。一般与vue计算属性一起使用。
  • mutations:调用方法 this.$store.commit("方法名", 参数)。与vue method一起使用。
  • actions:调用功能 this.$store.dispatch("功能名", 参数)
  • 映射使用:
  • 导入:import {mapState, mapMutations, mapActions } from 'vuex'
  • state : 编写在计算属性处
1. computed: {
2.     ...mapState(['变量名']),
3.     变量名() {    //等效
4. return this.$store.state.变量;
5.     },
6. 
7. }

mutations:编写在普通方法处

1. methods: {
2.     ...mapMutations(['方法名']),
3.     方法名(参数) {   //等效
4. this.$store.commit("方法名", 参数)
5.     }
6. }

2.4 什么是SSR

  • SSR:服务端渲染技术,前端页面静态化技术,使ajax的数据与html标签不在分离,整合成一个整体。
  • 也就是说将ajax查询的结果,处理成静态页面。
  • nuxt.js 支持SSR技术,在页面加载前,通过asyncData进行ajax查询,并将查询结果合并定data区域,页面加载成功后,不需要再次查询。相当于静态页面。
  • 用途:用于解决SEO(搜索引擎优化)问题。
  • 搜索引擎提供的爬虫,优先爬取静态页面,为了提高网站的收录率,所以需要将动态页面转换成静态页面。

2.5 电商模式是什么?

  • B2C:商家-客户
  • 商家开发一个商城,并进行商品售卖。
  • 用户通过商城进行商品的购买。
  • 例如:唯品会、乐蜂网
  • B2B2C:商家A-商家B-客户
  • 商家B:开发一个商城,提供给商家A进行商品的售卖。商家B对商家A有监督等权利。
  • 商家A:入驻到商家B开发的商城,进行商品的售卖。
  • 客户:通过商城进行购买。
  • 例如:京东、天猫
  • C2B:客户-商家,客户提需求,商家进行定制。
  • 例如:尚品宅配
  • O2O:线上/线下,通过线上进行下单,通过线下进行交付。
  • 例如:美团外卖、饿了么
  • C2C:客户-客户,私人买卖。
  • 例如:瓜子二手车、转转、咸鱼。

2.6 枚举类

  • 枚举类的用途:限定指定类型的实例
  • 常量类是jdk1.4的技术
  • 枚举类是jdk1.5技术,用于取代常量类。如果没有参数,定义非常简单。
  • 枚举:通过参数,设置需要记录的信息
1. package com.czxy.changgou4.enum_demo;
2. 
3. /**
4.  * @author 桐叔
5.  * @email liangtong@itcast.cn
6.  * @description
7.  */
8. public enum Gender {
9.     MALE(1,"男男"),FEMALE(0,"女女");
10. 
11. private Integer id;     //编号
12. private String text;    //文本
13. 
14.     Gender(Integer id, String text) {
15. this.id = id;
16. this.text = text;
17.     }
18. 
19. public Integer getId() {
20. return id;
21.     }
22. 
23. public String getText() {
24. return text;
25.     }
26. }

常量类,与上面的枚举等效的功能。

1. package com.czxy.changgou4.enum_demo;
2. 
3. /**
4.  * @author 桐叔
5.  * @email liangtong@itcast.cn
6.  * @description
7.  */
8. public class GenderClass {
9. public final static GenderClass MALE = new GenderClass(1, "男");
10. public final static GenderClass FEMALE = new GenderClass(0, "女");
11. 
12. private Integer id;     //编号
13. private String text;    //文本
14. 
15. public GenderClass(Integer id, String text) {
16. this.id = id;
17. this.text = text;
18.     }
19. 
20. public Integer getId() {
21. return id;
22.     }
23. 
24. public String getText() {
25. return text;
26.     }
27. }

测试

1. package com.czxy.changgou4.enum_demo;
2. 
3. /**
4.  * @author 桐叔
5.  * @email liangtong@itcast.cn
6.  * @description
7.  */
8. public class TestGender {
9. public static void main(String[] args) {
10.         System.out.println(Gender.MALE.getId());
11. 
12.         System.out.println(GenderClass.FEMALE.getText());
13.     }
14. }

2.7 elasticsearch相关

  • elasticsearch的原理?
  • 将数据保存到es中时,es会对数据进行分词。
  • 每一个分词进行编号,在进行查询时,通过分词找到对应的编号,然后通过编号从索引库中找到对应的数据。
  • 此过程就是原理,此原理称为“倒排索引”
  • 为什么要使用elasticsearch?
  • 数据库mysql不能分词,es可以进行分词搜索。
  • 数据库可以对指定的字段进行模糊查询,也就是某个字段
  • es进行全文分词检索。比mysql更灵活。
  • es专业搜索,可以处理海量的数据,且速度很快。电商项目有海量的商品,需要es进行搜索。
  • 为什么要使用IK分词器?
  • 默认es对单字进行分词。
  • 实际需要时,根据词组进行分词。需要特定的中文分词器。

2.8 gateway网关相关

  • gateway网关的功能?网关的作用?
  1. 动态路由
  2. 负载均衡
  3. 鉴权

2.9 nacos相关

  • nacos的作用?
  • 微服务的注册中心:可以通过服务的名字获得对应服务位置
  • 微服务的配置中心:将yml或properties配置文件中的内容,抽取到nacos中,通过修改nacos,相当于修改yml或properties文件。
  • 为什么需要nacos?
  • 微服务架构,都需要一个注册中心,管理所有的微服务。方便通过服务名称获得每一个服务的真实的IP地址+端口号。项目之间只需要记录服务名即可,服务的真实地址和端口号可以随意改变。
  • 需要给自己的微服务选择一个注册中心。
  • 常见的注册中心:nacos、eureka、dubbo的zookeeper 等
  • nacos是alibaba提供额技术支持,经历过双十一的实战考验,优先选择。

2.10 定时任务

什么是SpringTask?

  • SpringTask 是一个定时任务组件。
  • 可以在指定的时间周期内,完成指定的任务。
  • 一般情况采用的是cron表达式。
@Scheduled(cron = “0-5 * * ? * *”)

cron表达式

分7部分:秒 分 时 日期 月 周 年?

常用6部分:秒 分 时 日期 月 周, 且“日期”和“周”存在冲突问题,需要忽略其中一个,使用?。

,  或,例如:1,2,3

-  至,例如:1-5

/  每,例如:0/5

*  任意


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
存储 安全 前端开发
基于springboot技术的美食烹饪互动平台的设计与实现
基于springboot技术的美食烹饪互动平台的设计与实现
|
1月前
|
新零售 供应链
九星创客新零售商城系统开发|源码|方案详情
当下的商业领域,随着网络、电话、电视等平台的日益成熟和壮大
|
13天前
|
前端开发 Java 项目管理
校友社交平台|基于SpringBoot校友社交系统
校友社交平台|基于SpringBoot校友社交系统
|
7天前
|
人工智能 搜索推荐 机器人
开发者选择:全面对比导购APP、淘宝客机器人与淘客系统
开发者选择:全面对比导购APP、淘宝客机器人与淘客系统
|
8月前
|
JSON 小程序 开发者
微信小程序--数字化会议OA系统之首页搭建
微信小程序--数字化会议OA系统之首页搭建
62 0
|
1月前
|
存储 小程序
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十三)
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十三)
|
1月前
|
安全 Java 关系型数据库
社区团购|生鲜团购|基于Springboot+Vue实现前后端分离社区团购
社区团购|生鲜团购|基于Springboot+Vue实现前后端分离社区团购
|
9月前
|
监控 Serverless 持续交付
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
2466 44
|
7月前
|
搜索推荐 前端开发 JavaScript
【开题报告】基于SpringBoot的在线乐器购物商城的设计与实现
【开题报告】基于SpringBoot的在线乐器购物商城的设计与实现
128 0
|
7月前
|
Java 测试技术 Maven
淘东电商项目(13) -项目整合WxJava
淘东电商项目(13) -项目整合WxJava
38 0