数据切分——Atlas介绍
??????? Atlas是由 Qihoo 360公司W(wǎng)eb平臺部基礎(chǔ)架構(gòu)團(tuán)隊開發(fā)維護(hù)的一個基于MySQL協(xié)議的數(shù)據(jù)中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎(chǔ)上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內(nèi)部得到了廣泛應(yīng)用,很多MySQL業(yè)務(wù)已經(jīng)接入了Atlas平臺,每天承載的讀寫請求數(shù)達(dá)幾十億條。同時,有超過50家公司在生產(chǎn)環(huán)境中部署了Atlas,超過800人已加入了我們的開發(fā)者交流群,并且這些數(shù)字還在不斷增加。
?????? Atlas名字的由來:
?????? Atlas:希臘神話中雙肩撐天的巨人,普羅米修斯的兄弟,最高大強(qiáng)壯的神之一,因反抗宙斯失敗而被罰頂天。奇虎360期望這個系統(tǒng)能夠腳踏后端DB,為前端應(yīng)用撐起一片天。
??????? Why Atlas?
??????? mysql-proxy是官方提供的mysql中間件產(chǎn)品可以實現(xiàn)負(fù)載平衡,讀寫分離,failover等,但其不支持大數(shù)據(jù)量的分庫分表且性能較差。
??????
??????? Atlas相對于官方MySQL-Proxy的優(yōu)勢
??????????? 1.將主流程中所有Lua代碼用C重寫,Lua僅用于管理接口
??????????? 2.重寫網(wǎng)絡(luò)模型、線程模型
??????????? 3.實現(xiàn)了真正意義上的連接池
??????????? 4.優(yōu)化了鎖機(jī)制,性能提高數(shù)十倍
??????? Atlas架構(gòu)設(shè)計:
??????? Atlas是一個位于應(yīng)用程序與MySQL之間中間件。在后端DB看來,Atlas相當(dāng)于連接它的客戶端,在前端應(yīng)用看來,Atlas相當(dāng)于一個DB。Atlas作為服務(wù)端與應(yīng)用程序通訊,它實現(xiàn)了MySQL的客戶端和服務(wù)端協(xié)議,同時作為客戶端與MySQL通訊。它對應(yīng)用程序屏蔽了DB的細(xì)節(jié),同時為了降低MySQL負(fù)擔(dān),它還維護(hù)了連接池。
?????
?????????
????????? Atlas功能特點及常見問題:
1.Atlas是否支持多字符集?
對多字符集的支持是我們對原版MySQL-Proxy的第一項改進(jìn),符合國情是必須的。并且支持客戶端在連接時指定默認(rèn)字符集。
2.Atlas是否支持事務(wù)操作?
支持,且處于事務(wù)狀態(tài)的客戶端中途退出時,Atlas會銷毀該客戶端使用的連接,讓后臺的mysql回滾事務(wù),保證了事務(wù)的完整性。
3.自動讀寫分離挺好,但有時候我寫完馬上就想讀,萬一主從同步延遲怎么辦?
SQL語句前增加 /*master*/ 就可以將讀請求強(qiáng)制發(fā)往主庫。在mysql命令行測試該功能時,需要加-c選項,以防m(xù)ysql客戶端過濾掉注釋信息。
4.主庫宕機(jī),讀操作受影響么?
在Atlas中讀操作不受影響,Atlas會將讀請求轉(zhuǎn)發(fā)到其他還存活的從庫上。但此時寫請求將會失敗,因為主庫宕機(jī)了。
5.檢測后端DB狀態(tài)會阻塞正常請求么?
不會, atlas中檢測線程是異步進(jìn)行檢測的,即使有db宕機(jī),也不會阻塞主流程。在Atlas中沒有什么異常會讓主流程阻塞。
6.想下線一臺DB, 又不想停掉mysql server, 怎么辦?
可以通過管理接口手動上下線后端db, Atlas會優(yōu)先考慮管理員的意愿。
7.想給集群中增加一臺DB, 不想影響線上正常訪問可以嗎?
通過管理接口可以輕松實現(xiàn)。
8.相比官方mysql-proxy, Atlas還有哪些改進(jìn)?
A: 這實在是個難以回答的問題,性能,穩(wěn)定性,可靠性,易維護(hù)性,我們做過幾十項的改進(jìn),下面會盡量列一些較大的改動
9.Atlas支持mysql的prepare特性嗎?
目前Atlas部分支持prepare功能,支持java,python,PHP(PDO方式)。
10.Altas支持多個主庫的運行模式嗎?
目前還未對于Atlas后面掛接多個主庫的情形進(jìn)行測試過,不建議這樣使用。建議使用一主一從或一主多從的模式。
11.在使用Atlas的過程中,發(fā)現(xiàn)了Atlas存在的bug或者對Atlas有新的功能需求,如何反饋給開發(fā)者?
對于用戶反饋的bug,我們非常重視。歡迎用戶將bug的復(fù)現(xiàn)的環(huán)境、步驟和運行截圖發(fā)郵件至zhuchao[AT]360.cn。同時如果用戶在實際的應(yīng)用場景中,對Atlas有新的功能需求,也可以向我們發(fā)郵件,我們將及時回復(fù)。另外有熱心網(wǎng)友建了QQ群326544838,開發(fā)者也已經(jīng)加入,方便討論。
12.java程序連接Atlas出現(xiàn)亂碼問題
把jdbc連接中的amp;刪除掉,例如:將
jdbc:mysql://10.10.10.37:3306/user_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
修改為:
jdbc:mysql://10.10.10.37:3306/user_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
13.監(jiān)控主從同步之間的延遲?
Atlas不負(fù)責(zé)MySQL的主從同步操作,需要DBA自己管理。
14.java程序連接Atlas發(fā)現(xiàn)不能讀寫分離,所有的請求都發(fā)向主庫,這是為什么?
檢查一下java框架,是不是默認(rèn)將autocommit設(shè)置為0了,很多java框架將語句都封裝在一個事務(wù)中,而Atlas會將事務(wù)請求都發(fā)向主庫。
15.Atlas有sql語句黑名單過濾機(jī)制嗎?
有的,Atlas會屏蔽不帶where條件的delete和update操作,以及sleep函數(shù)。
?????????
???????
???????
總結(jié)
以上是生活随笔為你收集整理的数据切分——Atlas介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle12c 常用视图,oracl
- 下一篇: 想了好久 请多多指教