基于百万级别的站内信设计

  基本上现在的网站都会有站内信功能,主要分为少量(10-999用户),中量(1000-99999用户),大量(100W用户)不同的站内信架构,消耗存储空间,和效率也是不同的。这次要设计的是基于百万级别的打的架构,主要作用是使站内信这个小的功能更加节约空间。
  首先介绍站内信的作用:
    第一 用户与用户之间沟通交流,如同邮件一般。
    第二 管理员给用户发送通知等
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
内信设计⽅案 ⼀、背景 当前使⽤运维平台的⽤户进⾏沟通时,更多的是依赖微信和邮件通知,⽽运维平台作为⼀个整体的产品,也需要能够进⾏内部沟通的⼀种服 务 - 内信内信设计基调 内信设计基调取决于⽤户如何使⽤内信: 1. ⽤户不会守着运维平台这个页⾯,等待消息通知,查看消息内容,然后跳转到要操作的页⾯。 1. 也就是说内信不是第⼀⼊⼝,内信的实时性意义也不⼤。 2. 同很多社交⽹不同(Facebook,知乎,微博等),⽤户会守在社交⽹的主页⾯,不断刷新新内容,同时检查新消息(主要 是个⼈私信、别⼈的回复等,也绝不是为了检查系统通知消息) 2. ⽤户会根据邮件通知,决定是否要进⼊运维平台进⾏操作 3. 如果邮件特别多,例如同时有多个⼯单需要⽤户处理,⽤户也会在⼯单平台提供的"我的待办"页⾯进⾏所有⼯作。 4. 如果邮件被误删了,没有邮件链接直接进⼊要操作的模块 1. 那么或者通过索要链接/单号的⽅式,前往指定页⾯ 2. 或者直接在相关模块进⾏搜索 上⾯的描述都意味着⽤户基本不会使⽤内信,那么在什么样的场合会使⽤内信呢? 1. 不发邮件,只发内信的消息通知,例如全通知、编辑操作、Comment操作等 2. 当具体模块没有详细的操作记录时,可以通过查看内信的发⽣时间 当前只有产品消息通知,消息展⽰也没有进⾏归类聚合,以后增加全通知、mention、like、comment等类型的内信时,就需要考虑按 类型进⾏消息聚合了。 ⼆、需求描述 内信通常需要解决两个需求: 1. ⽤户对⽤户的内信,管理员对⽤户的内信:即⼀对⼀发送 2. 管理员对多⽤户、⽤户组、全内信:即⼀对多发送 (还有⼀种是⽤户对产品的内信,例如对某个模块的反馈、疑问之类的) 我们⽬前的需求是: 1. 管理员对多⽤户发送内信 1. 对⽤户真实性不做校验 2. 对标题长度、内容长度进⾏限制(分别是45个字节、150个字节,对应中⽂字符15个、50个) 3. 对收件⼈的拼⾳长度进⾏限制(最长50个字节) 2. ⽤户可以查看⾃⼰的内信 1. 按"全部、已读、未读"过滤 2. 按消息来源分类:⼯单平台、资源管理、⾃动装机、漏洞平台、故障平台。。。 3. ⽤户可以删除、批量删除内信 4. ⽤户可以已阅、批量已阅、全部标记为已读 内信 5. 运维平台页⾯顶部的消息图标 1. 展⽰未读消息数,超过99显⽰ 99+ 2. ⿏标放上去,会有下拉框,展⽰最近10条未读消息(展⽰"时间","消息来源","标题") 3. 下拉框的底部有两个按钮:"更多",加载更多未读消息;"查看全部",跳转到内信列表页⾯(最好另开⼀个窗⼝) 4. 点击下拉框⾥的未读消息,通过弹出框展⽰详情;然后在未读列表⾥删除该记录,在数据库⾥标记为已读,消息图标的未读消息 数量减⼀ 6. 管理员页⾯: 1. 更新⽤户 2. 删除消息 3. 统计数据 4. 增加module 5. 增加内信类型 6. 发送全消息 三、系统设计 功能设计 功能 功能 接⼝ 接⼝ 详情 详情 发送内信 POST /v1/message 校验module_name,校验title content receiver_name 长度 获取内信列表 GET / 统计信息 暂⽆ 四、系统流程 发送内信 1. 读取POST请求的request body 2. 校验长度 3. 插⼊数据库 4. 返回 获取内信列表 1. 调⽤⼦模块,插⼊发送给全或我所属⽤户组的内信 2. 根据查询条件,返回数据数据 获取未读内信数量 1. 调⽤⼦模块,插⼊发送给全或我所属⽤户组的内信 2. 返回数量 批量已阅 1. 检查messageId是不是属于当前⽤户 2. inbox_message表⾥把 read 置为1,修改update_time 全部已阅 1. update inbox_message set "read"=1, "update_time"=now where "receiver_name"=currentUser() and "read" = 0 批量删除 1. 检查messageId是不是属于当前⽤户 2. inbox_message表⾥把 deleted 置为1,修改update_time 全部删除 1. update inbox_message set "deleted"=1, "update_time"=now where "receiver_name"=currentUser() and "deleted" = 0 五、数据设计 内信内容表 Field Field Type Type Null Null Key Key Default Default Extra Extr

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值