九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
大型電子商務(wù)網(wǎng)站架構(gòu)之--分布式可擴展數(shù)據(jù)庫架構(gòu)

近幾年分布式成為熱門的話題,也成為大型系統(tǒng)必備良藥,而在數(shù)據(jù)庫方面應(yīng)用更加廣泛。通過采用普通廉價的設(shè)備構(gòu)建出高可用性和高擴展的集群目的。從而擺脫了大型設(shè)備的依賴,一個好的分布式數(shù)據(jù)庫架構(gòu)可以比較方便達到高可用性有可以達到向外擴展的能力。傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)一般是通過高端設(shè)備,例如小型機或者高端存儲來保證數(shù)據(jù)庫完整性,或者通過增加內(nèi)存cpu來提高數(shù)據(jù)庫處理能力。這種集中式的的的數(shù)據(jù)庫架構(gòu)越來越不適合海里數(shù)據(jù)庫處理,而且也得付出高額的費用。分布式的架構(gòu)也就成了商家探索的技術(shù)。

 

數(shù)據(jù)庫集群


 

oracle集群

Oracle RAC是業(yè)界最流行的產(chǎn)品。其架構(gòu)的最大特點是共享存儲架構(gòu)(Shared-disk),整個RAC集群是建立在一個共享的存儲設(shè)備之上的,節(jié)點之間采用 高速網(wǎng)絡(luò)互連。在 Oracle RAC 環(huán)境中,每個 Oracle 數(shù)據(jù)塊都被賦予一個(且只有一個)“主”O(jiān)racle RAC 節(jié)點。該 Oracle RAC 節(jié)點的全局緩存服務(wù) (GCS) 負責(zé)管理對這些數(shù)據(jù)塊集的訪問。當其中一個 Oracle 節(jié)點需要訪問某個 Oracle 數(shù)據(jù)塊時,它必須首先與該數(shù)據(jù)塊協(xié)商。然后,該主節(jié)點的 GCS 或者指示請求的 Oracle 節(jié)點從磁盤中獲取該數(shù)據(jù)塊,或者指示該Oracle 數(shù)據(jù)塊的當前持有者將被請求的數(shù)據(jù)塊發(fā)送到請求節(jié)點。Oracle 嘗試跨所有 RAC 節(jié)點統(tǒng)一分發(fā)該數(shù)據(jù)塊的所有權(quán)。在 Oracle RAC 環(huán)境中,數(shù)據(jù)塊大致相等的所有節(jié)點都將被指定為主節(jié)點。(如果 Oracle RAC 節(jié)點數(shù)是 Oracle 數(shù)據(jù)塊數(shù)的約數(shù),則所有 RAC 節(jié)點都是具有同樣數(shù)量的數(shù)據(jù)塊的主節(jié)點。)



 

mysql集群

MySQL clusterOracle RAC完全不同,它采用Shared-nothing架構(gòu)。整個集群由管理節(jié)點(ndb_mgmd),處理節(jié)點(mysqld)和存儲節(jié)點(ndbd)組 成,不存在一個共享的存儲設(shè)備。MySQL cluster主要利用了NDB存儲引擎來實現(xiàn),NDB存儲引擎是一個內(nèi)存式存儲引擎,要求數(shù)據(jù)必須全部加載到內(nèi)存之中。數(shù)據(jù)被自動分布在集群中的不同存 儲節(jié)點上,每個存儲節(jié)點只保存完整數(shù)據(jù)的一個分片(fragment)。同時,用戶可以設(shè)置同一份數(shù)據(jù)保存在多個不同的存儲節(jié)點上,以保證單點故障不會造成數(shù)據(jù)丟失。

MySQL cluster的優(yōu)點在于其是一個分布式的數(shù)據(jù)庫集群,處理節(jié)點和存儲節(jié)點都可以線性增加,整個集群沒有單點故障,可用性和擴展性都可以做到很高,更適合 OLTP應(yīng)用。但是它的問題在于:1.NDB存儲引擎必須要求數(shù)據(jù)全部加載到內(nèi)存之中,限制比較大,但是目前NDB新版本對此做了改進,允許只在內(nèi)存中加 載索引數(shù)據(jù),數(shù)據(jù)可以保存在磁盤上。2.目前的MySQL cluster的性能還不理想,因為數(shù)據(jù)是按照主鍵hash分布到不同的存儲節(jié)點上,如果應(yīng)用不是通過主鍵去獲取數(shù)據(jù)的話,必須在所有的存儲節(jié)點上掃描, 返回結(jié)果到處理節(jié)點上去處理。而且,寫操作需要同時寫多份數(shù)據(jù)到不同的存儲節(jié)點上,對節(jié)點間的網(wǎng)絡(luò)要求很高。

 

分布式數(shù)據(jù)庫拆分


 

數(shù)據(jù)庫分片

Sharding 不是一個某個特定數(shù)據(jù)庫軟件附屬的功能,而是在具體技術(shù)細節(jié)之上的抽象處理,是水平擴展(Scale Out,亦或橫向擴展、向外擴展)的解決方案,其主要目的是為突破單節(jié)點數(shù)據(jù)庫服務(wù)器的 I/O 能力限制,解決數(shù)據(jù)庫擴展性問題。

  • 把熱度高的數(shù)據(jù)劃分開來,使用配置剛好的硬件,提高訪問速度,增強用戶體驗
  •  把不同的用戶的數(shù)據(jù)根據(jù)用戶的id放到不同的數(shù)據(jù)庫中,不同用戶對應(yīng)的交易數(shù)據(jù)也跟著到不同的數(shù)據(jù)庫;之后可以把交易完成和正在交易的數(shù)據(jù)庫分開。
  • 一個全國經(jīng)濟信息系統(tǒng),可以按照不同地區(qū)把不同數(shù)據(jù)放到不同數(shù)據(jù)庫中,隨著時間增加數(shù)據(jù)也會越來越大,到時還可以工具年份在重新劃分數(shù)據(jù)庫。
  • 一個大中型的電子商的電子商務(wù)網(wǎng)站一定會遇到數(shù)據(jù)量巨大的問題,可以根據(jù)用戶對象或者使用和被使用的數(shù)據(jù)進行分片。這樣避免了在一個庫中數(shù)據(jù)膨脹而帶來的瓶頸。
  • 在數(shù)據(jù)庫分片時最好分到不同的服務(wù)器中,或者不同的存儲中,避免磁盤競爭 

數(shù)據(jù)庫分片存在比較大問題就是人查詢或者統(tǒng)計涉及到跨庫就比較麻煩。特別是join時如果涉及到多個節(jié)點,將非常困難,應(yīng)該盡量避免。



 

數(shù)據(jù)庫水平分片

 

讀寫分離

讀寫分離架構(gòu)利用了數(shù)據(jù)庫的復(fù)制技術(shù),將讀和寫分布在不同的處理節(jié)點上,從而達到提高可用性和擴展性的目的。

讀寫分離簡單的說是把對數(shù)據(jù)庫讀和寫的操作分開對應(yīng)不同的數(shù)據(jù)庫服務(wù)器,這樣能有效地減輕數(shù)據(jù)庫壓力,也能減輕io壓力。主數(shù)據(jù)庫提供寫操作,從數(shù)據(jù)庫提供讀操作,其實在很多系統(tǒng)中,主要是讀的操作。當主數(shù)據(jù)庫進行寫操作時,數(shù)據(jù)要同步到從的數(shù)據(jù)庫,這樣才能有效保證數(shù)據(jù)庫完整性。Quest SharePlex就是比較牛的同步數(shù)據(jù)工具,聽說比oracle本身的流復(fù)制還好,mysql也有自己的同步數(shù)據(jù)技術(shù)。mysql只要是通過二進制日志來復(fù)制數(shù)據(jù)。通過日志在從數(shù)據(jù)庫重復(fù)主數(shù)據(jù)庫的操作達到復(fù)制數(shù)據(jù)目的。這個復(fù)制比較好的就是通過異步方法,把數(shù)據(jù)同步到從數(shù)據(jù)庫。

主數(shù)據(jù)庫同步到從數(shù)據(jù)庫后,從數(shù)據(jù)庫一般由多臺數(shù)據(jù)庫組成這樣才能達到減輕壓力的目的。讀的操作怎么樣分配到從數(shù)據(jù)庫上?應(yīng)該根據(jù)服務(wù)器的壓力把讀的操作分配到服務(wù)器,而不是簡單的隨機分配。mysql提供了MySQL-Proxy實現(xiàn)讀寫分離操作。不過MySQL-Proxy好像很久不更新了。oracle可以通過F5有效分配讀從數(shù)據(jù)庫的壓力。
  上面說的數(shù)據(jù)庫同步復(fù)制,都是在從同一種數(shù)據(jù)庫中,如果我要把oracle的數(shù)據(jù)同步到mysql中,其實要實現(xiàn)這種方案的理由很簡單,mysql免費,oracle太貴。好像Quest SharePlex也實現(xiàn)不了改功能吧。好像現(xiàn)在市面還沒有這個工具吧。那樣應(yīng)該怎么實現(xiàn)數(shù)據(jù)同步?其實我們可以考慮自己開發(fā)一套同步數(shù)據(jù)組件,通過消息,實現(xiàn)異步復(fù)制數(shù)據(jù)。其實這個實現(xiàn)起來要考慮很多方面問題,高并發(fā)的問題,失敗記錄等。其實這種方法也可以同步數(shù)據(jù)到memcache中。聽說oracleStream也能實現(xiàn),不過沒有試過。

 



 

上圖是ebay讀寫分離的結(jié)構(gòu)圖,通過Share Plex 近乎實時的復(fù)制數(shù)據(jù)到其他數(shù)據(jù)庫節(jié)點,再通過F5特定的模塊檢查數(shù)據(jù)庫狀態(tài),并進行負載均衡,IO 成功的做到了分布,讀寫分離,而且極大的提高了可用性。目前讀寫分離技術(shù)比較多,比較有名的為amoeba,有興趣的同學(xué)可以研究下。

 

數(shù)據(jù)庫緩存

讀寫分離現(xiàn)在應(yīng)用非常廣泛,特別是時國內(nèi)外大型網(wǎng)站,都使用的非常多,很多都是自己研發(fā)緩存系統(tǒng),淘寶還開源了Tair系統(tǒng),有興趣的可以研究下。比較有名的是memcached使用memcached最好的可能算facebook了。通過memcached分擔讀的操作,把常用的對象數(shù)據(jù)存儲到memcached中,當有讀操作過來時先訪問memcached如果memcached沒有該數(shù)據(jù)再從數(shù)據(jù)庫獲取,同時把數(shù)據(jù)放到memcached中,下次訪問就可以直接訪問memcached了。



 

有一次在和一個朋友聊天時他們正在著手在線文檔系統(tǒng)架構(gòu)設(shè)計,由于文檔訪問壓力非常大,每次請求數(shù)據(jù)庫也非常大,由于大量的的文檔數(shù)據(jù)在服務(wù)端和客戶端傳輸,會經(jīng)常造成網(wǎng)絡(luò)堵塞。我建議他可以把文檔分片,減少一次性大文件傳輸。再根據(jù)文檔熱度把一些文檔保持到緩存中。其實文檔也好,數(shù)據(jù)庫也好,很多方法只要根據(jù)業(yè)務(wù)要求也可以達到異曲同工的之效。

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MYSQL常用集群方案
【轉(zhuǎn)】基于內(nèi)存數(shù)據(jù)庫的分布式數(shù)據(jù)庫架構(gòu)
什么是集群,集群的概念介紹
撐起微信支付每天數(shù)億筆交易,開源TBase的核心架構(gòu)演進
系統(tǒng)架構(gòu)-基礎(chǔ)篇-(高性能基礎(chǔ)建設(shè)說明與選型條件)
MySQL集群服務(wù)白皮書
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服