Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 视频教程 | 打赏(Donations) | About
知乎专栏多维度架构 微信号 netkiller-ebook | QQ群:128659835 请注明“读者”

17.4. 是否有必要使用消息队列?

两个团队分别负责商品信息和价格还有库存功能模块的开发,商品信息是静态化方案,商品价格和库存是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 在一个实例中完成原子性更好。