技术平台
技术平台
用户角色:读者、作者、管理员
权限:管理员>作者>读者
- 读者的所有功能,作者都拥有;但是作者存在部分读者用不了的功能(如文章编辑、修改、发布等)
- 管理员权限最大,覆盖读者、作者的所有功能点
读者主要是阅读文章
作者主要是发布文章
管理员主要是管理整个系统,标签、文章审核、分类管理等,通常不参与文章的阅读发布
业务拆分
- 用户
- 文章
- 专栏
- 消息
- 评论
- 运营
- 搜索
- 推荐
- 统计
登录
用户首先通过用户中心登录系统
具体的登录方式可以是传统的用户名/密码,也可以是手机号验证码,亦或者是第三方OAuth2.0登录
登录之后,用户身份识别,可以是单机的cookie/session, 也可以是分布式会话,jwt等形式
消息通知方案
消息通知采用异步驱动,通过Event/Listener方式来实现解耦
架构
使用MCV三层架构,是模型(Model)、视图(View)和控制器(Controller)的缩写,可以分为三层:表示层、业务逻辑层和数据访问层
实体对象
do 领域对象
dto 数据传输对象
bo 业务对象
po 持久化对象
vo 视图对象
req 请求参数对象
rsp 返回参数对象
生成traceid
规则:服务器IP(16进制) + 时间戳(毫秒时间戳)+ 自增序列(1000-9999循环) + 当前进程(保证5位)
为什么需要traceid:在分布式系统中,一个请求可能会经过多个服务,为了追踪一个请求的整个调用链路,需要一个唯一的标识
MdcUtil
上下文诊断映射,用于在多线程环境中存储每个线程特定的诊断信息
用户活跃度
分为日/月两个榜单
活跃度计算:
- 用户每访问一个新的页面,活跃度+1
- 对于一篇文章,点赞、收藏 +2,取消点赞、取消收藏,将之前的活跃度收回
- 文章评论 +3
- 发布一篇审核通过文章 +10
减少活跃度,防止扣减为负数
榜单展示活跃度最高的前三十名用户
用户审核
白名单中的用户发文之后,无需审核,直接发布
监听器
监听器实现实时人数统计
PV和UV
page view:页面浏览量
unique visitor:独立访客数
使用百度的站点统计功能
导出数据
Fast Excel实现PU/UV数据的批量导出功能,500w数据导出时间仅需1分钟,并结合线程池和CountDownLatch进行并发处理,导出性能提升近60倍
缓存一致性
先写数据库,再删除缓存
- 不缓存非热点数据
- 更新次数比查询次数高的也不用缓存
- 对数据一致性要求极高的也不用缓存
Web
hook
实现了监听器,用来监听在线人数,如果session增加,人数+1,如果session减少,人数-1