Golang在视频直播平台的高性能实践(含PPT下载)

高可用架构 · · 2514 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang在视频直播平台的高性能实践(含PPT下载)

编者按:本文是杨武明在 2 月 27 日在 Gopher 北京聚会演讲基础上整理而成。转载请注明来自高可用架构公众号「ArchNotes」。

Golang在视频直播平台的高性能实践(含PPT下载)杨武明,熊猫 TV 首席架构师,曾担任奇虎 360 PC 网游技术架构负责人,前新浪微博平台资深后端开发、技术专家。对大型互联网架构有丰富的实践经验,擅长后端基础服务与组件开发,尤其高性能、高并发、大数据业务场景。

熊猫 TV 是一家视频直播平台,先介绍下我们系统运行的环境,下面这 6 大服务只是我们几十个服务中的一部分,由于并发量与重要性比较高,所以成为 golang 小试牛刀的首批高性能高并发服务。
Golang在视频直播平台的高性能实践(含PPT下载)

把大服务拆细, 然后服务化独立部署,更容易简化部署,也容易单点细节优化与升级。多数服务的能力是通用的,如平滑重启、多机房部署等。
Golang在视频直播平台的高性能实践(含PPT下载)

关于在线服务,如果 1000 万用户在线,即使每 30 秒一次在线 http 发送打点,那么也有每秒 30 万+的接口 qps。

Golang 提供的 http server 性能非常好,一个普通工程师如果做到单虚机支撑 1w - 2w 每秒的请求量,那么只需要 10 - 20 台后台服务器了。

用其他非高性能语言,需要的机器能需要多翻好几倍; C++ 性能足够,但对工程师要求很高。
Golang在视频直播平台的高性能实践(含PPT下载)

房间服务是主要服务, 需要核心保障,所以对房间服务里面的版块,进行了再细粒度的拆分。

对房间信息变更频繁的内容也采用独立存储,如人数计数等字段,这样的缺点是每次去房间信息会多带来一次额外的访问人数服务的成本。这也是架构设计需要权衡点之一。
Golang在视频直播平台的高性能实践(含PPT下载)

礼物系统是多数视频直播平台的标配,国内有礼物消费习惯的土豪不少,高峰期送礼物的并发量很大,尤其很多土豪对刷的时候。

礼物系统对一致性要求略高,所以存一份数据建多条索引也是一种选择,也可以降低对事务的依赖。
Golang在视频直播平台的高性能实践(含PPT下载)

弹幕交互方式是一个很不错的体验,更偏年轻化,大量用户喜欢通过这种方式与主播互动。

国内网络状况比较复杂,最好根据用户位置选择就近对应运营商的单线机房接入弹幕消息服务,让弹幕更及时。也可以用 BGP 机房,但网络带宽价格会比单线贵不少。

对于大房间,弹幕消息量特别大,主播与用户都看不过来, 在产品策略层面可以做一些体验上的优化。
Golang在视频直播平台的高性能实践(含PPT下载)

视频直播体验是整体平台最关键点,视频 CDN 是一种让用户就近获取所需流媒体的技术,且解决延时、卡顿等问题。 从技术角度不要只依赖某一 CDN 提供商或线路,业内很多视频直播平台都做了拉流线路互备,推流后视频(转码、转发)集群也是一个可优化的点,做互推是冗余了部分推流资源,但对优化直播流的体验与高可用性显而易见。
Golang在视频直播平台的高性能实践(含PPT下载)

包含自由业务逻辑的接口代理服务, 是很多公司都有的一个公共服务,可以把公司内网服务低成本的提供来外网来使用。不过需要考虑好外网安全策略,包括授权认证、服务关系映射、频率限制、业务资源隔离等。
Golang在视频直播平台的高性能实践(含PPT下载)

能看到最后肯定是对我们技术及业务感兴趣的朋友,熊猫 TV 技术团队正在招聘 Golang 工程师,全部配备高配电脑与 DELL 双屏大屏幕显示器,并提供有挑战性的技术环境。感兴趣朋友请扫码进入(同时也有大量 PHP、前端、运维、DBA 等技术岗位)。
Golang在视频直播平台的高性能实践(含PPT下载)

以上就是本次分享的主要内容,点击阅读原文可以下载 PPT。

更多了解杨武明:从3000元月薪码农到首席架构师的经历

转载本文请注明来自高可用架构 「ArchNotes」微信公众号及包含以下二维码。
Golang在视频直播平台的高性能实践(含PPT下载)


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:高可用架构

查看原文:Golang在视频直播平台的高性能实践(含PPT下载)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2514 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传