Facebook 宣布开源Python重写后的OnlineSchemaChange
本文会简要介绍,OnlineSchemaChange在经历从PHP到Python重写后的改进和变化
文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部
作者:卢钧轶(cenalulu)
本文原文地址:https://github.com/cenalulu/cenalulu.github.io
英语原版: https://code.facebook.com/posts/1290069194423954
前言
Facebook早在2009年就开源了OnlineSchemaChange.php. 该工具主要设计初衷是用于补充当时MySQL对于在线表结构变更支持的空白,尽可能的减少表结构变更时对业务的影响。而在过去的几个月中这个工具经历了从PHP到Python重写,以及功能的新增和性能的改进。今天,重写后的OnlineSchemaChange正式宣布开源,可通过此链接访问:https://github.com/facebookincubator/OnlineSchemaChange
设计初衷和困境
最早,OSC是为了解决MySQL在进行表结构变更时锁表所带来的业务影响。同时,它也满足一部分DDL无法提供的功能。例如:ALTER TABLE IGNORE ... ENGINE=INNODB
。
然而在PHP的使用过程中我们发现设计上缺陷和程序编写方式的问题导致这个工具的可扩展性较差,并且无法更好的进行功能测试。随着时间的积累,往这个工具增加新功能的难度越来越高,甚至修复bug都成了一个不可能完成的任务。同时功能测试的缺失也成为了吸纳社区贡献的一个重大阻碍,致使整个项目的活跃度下降。
因此在去年我们决定重写这个工具,同时加入更多我们向往已久的功能。
变化和改进
使用便捷
之前开源的OSC更多的像是一个概念和一段代码,本身无法直接使用。用户需要自己把核心逻辑封装成一个可执行的脚本。这个大大增加的OSC的可用度也从而导致了社区的接纳度不高。新版本的OSC.py是一个命令行可执行的脚本,很大程度上提高了易用性成为一个下载即可使用的工具。
同时,OSC.py的核心逻辑也独立成为Python Module存在。如果你的运维整体架构是基于Python搭建的那么新的OSC.py将可以很容易的融合到你的工具集当中。
可测试性
受到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模式带来的性能损耗。同时,我们也将会将原生在线表结构变更的支持增加到智能模式中,在实现一个工具满足所有表结构变更的需求的同时达到最小的不可用时间。
最后我们也非常希望和开源社区一起对OSC进行改进和开发,使之能成为一个更为可靠高效的DBA工具。
最后附上github的repo地址:https://github.com/facebookincubator/OnlineSchemaChange
Facebook 宣布开源Python重写后的OnlineSchemaChange的更多相关文章
- 2013 年 —— Facebook 在开源方面的工作介绍
自从 Facebook 的第一行PHP代码,第一句 MySQL 的 INSERT 语句,开源就已经是我们工程哲学中的一个重要的部分. 现在,我们使用.维护并为大量的主要项目做出了贡献——涉及多种领域如 ...
- 以正确的方式开源 Python 项目
以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...
- 以正确的方式开源 Python 项目(转)
大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清晰和无痛.我不是简单的指——“创建一个GitHub库,提 ...
- 直接拿来用!Facebook移动开源项目大合集
直接拿来用!Facebook移动开源项目大合集 时间:2014-04-22 15:37 作者:唐小引 随着iOS依赖管理工具CocoaPods和大量第三方开源库成熟起来,业界积累了大量的优秀开源项目. ...
- 2014年Facebook的开源成就
2014是Facebook开源硕果丰硕的一年,其开源项目经理詹姆斯·皮尔斯(James Pearce)连续12天发布开源博客文章展示全年该社交网站在此领域取得的成就. 皮尔斯公布的成就包括以下内容: ...
- Nginx环境下常见的开源项目重写汇总
我们做PHP开发的,作者寒冰我觉得大部分时候都在跟开源的系统打交道.比如:Discuz.PHPCMS.ecshop.wordpress等开源系统.一般我们都是在本地搭建测试环境,用的web服务器都是a ...
- Facebook 正式开源其大数据查询引擎 Presto
Facebook 正式宣布开源 Presto —— 数据查询引擎,可对250PB以上的数据进行快速地交互式分析.该项目始于 2012 年秋季开始开发,目前该项目已经在超过 1000 名 Faceboo ...
- Python安装后在CMD命令行下出现“应用程序无法启动.............”问题
问题存在之一:系统是刚刚重做的精简版服务器系统(阉割版) AN就是在阿里云上刚开的Windows Server 2008 系统上碰到的 吓尿了都 症状: 正常安装python环 ...
- 6个最佳的开源Python应用服务器
6个最佳的开源Python应用服务器 首先,你知道什么是应用服务器吗?应用服务器通常被描述为是存在于服务器中心架构中间层的一个软件框架. AD: 首先,你知道什么是应用服务器吗?应用服务器通常被描述为 ...
随机推荐
- JDBC(上)
1. 课程回顾 mysql加强 1)数据约束(表约束) 默认值: default 默认值 非空: not null 唯一: unique 主键: primary key (非空+唯一) 自增长: ...
- iOS开发之应用程序启动图片规格
一个app在启动过程中会全屏显示叫做Default.png的图片 各种规格Default的使用场合: Default.png:非retina-iPhone屏幕,320x480 Default@2x.p ...
- Moving to Express 4
http://expressjs.com/guide/migrating-4.html Moving to Express 4 Overview Express 4 is a breaking cha ...
- Linux之cut命令
cut 参数: -d 指定分隔符,与-f 一起使用,默认是空格.例如:-d“|” -f 指定取第几段的数据与-d一起使用 -c 以字符为单位取出固定字符区间 示例: 取不连续区间的内容的时候使用 ...
- CentOS7.2 初始化
##安装wget,linux默认最小版本不会安装wget yum -y install wget ##安装文件上传下载到服务器的小工具 yum -y install lrzsz ##安装网络工具包 y ...
- MySQL---事务知识,你搞明白没有?
MySQL - 事务 在学习事务这一概念前,我们需要需要构思一个场景 场景构思 假设该场景发生于一个银行转账背景下,月中,又到了发工资的日子.潭州教育科技集团打算给Tuple老师发放一个月的工资.(此 ...
- PT20150801隆重开班
PT20150801隆重开班 伴随着秋天的的脚步,带着对梦想的憧憬,POPTEST1508期学员步入正式学习阶段:POPTEST的课程内容吸收了互联网公司先进技术的特点,同时坚持深入浅出的教育特点,完 ...
- Android软键盘遮挡布局的那些事
有朋友提到软键盘遮挡布局的问题,说网上找了很多资料都未能解决,下面我来总结一下那些事,有些内容也是从网友那里学来的,但是我都会自己验证正确了才会贴出来. 首先来分析下我们常见的遮挡问题有哪些(本次所说 ...
- 玩转SSH(五):Struts + Spring + MyBatis(注解版)
本文将在 玩转SSH(四):Struts + Spring + MyBatis 的基础上进行一些小的改动,将原本是 xml 配置方式的项目,改成注解的配置方式. 要将项目改成注解方式,一般是将在 Sp ...
- sublimeText3插件安装
1,官方下载sublimeText 3(百度搜索) 2,安装成功后按Ctrl+`调出console 3,然后输入 import urllib.request,os; pf = 'Package Con ...