1.
2.
从1到亿,如何玩好异步消息?CQRS架构下的异步事件治理实践
引言
哔哩哔哩已有接近一亿的日均活跃用户,用户互动非常频繁,这为后端系统带来巨大挑战,为了实现更好
的架构扩展性,我们采用了微服务+ CQRS的架构,在这种架构下,又会带来哪些问题,我们又是如何解决
的呢?本文介绍异步事件处理railgun平台,其已经帮助近800个业务应用构建高性能、高稳定性的异步系
统,接下来,我们将从一个简单的业务例子开始,一步步介绍异步事件的演进与治理之路。
从「1」开始
我们就拿一个业务系统普遍存在的点赞功能作为例子,有一天老板说:“我们要做一个视频点赞的功能,这
个功能看着很简单嘛,让校招生小明做一下好了。”
而你是校招生小明,心想,不就是个点赞按钮嘛,我们先来分析一下产品功能:
点赞的功能核心有两点:
统计点赞计数
查询点赞状态
于是你设计了如下的数据库表结构:
CREATE TABLE `counts` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`video_id` bigint(20) UNSIGNED NOT NULL default 0 COMMENT 'id',
`count` bigint(20) NOT NULL default 0 COMMENT '',
`mtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTA
MP COMMENT '',
`ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '',
PRIMARY KEY (`id`)
) COMMENT='';
CREATE TABLE `actions` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`video_id` bigint(20) UNSIGNED NOT NULL default 0 COMMENT 'id',
`user_id` bigint(20) UNSIGNED NOT NULL default 0 COMMENT 'id',
`state` tinyint(4) UNSIGNED default 0 NOT NULL COMMENT '',
`mtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTA
MP COMMENT '',
`ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '',
PRIMARY KEY (`id`)
) COMMENT='';
点赞系统流程:
引言
从「1」开始
CPU资源问题
连接数问题
数据库锁竞争问题
重复消费问题
消费能力不足
增加消费节点
提升单节点消费能力
数据聚合
减少ACK
流量控制
热点事件问题
错误重试
MQ故障
处理流程全景图
平台化
统一消息编程模型
控制面
总结