首先分析整理一下点赞业务的需求,一个通用点赞系统需要满足下列特性:
-
通用:点赞业务在设计的时候不要与业务系统耦合,必须同时支持不同业务的点赞功能
-
独立:点赞功能是独立系统,并且不依赖其它服务,这样才具备可迁移性
-
并发:一些热点业务点赞会很多,所以点赞功能必须支持高并发
-
安全:要做好并发安全控制,避免重复点赞
要保证安全,避免重复点赞,就必须保存每一次点赞记录,只有这样在下次用户点赞时才能查询数据,判断是否是重复点赞。
同时,因为业务方经常需要根据点赞数量排序,因此每个业务的点赞数量也需要记录下来。
表结构分为点赞记录,与业务关联的点赞数。
新增点赞
-
用户不能重复点赞
-
点赞就新增一条点赞记录,取消点赞就删除记录
-
点赞数由具体的业务方保存,需要通知业务方更新点赞数
由于业务方的类型很多,比如互动问答、笔记、课程等,所以通知方式必须是低耦合的,这里建议使用MQ来实现。
其实在实现提交学习记录的时候,分析过高并发问题的处理方案。点赞业务既有高并发读操作,也有高并发写操作。
高并发读的优化:1. 优化SQL和代码 2. 添加缓存
高并发写的优化:1. 优化SQL和代码 2. 变同步写为异步写 3. 合并写请求
最终点赞业务流程变成这样