先赞后看,Java进阶一大半
geeksforgeeks
站点给出了一张如何设计 ESPN
直播视频流系统的架构图。
文章目录
各位hao,我是南哥,相信对你通关面试、拿下Offer有所帮助。
⭐⭐⭐一份南哥编写的《Java学习/进阶/面试指南》:https://github/JavaSouth
1. 直播礼物系统设计
1.1 表结构设计
视频直播领域的企业,比如抖音、快手、虎牙直播、B站直播,企业赚钱的源头往往靠的是粉丝在直播间刷礼物。你是不是像南哥一样只刷免费的小心心
呢?我看了下抖音的直播间,现在小心心还要充钱才能送!
赚钱的业务必须要重视起来,这必然不是一个小小模块,而是一个礼物系统设计。
特别用户送礼有个必要的用户需求,用户送礼是为了和主播互动,送了个嘉年华
,主播半小时才反应过来,那我们直播平台得被用户喷si。这就要求直播送礼的实时性了,虽然送礼内部包含了众多逻辑,看起来不可能快。
先看看下礼物系统的表设计。
(1)礼物表
CREATE TABLE `gifts` (
`gift_id` INT AUTO_INCREMENT PRIMARY KEY,
`gift_name` VARCHAR(255) NOT NULL,
`cost` INT NOT NULL,
`image_url` VARCHAR(255)
);
(2)用户礼物库存表
CREATE TABLE `user_gifts` (
`user_gift_id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`gift_id` INT NOT NULL,
`quantity` INT DEFAULT 1,
`acquired_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '获得礼物日期'
);
(3)礼物消费记录表
CREATE TABLE `gift_consumption_records` (
`record_id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`gift_id` INT NOT NULL,
`anchor_id` INT NOT NULL COMMENT '主播id',
`quantity` INT NOT NULL,
`consumed_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
1.2 送礼流程设计
简单来看,一次送礼请求需要经过的步骤可以简化为:
用户送礼 -> 礼物校验、资产校验 -> 用户扣费 -> 直播间礼物通知 -> 更新礼物排行榜、记录消费日志。
上文我有说了送礼要快/准/恨,这么长的业务链条,实时性要怎么保障?
(1)校验接口
用户点击送礼,App端先调用校验接口,校验用户的余额是否充足。这一点很重要,余额不够的则不走下面的流程,减少了大量无效的送礼请求。
// 校验接口
public boolean validateGiftAndBalance(int userId, int giftId, int quantity) {