自营商城架构杂谈
前言
自营商城在技术层面来说是比较简单的系统,难点一般都在业务逻辑,只要业务逻辑理通顺了,技术实现起来并不难。但是做一个可靠的系统还是需要一定的功夫打磨,毕竟再简单的系统如果没有一定的规划与架构,后续维护与扩展也是一个头疼的问题。以下是我从事商城开发一年多的个人经验,分享给大家一起探讨学习。
技术栈架构图
详细说明
后台
自营商城最开始开发一般都是小团队进行开发,后台不会有前端工程师的参与,我个人非常推荐使用 ElementUI 进行后台开发(原始引入的方式,非打包),后台程序员参考官方文档就能写出很好看的 UI,结合上 Vue 对于一些复杂的表单页面也会比 jQuery 好写很多。
前台
前台是商城的重要组成部分,一般会先由设计部出设计稿,评审通过后再交给前端进行开发。
商城是一个非常需要 SEO 的网站,所以在技术选型上优先考虑使用框架模板引擎作为基础,对于一些不需要 SEO 的页面(购物车,个人中心)可以使用 Vue 渲染。
对于静态资源的引入会涉及到 CDN 缓存的问题,所以使用 Webpack 对静态资源(css,js)进行打包,而后结合 Laravel mix 进行版本更迭。
axios 是替代原有 jQuery ajax 的,他拥有非常完善的请求机制,代码层面也更加语义化。
Promise:商城中会涉及到第三方平台数据上报,有时候部分业务逻辑在前台是异步的,这时候就需要用到 Promise。
服务器
软件
服务器基本架构还是 LNMP,但是对于完善的系统应该还需要一些工具的辅助。
Redis:作为缓存驱动、队列驱动、锁、Session驱动 等
Supervisor: 守护队列进程
Shell:切割日志、服务器备份等
ElasticSearch:前台搜索引擎、日志收集等
代码
在传统的 MVC 上,多加一层
service
,用于放置业务逻辑,结合公司实际业务需求也可继续划分。
Middleware: 用于权限校验、日志采集等全局性的逻辑
Job: 不影响主流程的业务逻辑都应该使用队列,例如客户注册成功发送邮件,客户注册是主流程,只要客户注册数据写入数据库成功,就可以跟客户端返回成功,发邮件使用异步进行处理。这样既优化了业务流程,也优化了代码结构
Event: 事件是 Job 的升级版,业务初始逻辑可能是客户注册成功发送邮件,后面产品经理又加需求:客户注册成功要发优惠券,如果去注册逻辑那里再派发个优惠券任务是不是显得不够优雅(
如果产品经理又双叒叕加逻辑,揍他),这时候就可以使用事件来代替了,只用在主流程结束后派发一个事件,然后再给事件定义监听者即可Exception: 我很少在业务逻辑中看到有人写专门的异常类,但是我十分推荐大家使用异常,每个业务逻辑都应该有自己的异常类,一个方法只有异常跟正常,上层只用放心调用、处理异常就行,不需要关心方法的返回值(返回值必然是成功)
数据库管理
migration 是一个十分符合版本管理的工具,以前使用 SQL 文件进行数据库管理,往往会有数据库跟线上不一致的情况,而且执行起来也麻烦,自从用上了 migration ,一行命令轻松迁移(点一下用一年,超快迁移不要钱),结合上 seed,能够对数据库结构与初始数据进行一个很好的统一。
依赖管理
0202年了,还有人把 vendor 文件夹纳入版本管理(气冷抖)
之前接手一个项目, vendor 文件夹纳入了版本管理,并且更改了框架底层代码(之前程序员说没办法只能改底层,后续出了一堆莫名奇妙的 Bug),说多了都是泪。对于第三方依赖尽量不要去改底层,如果真的是有问题,可以单独拿出来(或者给作者提 issue),一旦更改了第三方依赖,等于说放弃了版本升级、官方 Bug 修复,一切都只能自己来,耗时又费力还不一定搞的好。
权限管理
这里指的是后台系统的权限,商城系统比较简单,使用一般的 RBAC 即可。
异常通知
针对项目中的各种异常,可结合公司办公 IM 软件进行告警,企业微信和钉钉都有群机器人,结合 Laravel 的 Exception Handler 进行异常告警,发现 Bug 的速度大大提升(偷偷改 Bug ,业务还不知道)
定时任务
主要用于订单超时处理、日志切割、数据备份等
代码更新
在部署服务器代码更新完后,更新第三方依赖,打包静态资源,然后 rsync 同步到生产服务器,减少生产服务器宕机时间。
深圳求职中,坑位介绍可私信,笔芯
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: