本文會簡要介紹,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