# qiyu-live-app **Repository Path**: wx_609a616b4d/qiyu-live-app ## Basic Information - **Project Name**: qiyu-live-app - **Description**: 仿斗鱼直播平台微服务实战项目,细分为用户、im、支付、账户、礼物、直播等服务 技术架构:springCloudAlibaba、dubbo、rocketmq、redis、nacos、mybatis-plus、mysql 服务运维工具:docker、linux 分库分表:sharding-jdbc - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-04-13 - **Last Updated**: 2025-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 仿斗鱼直播实战微服务项目 ## 服务模块介绍 - qiyu-live-user-provider : 用户数据和信息的内部服务模块 - qiyu-live-user-interface : 用户数据对外接口和逻辑模块 - qiyu-live-api : 对外接口模块 - qiyu-live-common : 通用工具类模块,公共组件模块 - qiyu-live-framework : 框架模块 + qiyu-live-frameword-dataSource-starter :数据源切换的starter + qiyu-live-frameword-redis-starter :redis组件,包括redis的配置、key的管理等 - qiyu-live-id-generate-provider: 分布式id生成服务 - qiyu-live-id-generate-interface: 分布式id对外接口模块 - qiyu-live-msg-provider : 消息服务提供者 - qiyu-live-msg-interface : 消息服务对外暴露接口(登录验证码相关) - qiyu-live-account-provider : 接口鉴权服务提供者(验证token) - qiyu-live-account-interface : 接口鉴权服务对外暴露接口 - qiyu-live-im-provider : 用于提供关于Im服务的相关RPC接口 - qiyu-live-im-core-service: Im服务核心模块 - qiyu-live-im-core-service-interface: - qiyu-live-im-interface: Im服务核心模块 ### 1、用户中台模块 #### 1.1 描述 主要负责系统的用户的基本信息的数据,是整个系统中比较重要的部分;独立抽取用户体系,多种应用/app使用同一套用户体系,避免每个系统都要进行用户数据的管理,减少代码冗余,多应用打通同一套用户体系,是数据流通性的价值体现 #### 1.2 功能特点 - 用户数据的统一管理 - 方便不同业务线的接入 - **高性能、高并发、高可用** #### 1.4 用户中台架构设计 - 1、mysql、redis单机 这种架构模式下,mysql容易出现性能瓶颈,同时由于只有一台机器,存在单点的风险 - 2、mysql主从、redis mysql使用主从的部署方式,主节点进行写操作,从节点进行读操作,从而实现读写分离。但该模式redis依旧存在单点风险、性能上也可能出现内存不足的瓶颈 - 3、mysql主从、redis哨兵集群 : 通过redis的哨兵机制,实现主从的高可用,哨兵其实本质上是多台单点,也存在内存不足的性能瓶颈 - 4、mysql主从、redis分片集群: 这种架构模式下,mysql主从部署,redis集群部署,分片进行横向扩容,但是这个架构对机器的性能要求比较高 所以选择看具体的用户数据以及机器性能 思考:mysql主从模式下,读的压力主要分给从节点,可以对从节点进行横向扩容,增加从节点的数量,同时还需要考虑读写分离的模式下主从延迟的问题(通过binlog实现) #### 1.5 用户数据表格设计 - 冷热数据分离设计:比如用户数据,用户id、用户名称等这些读多改少的数据,称为冷数据,可以把这些数据放在同一张表格中,像用户最近上线时间、用户标识等读多写多的数据,称为热数据,可以放在同一张表中 - 数据库分库分表:直播业务,预估用户量大概达到亿级,按照一亿用户数据来看,设计上可以采用单库分表的模式,分为100张数据库表格,单表存储上限预估为100w 详细设计见sql文件夹下的sql ### 2、分布式id生成器 分布式id生成器,用于生成全局唯一id,主要解决分布式环境下,id生成问题,比如订单号,用户id等,保证全局唯一,且递增 设计上通过mysql配置某个id段的id起始值、结束值、更新步长,分为有序id的获取和无序id的获取操作,参考美团leaf的实现方式,具体的思路如下: - 对象类实现initializeBean的接口方法,在bean初始化之后,将对应mysql配置下的id加到本地map缓存中 - 当请求到达时,从本地map中获取对应的id - 判断对应的id段是否到达使用阈值的75%,进行扩容 - 扩容优化:使用异步线程池的形式,提高接口的响应速度,减少阻塞,并且使用semaphore信号量控制并发,同一时间允许一个线程执行扩容操作,避免线程阻塞