基于微服务架构的电商系统的设计与实现
2023-08-11程书玲吴丹丹
程书玲,吴丹丹
(1.浙江工贸职业技术学院,浙江 温州325000; 2.中国电信股份有限公司温州分公司,浙江 温州 32500)
0 引言
近年来,世界经济正向数字化转型,大力发展数字经济成为人们的共识。我国数字经济发展进入了新阶段[1],数字经济与实体经济有了深度融合。电子商务是数字经济的重要组成部分,是数字经济最活跃、最集中的表现形式之一[2]。我国电子商务交易规模日益扩大,并保持高速增长态势,网络零售规模全球最大,产业创新活力世界领先,基于微服务架构的电商系统应运而生。
为了使用户快速地找到商品,获得有助于决策的消息,方便商品管理,设计了基于微服务架构的电商系统。该系统属于B2C电商系统,分为网站前台与管理后台,采用apache dubbo+ssm集成框架搭建,持久层框架采用现在流行的mybatis通用mapper,前端框架采用主流的vue.js与elementui[3]。业务设计上优化了满减优惠计算、秒杀、评论、仓库物流、统计分析、后台订单等相关业务功能开发及权限设置等功能。技术上融合了jdk1.8,多处代码发挥了其特性。
采用流行的前后端分离架构开发,由用户层、UI层、微服务层、数据层等部分组成,为PC、H5等客户端用户提供服务。采用apache dubbo作为服务发现及服务治理框架,采用阿里云oss实现图片资源的云存储,使用redis作为缓存中间件,用redis框架操作缓存。采用rabbitmq作为消息中间件,实现工程模块的解耦、分布式事务及服务端推送,用阿里云通信作为短信解决方案,采用cas (版本5)作为单点登录解决方案,使用微信支付,通过内网穿透工具实现回调测试。使用spring security权限框架,采用RBAC权限模型,采用elastichsearch作为搜索中间件,采用thymeleaf技术实现网页静态化及服务端渲染,采用vue.js+elementui实现客户端渲染解决方案,采用任务调度解决方案spring task,使用CORS作为跨域解决方案。
图1 技术架构
1 前端功能技术
客户可通过手机端及电脑登录,登录方式采用手机号快速登录,还可以通过用户名密码登录。前端功能模块有支付服务、订单服务、用户服务、商品服务、运营服务、系统服务、短信服务等。服务模块采用Dubbo微服务架构,轻量级部署,以平衡每台服务器的压力,使业务更好地运行[4-5]。支付服务根据微信支付的开发文档调用,使用QRcode.js在页面生成二维码。订单服务勾选需要发货的订单,点击批量发货按钮。用户服务是对于用户密码的保护,通常会进行加密,存放在数据库中,用户登录时,将其输入的密码加密,再与数据库中存放的密文进行比较,以验证用户密码是否正确。商品服务包括商品审核与商品上架。消息服务运用的组件是WebSocket,是HTML5 中一种新的通信协议,能够实现浏览器与服务器之间的全双工通信。如果浏览器与服务端都支持WebSocket协议,该方式实现的消息推送是最高效、简洁的。
前端框架框使用ElementUI与Vue.js,网站后台使用Vue.js+ElementUI,网站前台采用Vue.js 与模板技术thymeleaf。前端页面与后台服务器使用ajax异步请求模型,ajax可以异步请求数据,快速响应页面请求,用户感知良好。
2 后端功能使用技术
后端后台包括商品、订单、库存、用户、运营、统计、财务、设置等功能。采用Spring Security技术限制,用户只能登录且必须是管理员访问权限才可以访问资源。如果用户没有登录访问主页,将执行拦截跳转到登录,登录后将跳转到主页。使用RabbitMQ可实现延迟消息,底层采用数据库集群,为了提高查询性能,将一个数据库的数据分散到不同数据库中存储,即数据库分片。MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,用MySQL客户端工具及命令进行访问,后端可用MySQL原生协议与多个MySQL服务器通信,其核心功能是分表分库,即将一个大表水平分割为n个小表,存储在后端 MySQL服务器或其他数据库中,系统数据合并或数据库变更等情况下方便数据迁移和合并。
3 数据库实现
该系统涉及的主要数据库表有订单日志表(t_orderlog)、退货退款原因表(t_returncause)、套餐表(t_setmeal)、订单表(t_order)、预约设置表(t_ordersetting)。其中,检查项表存储检查项基本信息,包括检查项编码、检查项名称、该检查项适用的性别及年龄、价格、注意事项。订单日志表如表1所示。
表1 订单日志基本信息
退货退款原因表包括原因、排序、退货退款状态,如表2所示。
表2 退货退款原因
表3 退货退款申请表
退货退款申请表根据id修改退货退款订单的状态为1,记录当前管理员id及当前时间。需要做一些必要的验证,退款的金额不能大于原订单的金额。若驳回退款,根据id修改退货退款订单的状态为2,记录当前管理员id、当前时间及驳回理由。将原订单明细的退款状态改为未申请。
采用满减规则进行优惠金额计算,需对购物车的商品按照品类进行分组,某个品类如果达到了优惠设置的消费额度,则按照设置优惠金额进行减免。对应的满减优惠如表4所示。
表4 满减优惠表
表5 广告表
广告表用于首页广告轮播图渲染的实现,广告基本信息存于数据库表中(如广告名称、广告详情、广告地址),广告图片存于面向对象服务器中。
订单表及订单明细表数量很多,如果每次都对订单表及订单明细表进行实时统计,查询效率低下,故通常是每天定时统计上一天的数据,将统计结果存储在一张表中,当用户执行管理后台统计功能时再对这张表进行统计,给前端返回统计结果。存储统计结果的表结构如表6。
表6 存储统计结果
4 结束语
随着系统业务复杂度及用户并发量的增加,人们对系统的要求越来越高。传统应用架构灵活性不够,难以迭代开发基于微服务架构的电商系统开发效率高,在高并发时服务器承载能力均衡,能够实现业务的正常运行。