架构实战营模块八作业
表设计原理
自研的消息队列将使用到多种表,以下根据分析只列出关键的几张表;为了便于管理以及扩展,所有消息放一张表,每一项可通过队列名称来区分不同消息队列,同一个消息队列中允许有限数量的自定义主题;表结构的设计中有几个关键点:
数据库分成多个组,每组又有多个主备成对的数据库组成;组数量确定以后将不可更改,但是每组的主备数据库对可以添加;
消息体存储于哪一组数据库,由消息体中的消息队列名称哈希结果决定;以此来保证同一个消息将位于同一组数据库中;
消息的写入将轮询特定组的数据库服务器进行写入;
通过以上设计可满足能够动态添加数据库的同时,又能提高数据库数据的写入效率;
在实际的使用中,mysql 数据库的数据只在服务器重启时用于数据库恢复;服务器中每个打开的消息队列都拥有一个 React 进程,负责与订阅用户建立通讯信道,它维护着一张由订阅表组成的树形表,以及一张由确认表组成的树形表; 当有待发布的消息到来时,程序通过订阅树形表感知到有哪些用户关注当前消息队列的消息主题,并将消息通过多路复用的方式发送给各个订阅者,并根据通讯情况及订阅者要求的服务质量来更新确认树形表,程序将通过确认树形表来制定重传策略;因为是由特定树形结构组织订阅表及确认表数据,所以能够允许用户高效率地撤销订阅或重新订阅。
表设计结构
消息表
复制代码
订阅表 subscribe
复制代码
确认表 confirm
复制代码
评论