基于微服务的新星购物电商系统.docx
- 文档编号:9400004
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:33
- 大小:1.88MB
基于微服务的新星购物电商系统.docx
《基于微服务的新星购物电商系统.docx》由会员分享,可在线阅读,更多相关《基于微服务的新星购物电商系统.docx(33页珍藏版)》请在冰豆网上搜索。
基于微服务的新星购物电商系统
基于微服务的新星购物电商系统的设计与实现
摘要:
这几年来,随着互联网的技术的快速发展和人们生活水平和质量的不断上升,在网上购买物品逐渐成为了人们日常生活中不可缺少的一部分,所以电子商务系统使用的技术也经历了非常快速的发展。
随着业务的扩展和需求的迭代,电子商务平台往往需要支持越来越多的功能。
对于传统的单架构电子商务平台的开发与实现,随着需求的增长,函数间耦合严重,代码难以维护,在线成本高,服务的可扩展性等问题将越来越严重。
针对单体系结构电子商务平台存在的这些问题,实现了一个基于微服务体系结构的电商系统平台。
根据业务功能的界限,系统分为六个相对独立的业务服务,包括商品微服务,商品搜索微服务,订单支付微服务,购物车管理微服务,用户中心和认证服务。
每项服务都经过单独设计和实施,有效地减少了系统各个模块之间的耦合,提高了系统的灵活性。
除了业务服务模块外,还利用Springcloud的Eureka,Zuul,Config服务器和Feign等组件分别实现了服务日志发现,路由网关转发,分布式配置管理和声明式接口等功能。
关键词:
购物,微服务,互联网
第1章绪论
1.1系统开发的背景及意义
所谓的电商购物系统,是能够支付网上交易和支付金钱的全过程,所以就具有网上付款,网上购买,产品广告和网上询问等功能,主要体现在网上购物和网上支付。
从自身角度来看,方便了购物,省下了时间;从企业角度来看,提高了商品的知名度和扩散度,使得买卖双方节省了一定的金钱。
互联网的快速发展,使得电商系统应运而生,并且推广速度极快,给当今传统企业或现代企业带来了巨大的影响和无限的商机。
互联网和全球信息网络应用的快速发展为企业提供了一个无边界、永恒和地理便利的经营和拓展业务环境,开发电商系统是提升企业竞争力的强有力的手段之一。
它是传统业务和创新技术在激烈的市场竞争中迸发而出的完美产物,为企业提供了新的商机和管理模式。
1.2国内外研究现状
这几年来看,随着互联网技术和网上支付的技术等相关技术的飞速增长,互联网慢慢的改变着人们的生活方式。
互联网是收集信息的良好方式,并逐渐的在发展。
因此,电商系统势必会是以后的主流,会有更多的实体公司有计划的建立网上商城,向消费者表现一种全新的购物手法,所以会成为了一个新的销售行业,电商购物系统的优点已经是被很多的人所发现并接受。
但是从时间方面上来看,提出开发的电子商务平台时间不长,但发展速度已达到惊人的程度。
国外许多网站,不仅提供在线浏览,浏览,购物等功能,而且提供更人性化的在线测试等功能,利用图像技术,可以让人们先观看详情详情后再去打算是否购买。
让人体会到网上购物的种种优点。
在我们国家,电商系统起步相对于别的比较晚,但是它的发展势头很猛,压根难以抗拒,在短短几年期间,各大电子商务企业成倍增长,纷纷登顶,跃跃欲试。
同时,国家的政策的大力鼓励吗,为我国的电商网站的多种化,国际化,实用化打下了坚实的基础。
根据一些报告可以看出目前的总体趋势,在线购物中心的未来将不可避免地成为市场不可分割的一部分。
1.3微服务电商平台
微服务电商平台是公司资深架构组基于“高内聚、低耦合”的战略思想搭建的开发快速、服务运行独立的平台,封装了Springcloud、Redis、ElasticSearch等底层组件,易于与Idea集成工具结合开发,通过Maven下载所需依赖,就可以构建完整的项目依赖。
利用Node.js及Vue.js技术栈,实现前后端分离开发;通过Nginx反向代理可以实现通过本地域名来访问我们的电商购物系统;我们的网站的权限管理和控制采用的是JWT鉴权策略,对使用者和一些私密的接口进行了某些权限方面的控制;利用FastDFS解决大数据量的分布式文件存储问题,利用Elasticsearch高级聚合功能,实现商品的智能过滤搜索,利用RabbitMQ实现可靠消息服务,解决服务间通信问题和解决分布式事务问题。
利用Redis搭建高可用集群,实现可靠缓存服务即热点数据保存。
1.4论文的主要研究内容、相关技术和目标
1.4.1研究的主要内容
新星购物电商系统的核心技术主要在于多线程和高并发,后台的数据库主要采用的是MYSQL数据库。
研究的主要内容有以下几点:
1.用户中心:
注册用户、使用者的登录、使用者浏览商品并实现购物、产生订单等。
2.购物车微服务:
使用者能够在我的购物车中添加自己喜欢的商品、修改想要购物的商品数量、删除不想要的商品、清空自己的购物车商品等。
3.订单微服务:
通过购物车中商品生成订单、查看我的订单、查看某个订单的详细、订单在线支付等。
4.商品微服务:
商品的上下架、商品图像上传、查看商品详细信息、编辑商品、删除商品。
5.搜索微服务:
准确的搜索推荐、搜索过滤等。
6.支付服务:
微信支付、货到付款。
1.4.2相关技术
前端技术
前台系统使用的是HTML页面,页面的样式是通过CSS来控制的,并且通过JavaScript来达到一些前端实现的功能。
后台页面是使用vue来写的,利用axios来调用后台接口。
二维码的生成是通过QRCode.js来实现的。
后端技术
整体使用的是spring框架,数据库用的是MySQL和Redis,搜索索引库用的是Elasticsearch,域名代理用的是Nginx,文件上传是通过FastDFS来实现的。
消息队列使用的是RabbitMQ,数据库层用的是MyBatis3。
1.4.3目标
本课题最终预计达到如下几个目标:
(1)界面的设计好看养眼,用户有良好的交互感觉。
(2)功能独立性强:
商品、订单、搜索、支付等服务相对而言比较独立。
(3)满足用户对购物的大部分需求,系统性能的反应速度满足如今快节奏生活的需求。
第2章系统需求分析
2.1系统的需求分析
新星购物电商系统的整体框架主要分为两个部分,一部分是前台的商城功能,包括使用者注册,网上购物,订单管理,网上付款等操作;另一部分是后台管理系统的功能,这一部分包括:
商品规格参数的增删改查,商品的增删改查,品牌的增删改查。
新星购物电商系统功能如图2.1所示:
新星购物电商系统的需求如下图2.1:
图2.1系统功能图
前台商城模块:
(1)使用者注册:
使用者注册成为为网上商城的用户。
使用者注册商城账号的时候只需要填写使用者姓名、使用者密码、使用者联系电话即可。
(2)商品浏览:
使用者浏览商城系统,将自己喜欢并且想要购买的部分商品放入到自己的购物车当中,也能够在商品的详情页中添加商品到购物车中,可连续添加商品。
(3)购物:
用户选完商品后就进入到自己的购物车页面,可以看到自己喜欢并且想要购买的东西,而且还能够修改某一个物品的数量和删除某些商品、甚至可以清空整个购物车。
(4)订单功能:
顾客确定购物车中的商品后提交订单,然后等待用户支付,用户付款完成后,等待商家后台的反应,成功支付就会进入物流阶段。
后台管理模块:
(1)品牌管理部分:
网站的拥有者可以对品牌的各种参数进行增、删、改、查等相关操作。
(2)商品管理部分:
网站的拥有者可以添加、修改、查询、删除商品。
并可以编写商品详情信息,对商品的价格,显示的图片等进行增删改操作。
2.2数据流图
1.购物系统的数据流图顶层图如下:
顶层数据流图分别有两种角色:
管理员与会员。
顶层数据流图描述了会员与管理员各自可以操作功能模块,产生的数据流等。
如下图2.2所示:
图2.2网上购物系统的顶层图
2.购物系统的用户功能数据流图如下:
用户的数据流图标明了用户可实现的各种操作,也表明了各种操作成功失败后了后果,让人对用户的权限和功能一目了然,同时数据的流向也是很清晰的。
如下图2.3所示:
图2.3用户功能的数据流图
3.查询功能的数据流图如下:
下图描述了商品查询功能的数据流向情况,将各种操作细化,可以得到如下图2.4所示的数据流图:
图2.4查询的数据流图
2.3数据字典
(1)数据存储描述
表2-1给出了用户信息的具体组成数据。
表2-1用户信息描述
数据流
用户信息
数据流出处
数据库的用户表。
数据去处
用户界面。
数据流构成
用户名,用户密码。
表2-2给出了订单管理的具体组成数据。
表2-2订单管理描述
数据流
订单管理信息
数据流出处
数据库的订单表
数据去处
用户订单详情界面
数据流构成
用户ID、订单ID、商品名、订单支付状态,创建订单的时间,支付的时间。
表2-3给出了商品信息的具体组成数据。
表2-3商品管理描述
数据流
商品信息
数据流出处
数据库的商品表、商品sku表,商品规格参数表
数据去处
搜索商品界面、商品详情界面
数据流构成
id、商品名称、价格、照片、描述、商品的规格参数、分类、上下架
(2)数据处理描述
表2-4描述了用户在注册页面输入正确用户名、密码和验证码,系统对输入的数据进行验证,如果数据库里没有存在此数据显示注册成功。
表2-4用户身份验证
处理逻辑名称
用户注册验证
简述
检查输入信息的合法性
输入的数据流
用户名+密码+验证码
处理过程
验证用户输入的用户名、密码和验证码与数据库的用户表存在是否一致
输出的数据流
用户登录、商品信息
表2-5具体描述了当用户成功登录系统后,通过商品名搜索商品的信息,再根据查询后返回的数据显示在界面上。
表2-5商品信息搜索
处理逻辑名称
商品信息搜索
简述
检查输入信息的合法性
输入的数据流
商品名
处理过程
通过用户输入商品名进行数据库检索,查询具体商品信息
输出的数据流
订单信息,商品信息。
2.4实体关系图(E-R图)
商品信息实体有商品名称,图片,描述,二级类别等,具体如图2.5所示:
图2.5商品信息E-R图
订单信息实体有订单状态,订单创建时间,订单编号等,具体如图2.6所示:
图2.6订单信息E-R图
系统整体的实体ER图,用户可以添加购物车,有多个收货地址,对应多个商品,详情如图2.7所示:
图2.7系统E-R图
2.5本章小结
本章对系统的整体功能进行了分析,设计了用户、商品、订单、搜索等微服务功能模块,也对这些功能模块进行了详细的分析,明确了各个功能的定位和需求,也确定了各个功能之间的联系,明确它们的作用,对接下来的开发有很大的帮助。
第3章系统设计
3.1系统设计
3.1.1系统总体架构设计
图3.1系统总体架构
由图可知,新星购物电商平台总体架构分为三层:
表现层:
用到的技术vue、node.js、WebPack打包工具。
业务层:
商品微服务,订单微服务,搜索微服务,购物车微服务,支付服务,为各类业务开发提供公用接口,提供系统基础服务设施,使得业务开发能够快速便捷,采用“高内聚、低耦合”思想进行开发,使得各个具体业务之间减少依赖,运行灵活。
数据层如图所示,主要分为三部分:
数据存储部分,使用了MySQL关系型数据库来存储重要的数据,Redis分布式缓存数据库来存取一些读取要求高的数据,ElasticSearch分布式索引库来存取商品信息数据;数据访问部分,包含Model、Mapper等查询与结果集映射接口;系统框架部分,采用基于SpringCloud与SpringBoot搭建的一站式微服务系统,包含服务的注册、客户端的负载均衡、系统的全局配置、熔断器与服务网关等一系列微服务组件。
3.1.2数据库设计
新星电商购物系统使用MYSQL数据库来存储重要数据。
本小章节对系统用到的数据库表的结构进行了详细的设计。
根据第三章的系统需求分析,系统需要建立一些数据库表来保存一些相关的信息,如商品信息、品牌信息、商品分类信息等一些数据库,以下是对上述一些主要数据库表的设计:
(1)Tb_brand(品牌信息)表
表3-1Tb_brand表
列名
数据类型
可为空
注释
id
long(30)
NOTNULL
品牌id
name
varchar(32)
NOTNULL
品牌名称
image
varchar(128)
DEFAULT''
品牌图片地址
letter
varchar
(1)
NOTNULLDEFAULT''
品牌的首字母
表3-1给出了存放商品信息的数据库表结构,表中各字段代表的含义在第四列“注释”中有具体描述,该表的主键为id。
(2)tb_category(商品类目)表
该表为商品分类表,用于保存商品的分类信息。
表结构如表3-2所示:
表3-2tb_category表
列名
数据类型
可为空
注释
id
long(20)
NOTNULL
分类的id
name
char(32)
NOTNULL
分类的名称
parent_id
long(20)
NOTNULL
父亲节点的id,最高级填0
isParent
intagr
(1)
NOTNULL
是否是父节点,0为否,1为是
sort
int(10)
NOTNULL
排序
(3)sku(具体的商品实体)表
该表为具体的商品实体表,用于记录商品的基本信息,表结构如表3-3所示:
表3-3sku表
列名
数据类型
可为空
注释
id
bigint(20)
NOTNULL
skuid
spu_id
bigint(20)
NOTNULL
spuid
title
varchar(256)
NOTNULL
商品标题
images
varchar(1024)
DEFAULT''
商品的图片
price
bigint(15)
NOTNULLDEFAULT0
销售价格,单位为分
indexes
varchar(32)
DEFAULT''
特有规格属性在spu属性
own_spec
varchar(1024)
DEFAULT''
sku的特有规格参数键值对
enable
int
(1)
NOTNULL
是否有效,0为无效,1为有效
createTime
datetime
NOTNULL
添加商品的时间
lastUpdateTime
datetime
NOTNULL
最后修改商品的时间
(4)spu(抽象性的商品)表
表3-4spu表
列名
数据类型
可为空
注释
id
long(20)
NOTNULL
主键
title
varchar(128)
NOTNULLDEFAULT''
标题
sub_title
varchar(256)
DEFAULT''
子标题
cid1
bigint(20)
NOTNULL
1级类目id
cid2
bigint(20)
NOTNULL
2级类目id
cid3
bigint(20)
NOTNULL
3级类目id
brand_id
long(50)
NOTNULL
商品归属的品牌id
saleable
int
(1)
NOTNULL
是否上架,0为已下架,1为已上架
valid
int
(1)
NOTNULL
是否有效,0为已删除,1有效
createTime
datetime
NOTNULL
创建商品的具体的时间节点
lastUpdateTime
datetime
DEFAULTNULL
最后修改的时间节点
表结构如上表3-4所示,该表为抽象的商品,比如华为手机,用于记录商品的抽象信息。
(5)tb_spec_param(规格参数组下的参数名表)表
该表为规格参数组下的参数名表,表结构如表3-5所示:
表3-5tb_spec_param表
列名
数据类型
可为空
注释
id
long(20)
NOTNULL
规格参数表的主键
cid
bigint(20)
NOTNULL
商品分类id
group_id
bigint(20)
NOTNULL
name
插入(250)
NOTNULL
商品的参数名
numeric
Long
(1)
NOTNULL
是否是数字类型参数,true或者是false
unit
varchar(150)
NOTNULL''
数字类型的单位,非数字类型的为空
generic
long
(1)
NOTNULL
是否是商品普遍的属性,true或者是false
searching
long
(1)
NOTNULL
是否可以用来做搜索过滤的字段,true或者是false
segments
varchar(1024)
DEFAULT''
数值类型参数
3.1.3系统的功能模块设计
1.用户注册模块
用户注册是用户能够登陆新星购物系统的前提,用户想体验完整的购物体验必须先要进行注册。
用户注册流程具体如下,进入注册页面,填写注册信息,前端会验证输入的格式问题,当验证无误后,再到服务器验证,服务器验证也无误后,用点击“注册”按钮进行用户注册,系统会对用户输入的手机接收的验证码进行验证,验证成功跳到登录页面。
具体的流程图如下图3.2所示:
图3.2用户注册流程图
2.用户登录模块
用户在登录页面输入用户名跟密码,点击登录按钮,服务器进行数据验证,存在此用户则登陆成功,用户名不存在或密码错误,出现登录失败,用户重新登录,具体的流程图如下图3.3所示:
图3.3用户登录模块
3.搜索商品模块
搜索商品模块是用Elasticsearch索引库做的,所以他的搜索速度是十分快的,而且可以根据商品的规格参数进行搜索,点击对应的商品参数,就会显示相应的商品信息。
也可以根据输入的搜索关键字搜索,会出现对应的大量商品信息。
具体流程图如下图3.4所示:
图3.4搜索流程图
4.用户购物模块
用户购物模块包括了信息网站的大部分功能,包括浏览商品,查看商品详情,购物车,结算订单等功能,如果用户是未登录状态下结账的,那么就会提示用户登录,用户登录成功后会把浏览器本地的购物车内容放到相应用户的购物车当中去,本地浏览器的内容就会被删除。
具体的购物流程图如下图3.5所示:
图3.5购物的流程图
详细的流程说明:
1.用户在商城页面浏览商品。
2.用户把喜欢的商品加入购物车。
3.用户在购物车页面点击结算。
4.如果用户未登录,跳到登录界面,如果发起请求者已经是登录状态,那么久会直接跳到订单界面。
5.用户提交订单,会生成一个支付二维码。
6.用户支付成功,等待物流配送。
3.2本章小结
对系统的整理框架进行了设计,主要运用了spring全家桶的技术,前端使用了vue,数据库使用了MySQL和Redis,同时也使用了索引库来提升用户的查询商品的速度需求,同时也对数据库的具体的细表进行了设计,包括订单详情表,商品规格参数表,商品信息表,商品详情表等表的设计,加深了对表与表的关联关系和数据库的各种操作的了解。
第4章系统实现
4.1环境实现
4.1.1.Eureka注册中心(微服务拉取)
技术描述:
Eureka就类似于滴滴搭车,负责管理、收集服务提供者的全部信息。
服务的调用者不用自己寻找服务,而是把自己想要的服务告诉Eureka中心,然后它就会把符合你自己需求的服务告诉你让你来使用。
在此同时,服务的提供方与Eureka之间是通过心跳机制来进行监控和管理的,来看某些可以使用的服务是否正常运行并且可以使用,当某些服务的提供方出现了一切技术问题或非技术问题,Eureka自然就会把它从众多的服务列表中排除掉。
这就实现了服务的自动注册功能、发现服务功能、状态的实时监控功能。
具体实现:
1.eureka微服务的pom.xml文件需引入spring-cloud-starter-netflix-
eureka-server依赖,并在主方法上添加@EnableEurekaServer注解标识该应用为eureka服务器。
2.在需要拉取服务的主方法上添加@EnableDiscoveryClient注解标识,就可以实现服务拉取。
4.1.2全局网关(gateway_zuul)
技术描述:
全局网关是微服务系统的服务入口,采用zuul作为网关实现,可对所有请求进行过滤,限流,黑名单访问控制等高级特性,同时,保证服务的安全性,服务内部间通过内网访问,前端请求到网关中心时,网关中心会根据该请求携带的access_token访问认证中心,确保该token有效才放行。
具体实现:
1.gateway_zuul项目中需要添加spring-cloud-starter-netflix-zuul的相关依赖,并在运行类的main方法中添加@EnableZuulProxy注解,标识该应用为网关。
2.在ns-gateway的application.yml配置文件中配置拦截规则,并且还可以创建相关的类,来自定义拦截规则。
4.1.3上传微服务
技术描述:
我的商城的上传微服务部分是通过利用FastDFS的客户端来实现的。
FastDFS是一个体积小、性能强大的开源分布式文件系统。
用的是C语言来开发此软件,功能十分的丰富:
文件的存储、文件的同步管理、文件的上传和下载、存取的时候可以实现负载均衡、在线扩大容量等,适合有大容量存储需求的应用和系统。
具体实现:
1.下载FastDFS客户端到虚拟机中去,并配置相关的文件。
在上传微服务的pom.xml加入fastdfs-client依赖。
2.在服务层代码中写相应的规则,并在配置文件中加入相应的配置。
4.1.4Elasticsearch(搜索引擎)
技术描述:
Elasticsearch是一个关于使用分布式和RESTful风格的查询和数据分析引擎,能够解决大多数不同的用例。
接近于实时的搜索,数据的更新速度在Elasticsearch中可以说是几乎完全同步的。
总而言之就是搜索速度极其快,目前很多公司都在使用。
具体实现:
1下载Elasticsearch客户端到虚拟机,并配置相关的文件。
在搜索微服务的pom.xml加入spring-boot-starter-data-elasticsearch依赖。
2.在服务层代码中写相应的规则,并在配置文件中加入相应的配置。
4.1.5RabbitMQ(消息队列)
技术描述:
消息队列总的来说是典型的创造者、消费者模型。
服务的提供方不断向消息队列中提供生产的消息,服务的消费方不断的从信息队列中获取自身需要消费的消息。
因为不同服务的信息的生产和消费都是不同步的,而且只需关心服务的消息的发送和消费,几乎是不用考虑业务逻辑的问题是否有干扰该服务,这样就实现了解耦。
AMQP是一个协议,它主要内容和作用是提供统一的消息服务的应用层标准高级消息队列,是应用层协议中的一个开源的协议。
在此协议的基础上的服务消费方与消息的中间方可相互发送消息,并且是不受不同的产品、不同的开发语言等条件的影响和限制的。
RabbitMQ就是一个基于AMQP的基础上的一款消息管理系统。
具体实现:
1.下载RabbitMQ客户端到虚拟机,并配置相关的文件。
在商品微服务的pom.xml加入spring-boot-starter-amqp依赖。
2.在服务层代码中写相应的规则,并在配置文件中加入相应的配置。
4.2前台商城
4.2.1用户注册
下图4.1是商城的用户注册页面,界面上包
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 微服 新星 购物 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)