技术平台

用户角色:读者、作者、管理员
权限:管理员>作者>读者

  • 读者的所有功能,作者都拥有;但是作者存在部分读者用不了的功能(如文章编辑、修改、发布等)
  • 管理员权限最大,覆盖读者、作者的所有功能点

读者主要是阅读文章
作者主要是发布文章
管理员主要是管理整个系统,标签、文章审核、分类管理等,通常不参与文章的阅读发布

业务拆分

  • 用户
  • 文章
  • 专栏
  • 消息
  • 评论
  • 运营
  • 搜索
  • 推荐
  • 统计

登录

用户首先通过用户中心登录系统
具体的登录方式可以是传统的用户名/密码,也可以是手机号验证码,亦或者是第三方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倍

缓存一致性

先写数据库,再删除缓存

  1. 不缓存非热点数据
  2. 更新次数比查询次数高的也不用缓存
  3. 对数据一致性要求极高的也不用缓存

Web

hook

实现了监听器,用来监听在线人数,如果session增加,人数+1,如果session减少,人数-1

Service

用户排行榜