点击空白处退出提示
作品详情
咪咕视频项目服务架构搭建采用多集群,分布式模式,服务支持高可用,高并发。其中上海服务器包括无锡机房和颛桥机房及云机房。
该项目还采用了阿里提供的服务 ID 调度功能,用户使用咪咕视频软件,发起请求,首先会分配所在省市地区就近的IP地址。
咪咕视频门户直播技术框架为 springboot,springcloud 微服务架构,因为是视频直播软件,数据主要以缓存为主,数据存储于redis、mongo及elasticSearch中、服务外部使用varnish及CDN进行一些静态资源存储,消息主要以kafka进行服务消息分发,使用的Prometheus进行服务监控,后台与客户端使用netty建立双通道机制,进行消息传递及心跳检测。
技术要点:
1、 在用户使用咪咕视频的时候,通过调用阿里解析IP接口,获取所有省市区IP地址,予以就近分配,如阿里接口IP调用不通,采取服务调度机制,轮换阿里提供的其他IP进行API调用,通过多线程方式批量校验该地区IP的服务是否正常在线,且筛选出移动、联通、电信,每个运营商所在省市区各一个可用IP地址,即根据用户所在省市区,运营商分配该IP地址。
2、云直播多人同屏场景中,获取直播推流地址采取了 redis的 onMessage 监听结合 redis 的有序集合实现了定时获取推拉流地址存入缓存,解决了高并发时,大量的用户同时使用直播功能拿不到推流地址的问题,用户成功上屏后,可以选择消费一定的 call 值来登上C位,如果用户余额足够,进行上C位操作,如果前面已经有用户申请上C位,启动排队机制,redis 监听排队流程,通知聊天室长连接,获取实时的排队位置信息。直至登上C位成功,扣除相应的费用,最终交易数据落库。
3、送礼作为用户交互功能,支持主播打赏,战队打赏,节目打赏,由于处理的规则及数据量较大,对于这种场景采取了storm大数据框架,来处理用户的贡献值。storm服务采用了KafkaSpout消费用户送礼的信息,Spout作为数据流的源头、从 kafka中消费消息、之后会经过多个Bolt进行数据过滤、分组、入库(redis)一系列操作,使打call榜单数据发生改变。对于用户打call的付费记录、数据会存储到mongo库中、支持异步写入(默认写入本地文件、定时读取文件、写入mongo库)。
4、聊天室的发言场景中,首先为了符合规定,用户发言会调用央视监播平台进行审核,审核分为自动审核,根据配置的违规关键字进行过滤,其次就是人工审核,审核通过的发言会通过kafka发送聊天室服务进行统一打包下发,默认会把最近100条消息存储到redis中,支持客户端默认展示。
5、客户端进入聊天室的时候、会与聊天室建立netty双通道机制、聊天室打包下发的消息会通过推送服务使用websocket下发给客户端。消息支持组推(聊天室指定房间用户接收)、单推(指定用户接收)、群推(所有用户接收)模式。针对高并发的场景、采用多线程加异步队列处理的形式进行消息下发。
6、聊天室和推送作为咪咕直播的核心服务、服务支持高可用、高扩展、多机房多活、聊天室通过监控mongo中的配置表、推送服务采用zookeeper进行节点监控的方式、动态实现了服务上下线及流量高峰时的机器的快速扩展。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论