Car-tech

YouTube使用Go代码缩放MySQL

Creating platform-agnostic application packages with Habitat

Creating platform-agnostic application packages with Habitat
Anonim

YouTube工程师正在开发一套名为Vitess的软件,它将帮助开源MySQL数据库在非常大规模的生产环境中更高效地工作。要编写代码,他们正在使用Google的编程语言Go。

YouTube已经使用一个名为Vtocc的Vitess组件来帮助向所有服务的8亿用户提供视频服务。谷歌在2006年收购了YouTube。

Vtocc“非常稳定,并且拥有所有必要的工具供您在生产环境中使用,”YouTube建筑师Sugu Sougoumarane表示,他与YouTube工程师Mike Solomon一起讨论了Vitess在本周在圣地亚哥举行的Usenix LISA大型安装系统管理会议上发表的文章

Vitess是用Go编写的,可以帮助验证这种相对较新的编程语言可用于大规模生产环境的想法。谷歌在三月推出了Go的第一版。

YouTube每个月都会提供超过40亿小时的视频。大约72小时的视频每分钟上传到服务中。虽然YouTube将所有视频直接存储在文件系统上,但它使用MySQL来存储为每个视频提供服务所需的所有元数据,例如用户偏好,广告信息,国家/地区自定义和其他所需信息。因为它的可靠性,所罗门说,最初建立这项服务的工程师之一。它有怪癖,但那些怪癖是众所周知的,可以相当容易地减轻,他说。但是,MySQL在扩展方面也存在问题 - 至少需要扩展以容纳与YouTube一样大的服务。

“MySQL的主要问题是,一旦您达到某个[使用情况]的时候,您会花费大量时间管理硬件和你有多少实例,“所罗门说。 “我们希望自动化该块,我们希望采取所有复杂且容易出错的操作,并使其自行修复。”

在大型部署中使用MySQL时,MySQL效率也不高。通常,与MySQL的每个连接都需要在服务器上有自己的线程。然而,这种方法在YouTube运营规模上并不可行。 “运行成千上万的连接并不是真正可行的,”所罗门说,“但是,该公司的工程师一直不愿意尝试改变核心MySQL代码本身,并指出要对复杂且有些困难的理解代码通常会导致意想不到的效果。 “这不是直截了当的,只是当你认为自己知道自己在做什么时,那就是当你开始陷入困境时,”所罗门说,“因此,Vitess被创建为与MySQL一起运行,以提供额外的管理功能。例如,Vtocc组件将成千上万的传入SQL查询整合到更少的批次中,因此MySQL可以减少满足这些请求的资源。 Vtocc还解析查询,以便更有效地执行这些查询,并通过重复使用一个查询的结果来满足其他相同的请求,从而减少重复查询造成的工作量。

使用Go可让YouTube开发人员的工作效率超过他们的工作效率Sougoumarane说道:“使用更传统的语言。”他说,Go代码很快就编译完成。 Vitess中的30,000行代码可以在大约30秒内编译为二进制文件。而且,由于有丰富的库,许多任务不需要太多的编程。例如,Sougoumarane编写了一个105行的例程,定期修剪日志文件,这些功能不能用C或C ++编写成很少的行。

“这就是Go的表现力,”Sougoumarane说。 “语言特征经过深思熟虑,它们可以帮助您以比传统语言更优雅的方式撰写文章。” Sougoumarane还称赞Go的并发支持,这对于多核处理器的使用至关重要。 “你不必担心管理线程,Go会为你管理它们,”他说,“

Sougoumarane承认,这种语言也有一些缺点。例如,错误处理可以得到改进。调度和垃圾收集也可以使用一些工作。

Solomon说,随着时间的推移,Vitess将承担额外的职责,比如数据库复制和自动分片,因此数据库可以跨越多个服务器而不受管理员干预。

Joab Jackson涵盖了

IDG新闻服务

的企业软件和通用技术突发新闻。在@Joab_Jackson的Twitter上关注Joab。 Joab的电子邮件地址是[email protected]