2020中国系统架构师大会活动回顾:ZEGO实时音视频服务架构实践
10月24日,即构科技后台架构负责人&高级技术专家祝永坚(jack),受邀参加2020中国系统架构师大会,在音视频架构与算法专场进行了主题为《ZEGO实时音视频服务架构实践》的技术分享。
以下为演讲内容的节选:
作为一家专业的音视频云服务商,即构服务了泛娱乐、在线教育、金融、产业互联网、IoT等行业的多家头部公司,例如映客、花椒、微博、好未来等。今年上半年受疫情影响,即构所服务的多家教育、泛娱乐客户都出现了流量暴增的现象。而即构提供的稳定后台服务,保障了客户线上业务0故障运营,这离不开我们成熟稳定、可用性高、能自动扩容的流媒体服务架构。
下面我从ZEGO流媒体服务简介、流媒体服务架构、调度逻辑设计和运营监控四部分进行分享:
一、ZEGO流媒体服务介绍
以这张图为例,我们来看ZEGO流媒体服务的全貌:

假设图中有三位主播A,B,C和观众,主播A,B,C要进行连麦互动,他们分别通过浏览器、原生App和微信/QQ小程序来推流。由于主播使用了不同的终端形式来进行推流,那么底层使用的音视频协议也是不同的,分别对应着WebRTC,AVERTP(ZEGO的私有音视频协议),RTMP。主播之间连麦互动需要互相拉流,为了获得良好的互动效果,需要很低的端到端拉流延迟(<400ms)。因此,主播们可以到即构全球实时网络来进行拉流,支持Web终端,和原生App拉流,国内的实际环境端到端延迟可以做到150-400ms。
而观众,因为量比较大,需要考虑成本,同时他不需要互动,可以接受较高的延迟。因此可以考虑从即构全球实时网络转推一路RTMP协议的码流到第三方CDN,观众再从CDN去拉流。
当然,如果观众也要很低的延迟,那么也可以从我们的实时网络拉流。此外,一些原来使用rtmp的客户,还可以通过第三方应用通过OBS来推流,很轻易的迁移到即构全球实时网络,用户就可以实现在全球区域范围内进行低延迟的音视频互动。
介绍完主要流媒体服务的全流程后,我们来看流媒体服务包含的具体职责:
调度:在用户推拉流前,需要发起调度请求,获得一个资源后才能够发起实际的码流推拉。用户体验的好坏,跟调度策略有很大关系。
实际推拉流:我们适配了RTMP,WebRTC,AVERTP等多种协议的推拉流标准,提供了更优的流控等算法。
转推CDN:即构全球实时网络和第三方的CDN需要进行协作来满足客户的多样化场景需求。
转码:RTMP使用的AAC音频编码,WebRTC使用的Opus音频编码,这两种格式互通,需要对音频进行转码。
转协议:我们RTMP和WebRTC是以网关的形式存在的,中间的网络传输都是以我们的AVERTP协议来进行。
目前我们支持H264,H265,VP8 3种格式的视频编码转码;AAC, Opus,SILK 3种格式的音频转码;RTMP、WebRTC、AVERTP3种协议格式的转协议。
混流:当出现多个主播连麦互动时,观众如果分别去拉主播的流,对带宽成本和用户的设备都有很高的要求。我们会让服务器混合成一条流,观众只需要拉混合后的流即可。
流管理:推拉流鉴权,禁推管理,我们提供了业务运营必需的多种流管理功能。
即构实时音视频服务的优势体现在4个方面:
第一,多云商架构设计
我们设计之初就确定了支持多云商的架构设计。不同云商有着不同的优势,他的数据中心和网络资源天然的存在着差异性,a云商在印度南部覆盖质量好,b云商在印度北部覆盖质量好。那么我们就都用起来,让a云商覆盖印度南部,b云商覆盖印度北部,从而让整体获得更好的接入质量。
第二,高可用设计保障质量
我们架构设计上加进了许多高可用的方案,来保障稳定的服务质量,后面会展开。
第三,弱网下抗丢包能力强
我们自研的音视频引擎,在弱网下的表现更优异,能实现“上/下行70%丢包下,保持10-15帧视频流畅通话;上/下行80%丢包下,保持音频流畅通话”。
第四,低延迟大规模分发
利用ZEGO自研引擎,我们做了低延迟大规模分发的流媒体服务架构设计,能极大的提高后台并发能力。
(未完待续……)
鉴于分享内容较丰富,更多ZEGO实时音视频服务架构实践中的“流媒体服务架构设计、调度逻辑设计以及运营监控”等内容,可以扫描下方二维码获取演讲资料包,包含演讲文字稿、演讲PPT以及即构全球主要国家的端到端延迟实测数据。

2020中国系统架构师大会活动回顾:ZEGO实时音视频服务架构实践的更多相关文章
- ZEGO音视频服务的高可用架构设计与运营
前言: ZEGO 即构科技作为一家实时音视频的提供商,系统稳定性直接影响用户的主观体验,如何保障服务高可用且用户体验最优是行业面临的挑战,本文结合实际业务场景进行思考,介绍 ZEGO 即构在高可用架构 ...
- 你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
转自:https://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc 微服务架构是互联网很热门的话题,是互 ...
- 新项目架构从零开始(三)------基于简单ESB的服务架构
这几个月一直在修改架构,所以迟迟没有更新博客. 新的架构是一个基于简单esb的服务架构,主要构成是esb服务注册,wcf服务,MVC项目构成. 首先,我门来看一看解决方案, 1.Common 在Com ...
- 【58沈剑架构系列】为什么说要搞定微服务架构,先搞定RPC框架?
第一章聊了[“为什么要进行服务化,服务化究竟解决什么问题”] 第二章聊了[“微服务的服务粒度选型”] 今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC ...
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- Dubbo 和 Spring Cloud微服务架构 比较及相关差异
你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构. 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务, ...
- .NET Core微服务架构学习与实践系列文章索引目录
一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
- 《2016ThoughtWorks技术雷达峰会----微服务架构》
微服务架构 王键,ThoughtWorks, 首席咨询师 首先微服务架构的定义,thoughtWorks在2012年3月的技术雷达中这样定义: “微服务架构是一种架构,它提倡将单一应用程序划分为一 ...
随机推荐
- 使用CURL调用接口[*示例*]
<?php header("content-type:text/html;charset=utf-8"); /* 这是 使用CURL调用接口 */ $ch = curl_in ...
- WebAssembly 助力云原生:APISIX 如何借助 Wasm 插件实现扩展功能?
本文将介绍 Wasm,以及 Apache APISIX 如何实现 Wasm 功能. 作者朱欣欣,API7.ai 技术工程师 原文链接 什么是 Wasm Wasm 是 WebAssembly 的缩写.W ...
- ArcGIS切片服务获取切片方案xml文件(conf.xml)
在使用ArcGIS进行影像.地形等切片时,往往需要保持一致的切片方案才能够更好的加载地图服务. 本文介绍如何获取已经发布好的ArcGIS服务的切片方案xml文件. 当然切片xml文件还可以通过工具Ge ...
- Analysis of Variance 方差分析
title: "Analysis of Variance" author: '01' date: "2022-11-23" output: html_docum ...
- Linux修改远程命令端口
Linux修改远程命令端口 执行以下命令,修改sshd服务的配置文件 vi /etc/ssh/sshd_config 找到port,默认是注释了的 22 打开注释,将22改成想要的端口号 重启服务 s ...
- Java实现平衡二叉搜索树(AVL树)
上一篇实现了二叉搜索树,本章对二叉搜索树进行改造使之成为平衡二叉搜索树(Balanced Binary Search Tree). 不平衡的二叉搜索树在极端情况下很容易退变成链表,与新增/删除/查找时 ...
- Vue 前端开发团队风格指南(史上最全)
Vue官网的风格指南按照优先级(依次为必要.强烈推荐.推荐.谨慎使用)分类,本文根据项目实际情况整理了一份适用于团队开发的vue风格指南,供大家参考. 一.命名规范 常用的命名规范: camelCas ...
- Layui+dtree实现左边分类列表,右边数据列表
效果如下 代码实现 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- python的docker环境配置
docker环境配置 Docker基本操作指令, 下载安装参考 https://duoke360.com/tutorial/docker/install-docker docker + flask + ...
- 2020-11-27:go中,map的读流程是什么?
福哥答案2020-11-27:[答案来自此链接:](https://www.bilibili.com/video/BV1Nr4y1w7aa?p=12)源码位于runtime/map.go文件中的map ...