经历了媒体的一轮又一轮宣传轰炸,如今几乎每位行业关注者都会将容器与非关系数据库作为2016年IT行业的“热门市场技术”,而新一代市场领导者也在积极利用这些成果实现创新并借此击溃各传统竞争对手。总部位于纽约的fuboTV就是其中的典型代表。为了能够及时与业务发展保持同步并尽可能加快软件发布计划,fuboTV已经将其MongoDB数据库迁移至由Kubernetes编排系统于谷歌Cloud Platform之上负责管理的Docker容器环境当中。
抱着对其项目的高度关注,我与fuboTV工程技术主管Dan Worth以及云运营首席顾问Brian McNamara进行了面对面交流,旨在深入探讨与之相关的各项议题。
fuboTV旨在为客户随时随地提供最出色的足球直播服务。我们提供为北美市场的各位订阅客户提供一项流媒体服务,其中包括赛事直播、娱乐频道、纪录片、新闻以及更多与世界各地足球联赛的资讯。
MongoDB是负责支撑我们业务的核心数据库。我们利用它管理自己的客户数据; 它存储着节目指南以及内容目录元数据; 另外还承载着用于处理验证、订阅服务管理、赛事与频道调度乃至用户设备数据在内的一切相关服务API调用。
图一:顶级足球赛事直播
我们的CTO可以说是MongoDB的忠实拥趸,因此我们自公司建立之初就一直在使用这套数据库方案。
MongoDB对开发与运营流程的简化作用使得我们能够将精力集中在构建功能身上,从而快速扩展客户群体,而非被底层数据库所拖累。
我们最初在Compose.io平台上使用MongoDB,但如今则开始着手将自身管理集群迁移至谷歌Container Engine(作为谷歌Cloud Platform之组成部分)之上,而这套云引擎则以Kubernetes编排系统与Docker容器为基础。
面向谷歌Container Engine迁移主要源自以下几项因素的推动:
二者能够为我们的服务带来无与伦比的灵活性、执行效率与正常运行时间水平。纵观以往的业务流程,我们发现其中存在大量资源浪费状况。而利用由Kubernetes管理的容器系统,我们能够将环境中的全部机制——包括开发、测试、质量保证以及生产流程——交付给单一物理主机集群。我们利用Kubernetes调度程序的优势以精确控制资源配额,从而保证自身最大程度提升利用率并降低运营成本。
MongoDB能够与Docker容器及Kubernetes实现无缝化集成,进而支持我们的DevOps工作流程。
我们运行有一套持续集成与交付流程,从而保证自身能够开发、测试、发布并在必要时以最快速度轻松回滚至原有版本。
我们确保业务体系在应用程序部署与升级过程中不会出现任何停机时间。我们能够在实例发生故障时自动进行容器重新调度,而Kubernetes复制控制器的存在确保系统中始终存在必要数量的实例处于正常运行状态——这就让持续可用性拥有了强大的容错性。数据冗余机制则由这套副本集中的MongoDB副本负责实现。
我们在每个谷歌云区域内跨越多个Kubernetes pod进行MongoDB副本集配置。其中每个实例都配置有32个CPU、28 GB内存以及SSD存储资源。
这些副本集由四种具备完整弹性的部分共同构成:其中三者专门用于处理运营流量,另一部分则被配置为隐藏副本集成员,专门用于对备份分卷进行快照保存。
图二:fuboTV的Kubernetes平台跨越多个谷歌Container Engine区域分布。
相较于其它常见应用场景,在Kubernetes之上运行MOngoDB需要额外考虑以下几项因素:
我们流媒体服务的流量配置需要充分考虑“突发”因素这一条件。我们的站点往往在大型赛事开始前的十分钟起应对达到平均水平百倍的峰值访问请求。为了解决如此庞大的负载,我们将数据库操作分布在全部副本集成员当中。我们的用户遍布北美各地,为了为每位用户提供理想的延迟效果,我们利用最近原则作为线路首选项,从而保证用户能够始终接入到与之地理位置最接近的副本当中。MongoDB的数据中心识别机制在确保服务质量方面发挥着巨大作用。
MongoDB 3.0以及WiredTiger存储引擎给我们留下了深刻印象。其文档层级的并发控制与压缩能力帮助我们显著提升性能与存储效率,并切实符合我们的现有服务发展水平。举例来说,我们得以在单一数据集中实现了高达二十分之一的数据压缩效果。
我们于去年12月MongoDB 3.2完成生产环境调整后立即加以升级,从而确保自身始终享受由其带来的各项创新成果。
最明显的一项指标就是开发敏捷性与部署速度表现。我们能够以远高于以往的速度实现新服务启动、用户反馈意见收集、问题修复以及功能迭代等等。
MongoDB在弹性层面拥有大量理想的功能组合。要充分发挥这些优势,大家需要确保自己拥有在不同故障情况下实现应用正常运行的能力。
Docker也是一套非常出色的解决方案,但大家需要首先开发出对应工作流、工具以及管理机制,并以此为指导利用其构建并运行应用程序。
Kubernetes目前仍是个相对年轻的项目,但其成熟速度极快。大家需要认真评估自己是否希望将整体平台迁移至其中,或者选择使用托管服务——我们选择的就是后一种方法,即使用谷歌Container Engine。
感谢Brian与Dan拿出宝贵的时间与我们以及整体技术社区分享自己的实践经验。
感兴趣的朋友亦可点击此处注册MongoDB World以了解Brian与Dan就MongoDB、Docker与Kubernetes带来的更多真知灼见。
原文链接: Leaf in the Wild: Leading Soccer Streaming Service fuboTV Scales its Business with MongoDB, Docker Containers and Kubernetes