知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
兩個團隊分別負責商品信息和價格還有庫存功能模組的開發,商品信息是靜態化方案,商品價格和庫存是AJAX動態載入,公司重金從杭州淘寶挖了一名架構師,並給了首席架構師的頭銜。
最終架構師給出的方案,更新商品信息時,後通過 ActiveMQ 通知刷新緩存更新價格和庫存,這樣的方案是否可行?我認為是可有可無,這個方案中消息隊列並不是剛需。
出現了 這個需求是因為,商品促銷需要經常調整價格和庫存量。修改商品信息這個後台運營的操作,這種操作分成兩類,一類是臨時單品調價,另一類是批量調價。
我想問是否有必要更新商品價格?換個思路可以嗎?是否還有其他更好的方案?
這裡還有一個故事,於是促銷需要,商品需要統一調價,程序猿給了一條SQL:
update goods set price=price+10 where category_id = xxx
高薪聘用的 DBA 竟然執行了,然後就悲劇了。
讓我們換個思路去解決這個問題,我們專門來建一個促銷打折表 discount 用來存儲需要做促銷的商品:
+----------------------------------------+ | discount | +----------------------------------------+ | Id | goods_id | price | ctime | mtime | +----------------------------------------+ | 1 | 100 | + 12.5 | xxx | xxx | | 2 | 101 | - 0.5 | xxx | xxx | +----------------------------------------+
當前價格 = 商品價格 + 折扣價格
相比 goods 表 discount 的數據量是非常小的,這樣一來就無需非同步執行,商品調價在Service 直接更新discount 表即可,刷新緩存也不過是一行代碼,刪除 cache key 在一個實例中完成原子性更好。