商对客模式电商网站设计与实现

时间:2022-09-09 11:12:21

商对客模式电商网站设计与实现

摘要:基于微服务框架搭建的“商对客”商业模式(B2C商业模式)的商城平台,对商城平台前后端进行分离,前端使用vue.js(视图层开发框架)进行页面渲染,后端采用微服务框架SpringCloud;每个微服务单体模块使用SpringBoot框架进行开发,微服务单体模块之间使用消息队列RabbitMq进行通信,使用Redis技术进行缓存。该设计实现了高可用、高并发和可扩展的全品类商对客模式电商网站,使客户与商家交易效率提高,给客户带来了良好的购物体验。

关键词:微服务架构;“商对客”商业模式;SpringCloud

1引言

(Introduction)随着科学技术的日益进步,电子商务成为社会活动的重要部分,用户实现了在家一键下单,购买支付,一键退款,方便了人们的生活。以往的单体应用架构根本支撑不住如此强大的购物热潮,在客流量增大的情况下,服务器常常因为无法承受高并发量而造成宕机的问题,使用户体验感差。而后发展的分布式架构和SOA(粗粒度服务)架构扩展性差,耦合性高,也不满足此系统的需求。基于此,本文开发的系统商城平台采用微服务架构,按照业务被拆分为多个微服务,以松耦合的方式被独立部署[1],使用Spring(SpringCloud+SpringBoot)框架进行开发,Nginx(轻量级web服务器)作为反向,Redis(内存数据库)作为缓存,MySQL(关系型数据库)作为后台数据库;使用RabbitMq(消息队列)方式提高了全品类网站平台的响应速度,实现了商品显示、商品搜索、加入购物车、下单购买等功能。

2技术方案(Technicalsolutions)

2.1微服务架构

2.1.1微服务微服务是面向服务软件开发的最新发展趋势,其通常采用去中心化的服务管理方式[2]。它的核心思想是根据业务需求,将业务拆分为一个一个的服务,实现去耦合,每个服务都对应唯一的业务,做到一个服务只做一件事,服务单一职责化,能够被独立部署到生产环境。服务内部通过RPC或消息驱动API通信,对外通过RESTfulAPI轻量交互信息[3]。微服务架构是粗粒度SOA架构的升华,其强调业务和功能彻底组件化和服务化。微服务的优点:(1)服务独立,一个服务只干一件事,独立部署;(2)开发简单,效率提高,团队之间工作互不干扰;(3)微服务是松耦合的;(4)易于和第三方集成。微服务的缺点:(1)开发和运营人员要处理分布式系统的复杂性;(2)运维成本提高;(3)数据一致性存在问题;(4)服务间通信成本增大。2.1.2SpringCloud框架简介SpringCloud是一套基于SpringBoot构建的通用工具集[4],它是一系列框架的有序集合,这些框架致力于分布式服务治理;它本身不会提供具体功能的操作,主要专注于服务之间的通信、熔断、监控;它有很多组件来支持一套功能[5]。

2.2“商对客”商业模式

“商对客”(即B2C)模式是企业对消费者的电子商务模式,企业建立自己的网站,在线上通过互联网销售自己的产品,宣传自己的品牌,进行网络推广和网络营销,使线上的交易配合线下的销售和宣传,提升了企业的服务质量,更好地增强了用户的黏性。B2C是一种综合性商城,不仅是一种百货商店,还是多种服务商店;不仅具有较大的购物群体,也实现了稳定的网络平台,在支付网络以及安全体系创建方式上都实现了完整的建设系统,为企业发展和人们消费提供了较大方便[6]。

2.3Redis

Redis是基于键值对存储结构的系统,类属于NoSQL[7]。Redis读写数据的时候不会受到硬盘I/O速度的限制,读取速度非常快[8]。Redis中的Value支持五种数据类型:字符串、字符串列表、字符串集合、有序字符串集合、哈希。Redis支持数据备份到磁盘上,且操作具有原子性。

3系统设计与实现(Systemdesignandimplementation)

3.1整体架构

灵耀商城平台是一个全品类的网站平台,在MVC架构的基础上,根据具体功能和实际业务需求融入微服务架构。每个微服务模块按照业务功能进行拆分,每个微服务的功能职责单一,除通用模块Common外,其余模块相互独立,没有功能性依赖,其他模块如要使用则直接调用对外提供的API访问接口。根据业务需求,将商城平台的前后端进行分离开发,并将整个系统按照业务功能划分为多个子系统,每个子系统仍然遵循MVC三层架构设计,分为界面层Controller、业务逻辑层Service和数据访问层Dao,接口遵循RESTful架构风格对外提供服务。系统为了防止网关故障从而导致整个系统无法响应的问题,设计了两个网关,其中一个作为备用网关。系统前端使用域名访问,此项目域名使用SwitHosts本地域名解析的方式,端口解析使用Nginx反向的方式,提高了网关的高可用性,网关与服务之间还配置了负载均衡和服务容错。为了实现微服务之间的数据同步,使用RabbitMq消息队列实现消息的异步发送接收。在系统架构中,所有微服务在Eureka上进行注册,整个服务端采用API网关负载均衡、服务路由、请求过滤等功能,运用Zuul组件进行服务路由。为了实现每个服务的独立性,降低系统耦合,对外只提供API接口,http远程调用组件FeignClient。在此系统中,包括商家运营人员使用的后台管理系统和用户使用的前端门户系统。总体框架图如图1所示。

3.2灵耀商城功能设计

通过需求分析以及微服务架构设计思想,系统按照功能需求分为七个独立的微服务模块,如图2所示。

3.3运营人员后台管理系统

运营管理人员登录系统可以实现商品管理、人员管理、销售管理以及权限管理。在商品管理中,通过搭建商品微服务实现分类管理、品牌管理、商品列表及规格参数管理。在配置文件中使用Eureka订阅商品服务,每5s就发送一次心跳,超时就过期,相关配置如图3所示,而后编写相应的代码进行CRUD处理,前端页面进行渲染。

3.4前台门户网站

3.4.1搜索搭建搜索微服务模块,实现用户搜索某个商品。通过使用注解@EnableFeignClients开启feign组件,定期在Eureka的注册中心拉取搜索服务,在resources的配置文件中也需要配置相应的Eureka客户端服务,用于向Eureka订阅相关服务。由于复杂的业务和海量数据以及高并发需求,为了提高搜索速度,搜索功能使用Elasticsearch全文检索技术,实现实时搜索以及分词搜索并支持多用户,例如搜索手机,查询后前端页面进行渲染如图4所示。3.4.2购物车搭建购物车微服务。如果用户还未登录,用户浏览商品添加购物车时,添加到本地浏览器的Localstorage中,支付时跳转到登录页面;如果用户已经登录,用户在选择到自己心仪的产品时想加入购物车,则在添加商品时会添加到Redis中,并且查看购物车时,会先查看本地浏览器中是否有数据,若没有数据就直接调用Redis中的数据;若有数据则将二者数据合并,最后更新到数据层MySQL数据库中。购物车可以添加多个数量,如果不满意可以删除订单或者移到“我的关注”中。用户选择好之后,系统会自动计算好选择商品的总金额,用于用户进行结算下单,如图5所示。3.4.3用户注册登录搭建用户注册微服务,实现用户注册。用户注册采用短信验证码的方式,通过用户名、密码、确认密码、手机号以及短信验证码的方式进行注册,添加信息到数据库中。为了防止密码泄露,使用非对称加密的方式对密码进行加密保存到数据库中。搭建登录认证微服务,实现用户登录。根据注册的用户名和密码进行登录,前端获取用户名和密码,后端根据用户名查询到相对应的用户id,使用相同的盐进行加密并与数据库中密码项进行比较,若相同,则登录成功。

3.5数据库设计

根据业务需求进行数据库设计。(1)用户注册相关信息,便可添加用户信息到用户表中,登录时查询用户表是否有响应的数据信息;(2)用户登录网站,浏览和查询商品,商品的显示按照不同通用规格参数和特有规格参数进行划分;(3)用户添加购物车,若登录,便可添加至购物车信息表中,进行下单便可在订单信息表中添加订单信息,在订单页面进行查看。详细E-R图如图6所示。

4结论(Conclusion)

本文主要实现了基于微服务架构的一个B2C商业模式的灵耀商城的开发,满足了系统高并发、高可用、可扩展的需求,以及大规模用户网上购物下单的基本功能需求。此前,系统的基本功能已开发完成,在进一步调试改进中。

参考文献(References)

[1]冯志勇,徐砚伟,薛霄,等.微服务技术发展的现状与展望[J].计算机研究与发展,2020,57(5):1103-1122.

[2]吴化尧,邓文俊.面向微服务软件开发方法研究进展[J].计算机研究与发展,2020,57(3):525-541.

[3]黄显琛.基于微服务架构的系统设计与实现[J].信息技术与信息化,2020,11(3):16-17.

[4]刘斌.基于SpringCloud的电信综合服务保障系统微服务改造之路[J].中小企业管理与科技,2019(11):90-91.

[5]周永圣,候峰裕,孙雯,等.基于SpringCloud微服务架构的进销存管理系统的设计与实现[J].工业控制计算机,2018,31(11):129-130,133.

[6]谢孝淼.基于JAVA技术的B2C电子商城网站系统设计与实现[J].信息通信,2016(02)102-103.

[7]秦溧,艾青.基于Redis技术的页面缓存研究[J].科技风,2021(12):74-76.

[8]张斌,任富彬,沈炜.基于SpringCloud的食品安全溯源系统的设计与实现[J].软件工程,2019,22(8):27-30.

作者:张林 单位:中国科学技术大学计算机科学与技术学院