虚拟卡兑换架构设计
1 设计概述
。。。。。
1.1 功能概述
后台系统包括的功能如下:
大号管理
积分管理
商品管理
订单管理
财务管理
前台系统包括的功能如下:
登录
积分兑换商品
下载兑换虚拟商品的卡号与卡密(excel 加密文档)
订单查看
1.2 非功能约束
系统安全性⽬目标:系统可拦截各种⾮非法请求,恶意攻击,卡密进行AES数据加密,客户端数据HTTPS加密,外部系统间通信对称加密;
数据持久化⽬目标:>99.99999%;
大号积分兑换目标:平均响应时间<100ms,95%响应时间<150ms,单机QPS > 1000
系统核⼼心功能稳定性⽬目标:>99.99%;
2 系统部署图与整体设计
2.1 系统架构图
![](https://static001.geekbang.org/infoq/c5/c5fff7f197201bac4d1be2f776a6177b.png)
图中的api主要负责与第三方api进行数据交互,比如激活卡的异步通知,
2.2 系统部署图
![](https://static001.geekbang.org/infoq/06/06a7a5299becb5ece87361c2a449d1a1.png)
redis:做缓存及分布式锁
数据库:一主一从做读写分离
3 虚拟卡商品导入设计
3.1 api导入
暂无
3.2 文件导入
文件格式为excel,导入主要字段是 卡号和卡密,导入的流程图如下图
![](https://static001.geekbang.org/infoq/69/69264b7f2a45263443830e8b74224f66.png)
导入的时序图如下
![](https://static001.geekbang.org/infoq/87/87cc250100ce432f225c8f0d1698891d.png)
通过临时表再导入到正式表中,能够保证正式表中的id数字是连续的,这样我们就能在正式表中通过游标字段来控制取得数量,比如当前游标为0,我需要拿5张卡,那么首先 update set 游标 = 游标 + 5 where 游标 = 0,如果更新成功则 id 为 1 - 5 的虚拟卡将锁定,这样就能精确的选取想要的数据。
存在问题:如果客户退还卡,则这张卡就不能够再被选中
解决办法:现将该张卡设置为作废,然后再从新插入一次
4 积分兑换
![](https://static001.geekbang.org/infoq/e8/e86b6ce35a8152c78d22680b35d0d365.png)
评论