XMall:基于SOA架构的分布式电商购物商城的实践与探索
摘要
随着电商行业的快速发展,传统的单体应用架构已无法满足现代电商系统的高并发、可扩展和可维护性需求。XMall,一个基于SOA(面向服务架构)的分布式电商购物商城,通过前后端分离的设计,结合一系列先进的技术组件,如Dubbo、SSM、Elasticsearch、Redis等,为电商领域提供了一种新的技术解决方案。本文将对XMall的技术架构、功能模块以及关键组件进行详细分析,并探讨其在实际应用中的优势与挑战。
一、引言
电商行业作为互联网经济的重要组成部分,对技术的要求日益增高。为了应对这些挑战,XMall采用了基于SOA的分布式架构,实现了前后端分离,提高了系统的可扩展性和可维护性。本文将深入剖析XMall的技术架构和实践,以期为电商领域的技术人员提供有益的参考和启示。
二、XMall技术架构概览
基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理系统:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等。
XMall的技术架构以SOA为核心,通过前后端分离的设计,将业务逻辑与界面展示相分离,提高了系统的可维护性和可扩展性。前端采用Vue全家桶,充分利用Vue.js的响应式特性和组件化开发思想,实现了快速、灵活的前端开发。后端则基于Dubbo/SSM框架,结合Elasticsearch、Redis、MySQL、ActiveMQ、Shiro、Zookeeper等技术组件,为电商业务提供了强大的技术支撑。
项目已部署,在线Demo
-
前台商城:http://xmall.exrick.cn/
-
后台管理系统:http://xmadmin.exrick.cn/
基于SOA架构的分布式购物电商商城
-
后台管理系统:管理商品、订单、类目、商品规格属性、用户、权限、系统统计、系统日志以及前台内容等功能
-
前台系统:用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作
-
会员系统:用户可以在该系统中查询已下的订单、管理订单、我的优惠券等信息
-
订单系统:提供下单、查询订单、修改订单状态、定时处理订单
-
搜索系统:提供商品的搜索功能
-
单点登录系统:为多个系统之间提供用户登录凭证以及查询登录用户的信息
v1.1更新日志(需更新前后台代码及SQL)
-
接入自己开源的XPay个人免签收款支付系统
-
更新Dubbo(2.6.1)、ES(6.2.3)等依赖版本
-
取消ES需在页面中配置及跨域问题,ES默认配置集群名改为原elasticsearch
-
修复后台统计热卖商品SQL错误,xmall-front-web模块支持SpringMVC文件上传配置
-
修改金额字段类型优化SQL与备注
-
优化后台页面 修复用户修改BUG 优化批量删除 优化商品分类添加
-
重构首页,后台可配置,包括3D轮播图
-
后台新增缓存管理功能菜单 完成订单打印发货等功能,实现快递管理
-
增添订单统计报表
-
修复前后端分离极验验证码session存储问题
-
实现ES IK分词插件扩展词典库管理 增添限流
-
注:SKU设计预计将在小程序后台实现
-
极验验证码移除文档
项目架构及功能模块图
前端所用技术
-
后台页面
-
感谢 H-ui、FlatLab 提供静态页面支持
-
Ztree:jQuery树插件
-
DataTables:jQuery表格插件
-
Layer:web弹层组件
-
Distpicker:中国省市区地址三级联动插件
-
KindEditor:富文本编辑器 简洁方便 没UEditor那么多坑
-
WebUploader:百度文件上传插件
-
HighCharts:图表库
-
不蒜子:极简网页计数器
-
-
前台页面
-
详情请跳转至 xmall-front 项目仓库
-
感谢 yucccc 的开源 vue-mall 项目提供前端页面及框架支持
-
Vue2 + Vuex + Vue Router + Element UI + ES6 + webpack + axios + Node.js
-
后端所用技术
各框架依赖版本皆使用目前最新版本 可进入xmall-parent中 pom.xml 查看
-
Spring
-
SpringMVC
-
MyBatis
-
Dubbo
-
ZooKeeper
-
MySQL
-
Mycat:数据库分库分表中间件
-
Redis:缓存
-
Elasticsearch:基于Lucene分布式搜索引擎
-
ActiveMQ:消息队列
-
Druid:阿里高性能数据库连接池
-
Shiro:安全框架
-
Swagger2:Api文档生成
-
Docker
-
Nginx
-
Tomcat
-
Maven
-
第三方SDK
-
七牛云文件存储服务
-
极验Test-button人机验证码 因其收费见极验验证码移除文档
-
-
第三方插件
-
hotjar:一体化分析和反馈
-
搜狐畅言评论插件
-
-
第三方接口
-
Mob全国天气预报接口:需注册账号创建应用后申请填入AppKey
-
-
其它开发工具
-
Jenkins:持续集成
-
JRebel:开发热更新
-
阿里JAVA开发规约插件
-
文件说明
-
xmall
文件夹提供部分依赖与sql文件-
xmall.sql:数据库文件
-
dubbo.xsd:需手动配置避免报错
-
redis-3.0.0.gem:Redis集群搭建所需Ruby库
-
-
generatorSqlmapCustom
文件夹为 Mybatis Generator 逆向生成工具,且已配置好maven插件
本地开发运行部署
-
下载zip直接解压或安装git后执行克隆命令
git clone https://github.com/Exrick/xmall.git
-
安装各中间件并启动:ZooKeeper、Redis、ActiveMQ、Elasticsearch
-
修改各配置文件相应依赖IP配置(默认本地127.0.0.1),以及七牛云、极验配置、天气接口在
xmall-common - utils
中找到修改,XPay邮箱配置在manager-service与sso-service
中 -
Maven安装和在IDEA中配置
-
使用IDEA(破解/免费注册)
File-Open
直接打开xmall项目,点击右下角Import Changes
等待安装完依赖即可 -
MySQL数据库新建
xmall
数据库,运行sql文件,注意在有db.properties
的模块中修改你的数据库连接配置 -
按照依赖顺序分别在每个模块文件夹根目录执行
mvn install
命令 -
项目需运行除
xmall-parent
xmall-common
以外其它所有6个服务,且都已配置好Tomcat插件, 执行命令mvn tomcat7:run
或在IDEA中使用插件(View - Tool Buttons - 右侧菜单Maven Projects - tomcat7 - tomcat7:run
)运行即可,当然可自行配置 -
后端管理系统默认端口8888 http://localhost:8888 管理员账密admin|123456
-
前端项目接口默认端口7777 前台页面请启动基于Vue的 xmall-front 项目,并修改其接口配置
相关技术点说明
-
ES-IK分词插件词典库扩展
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <!--用户可以在这里配置远程扩展字典 --> <entry key="remote_ext_dict">http://localhost:8888/getDictList</entry> <!--用户可以在这里配置远程扩展停止词字典--> <entry key="remote_ext_stopwords">http://localhost:8888/getStopDictList</entry> </properties>
-
详见 elasticsearch-analysis-ik插件作者项目README说明
-
本项目中扩展接口和禁用词接口分别为
http://localhost:8888/getDictList
和http://localhost:8888/getStopDictList
,将以上2个接口配置进IK插件扩展配置文件{conf}/analysis-ik/config/IKAnalyzer.cfg.xml 或者 {plugins}/elasticsearch-analysis-ik-*/config/IKAnalyzer.cfg.xml中即可,示例:
-
-
限流
-
xmall-front-web
中已配置限流,配置文件resource.properties
中可配置全局限流,示例:#启用全局限流 xmall.rateLimit.enable=true #每1秒内 xmall.rateLimit.timeout=1000 #限制10个请求 xmall.rateLimit.limit=10
-
指定方法限流注解
@RateLimiter(limit = 1, timeout = 5000)
-
支持多维度IP、uid等限流 详见代码
-
三、功能模块分析
-
后台管理系统:作为XMall的核心部分,后台管理系统负责商品、订单、类目、商品规格属性、用户、权限、系统统计、系统日志以及前台内容等功能的管理。通过Dubbo和SSM框架,实现了高效、稳定的服务调用和数据访问。
-
前台系统:前台系统为用户提供注册、登录、浏览商品、首页、下单等操作。通过Vue全家桶,实现了丰富的用户交互和界面展示,为用户提供了良好的购物体验。
-
会员系统:会员系统允许用户查询已下的订单、管理订单、查看我的优惠券等信息。通过集成Redis等缓存技术,提高了用户数据的访问速度,提升了系统的响应性能。
-
订单系统:订单系统提供下单、查询订单、修改订单状态、定时处理订单等功能。通过结合ActiveMQ等消息中间件,实现了订单处理的异步化和分布式处理,提高了系统的并发处理能力。
-
搜索系统:搜索系统为用户提供商品搜索功能。通过Elasticsearch等搜索引擎技术,实现了快速、准确的商品搜索,提高了用户的搜索体验。
-
单点登录系统:单点登录系统为多个系统之间提供用户登录凭证以及查询登录用户的信息。通过Shiro等安全框架,实现了用户身份的认证和授权,保障了系统的安全性。
四、关键组件分析
-
Dubbo:作为服务治理框架,Dubbo负责服务的注册、发现与调用,为XMall提供了高效、稳定的服务调用机制。
-
SSM(Spring + SpringMVC + MyBatis):SSM框架为XMall提供了业务逻辑的处理和数据库访问的能力,通过Spring的依赖注入和AOP特性,实现了业务逻辑的解耦和可扩展性。
-
Elasticsearch:Elasticsearch作为分布式搜索引擎,为XMall提供了快速、准确的商品搜索功能,提高了用户的搜索体验。
-
Redis:Redis作为内存数据库,为XMall提供了高效的缓存机制,减少了数据库的访问压力,提高了系统的响应性能。
-
MySQL:MySQL作为关系型数据库,为XMall提供了结构化数据的存储和管理能力。
-
ActiveMQ:ActiveMQ作为消息中间件,为XMall提供了异步处理和系统解耦的能力,提高了系统的并发处理能力。
-
Shiro:Shiro作为安全框架,为XMall提供了用户身份的认证和授权功能,保障了系统的安全性。
-
Zookeeper:Zookeeper作为分布式协调服务,为XMall提供了配置管理、集群管理等功能,保证了系统的稳定性和可用性。
五、总结与展望
XMall作为基于SOA架构的分布式电商购物商城,通过前后端分离的设计、一系列关键技术的选择和整合,为电商领域提供了一种新的技术解决方案。在实际应用中,XMall展现出了高性能、高可用和可扩展性等优点,为电商业务的发展提供了强大的技术支撑。未来,随着技术的不断发展和业务的不断拓展,XMall将继续优化和升级技术架构,以满足更加复杂和多变的业务需求。同时,我们也期待更多的技术人员能够参与到XMall的开发和优化中来,共同推动电商领域的技术进步和发展。
项目下载地址:
https://gitee.com/Exrick/xmall
欢迎加入“前端组件开发学习”交流群,可关注 “前端组件开发” 公众号后,私信后申请入群。