1.技术选型
之前上网找过一些关于成就系统设计的文档,推荐的都是事件驱动模型,因此底层设计也基于这个模型来做,由业务方产生可能触发成就的事件,统一放到一个队列里面,由线程去取队列里面的事件,进行分发处理。
技术点:
1.1 事件驱动模型
1.2 disruptor 号称百万流量的一个高并发处理框架
2.数据库设计
2.1 成就包配置表
CREATE TABLE `achievement_package` (
`achievement_package_id` varchar(32) NOT NULL COMMENT '主键id',
`name` varchar(32) NOT NULL COMMENT '包名称',
`start_time` bigint(20) NOT NULL COMMENT '开始时间',
`end_time` bigint(20) NOT NULL COMMENT '结束时间',
`create_time` bigint(20) NOT NULL COMMENT '创建时间',
`op_time` bigint(20) NOT NULL COMMENT '更新时间',
`last_ver` int(11) NOT NULL COMMENT '版本号',
`is_valid` tinyint(4) NOT NULL COMMENT '是否有效 0-失效 1-有效 ',
`name_code` varchar(32) NOT NULL DEFAULT '' COMMENT '成就包名国际化编码',
PRIMARY KEY (`achievement_package_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成就包配置表'
`name` varchar(32) NOT NULL COMMENT '包名称',
`start_time` bigint(20) NOT NULL COMMENT '开始时间',
`end_time` bigint(20) NOT NULL COMMENT '结束时间',
`create_time` bigint(20) NOT NULL COMMENT '创建时间',
`op_time` bigint(20) NOT NULL COMMENT '更新时间',
`last_ver` int(11) NOT NULL COMMENT '版本号',
`is_valid` tinyint(4) NOT NULL COMMENT '是否有效 0-失效 1-有效 ',
`name_code` varchar(32) NOT NULL DEFAULT '' COMMENT '成就包名国际化编码',
PRIMARY KEY (`achievement_package_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成就包配置表'
2.2 成就模板表
CREATE TABLE `achievement_template` (
`achievement_template_id` varchar(32) NOT NULL COMMENT '主键id',
`name` varchar(32) NOT NULL COMMENT '成就名称',
`name_code` varchar(32) NOT NULL COMMENT '成就名称国际化编码',
`context` varchar(64) DEFAULT NULL COMMENT '描述',
`context_code` varchar(64) DEFAULT NULL COMMENT '描述国际化编码',
`reward` varchar(64) NOT NULL COMMENT '奖励 json',
`pic_url` varchar(255) DEFAULT NULL COMMENT '成就图片 status-url',
`conditions` text NOT NULL COMMENT '达成条件 json',
`achievement_package_id` varchar(32) NOT NULL COMMENT '所属成就包',
`start_time` bigint(20) NOT NULL COMMENT '成就开始时间',
`end_time` bigint(20) NOT NULL COMMENT '成就结束时间',
`create_time`
`name` varchar(32) NOT NULL COMMENT '成就名称',
`name_code` varchar(32) NOT NULL COMMENT '成就名称国际化编码',
`context` varchar(64) DEFAULT NULL COMMENT '描述',
`context_code` varchar(64) DEFAULT NULL COMMENT '描述国际化编码',
`reward` varchar(64) NOT NULL COMMENT '奖励 json',
`pic_url` varchar(255) DEFAULT NULL COMMENT '成就图片 status-url',
`conditions` text NOT NULL COMMENT '达成条件 json',
`achievement_package_id` varchar(32) NOT NULL COMMENT '所属成就包',
`start_time` bigint(20) NOT NULL COMMENT '成就开始时间',
`end_time` bigint(20) NOT NULL COMMENT '成就结束时间',
`create_time`