历史
出生于YouTube, 以开源方式发布
自2011年以来,Vitess一直是YouTube基础设施的基本组成部分。本节简要总结了促成Vitess诞生的大事记:
- YouTube的MySQL数据库达到了峰值流量很快超过数据库服务容量的程度。为了暂时缓解这个问题,YouTube为写入流量创建了一个主数据库,为读取流量创建了一个副本数据库。
- 由于对猫咪视频的需求处于历史最高水平,因此只读流量仍然足以使副本数据库超载。因此,YouTube添加了更多副本,再次提供了临时解决方案。
- 最终,写入流量变得太高,主数据库无法处理,要求YouTube对数据进行分片以处理传入流量。(如果数据库的整体大小对于单个MySQL实例来说太大,则也需要进行分片。)
- YouTube的应用程序层已经过修改,因此在执行任何数据库操作之前,代码可以识别正确的数据库分片以接收该特定查询。
vitess使得youtube从源代码中删除该逻辑,在应用程序和数据库之间引入代理来路由和管理数据库交互。 从那时起,YouTube的用户规模扩大了50倍以上,大大提高了其服务页面、处理新上传视频等的能力。更重要的是,vitess是一个具备无限扩展能力的平台。
YouTube选择使用Go语言实现Vitess,因为Go提供了表现力和性能的结合。它几乎和Python一样富有表现力,而且非常易于维护。它的性能与Java相同,在某些情况下接近C++。此外,该语言非常适合并行编程,并且具有非常高质量的标准库。
开源第一
Vitess的开源版本与YouTube上使用的版本非常相似。虽然有一些变化可以让YouTube利用Google的基础架构,但核心功能却是相同的。在开发新功能时,Vitess团队首先确保它们在开源版本中是可以使用的。在某些情况下,团队会编写一个使用Google特定技术的插件。这种方法可确保Vitess的开源版本保持与内部版本相同的质量水平。
绝大多数Vitess开发都在GitHub上进行。因此,Vitess在构建时考虑了可扩展性,因此您可以根据基础架构的需要进行调整。