Facebook 宣布开源Python重写后的OnlineSchemaChange

本文会简要介绍,OnlineSchemaChange在经历从PHP到Python重写后的改进和变化php

文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部
做者:卢钧轶(cenalulu)
本文原文地址:https://github.com/cenalulu/cenalulu.github.io
英语原版: https://code.facebook.com/posts/1290069194423954mysql

前言

Facebook早在2009年就开源了OnlineSchemaChange.php. 该工具主要设计初衷是用于补充当时MySQL对于在线表结构变动支持的空白,尽量的减小表结构变动时对业务的影响。而在过去的几个月中这个工具经历了从PHP到Python重写,以及功能的新增和性能的改进。今天,重写后的OnlineSchemaChange正式宣布开源,可经过此连接访问:https://github.com/facebookincubator/OnlineSchemaChangegit

设计初衷和困境

最先,OSC是为了解决MySQL在进行表结构变动时锁表所带来的业务影响。同时,它也知足一部分DDL没法提供的功能。例如:ALTER TABLE IGNORE ... ENGINE=INNODB
然而在PHP的使用过程当中咱们发现设计上缺陷和程序编写方式的问题致使这个工具的可扩展性较差,而且没法更好的进行功能测试。随着时间的积累,往这个工具增长新功能的难度愈来愈高,甚至修复bug都成了一个不可能完成的任务。同时功能测试的缺失也成为了吸纳社区贡献的一个重大阻碍,导致整个项目的活跃度降低。
所以在去年咱们决定重写这个工具,同时加入更多咱们向往已久的功能。github

变化和改进

使用便捷

以前开源的OSC更多的像是一个概念和一段代码,自己没法直接使用。用户须要本身把核心逻辑封装成一个可执行的脚本。这个大大增长的OSC的可用度也从而致使了社区的接纳度不高。新版本的OSC.py是一个命令行可执行的脚本,很大程度上提升了易用性成为一个下载便可使用的工具。
同时,OSC.py的核心逻辑也独立成为Python Module存在。若是你的运维总体架构是基于Python搭建的那么新的OSC.py将能够很容易的融合到你的工具集当中。sql

可测试性

受到mysql-test-run的启发,新的OSC实现了一个相似的测试案例设计。及时是一个不懂Python的用户也能够很是容易的写出一个基于JSON+SQL的测试案例,提交一个issue来描述本身遇到的bug。同时这也使得吸纳社区patch的可靠性大幅提升。
同时受益于Python语言自己,整个工具也实现很高的单元测试覆盖度,可靠性有了很好的保障。架构

可靠性

和目前全部开源的在线表结构变动工具不一样,OSC.py实现了一致性检验的功能。在Facebook数据一致性高于一切。一致性的检验可让咱们很是放心在任什么时候刻进行任何表结构变动而不用担忧因工具bug而形成的数据丢失或者损毁。同时,一致性校验也是一种对社区用户负责的态度。MySQL的运行环境和配置参数变幻无穷,而Facebook的线上环境所能涵盖的只是一小部分。能在FB正常运行并不意味着这个工具就能够对bug免疫。一致性校验的存在可让OSC.py优雅的避免各类环境变化所可能带来的潜在bug对数据的损坏。运维

要详细了解更多OSC.py带来的新特性能够查看这个wiki page工具

项目的展望

随着Row Based Replication的普及和在Facebook内部的全面部署,咱们将会增长基于RBR binlog增量记录的功能,从而彻底避免trigger模式带来的性能损耗。同时,咱们也将会将原生在线表结构变动的支持增长到智能模式中,在实现一个工具知足全部表结构变动的需求的同时达到最小的不可用时间。post

最后咱们也很是但愿和开源社区一块儿对OSC进行改进和开发,使之能成为一个更为可靠高效的DBA工具。性能

最后附上github的repo地址:https://github.com/facebookincubator/OnlineSchemaChange

相关文章
相关标签/搜索