该产品使用yudao-cloud快速搭建的一个SaaS系统
平台分为后台管理系统、小程序、IOS和安卓。后台管理系统是各租户(包括公司管理平台)管理自己的商品信息,在小程序、IOS端和安卓端为用户使用方
功能分为当地各种活动赛事,自驾游活动安排与优惠及贵州的一些非遗文化,还有贵阳当地土特产做为商城系统中上架的商品信息。上述功能都是各租户隔离的,在租户上架产品后平台需要做审核操作。在用户端还有独立的推广系统
因考虑到多租户以及项目进度相关问题,项目整体架构是使用的yudao-cloud快速开发部署。使用jenkins和docker构建与部署,数据库是使用mysql。
我负责的是电商模块,多租户隔离,自驾游,推广等等模块
项目亮点:
电商模块中,因考虑到后续秒杀功能可能会承载过亿的流量,需要对该模块精心设计,当秒杀商品上架时存储到gava本地缓存中,gava做为一级缓存,redis做为二级缓存,主要解决“看得多买的少”的问题,上架商品时同时缓存一个令牌个数和商品数量,比如上架100个商品缓存120个令牌,当用户能在缓存中拿到令牌后用户不需要等待后续代码执行时间直接返回。在下单操作时拿到令牌后发送rocketmq消息使其异步执行后续逻辑,在扣减库存时使用lua脚本+redis先做预扣减操作(保证原子操作),在实际扣减数据库库存时,mysql会去分表分桶,分桶这就是将一行数据拆成多行解决mysql单行事务上限问题(分表解决每场秒杀问题,分桶解决每个商品秒杀问题)。因考虑到响应速度和一致性问题,所以使用令牌机制+异步mq(rocketmq的事务机制)。使用springcloud alibaba sentinel和nginx做限流操作,整体流程为nginx先过滤掉大部分恶意请求,再到sentinel的限流,再到1级的gava本地缓存2级的redis分布式缓存,再到rocketmq通过逻辑检验后,仅极其小的量到数据库
项目中存在的困难点:
1、有下单后公众号推送到服务号,解决方案是找官方客服和文档沟通解决
2、秒杀流量承载