云原生技术如何帮助 Mux 简化在线流媒体视频

挑战

Mux 的目标是“让在线流媒体视频对每个人来说都很容易”,创始人 Adam Brown 说,我们的数据和视频工作流程涉及很多移动组件。公司为了有效管理复杂的流程,于 2015 年 12 月第一次部署了 Docker 容器。最初,Mux 用 Rancher 堆栈进行编排,但遇到网络稳定性的问题,以及需要支持多个云的解决方案。

解决方案

Brown 决定迁移到 Kubernetes 上,由 Mux 团队自己构建。

影响

迁移到 Kubernetes “提高了我们的管理效力和版本部署的效率,” Brown 说,“我们能动态扩展,迅速地响应观众高达百万计的大型直播活动。”开发工作流程整体简化;之前搭建就需要数个小时,而现在开发环境最多需要 15 分钟就能运转,在多个云区域部署整个集群(约 50 项微服务)仅需不到 1 小时。

挑战:
行业:
地点:
云类型:
产品类型:
出版:
June 5, 2020

使用的项目

etcd
gRPC
Jaeger
Kubernetes
OpenTracing
Prometheus

一些数据

在多个云区域部署整个集群仅需不到 1 小时

90 个微服务

开发环境最多需要 15 分钟就能运转

“Mux”是“多路传输”的简写,即在数字媒体中将多路信号整合成为一路。

自 2015 年创建以来,Mux 已经整合了所有资源,旨在“让在线流媒体视频对每个人来说都很容易”,共同创始人 Adam Brown 说,“我们的目标就是从创造高品质的流媒体体验入手,消除技术层面的复杂性。我们在易于使用的API背后帮助自动化决策,如编解码器、编码设置和CDN分发。”

Mux 的两款产品之一是数据产品,为世界各地的视频播放器提供用户体验质量(QoE)指标,而视频产品让开发者能够按己所需,方便快捷地创建、编辑视频或进行直播。

有了这两个工作流程,特别是视频流程,“就会涉及到很多移动组件,”Mux 技术与架构主管 Brown 说,“我们管理来自全球各地的大型文件,很多文件都需要转码。然后还有数据流水线用于算法决策,决定使用什么转码参数,生产什么比特率,通过什么 CDN 发布。”

公司为了有效管理复杂的流程,公司很早就采用了容器化,于 2015 年 12 月第一次部署了 Docker 容器。最初,Mux 用 Rancher 堆栈管理容器,“貌似从这里入手最为简单,” Brown 说,“Kubernetes 那时还处于早期,集群和运行都比现在要复杂得多。”

一段时间之后,公司遇到网络稳定性的问题,随着 Kubernetes 生态逐渐成熟,Brown 重新把所有组件再次迁移到 Kubernetes 上。他一一考虑了众多云供应商部署、管理的 Kubernetes 产品,最终决定由 Mux 团队自己运行 Kubernetes。

“我们在多个云上部署,包括谷歌和亚马逊,”Brown 解释说,“早期的时候,我们比较担心的一个问题是内部开发和运营需要一致的环境。我们希望日志统一、度量统一。因为现有的主机访问,实现管理服务的统一面临一些技术挑战。所以,我们最终在所有的云上进行直接管理。”

因为已经在容器里面完成了所有构建、部署,甚至 CI 流水线,迁移到 Kubernetes 非常简单直接。从那时起,Mux 将整个构建系统都迁移到了 Bazel,“这样大大减少了构建时间,同时还增强了可维护性,”Brown 补充说,“为了管理 yaml,我们迁移到了以 Starlark 为基础的新 DSL,通过与 Tilt 整合,强化了开发环境,提高了开发者构建和运行的速度,轻松地在云上或本地机器上运行开发环境。”

“对我们的开发者来说,当他们编写软件的时候,甚至是编写复杂系统软件的时候,不需要太多考虑要在什么样的云环境里运行,这样整个开发工作流程就简化了。”

— MUX 共同创始人 ADAM BROWN

迁移到 Kubernetes 给 Mux 带来了立竿见影的成效。“提高了我们的管理效力和版本部署的效率,” 他说,“我们能动态扩展,迅速地响应观众高达百万计的大型直播活动。”

Kubernetes 实现了云供应商之间的一致性,Brown 说,“这样我们就能把每个云供应商都当成纯计算资源。对我们的开发者来说,当他们编写软件的时候,甚至是编写复杂系统软件的时候,不需要太多考虑要在什么样的云环境里运行,这样整个开发工作流程就简化了。”

现在,开发环境最多需要 15 分钟就能运转,在多个云区域部署整个集群(约 90 项微服务)仅需不到 1 小时。

Brown 说,Mux 使用云原生堆栈还能对流媒体视频做很多有趣的工作。“很轻松地就能在内部 API 上迭代并保持兼容性,”他说,“为我们节省了大量时间。”

“满足一个请求就会遇到很多复杂的问题,没有 gRPC 和 Kubernetes,我觉得我们不可能这么快速、有效地提供服务。”

— MUX 共同创始人 ADAM BROWN

Brown 说,Mux 使用云原生堆栈还能对流媒体视频做很多有趣的工作。“很轻松地就能在内部 API 上迭代并保持兼容性,”他说,“为我们节省了大量时间。”

公司还用 StackRox 产品做容器扫描、运行时扫描和运行时脆弱性检测。“我们喜欢这个产品是因为它最方便使用,”Brown 说,“另外一个实实在在的优点是让你能迅速地了解分级,知道首先应该关注什么安全问题。发现了弱点,就会增加别的 Kubernetes 信息,比如进行测试或生产或联网。把问题的严重程度排级,指出能够迅速采取的行动,这样有助于我们的工作。”

从 Mux 为客户提供服务的角度来说,云原生堆栈对业务的影响是显著的。“我们有延时要求,内部追踪的一个度量指标就是到第一个字节的时间,也就是我们能够以多快的速度显示视频数据,”他说,“满足一个请求就会遇到很多复杂的问题,没有 gRPC 和 Kubernetes,我觉得我们不可能这么快速、有效地提供服务。”