基于微服务架构的商对客模式电商网站的设计与实现
2021-09-13张林
张林
摘 要:基于微服务框架搭建的“商对客”商业模式(B2C商业模式)的商城平台,对商城平台前后端进行分离,前端使用vue.js(视图层开发框架)进行页面渲染,后端采用微服务框架SpringCloud;每个微服务单体模块使用SpringBoot框架进行开发,微服务单体模块之间使用消息队列RabbitMq进行通信,使用Redis技术进行缓存。该设计实现了高可用、高并发和可扩展的全品类商对客模式电商网站,使客户与商家交易效率提高,给客户带来了良好的购物体验。
关键词:微服务架构;“商对客”商业模式;SpringCloud
中图分类号:TP311 文献标识码:A
文章编号:2096-1472(2021)-09-55-03
Abstract: This paper is based on a mall platform of the business-to-customer business model (B2C business model) built on the microservices framework, separating front and back ends of the mall platform. vue.js (view layer development framework) is used in the front end for page rendering, and SpringCloud, a microservice framework, is used in the back end. Each microservice monomer module is developed by using SpringBoot framework, the message queue RabbitMq is used for communication between the microservice monomer modules, and Redis technology is used for caching. The design achieves a high-availability, high-concurrency and extensible business-to-customer e-mall website of full-category goods, improving the efficiency of customer-business transactions and bringing customers a good shopping experience.
Keywords: microservice architecture; business-to-customer business model; SpringCloud
1 引言(Introduction)
隨着科学技术的日益进步,电子商务成为社会活动的重要部分,用户实现了在家一键下单,购买支付,一键退款,方便了人们的生活。以往的单体应用架构根本支撑不住如此强大的购物热潮,在客流量增大的情况下,服务器常常因为无法承受高并发量而造成宕机的问题,使用户体验感差。而后发展的分布式架构和SOA(粗粒度服务)架构扩展性差,耦合性高,也不满足此系统的需求。基于此,本文开发的系统商城平台采用微服务架构,按照业务被拆分为多个微服务,以松耦合的方式被独立部署[1],使用Spring(SpringCloud+SpringBoot)框架进行开发,Nginx(轻量级web服务器)作为反向代理,Redis(内存数据库)作为缓存,MySQL(关系型数据库)作为后台数据库;使用RabbitMq(消息队列)方式提高了全品类网站平台的响应速度,实现了商品显示、商品搜索、加入购物车、下单购买等功能。
2 技术方案(Technical solutions)
2.1 微服务架构
2.1.1 微服务
微服务是面向服务软件开发的最新发展趋势,其通常采用去中心化的服务管理方式[2]。它的核心思想是根据业务需求,将业务拆分为一个一个的服务,实现去耦合,每个服务都对应唯一的业务,做到一个服务只做一件事,服务单一职责化,能够被独立部署到生产环境。服务内部通过RPC或消息驱动API通信,对外通过RESTful API轻量交互信息[3]。微服务架构是粗粒度SOA架构的升华,其强调业务和功能彻底组件化和服务化。
微服务的优点:
(1)服务独立,一个服务只干一件事,独立部署;
(2)开发简单,效率提高,团队之间工作互不干扰;
(3)微服务是松耦合的;
(4)易于和第三方集成。
微服务的缺点:
(1)开发和运营人员要处理分布式系统的复杂性;
(2)运维成本提高;
(3)数据一致性存在问题;
(4)服务间通信成本增大。
2.1.2 SpringCloud框架简介
SpringCloud是一套基于SpringBoot构建的通用工具集[4],它是一系列框架的有序集合,这些框架致力于分布式服务治理;它本身不会提供具体功能的操作,主要专注于服务之间的通信、熔断、监控;它有很多组件来支持一套功能[5]。
2.2 “商对客”商业模式
“商对客”(即B2C)模式是企业对消费者的电子商务模式,企业建立自己的网站,在线上通过互联网销售自己的产品,宣传自己的品牌,进行网络推广和网络营销,使线上的交易配合线下的销售和宣传,提升了企业的服务质量,更好地增强了用户的黏性。B2C是一种综合性商城,不仅是一种百货商店,还是多种服务商店;不仅具有较大的购物群体,也实现了稳定的网络平台,在支付网络以及安全体系创建方式上都实现了完整的建设系统,为企业发展和人们消费提供了较大方便[6]。
2.3 Redis
Redis是基于键值对存储结构的系统,类属于NoSQL[7]。Redis读写数据的时候不会受到硬盘I/O速度的限制,读取速度非常快[8]。Redis中的Value支持五种数据类型:字符串、字符串列表、字符串集合、有序字符串集合、哈希。Redis支持数据备份到磁盘上,且操作具有原子性。
3 系统设计与实现(System design and implementation)
3.1 整体架构
灵耀商城平台是一个全品类的网站平台,在MVC架构的基础上,根据具体功能和实际业务需求融入微服务架构。每个微服务模块按照业务功能进行拆分,每个微服务的功能职责单一,除通用模块Common外,其余模块相互独立,没有功能性依赖,其他模块如要使用则直接调用对外提供的API访问接口。根据业务需求,将商城平台的前后端进行分离开发,并将整个系统按照业务功能划分为多个子系统,每个子系统仍然遵循MVC三层架构设计,分为界面层Controller、业务逻辑层Service和数据访问层Dao,接口遵循RESTful架构风格对外提供服务。
系统为了防止网关故障从而导致整个系统无法响应的问题,设计了两个网关,其中一个作为备用网关。系统前端使用域名访问,此项目域名使用SwitHosts本地域名解析的方式,端口解析使用Nginx反向代理的方式,提高了网关的高可用性,网关与服务之间还配置了负载均衡和服务容错。为了实现微服务之间的数据同步,使用RabbitMq消息队列实现消息的异步发送接收。
在系统架构中,所有微服务在Eureka上进行注册,整个服务端采用API网关负载均衡、服务路由、请求过滤等功能,运用Zuul组件进行服务路由。为了实现每个服务的独立性,降低系统耦合,对外只提供API接口,http远程调用组件Feign Client。
在此系统中,包括商家运营人员使用的后台管理系统和用户使用的前端门户系统。总体框架图如图1所示。
3.2 灵耀商城功能设计
通过需求分析以及微服务架构设计思想,系统按照功能需求分为七个独立的微服务模块,如图2所示。
3.3 运营人员后台管理系统
运营管理人员登录系统可以实现商品管理、人员管理、销售管理以及权限管理。在商品管理中,通过搭建商品微服务实现分类管理、品牌管理、商品列表及规格参数管理。在配置文件中使用Eureka订阅商品服务,每5 s就发送一次心跳,超时就过期,相关配置如图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.
作者简介:
张 林(1996-),女,硕士,工程师.研究领域:分布式软件系统开发.