一.概述
利用閑暇時間總結下優惠券系統的一些業務與技術方案的設計及其注意事項。從業務與技術角度建構一個安全的高可用的優惠券系統
我們的目标:安全,可擴充,高可用
二.優惠券業務架構
優惠券的種類:
- 滿減券:如滿100-10,滿2件減10元
- 折扣券:如滿100打9折
優惠券相關概念:
- 規則定義:涉及計算的部分,作用範圍:商品、商戶、類目,計算方式:是否累加,是否互斥等
- 優惠券定義、模闆:發放有效期,使用有效期,使用管道,發放管道,券類型:商戶券,平台券
- 優惠券:發放到使用者手中的優惠券
優惠券用法:
1. 發券:業務方調發券接口發券,營運背景為指定使用者批量導券,發券常用于價值比較高的券
- 領券:由營運建立一個優惠券模闆, 配置在活動頁或者商品詳情頁上,讓使用者主動領券,領券常用于價值比較低的券,使用者自己就能領到
3. 用券:消費者收到優惠券後,在結算頁從優惠券清單中選擇優惠券并使用.
優惠券的使用流程:
- 配置券定義(券模闆)
- 營運給使用者發券/使用者主動領券
- 使用者使用券
- 核銷,退券等
- 優惠券資料統計:通過讀取線上優惠券發放與使用的記錄,資料分析團隊建立資料報表,提供給大資料團隊進行分析,通過分析,優惠券發放也可以做到千人千面
優惠券的發放限制:
- 具體業務方,比如激活中心,新手券,下單券,使用者生日券
- 具體的發放時間:如2017-09-01到2017-09-10
- 具體活動,如雙十一
- 具體地點,如上海
- 具體的人群,如男性
優惠券的使用限制:
- 門檻
- 狀态
- 有效期
- 業務管道
有效期的三種類型:
- 模闆固定有效期
- 模闆動态有效期
- 發券時指定有效期
發券方式:
- 同步
- 異步
發放的數量限制:
- 券庫存限制
- 使用者總數限制
- 使用者每天限制
通知方式:
- 短信通知
- 郵件通知
- app消息通知
報警:
- 優惠券庫存告警
- 優惠券使用時間告警
主要業務方:
1. 使用者端:商詳頁領券,店鋪頁領券,活動頁領券
2. 背景系統:批量發放優惠券
3. 抽獎發券
4. 新使用者注冊返券
5. 下單返券
- 評價返券
非功能特性:
- 幂等性:發券,使用券要保證幂等性,領券不需要。
- 高性能:活動頁領券等業務場景必須擁有高性能,服務可水準擴充
- 可擴充性:對于新的優惠券方式實作快速擴充,對于外部管道的優惠券可以快速對接
三.技術架構設計
1.整體架構:優惠券系統屬于底層系統,需要應對高并發,服務必須支援水準擴充,分布式部署
2.表設計
規則定義表:由于記錄優惠券對應的規則相關,計算腳本等
優惠券定義表(模闆表):由于記錄優惠券模闆相關屬性,發放相關,使用相關
優惠券執行個體表:發券到使用者賬戶,用于記錄優惠券與使用者的關系
優惠券作為基礎平台,根據功能特性劃分成以下基礎接口
- 優惠券模闆查詢接口:需要展示券詳情的業務
- 使用者領券接口:使用者在活動頁或者商詳頁領券
- 批量發券接口(同步):業務方RPC調用
- 批量發券接口(異步),适用于秒殺,搶券等活動場景
- 查詢使用者優惠券接口:我的優惠券
- 商詳頁接口:提供商品查詢可用優惠券清單,供使用者領取。
- 下單頁接口:根據使用者id與商品清單,商戶,類目查詢可用優惠券清單
- 用券接口
四.優惠券計算
優惠券的計算采用規則引擎,利用groovy腳本作為計算核心算法,具體見促銷計算
注意事項:
- 不要将自增id作為業務id,防止使用者在商詳頁或者活動頁通過嘗試僞造id來領取優惠券
- 不要暴露使用者優惠券code,防止使用者在下單頁通過嘗試僞造code來使用優惠券