
系统采用微服务架构,结合自引用树形数据模型,通过事件驱动Kafka实现多层级实时同步,多级存储(MySQL/InfluxDB/HDFS)保障数据一致性与合规性(等保三级、20年数据留存)。
老师口吻:咱们要设计的党建活动记录系统,核心是“树形层级关系+实时数据流动”。首先,支部、部门、总部构成树形结构(类似公司组织架构),数据需要关联层级关系。具体来说:
activity表,parent_id指向父节点,根节点parent_id为null),确保多层级数据关联。类比:多层级数据像公司组织架构的树,数据同步像树上的信息传递,每个节点(服务)收到消息后更新本地,类似手机通知推送,实时同步。
| 数据库类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 分库分表MySQL | 关系型数据库,水平/垂直分库分表 | ACID事务,复杂查询,强一致性 | 结构化活动详情(活动ID、参与人、时间) | 扩展性有限,分库分表复杂,需考虑读写分离 |
| InfluxDB | 分布式时序数据库 | 高性能实时写入,聚合查询(如按层级统计活动次数) | 活动日志(时间戳、活动类型、层级、参与人数) | 不支持复杂关联,需结合关系型存储 |
| HDFS | 分布式文件系统 | 高容错,可扩展,适合大规模非结构化数据 | 活动照片/视频(非结构化,如活动现场照片) | 读取延迟高,不适合实时查询,适合归档 |
自引用表设计(树形结构存储):
CREATE TABLE activity (
id BIGINT PRIMARY KEY,
parent_id BIGINT, -- 外键指向同一表,根节点为NULL
level ENUM('branch', 'dept', 'headquarters'), -- 层级枚举
title VARCHAR(100),
participants TEXT,
start_time DATETIME,
end_time DATETIME,
description TEXT
);
创建活动API请求(JSON):
POST /api/v1/activities
{
"org_id": "branch-001",
"level": "branch",
"title": "主题党日",
"participants": ["张三"],
"start_time": "2023-10-27T09:00:00Z",
"end_time": "2023-10-27T11:30:00Z",
"description": "学习二十大精神"
}
同步流程伪代码(含错误处理):
# 支部服务创建活动后,生产事件
def create_activity(activity_data):
try:
# 1. 插入本地MySQL(结构化数据)
db.insert(activity_data)
# 2. 生产Kafka事件
kafka_producer.send("activity_sync", value=activity_data)
# 3. 写入加密审计日志(区块链)
audit_log.write(activity_data, encrypt=True)
except Exception as e:
# 指数退避重试
retry(create_activity, activity_data, attempts=3, delay=2)
# 部门/总部服务消费事件
def consume_activity(event):
try:
activity = json.loads(event.value)
# 1. 更新本地MySQL(关联层级)
db.update(activity, org_id=activity["org_id"], level=activity["level"])
# 2. 写入审计日志
audit_log.write(activity, encrypt=True)
except Exception as e:
# 重试
retry(consume_activity, event, attempts=2, delay=1)
面试官您好,针对上海证券交易所的党建活动记录系统,我设计的核心架构是微服务+自引用树形数据模型+事件驱动实时同步。系统按支部、部门、总部拆分为独立服务,每个服务负责本层级的数据管理。数据存储方面,结构化活动详情用分库分表的MySQL(保证ACID事务,存储活动ID、参与人、时间等字段),日志用InfluxDB(记录时间序列数据,如活动次数统计),非结构化照片用HDFS(高容错存储照片/视频)。同步机制采用Kafka,活动创建时生产事件,各层级服务消费后实时更新本地数据,并写入加密的审计日志(区块链哈希链确保不可篡改)。数据一致性通过Saga模式(补偿事务)保障,结合Redis缓存提升性能。合规性方面,满足等保三级:传输用TLS1.3加密,存储用AES-256加密;数据留存20年通过热数据磁盘存储+冷数据对象存储归档(如阿里云OSS),定期迁移(每年一次),确保存储介质安全。这样能实现多层级实时监控,同时保证数据安全合规。
parent_id指向错误,导致层级关系混乱。