高可用性数据库如何赋予Mux扩展视频的能力

106 阅读8分钟

这是世界杯一场紧张的半决赛的下半场。半个世纪以来一直没有赢得比赛的英格兰队与克罗地亚队僵持在1-1,时间在流逝。压力正在增加。

然后,屏幕变黑了。

这就是2018年发生在数十万Youtube电视用户身上的事情,当时该服务在比赛中最重要的一场比赛中断线了。球迷们(可以理解)非常愤怒

Youtube TV的工程师设法在比赛结束前及时恢复了数据流(克罗地亚最终在加时赛中获胜)。但观众们错过了下半场的很多内容,而且很容易错过决定两队命运的进球。

这次中断突出了一个对任何现场视频供应商都很重要的教训:你绝对要把你的基础设施做好,因为没有第二次机会。

"没有人会因为某个云基础设施供应商的故障而暂停一场大型体育赛事," Mux联合创始人兼技术和架构主管亚当-布朗说。

"你没有机会重试直播。"

Mux如何使视频变得简单

在最近的一次网络研讨会上,布朗向我们介绍了Mux是如何努力让世界各地的开发者轻松提供高质量的视频,同时避免像2018年毁掉一些足球迷的半决赛体验的故障。

Mux在今年春天获得了1.05亿美元的D轮融资,提供两种产品。第一个,Mux Data,提供高质量的性能指标和监测,以便在线视频供应商能够更好地了解他们的用户所看到的情况。

第二个产品,Mux Video,是一个API,使开发者能够提供出色的直播或点播视频,而不必自己做任何繁重的工作。基本上,开发者需要做的就是提供视频文件或资料,而Mux的API负责摄取、处理、针对用户设备和带宽进行优化以及流媒体。

"亚当-布朗说:"Stripe为支付所做的事情,我们想为视频做。

这种方法使得提供优秀的视频内容对开发者来说非常容易。这也意味着Mux必须在幕后处理很多潜在的昂贵的复杂性。处理视频文件意味着大量的存储,大量用于处理的计算,以及用户调入和调出直播时的大量尖锐的工作负载。任何效率低下都会导致成本激增、用户体验不佳,或两者兼而有之。

当然,任何停机时间都可能导致用户错过他们再也无法恢复的体验。

幸运的是,Mux的工程团队知道有一种数据库可以处理现场视频的挑战性要求。

利用CockroachDB渡过停机期

CockroachDB因其高可用性(HA)以及对多云和混合云部署的支持而立即吸引了Mux的工程团队。

CockroachDB的分布式特性意味着数据库可以被配置为在节点故障甚至区域性故障中生存。这对Mux来说是至关重要的,因为Mux有一个全公司范围内的任务,即所有的服务都必须能够在节点中断的情况下生存,而不会对用户产生任何影响。满足这一要求很容易:"我们已经有了Cockroach," Brown说。

Mux团队知道CockroachDB是有弹性的--这是他们选择它的一个重要原因--所以Brown说,当他们发现CockroachDB也很容易使用时,这真是一个 "惊喜"。"我们喜欢Cockroach[在Mux]的最大原因是它给HA交易数据存储带来的操作简单性。"

"他说:"我们在升级版本方面有一段非常好的时间,我们的滚动节点是按需进行的,不需要围绕它进行协调或考虑它。

因此,"Cockroach已经真正成为我们的默认程序,"Brown解释说。"我们在传统上会说'让我们使用Postgres'的地方使用它。"

布朗说,Mux团队也仍然使用Postgres,但他补充说。"我们从来没有对Postgres的HA故事真正满意过。[有了Postgres,你可以有大部分的即时故障切换,但在操作上就变得很复杂:故障恢复和管理,然后你就会进入区域故障和管理升级。这就变得非常复杂。"

CockroachDB提供了Postgres的一致性和熟悉性,同时使高可用性--甚至是零RTO/RPO--变得更加容易。

多云和混合云,提高弹性和性能

Cockroach对多云和混合云部署的支持对Mux来说也至关重要。布朗说,对于现场视频,"你真的只有一次机会"。因此,这不仅仅是选择正常运行时间最长的云供应商;你还必须考虑到冗余和变通的问题,以防出错。

布朗说:"假设我们的云供应商发生故障,"他说。"你希望有能力,即使它有一个中断,至少能够尽快恢复运行。世界不会等待流媒体直播供应商的。"

"我们希望能够推销我们能够在[云提供商的中断]中生存下来,并真正保证你的可靠性和性能,"布朗说。

当然,成本和性能也是因素。布朗说:"在某些领域,我们在一个云供应商与另一个云供应商之间绝对有更多的问题"。"因此,拥有灵活性是一个关键的组成部分。"

今天,Mux的应用程序是用Golang和gRPC微服务构建的,运行在AWS和GCP的Kubernetes集群上。但从长远来看,布朗说,Mux可能还必须开发自己的专用硬件,以更有效地处理视频转码。

"例如,如果你看看YouTube,"布朗说,"他们正在开发自己的转码硬件。我们将不得不用我们自己的硬件与云供应商竞争,总有一天。不是在短期内,但我们希望为此做好准备。所以跨[多云和混合云]的灵活性真的很重要。"

使用Follow-the-Workload实现多区域自动化

虽然Mux在很多地方使用CockroachDB,但Brown说它最大的作用是作为Mux所有视频元数据的数据库。

当视频被摄入Mux时,CockroachDB数据库存储元数据,如视频分辨率、文件存储位置和客户数据。它还记录了文件的状态--例如,它是否被转码,是否准备好播放。布朗说,这已经在多地区部署中设置好了,而且很快也会是多云的。

目前,Mux最大的区域是在美国。布朗说,随着它建立更多的欧洲集群,它希望能更多地使用CockroachDB的区域划分。但就目前而言,他说:"我们已经非常成功地使用了Cockroach的Follow-the-Workload策略"。

Follow-the-Workload是CockroachDB对多区域部署中没有表定位的表的默认行为。它自动将表分布在各节点和区域,以确保在节点甚至区域发生故障时的生存能力,将表定位在最活跃的区域,以保持低的读取延迟。"对我们来说,"Brown说,"对于这种多区域战略,我们希望能够快速故障切换到另一个区域,让工作负载自动转移到现在被提升为该内容主控的区域,真的很方便。"

他说:"我想最简单的说法是,它真的是不需要动手的,"他说。"我们把它打开,它对我们来说真的很有效。"

"你应该试试"

Mux实际上是在各种使用情况下使用CockroachDB,而这一趋势将继续下去。"布朗说:"我们正在将很多仍在Postgres上的其他项目转移到Cockroach上。"例如,我们的客户API级别、访问密钥和客户组织数据今天仍在Postgres中。但我们计划将所有这些也转移到Cockroach上。"

布朗说,从他的角度来看,考虑到CockroachDB核心是免费和开源的,没有多少理由使用CockroachDB而不是Postgres。"我们确实在一些部署中使用了Cockroach的企业版,他说。"但是我们实际上并没有在其他一些地方使用。从开发者的角度来看,使用开源版本是非常好的。"

"我们有在Kubernetes中出现的开发者环境,所有这些都是非常干净地协调的,"他说。他说:"Postgres在那里也很好,但是一旦你进入全面部署,只要用CockroachDB增加节点就很简单。操作的简单性是存在的。如果Cockroach适合你的需求,你应该尝试一下,因为它使你很容易从一个地区到两个地区再到多个地区。"

给开发者的建议

布朗说,Mux做的一件事是正确的,从第一天起就把它的视频产品建成多区域。"他说:"根据过去的经验,[我们知道]从一个地区到两个地区是非常困难的。他说:"从两个地区到三个地区就容易多了。我们很早就知道,这个产品的成功看起来像全球规模。从第一天开始真正考虑多地区战略对我们来说是非常成功的。"

换句话说,当你知道你的应用程序的成功需要规模时,为什么不从一开始就建立规模?"布朗说:"CockroachDB让我们从一开始就很容易将其纳入产品。

阅读完整的案例研究以了解更多。