螞蟻金服OceanBase是什麼,比傳統的數據庫如mysql、oracle有什麼區別?

田野外的遠方


我一直說任何技術只有真正落地執行才是好技術,阿里巴巴的技術就是這樣,大家看上去好像沒有特別強,但是每一個技術你都能在阿里系找到應用場景。阿里先在自己的核心業務上用,用好了沒問題再給你用,就像阿里雲一樣,阿里系所有核心業務淘寶、天貓、支付寶全在雲上,你還怕什麼呢?大不了要崩一起崩!

OceanBase是全世界最牛的金融支付數據庫,支撐著全世界最大的電商流量洪峰天貓雙十一的整個支付服務,可以說是全世界實戰經驗最豐富,也最為成功的金融支付數據庫。寫這篇文章時,剛好看到OceanBase通過阿里雲向全世界宣佈開源,有支付寶的平臺效應和天貓雙十一的實戰背書,OceanBase有望成為全世界最成功的商業化金融支付數據庫。


OceanBase與其他數據庫的區別以及六大特性

數據庫發展至今天,似乎關係數據庫依然是主流,儘管Google、Amazon、Facebook都在推動非關係數據庫向前發展,關係數據庫依然是全行業使用最多的數據庫。在中國互聯網行業的實踐證明,關係數據庫依然可以應對超海量數據需求,而且能夠很好的完成這樣的需求。

OceanBase跟Oracle和MySQL一樣,都屬於關係數據庫,不過OceanBase是一款基於分佈式架構的關係數據庫,還是一款原生的分佈式數據庫,並不是分庫分表中間件架構的數據庫,是由阿里巴巴和螞蟻金服自主研發、完全不依賴於任何開源項目的數據庫產品。2019年OceanBase得到海外權威機構TPC-C認證,測試結果超過6088萬tpmC,登上行業性能榜首,是Oracle的兩倍。


OceanBase有六個特性,分別是強一致、高可用、高可擴展、高性能、高度兼容、低成本。現在已經搭建起OceanBase數據庫、OceanBase雲平臺、OceanBase開發者中心組成的三位一體技術和應用生態。

你不知道OceanBase,你還不知道雙十一嗎?

2019年天貓雙十一狂歡節96秒破百億,24小時總成交額2684億,支付寶交易峰值54.4萬筆/秒,我相信懂技術的都知道這幾個數字意味著什麼,尤其是支付峰值。天貓雙十一的技術難度,在行業裡面可能僅次於12306和春晚紅包大戰,也就是說天貓雙十一也堪稱是技術聖戰、行業技術巔峰之一。

去年雙十一,阿里巴巴集團和螞蟻金服集團內總共有49個技術團隊參加決戰,雙十一的核心繫統完全實現了向阿里雲的遷移。這其中支付寶技術團隊作為影響交易體驗最重要的一環之一,起到了舉足輕重的作用。


每年到了雙十一,馬老師的天貓就要掏空妹紙的錢包,更要命的是,馬老師還想要掏空妹紙男朋友或者老公的錢包,雙十一的時候你要買東西,就要用到支付寶呀,用到支付寶,就會涉及到支付寶背後的OceanBase,這個數據庫默默地在背後算計怎麼掏空你的錢包,這些都需要很強的技術做支撐,要知道支付寶背後可是有幾億用戶。

舉個例子哈,你雙十一用淘寶天貓買東西吧。天貓先得想辦法給你一堆折扣券,然後再想辦法給你一堆滿減券,平時的天貓積分也可以抵扣一部分現金,很多人想到這裡,可能會想,好像所有的技術難度都在淘寶技術團隊上,這些所有規則最終都會運算好了以後才會提交支付寶。事實上不是這樣的,淘寶分流難度遠遠低於支付寶的分流難度,支付是交易最重要也是最後一個環節,一旦出現錯誤,或者出現退款,就會十分麻煩,影響整個交易的完整性。支付寶還有各種支付產品,你可以選擇多種支付途徑,支付以後光確認支付的方式就有很多種。

回到最後,大家也都知道Google和百度技術很強,他們的很多技術就算是不懂技術的人也會覺得很強,像百度和Google的無人駕駛技術,確實很厲害,可是阿里的技術就是給大家一種放心的感覺,第一是阿里自己有應用場景、人家做人工智能先在淘寶“拍立淘”先用起來,第二是他們自己先用,用好了再給大傢伙用,誰都會很安心。


EmacserVimer


“小強show科技”,不一樣的感知,展示科技帶來的魅力生活。感謝您的閱讀!

前言

OceanBase是阿里巴巴和螞蟻金服完全自主研發的通用的分佈式關係型數據庫,定位為商用企業級數據庫。金融級別的可靠性,目前主要用於金融行業和其他行業。

OceanBase目前主要有1.x和2.x兩個版本序列。1.x版本兼容MySQL常用語法,2.x版本以兼容Oracle常用語法為目標。OceanBae支持多租戶,即在一個OceanBase集群裡會劃分出多個租戶(即實例),而租戶的類型是兼容MySQL或者Oracle。業務方使用的只是租戶(實例),是集群能力的一個子集。在使用體驗上會感覺租戶像MySQL或Oracle,但又不完全一樣。OceanBase並不是在重造一個MySQL或Oracle,而只是在功能接口上兼容它們,在底層架構上,不管哪種租戶都有分佈式能力。

OceanBase是什麼?

Oracle軟件是多進程程序,啟動後會開闢一塊共享內存。Oracle部署形態有單實例、集群RAC、主備Dataguard。MySQL軟件是單進程,進程名叫mysqld,有的還會有守護進程mysql_safe。MySQL的部署形態有單實例、主從單向同步或主主雙向同步和MySQL Cluster(用的比較少)。

OceanBase的軟件是單進程,名字叫OBServer。OceanBase是分佈式數據庫,集群部署,通常每個機器(後面統一稱為節點)上會啟動一個OBServer進程,各個節點的OBServer進程組成一個集群運行。雖然應用可以直接訪問任意一個節點的實例,但不推薦。

通常是在OceanBase集群前面啟動一個或多個反向代理OBProxy。OBProxy只負責數據路由和傳輸,不涉及到數據運算(如連接、統計、合併或排序等)。OBProxy的作用類似Oracle的監聽程序,不同的是數據返回的時候也是從OBProxy回去。這個以後再專門詳細介紹。對於業務而言,OBProxy就是數據庫的代表,可用性也很重要。所以一般會部署多個OBProxy掛載負載均衡設備或軟件下面以VIP形式對外提供服務。

OceanBase的開發

鎖、事務和超時機制

OceanBase的租戶兼容MySQL或Oracle,常用的數據類型和語法都還支持。這點使用沒什麼問題。需要注意的是在鎖和事務方面。

OceanBase的鎖是行鎖,也有表鎖,但是沒有鎖升級策略。OceanBase的事務都有版本號,類似於Oracle的SCN,讀默認是快照讀,不阻塞寫。OceanBase的事務隔離級別目前只支持讀已提交(RC)。如果要規避不可重複讀問題,則需要在讀上加鎖(支持SELECT ... FOR UPDATE)。

在租戶內,如果事務修改的分區跨越節點了,就是分佈式事務,OceanBase目前也是支持的,原理是兩階段提交,強一致。業務感知不到也不需要知道這個是分佈式事務。如果業務事務跨越了租戶邊界,則這種分佈式事務需要藉助於分佈式事務中間件產品解決。

OceanBase針對慢SQL有個超時機制,以防止慢SQL佔用數據庫資源,默認時間是10秒。慢SQL不僅包括查詢慢的SQL,還包括SQL自身性能沒問題但是被阻塞的DML SQL。在MySQL裡對於鎖等待也有超時機制,對於慢SQL也有強制中斷機制(默認沒有啟用)。

OceanBase對於長事務(長時間不提交)採取的是強制超時機制,默認時間是100秒。由於OceanBase沒有UNDO,並且事務未提交之前,Redo都在內存裡,所以大事務會佔用一定內存資源。

這兩個超時參數都可以調整。調整為很大時效果就等同於不干預,跟Oracle/MySQL就一致了。我們並不建議簡單調大。慢SQL和長事務是業務設計問題,需要業務層面儘可能的解決。

SQL調優

OceanBase的SQL執行設計參照了Oracle的設計,有硬解析、軟解析,有執行計劃緩存。執行計劃目前也很豐富,連接算法有嵌套循環、哈希、歸併連接、半連接(semi-join)、anti-jon。支持左連接或右連接,子查詢等,支持SQL改寫等等。這塊以後再詳細總結。

查看執行計劃的命令是explain,這點跟MySQL保持一致(簡潔)。

OceanBase提供一序列內部視圖(gv$視圖或v$視圖)用於診斷性能。這點跟Oracle的性能視圖比較類似。

同時OceanBase還有一個視圖gv$sql_audit擁有集群執行過的全部SQL,無論SQL是否成功還是失敗。從中可以查看SQL的執行時間、節點、執行計劃類型、報錯代碼、執行時間、等待時間、讀取塊數、返回行數、影響行數等等。

更值得一提的是OceanBase也實現了Oracle的Outline功能,能在線干預執行計劃。如調整連接算法、順序或者索引等。對於那些不可調整的慢SQL,為了消除它的影響,Outline支持對該慢SQL做限流處理。如強制串行執行等。


分享到:


相關文章: