TMT观察网_独特视角观察TMT行业

廣泛落地真實金融場景,騰訊云數據庫TDSQL定制內核優化揭秘互聯網+

觀察君 2018-03-28 16:34
分享到:
導讀

也有用戶誤刪除了系統數據庫或表,騰訊云TDSQL不僅優化了事務處理效率,TDSQL是有限幾個在將分布式事務大量應用在真實金融交易場景中的數據庫。

05年騰訊充值和財付通起步開始,騰訊就已經將MySQL/MariaDB全面應用在金融交易類系統中。在近13年支付、充值等海量業務的打磨下,騰訊云數據庫團隊修復大量MySQL/MariaDB的bug,并優化回饋社區,向MySQL/MariaDB社區貢獻了眾多代碼補丁(Patch )。騰訊云數據庫團隊與金融云團隊共同維護了金融級分布式架構TDSQL,目前,騰訊 90% 的金融、計費、交易類業務核心系統承載在 TDSQL 中。目前TDSQL 可以提供公有云、專有云兩種部署方案,可以分配基于MySQL協議的CDB(關系型數據庫)實例、DCDB(分布式數據庫)實例、ADB(分析型數據庫)實例。

我們選擇了一部分針對金融交易類業務場景的優化,看看金融交易類業務特點。

金融級高可用和數據強一致

高可用和數據強一致,是金融行業最基本的需求。因此,通常會配置主從架構和強同步復制來保證高可用和強一致,為了防止從機復制執行過慢,一般選擇使用row格式的binlog復制。而金融業務系統大量的批處理,會導致一次性更新/刪除了很多行數據,此時復制到從機時,則需要使用索引掃描或者全表掃描來找到這個行,可能導致復制效率變得非常慢,這將導致嚴重的從機數據延遲,進而產生更多問題。

例如,創建一張沒有主鍵的表,假設現在’test’表有100萬條記錄,在主機上執行一個批處理DELETE FROM test,假如刪除了10萬行,則會記錄10萬條binlog記錄,如:

delete from test where id=1;

delete from test where id=2;

...

delete from test where id=100000;

binlog被同步到備機,會執行10萬個單行刪除事件。對于具體每一個單行刪除事件,、因為目標表沒有主鍵,需要采用全表掃描,每次執行約100萬行,那么共需要掃描10萬 × 100萬= 1000億條記錄。這可能直接導致從機一直卡住好幾天。

為了避免這些問題,我們支持“自動增加主鍵”。

自動增加主鍵,該功能主要是在用戶創建表(且未定義主鍵時),自動在表中添加一列自增列作為主鍵。為此,我們新增了reject_table_no_pk這個參數,該參數設置為 1 時,如果在建表語句中,顯示指定主鍵,系統將自動為該表創建一列自增行作為主鍵。

而為避免“自動增加主鍵”功能關閉時(即reject_table_no_pk=0)用戶創建表,如果create table語句沒有創建主鍵和唯一索引的子句,那么系統將返回建表錯誤,錯誤碼為“1173”,提示信息為“This table type requires a primary key”。如果alter table語句刪除了主鍵或者唯一索引,導致這個表沒有了主鍵和唯一索引,也會返回這個錯誤。

分布式事務大量應用于真實金融級場景

金融交易類系統,會使用大量事務(例如銀行轉賬),且隨著數據量逐漸變大,某些系統會選擇采用分布式數據庫作為核心交易系統,這時又需要支持分布式事務。 騰訊云TDSQL不僅優化了事務處理效率,而且在修復MySQL 5.7 分布式事務的大量Bug,還為社區貢獻眾多代碼補丁(Patch );并且完整實現了MySQL-5.7在分布式事務處理在binlog復制相關功能中的事務災難恢復處理功能。填補了MySQL在分布式事務處理方面的眾多重大缺陷和空白。目前,TDSQL是有限幾個在將分布式事務大量應用在真實金融交易場景中的數據庫。

例如,社區版本在某些情況下,從機IO線程獲取xa事務(分布式事務)的事件期間中斷連接后,如果當前relay log上面最后一個事務正好是不完整的XA事務,那么sql線程會卡住。另外官方版本中,沒有處理XA 事務分支的二進制日志與存儲引擎(binlog + engine) 災難恢復,而TDSQL不僅處理了XA PREPARE事務分支的災難恢復,還包括 XA COMMIT ... ONE PHASE以及XA COMMIT/XA ROLLBACK 語句的災難恢復。還考慮到金融高可用場景下,如果事務未執行完成,主機故障從機上面可能無法繼續執行或反復切換等Bug。

金融級安全優化,系統安全機制更加健全

安全性是金融行業非常重要的需求,而安全管理制度和安全設備是有可能存在不完善的,為確保不會被非法用戶利用,騰訊云做了這幾點優化能力:

l 根據大量的入侵案例和報告中,非法用戶經常通過select into out file來把其本地的攻擊程序傳輸到服務器端,或采用目錄穿越攻擊(Path Traversal攻擊)隨意地打開、查看,甚至執行網站內的文件。騰訊云TDSQL對于tcp/ip登錄的用戶,即使該賬號有權限,也禁止用戶通過以下SQL語句在mysqld運行的服務器上面創建或者打開文件select ... into dump file; select ... into outfile; load data infile ... ;并禁止寫入"路徑變量不是正常路徑,而是由字符串組成的 “真值”,或“變量”" 這樣的語法來讀寫路徑變量的值。有了這些禁止措施,用戶將無法通過TCP/IP連接的客戶端在mysqld服務器上面創建或打開任意文件,用戶創建的文件只有數據表文件等完全受mysqld掌控的文件。用戶只能傳輸DDL/DML等SQL語句字符串以及得到它們的查詢結果。

l 在另外某些案例中,有一些非法用戶通過可能通過一些未知的業務系統漏洞去修改系統表,進而提權、做破壞或放開更多漏洞,禁止這種方式后可有效避免類似情況發生;也有用戶誤刪除了系統數據庫或表,然后試圖挽回,于是自己重新創建了一個系統表,可想而知,其他地方copy過來的系統表,與原系統表會有差異,結果導致各種系統異常。只允許 unix socket 連接且具有權限的用戶刪除系統數據庫 mysql, information/performance_schema, xa, sys, sysdb及其中的表,并且禁止非 unix socket 連接或不具有權限的用戶 對mysql.user表進行Drop/alter/truncate 表,或插入、更新、刪除這些表中的行。

l MySQL提供了標準的接口允許用戶實現自定義的功能(安裝插件),這個機制雖然靈活,但也是巨大的安全隱患。如果被非法用戶利用,就可以在mysqld服務器上面以linux用戶的身份執行任意代碼。所以,我們禁止通過TCP/IP連接上來的用戶執行INSTALL PLUGIN語句安裝插件。

l 我們在MySQL5.7版本以后,全面支持表空間加密和連接加密,加密的主要目的是方式主要對硬盤上的數據庫件的透明加密,如果該數據文件被盜取(盜取磁盤、機器),在沒有密鑰的前提下無法恢復出數據內容。當然,TDSQL在分布式數據庫DCDB方案基礎上,也實現了加密

l 為在靈活性與安全性中間予以平衡,上述安全機制都有開關控制(默認打開),為避免非法用戶關閉以越過安全機制,我們禁止遠程用戶修改和讀取這些開關變量,防止非法用戶關閉上述安全措施。

生產系統非標操作限制,降低系統負載

在某些情況下,開發或運維不得不直連數據庫做某些操作。而某個不合理的SQL語句會直接導致數據庫開銷過大,會嚴重增加系統負載,降低系統的TPS,甚至影響系統可用性。有時候,某些SQL開銷過大并不是用戶需求,可能只是人為錯誤,甚至SQL注入等。因此,騰訊在數據庫內核中可以限制SQL語句執行的規模。即通過限制臨時表的大小,或強制delete/update/select增加limit子句。

對于創建在myisam上面的臨時表,用戶可以設置全局變量 max_temp_table_size來限定臨時表的大小,該值默認是0,表示沒有限制。 例如,可以設置max_temp_table_size=16K,當查詢執行過程中任意一個臨時表的temp_table_size大于這個限定值時候,查詢直接返回失敗,服務器端錯誤號:1114,錯誤字符串是:“The table 'xxx' is full?!?/p>

用戶可以設置select_rows_limit/delete_rows_limit/update_rows_limit 3個動態的全局變量,來強制添加用戶必須顯示指定limit子句來做規模限制,例如設置比如 set global delete_rows_limit=10000; 這樣的話,delete語句就不可以刪除超過10000行代碼,否則就失敗了。當然,開啟變量后,用戶也可以顯示指定NO_LIMIT關鍵字,來避免這個限制。

為了防止計劃外的超大事務導致鎖表;或binlog量過大會導致強同步等待超時;或某些異常操作,比如用戶誤操作無條件刪表等;我們通過參數max_binlog_write_threshold限制一個事務中寫入的binlog總量,當達到配置的最大值時候,當前DML語句返回錯誤,并在數據庫中回滾該事務。檢查在DML執行時即做,而不是在事務提交時刻,這樣可以有效提高效率。

除了上述之外,騰訊云TDSQL還有大量其他優化,由于篇幅有限,我們會在未來逐步在騰訊云社區中公開;另外,我們已將大量優化和改動都提交社區開源。

用戶 系統 事務 執行 數據庫
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


專題報道

主站蜘蛛池模板: 金库门,金库房,金库门厂家,金库门价格-河北特旺柜业有限公司 | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 物和码官网,物和码,免费一物一码数字化营销SaaS平台 | 黄石东方妇产医院_黄石妇科医院哪家好_黄石无痛人流医院 | 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 包装机_厂家_价格-山东包装机有限公司 | 酸度计_PH计_特斯拉计-西安云仪| 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 杭州用友|用友软件|用友财务软件|用友ERP系统--杭州协友软件官网 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 空气弹簧|橡胶气囊|橡胶空气弹簧-上海松夏减震器有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 澳洁干洗店加盟-洗衣店干洗连锁「澳洁干洗免费一对一贴心服务」 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 影视模板素材_原创专业影视实拍视频素材-8k像素素材网 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 江苏齐宝进出口贸易有限公司 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 南京蜂窝纸箱_南京木托盘_南京纸托盘-南京博恒包装有限公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 |