如何设计一个通用的通知机制

如何设计一个通用的通知机制

通知分类

  1. 以发送通知和接收通知的对象来区分的话大致可以分为用户对用户也就是用户事件触发(包含各种社交通知如点赞,关注等)、系统对用户(如财务通知等)、管理员触发三大类
  2. 如果以通知方式进行区分可以分为:站内信、公司内 IM 工具如 lark、钉钉等、 SMS、EMAIL 这几种方式

通知优先级

  1. 既然已经有了通知的分类,此时也就有了通知的优先级,比如涉及到财产的一般认为是优先推送的。
  2. 基于 1 的优先级,通知方式的优先级同样有区分,再比如财务信息一般需要四种通知方式都涉及。

通知内容格式

通常有不同消息类型的模板,比如就站内信而言,用户的关注和点赞都是通用的多语言模板,其他通知方式亦然。

通知的广播范围

  1. 全员广播
  2. 特定组广播
  3. 特定人广播

通知处理

通知控制

  • 权限控制:黑白名单过滤
  • 频控:发送消息的频控以及用户接收的频控(或者可以理解为延迟消费)
  • 内容审查

通知聚合

A 修改了 项目P,但是如果B又修改了项目P,组内用户如果再收到一条通知,B修改了项目P,用户就会收到垃圾消息,因此需要聚合为:A 和 B 修改了项目 P,更多比如推特「xx 和 xx 点赞了你的推文」等。

用户行为

如确认,回复,忽略,删除或者已读、未读状态的变更。

技术实现

整体方案:采用消息队列

关于采用消息队列的一些关键技术点:

  1. 消费幂等:即解决重复消费问题
  • 备注:消息队列无法保证消费幂等,可以使用 redis 做锁来保证。
  1. 中断消费:主要应用于中断大规模群发消息
  • 备注:上一条提到可以用 redis 做锁,那么这里中断消息时即可以提前将消息的 id 扔入 redis 中,这样就可以避免消费某条消息。

通知机制时序图

关于站内信

维护两张表:msg 和 userMsg

  • 对于非全员信息,写入 msg 同时写入 userMsg,以 msgId 进行关联

  • 对于全员信息,只写入 msg,在前端具体用户拉取的时候才存入 userMsg,再进行联表查询。(这是一种很高效的方案,避免了一次将所有通知写入 userMsg,msg 表也只是写入一条数据)

压测

什么是网站压力测试?

  1. 其实在展开讲具体技术实现之前应该明白我们为什么要进行压测?
  • 网站压测方法使用多线程技术,模仿很多用户同时访问服务器的情形,同时向服务器发出浏览清求,并监测服务器的反应。通过测试得到存放网页的服务器能够支持的最大用户数,从而助开发人员掌握在经历了一次大的访问量的增长后,服务器是否还能够正常提供服务。

基于以上,对于发送全员通知或者多 subscriber 同时发送的场景,必须要提前做好压测。

  1. 既然确定了要进行压测,那么我们要测什么,有哪些指标是我们真正关注的?

消息队列如何做性能测试?

技术干货|怎么做Kafka的压力测试(实操篇)

系统吞吐量(TPS)、用户并发量、性能测试概念和公式

  • producer 吞吐量
  • consumer 吞吐量
  • 消息完整性
  • 消息积压状况

一般互联网公司会提供压测平台,此时根据压测平台的设置进行压测即可。而有时公司的此平台只能测试线上环境,因此也有一些其他的方式来实现压测

  1. 有哪些便捷压测方法?
  • 公司已有的压测平台
  • 使用 ab: Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 (mac 无需安装且使用 ab -h 即可查看相关命令)

reference:

  1. Web网站通知系统设计
  2. 专栏 | 如何设计一套消息系统 🌟🌟🌟
  3. 通知功能、消息系统设计与实现(上下片)《版本1》 🌟🌟🌟
  4. 网站消息通知设计 🌟🌟🌟
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
在新公司入职以后,第一个小demo是设计一个UART模块,该模块需要支持APB2.0协议和中断上报。 首先,我们需要明确UART(通用异步收发传输器)的基本功能和工作原理。UART是一种串口通信协议,用于将数据以串行的方式发送和接收。在设计UART模块之前,我们需要了解APB2.0协议和中断机制的相关知识。 APB2.0是一种面向寄存器的总线协议,它规定了寄存器之间的通信规则和时序要求。我们需要按照APB2.0协议的规定,设计和实现UART模块的寄存器存储、读写操作。 其次,中断机制是指硬件或软件在特定条件下,通过中断请求(IRQ)的方式通知处理器执行相应的中断服务程序。设计一个支持中断上报的UART模块,我们需要添加中断请求和处理机制。当接收到数据或发送完成时,触发相应的中断请求,并通过中断服务程序处理相应的逻辑。 在设计过程中,我们需要考虑UART模块的数据传输速率、数据位数、奇偶校验等参数的配置。同时,还需要实现数据的发送和接收功能,包括数据的缓存、数据的传输和错误检测等。 在验证过程中,我们可以通过编写测试代码,模拟UART收发数据,并验证数据的正确性。我们还需确保APB2.0协议和中断机制的正确性,包括寄存器读写的正确性、中断请求的触发和处理的正确性。 最后,经过测试和验证,我们可以将设计的UART模块集成到整个系统中,并与其他模块进行协同工作。我们可以通过UART模块进行与外部设备的通信,实现数据的收发功能。 通过设计一个支持APB2.0协议和中断上报的UART模块,我们可以更好地学习和理解总线协议和中断机制的原理,并锻炼我们的硬件设计和软件编程能力。这也为我们将来的工作奠定了基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值