本文根据服务器的类型作用来分析分布式设计之语音视频系统服务器框架。
设计上:
1)频道系统跟频道外部功能分开,简称为频道内部网络和频道外部网络。
2)频道系统根据频道类型分为几个子系统(最重要的是直播间系统,也是本文讲述的)
3)直播间系统有独立的多网关(这里是VChannelMediaServer),分流直播间数据操作(到直播间数据服务器)、直播间应用操作(到直播间应用服务器)、音视频通信(到直播间音视频服务器)、日志操作(直播间日志服务)、与其他系统联系(包括频道外部网络或频道内部网络的其他子系统,通过直播间上级服务器来转发)
频道外部网络服务器类型:
SessionServer:会话服务器。保存用户基本信息。保存用户当前进入频道和请求跳转频道id。
GatewayServer:网关服务器。保存与客户端连接。保存客户端当前进入频道和客户端类型(pc端或手机端),在SessionServer宕机恢复时使用。GatewayServer会主动连接所有的SessionServer,为不同SessionServer之间提供消息转发服务。
ChannelInfoServer:频道信息服务器。预约活动、节目单、节目订阅;频道详细信息;频道分类信息(综合频道列表)
UserChannelInfoServer:用户频道信息服务器。频道成员信息。个人频道信息(我的频道列表、历史频道列表等)。
ChannelContributionServer:频道贡献服务器。
ChannelPointServer:频道积分服务器。检查频道积分。
SingerShowServer:签约歌手管理服务器。查询签约歌手及其直播间频道。歌手签约解约等。
ChannelIDServer:频道ID分配服务器.分配频道ID,分配非靓号(频道ID分为频道内部ID和频道外部ID,展示的是频道外部ID)
ChannelIDMapServer:频道内外部ID查询服务器
1)转发请求到ChannelIDServer,分配频道ID(如果创建频道失败则回收频道id)
2)转发请求到UserChannelInfoServer,创建频道,写入表(一级频道表CHANNEL、频道切换语音引擎CHANNELSWITCHENGINE、频道成员表CHANNELMEMBER、用户频道信息表USERVOICESERVICE、频道操作日志CHANNEL_OP_LOG)
3)通知NewChannelHistoryServer有新频道创建,记录新创建频道日志到数据库。
4)通知用户创建结果
1)发送请求到SessionServer,请求包含语音对象ID和p2p通信句柄,转发指定客户端(如果是在另一台SessionServer则通过GatewayServer转发过去,再转发客户端)
2)两客户端之间进行p2p通信
3)请求断开语音通信客户端发送请求到SessionServer,返回断开通信消息返回给该客户端。
VChannelMediaServer:直播间接入和转发服务器(含频道成员)
2)直播间数据服务器
VChannelServer:直播间数据服务器。管理直播间对象数据
VChannelLoadServer:直播间负载服务器。维护VChannelMediaServer和VChannelServer之间的服务器一致性哈希列表。
3)直播间音视频服务器
VVideoTransferServer:直播间视频转发服务器。转发直播间频道内的视频流,提供广播功能。
VVoiceTransferServer:直播间音频转发服务器。转发直播间频道内的语音流,提供广播功能。
4)直播间应用服务器
CastVoteAppServer:直播间投票应用服务器。客户端发起的经过VChannelMediaServer转发的请求投票操作,在请求结束后存档。
5)直播间日志服务器
6)直播间上级服务器
VChannelSuperServer:直播间上级服务器。直播间内部服务器向上连接和管理服务器,提供与其他系统的通信。
(1)进入直播间
第一步,进入直播间服务器系统前的准备
1)发送到GatewayServer请求进入频道,开始转发消息(请求的目的是获取登陆信息)
2)转发请求到SessionServer,检查是否可以进入频道,退出剔除之前进入的频道用户
3)转发请求到VChannelServer,检查用户和频道的合法性,缓存用户登陆信息,返回客户端登陆token和des密钥、VChannelMediaServer的信息(选择负载最小的,包含server id、登陆ip和端口)
第二步,进入直播间服务器系统
1)开始进入频道(连接服务器),VChannelMediaServer服务器验证连接,并加入媒体用户
2)VChannelServer检查并加入频道用户
(2)退出当前频道
1)VChannelServer移除频道成员,备份频道成员到memcache
2)通知VChannelMediaServer移除频道成员,通知SessionServer设置该用户不在频道
3)广播VChannelMediaServer,通过VChannelMediaServer通知频道内的成员有人退出频道
(1)请求频道成员列表
1)VChannelMediaServer有该频道的频道成员则返回频道成员列表(每个VChannelMediaServer备份来自VChannelServer所有频道的成员列表,增量更新)
2)发送请求到VChannelServer,同步频道成员数据到VChannelMediaServer
(2)公屏聊天
1)经过VChannelMediaServer转发到VChannelServer,再广播VChannelMediaServer,并广播该频道内的所有用户
(3)私聊
1)经过VChannelMediaServer转发到VChannelServer,根据频道id和目标用户,获取VChannelMediaServer的id,转发指定VChannelMediaServer并转发用户(1)投票直播间
1)经过VChannelMediaServer转发到CastVoteAppServer,记录并保存直播间选票结果(先保存到内存,同样流程请求关闭时存库)
(1)请求语音引擎\视频引擎地址
发送到VChannelMediaServer,返回语音引擎地址\请求视频引擎地址(跟VChannelMediaServer的外网地址一致,端口为配置,也是VVideoTransferServer和VVoiceTransferServer的绑定端口).
(2)直播间视频转发
1)VChannelMediaServer启动时创建视频引擎,连接视频引擎转发服务器
2)VChannelMediaServer创建频道时,对应请求VVideoTransferServer创建频道(父频道和子频道),返回VVideoTransferServer创建的频道(VVideoTransferServer有其自己的频道id)
3)VChannelMediaServer用户加入频道时,对应请求加入VVideoTransferServer的频道;主播则加入可发送权限,对应设置其在VVideoTransferServer的视频发送权限
4)VChannelMediaServer用户离开频道时,对应请求离开VVideoTransferServer的频道
5)VChannelMediaServer删除频道时,对应删除VVideoTransferServer的频道
(3)直播间语音转发
1)VChannelMediaServer启动时创建语音引擎,连接语音引擎转发服务器
2)VChannelMediaServer创建频道时,对应请求VVoiceTransferServer创建频道(父频道和子频道),返回VVoiceTransferServer创建的频道(VVoiceTransferServer有其自己的频道id)
3)VChannelMediaServer用户加入频道时,对应请求加入VVoiceTransferServer的频道;主播则加入可发送权限,对应设置其在VVoiceTransferServer的语音发送权限
4)VChannelMediaServer用户离开频道时,对应请求离开VVoiceTransferServer的频道
5)VChannelMediaServer删除频道时,对应删除VVoiceTransferServer的频道