天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

SQL Azure存儲架構(gòu)設(shè)計

  SQL Azure簡介

  SQL Azure是Azure存儲平臺的邏輯數(shù)據(jù)庫,物理數(shù)據(jù)庫仍然是SQL Server。一個物理的SQL Server被分成多個邏輯分片(partition),每一個分片成為一個SQL Azure實(shí)例,在分布式系統(tǒng)中也經(jīng)常被稱作子表(tablet)。和大多數(shù)分布式存儲系統(tǒng)一樣,SQL Azure的數(shù)據(jù)存儲三個副本,同一個時刻一個副本為Primary,提供讀寫服務(wù),其它副本為Secondary,可以提供最終一致性的讀服務(wù)。每一個SQL Azure實(shí)例的允許的最大數(shù)據(jù)量可以為1GB或者5GB(Web Edition),10GB, 20GB, 30GB, 40GB或者50GB(Business Edition)。由于限制了子表最大數(shù)據(jù)量,Azure存儲平臺內(nèi)部不支持子表分裂。

    Azure整體架構(gòu).png

  如上圖,與大多數(shù)Web系統(tǒng)架構(gòu)類似,Azure存儲平臺大致可以分為四層,從上到下分別為:

  1)Client Layer:將用戶的請求轉(zhuǎn)化為Azure內(nèi)部的TDS格式流;2)Services Layer:相當(dāng)于網(wǎng)關(guān),相當(dāng)于普通Web系統(tǒng)的邏輯層;3)Platform Layer:存儲節(jié)點(diǎn)集群,相當(dāng)于普通Web系統(tǒng)的數(shù)據(jù)庫層;4)Infrastructure Layer:硬件和操作系統(tǒng)。Azure使用的硬件為普通PC機(jī),論文中給出的典型配置為:8核,32GB內(nèi)存,12塊磁盤,大致的價格為3500美金。

  Services Layer

  服務(wù)層相當(dāng)于普通Web系統(tǒng)的邏輯層,包含的功能包括:路由,計費(fèi),權(quán)限驗(yàn)證。另外,SQL Azure的服務(wù)層還監(jiān)控Platform Layer中的存儲節(jié)點(diǎn),完成宕機(jī)檢測和恢復(fù),負(fù)載均衡等總控工作。Services Layer的架構(gòu)如下:

    Azure Service.png

  【sorry,圖片直接copy的,字體比較小,重點(diǎn)理解功能劃分及流程,Utility Layer理解大意即可】

  如上圖,服務(wù)層包含四種類型的組件:

  1、Front-end cluster:完成路由功能并包含防攻擊模塊,相當(dāng)于Web架構(gòu)中的Web服務(wù)器,如Apache或者Nginx;

  2、Utility Layer:請求服務(wù)器合法性驗(yàn)證,計費(fèi)等功能;

  3、Service Platform:監(jiān)控存儲節(jié)點(diǎn)集群的機(jī)器健康狀況,完成宕機(jī)檢測和恢復(fù),負(fù)載均衡等功能;

  4、Master Cluster:配置服務(wù)器,保存每個SQL Azure實(shí)例的副本所在的物理存儲節(jié)點(diǎn)信息。

  其中,Master Cluster一般配置為七臺機(jī)器,采用”Quorum Commit”技術(shù),也就是任何一個Master操作必須同步到四個以上副本才算成功,四個以下Master機(jī)器故障不影響服務(wù);其它類型的機(jī)器都是無狀態(tài)的,且機(jī)器之間同構(gòu)。上圖中,請求的流程說明如下:

  1、客戶端與Front-end機(jī)器建立連接,F(xiàn)ront-end驗(yàn)證是否支持客戶端的操作,如CREATE DATABASE這樣的操作只能通過Azure實(shí)用工具執(zhí)行;

  2、Front-end網(wǎng)關(guān)機(jī)器與客戶端進(jìn)行SSL協(xié)議握手認(rèn)證,如果客戶端拒絕使用SSL協(xié)議則斷開連接。這個過程中還將執(zhí)行防攻擊保護(hù),比如拒絕某個或某一段范圍IP地址頻繁訪問;

  3、Front-end網(wǎng)關(guān)機(jī)器請求Utility Layer進(jìn)行必要的驗(yàn)證,如請求服務(wù)器地址白名單認(rèn)證;

  4、Front-end網(wǎng)關(guān)機(jī)器請求Master獲取用戶請求的數(shù)據(jù)分片所在的物理存儲節(jié)點(diǎn)副本信息;

  5、Front-end網(wǎng)關(guān)機(jī)器請求請求Platform Layer中的物理存儲節(jié)點(diǎn)驗(yàn)證用戶的數(shù)據(jù)庫權(quán)限;

  6、如果以上認(rèn)證均通過,客戶端和Platform Layer中的存儲節(jié)點(diǎn)建立新的連接;

  7~8、后續(xù)所有的客戶端請求都直接發(fā)送到Platform Layer中的物理存儲節(jié)點(diǎn),F(xiàn)ront-end網(wǎng)關(guān)只是轉(zhuǎn)發(fā)請求和回復(fù)數(shù)據(jù),起一個中間代理作用。

  Platform Layer

  平臺層就是存儲節(jié)點(diǎn)集群,運(yùn)行物理的SQL Server服務(wù)器。客戶端的請求通過Front-end網(wǎng)關(guān)節(jié)點(diǎn)轉(zhuǎn)發(fā)到平臺層的數(shù)據(jù)節(jié)點(diǎn),每個SQL Azure實(shí)例是SQL Server的一個數(shù)據(jù)分片,每個數(shù)據(jù)分片在不同的SQL Server數(shù)據(jù)節(jié)點(diǎn)上存儲三個副本,同一時刻只有一個副本為Primary,其它副本為Secondary。數(shù)據(jù)寫入采用”Quorum Commit”策略,至少兩個副本寫成功時才返回客戶端,這樣即使一個數(shù)據(jù)節(jié)點(diǎn)發(fā)生故障也不影響正常服務(wù)。Platform Layer的架構(gòu)如下:

    platform.jpg

【sorry,圖片直接copy,字體太小,請關(guān)注后續(xù)對存儲節(jié)點(diǎn)Agent程序的描述】

  如上圖,每個SQL Server數(shù)據(jù)節(jié)點(diǎn)最多服務(wù)650個數(shù)據(jù)分片,每一個數(shù)據(jù)節(jié)點(diǎn)上的所有數(shù)據(jù)分片的寫操作記錄到一個操作日志文件中,從而提高寫入操作的聚合性能。每個分片的多個副本之間的數(shù)據(jù)同步是通過同步并回放操作日志實(shí)現(xiàn)的,由于每個分片的副本所在的機(jī)器可能不同,因此,每個SQL Server存儲節(jié)點(diǎn)最多需要和650個其它存儲節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步,網(wǎng)絡(luò)聚合不夠,這也是限制單個存儲節(jié)點(diǎn)最多服務(wù)650個分片的原因。

  如上圖,每個物理存儲節(jié)點(diǎn)上都運(yùn)行了一些實(shí)用的deamon程序(稱為fabric),大致介紹如下:

  1、Failure detection:檢測數(shù)據(jù)節(jié)點(diǎn)故障從而觸發(fā)Reconfiguration過程;

  2、Reconfiguration Agent:節(jié)點(diǎn)故障后負(fù)責(zé)在數(shù)據(jù)節(jié)點(diǎn)重新生成Primary或者Secondary數(shù)據(jù)分片;

  3、PM (Partition Manager) Location Resolution:解析Master的地址從而發(fā)送數(shù)據(jù)節(jié)點(diǎn)的消息給Master的Partition Manager處理;

  4、Engine Throttling:限制每個邏輯的SQL Azure實(shí)例占用的資源比例,防止超出容量限制;

  5、Ring Topology:所有的數(shù)據(jù)節(jié)點(diǎn)構(gòu)成一個環(huán),從而每個節(jié)點(diǎn)有兩個鄰居節(jié)點(diǎn)可以檢測節(jié)點(diǎn)是否宕機(jī)。

  分布式相關(guān)問題

  1、數(shù)據(jù)復(fù)制(Replication)

  SQL Azure中采用”Quorum Commit”的策略,普通的數(shù)據(jù)存儲三個副本,至少寫成功兩個副本才可以返回成功;Master存儲七個副本,至少需要寫成功四個副本。每個SQL Server節(jié)點(diǎn)的更新操作寫到一個操作日志文件中并通過網(wǎng)絡(luò)發(fā)送到另外兩個副本,由于不同數(shù)據(jù)分片的副本所在的SQL Server機(jī)器可能不同,一個存儲節(jié)點(diǎn)的操作日志最多需要和650個分片數(shù)量的機(jī)器通信,日志同步的網(wǎng)絡(luò)聚合效果不夠好。Yahoo的PNUTS為了解決這個問題采用了消息中間件進(jìn)行操作日志分發(fā),達(dá)到聚合操作日志的效果。

  2、宕機(jī)檢測和恢復(fù)

  SQL Azure的宕機(jī)檢測論文中講的不夠細(xì),大致的意思是:每個數(shù)據(jù)節(jié)點(diǎn)都被一些對等的數(shù)據(jù)節(jié)點(diǎn)監(jiān)控,發(fā)現(xiàn)宕機(jī)則報告總控節(jié)點(diǎn)進(jìn)行宕機(jī)恢復(fù)過程;同時,如果無法確定數(shù)據(jù)節(jié)點(diǎn)是否宕機(jī),比如待監(jiān)控數(shù)據(jù)節(jié)點(diǎn)假死而停止回復(fù)命令,此時需要由仲裁者節(jié)點(diǎn)進(jìn)行仲裁。判斷機(jī)器是否宕機(jī)需要一些協(xié)議控制,后面的文章會專門介紹。

  如果數(shù)據(jù)節(jié)點(diǎn)發(fā)生了故障,需要啟動宕機(jī)恢復(fù)過程。由于宕機(jī)的數(shù)據(jù)節(jié)點(diǎn)服務(wù)了最多650個邏輯的SQL Azure實(shí)例(子表),這些子表可能是Primary,也可能是Secondary。總控節(jié)點(diǎn)統(tǒng)一調(diào)度,每次選擇一個數(shù)據(jù)分片進(jìn)行Reconfiguration,即子表復(fù)制過程。對于Secondary數(shù)據(jù)分片,只需要通過從Primary拷貝數(shù)據(jù)來增加副本;對于Primary,首先需要從另外兩個副本中選擇一個Secondary作為新的Primary,接著執(zhí)行和Secondary數(shù)據(jù)分片Reconfiguration一樣的過程。另外,這里需要進(jìn)行優(yōu)先級的控制,比如某個數(shù)據(jù)分片只有一個副本,需要優(yōu)先復(fù)制;某個數(shù)據(jù)分片的Primary不可服務(wù),需要優(yōu)先執(zhí)行從剩余的副本中選擇Secondary切換為Primary的過程。當(dāng)然,這里還需要配置一些策略,比如只有兩個副本的狀態(tài)持續(xù)多長時間開始復(fù)制第三個副本,SQL Azure目前配置為兩小時。

  3、負(fù)載均衡

  新的數(shù)據(jù)節(jié)點(diǎn)加入或者發(fā)現(xiàn)某個節(jié)點(diǎn)負(fù)載過高時,總控節(jié)點(diǎn)啟動負(fù)載均衡過程。數(shù)據(jù)節(jié)點(diǎn)負(fù)載影響因素包括:讀寫個數(shù),磁盤/內(nèi)存/CPU/IO使用量等。這里需要注意的是,新機(jī)器加入時需要控制子表遷移的節(jié)奏,否則大量的子表同時遷移到新加入的機(jī)器導(dǎo)致系統(tǒng)整體性能反而變慢。

  SQL Azure由于可以控制每個邏輯SQL Azure實(shí)例,即每個子表的大小,因此,為了簡便起見,可以不實(shí)現(xiàn)子表分裂,很大程度上簡化了系統(tǒng)。

  4、事務(wù)

  SQL Azure支持?jǐn)?shù)據(jù)庫事務(wù),數(shù)據(jù)庫事務(wù)相關(guān)的SQL語句都會記錄BEGIN TRANSACTION,ROLLBACK TRANSACTION和COMMIT TRANSACTION相關(guān)的操作日志。在SQL Azure中,只需要將這些操作日志同步到其它副本即可,由于同一時刻同一個數(shù)據(jù)分片最多有一個Primary提供寫服務(wù),不涉及分布式事務(wù)。SQL Azure系統(tǒng)支持的事務(wù)級別為READ_COMMITTED。

  5、多租戶干擾

  云計算系統(tǒng)中多租用的操作相互干擾,因此需要限制每個SQL Azure邏輯實(shí)例使用的系統(tǒng)資源:

  1)系統(tǒng)操作系統(tǒng)資源限制,比如CPU和內(nèi)存。超過限制時回復(fù)客戶端要求10s后重試;

  2)SQL Azure邏輯數(shù)據(jù)庫容量限制。每個邏輯數(shù)據(jù)庫都預(yù)先設(shè)置了最大的容量,超過限制時拒絕更新請求,但允許刪除操作;

  3)SQL Server物理數(shù)據(jù)庫數(shù)據(jù)大小限制。超過該限制時返回客戶端系統(tǒng)錯誤,此時需要人工介入。

  與SQL Server的差別

  1、不支持的操作:Microsoft Azure作為一個針對企業(yè)級應(yīng)用的平臺,盡管嘗試支持盡量多的SQL特性,仍然有一些特性無法支持。比如USE操作:SQL Server可以通過USE切換數(shù)據(jù)庫,不過在SQL Azure不支持,這時因?yàn)椴煌倪壿嫈?shù)據(jù)庫可能位于不同的物理機(jī)器。具體可以參考SQL Azure vs. SQL Server

  2、觀念轉(zhuǎn)變:對于開發(fā)人員,需要用分布式系統(tǒng)的思維開發(fā)程序,比如一個連接除了成功,失敗還有第三種不確定狀態(tài):云端沒有返回操作結(jié)果,操作是否成功我們無從得知;又如,天下沒有像SQL這么好的免費(fèi)午餐;對于DBA同學(xué),數(shù)據(jù)庫的日常維護(hù),比如升級,數(shù)據(jù)備份等工作都移交給了微軟,可能會有更多的精力關(guān)注業(yè)務(wù)系統(tǒng)架構(gòu)。

  完整的信息可以參考微軟前不久公布的Azure存儲系統(tǒng)架構(gòu)Inside SQL Azure論文

it知識庫SQL Azure存儲架構(gòu)設(shè)計,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 午夜影视不用充钱的免费 | 亚洲国产免费观看视频 | 久久久久久亚洲精品影院 | 92精品国产成人观看免费 | 少妇高潮A片特黄久久精品网 | 广播电台在线收听 | 狠狠色狠狠色综合日日92 | 国产永久免费高清在线观看 | 日本久久道一区二区三区 | 国产精品自拍 | 久久青青热 | 无罩看奶禁18 | 亚洲中文字幕一二三四区苍井空 | 两个女人互添下身高潮自视频 | 国产在线一区二区AV视频 | 久草色在线 | 国产午夜精品一区二区三区 | 女人操男人 | 高h np 强j 乱l 双性 | 精品网站一区二区三区网站 | 嫩草影院永久在线一二三四 | 轻点灬大ji巴太粗太双性高h | 暖暖 免费 高清 日本 在线 | 亚洲欧洲日本天天堂在线观看 | 哇嘎在线精品视频在线观看 | 伊人久久大香线蕉无码麻豆 | 亚洲女人毛片 | 欧美又粗又长又大AAAA片 | 日日碰狠狠躁久久躁综合网 | 欧美成人无码视频午夜福利 | 国产午夜精品一区二区理论影院 | 久久99国产精品一区二区 | 久久国产精品二区99 | 久久精品国产亚洲AV忘忧草蜜臀 | 久久精品国产视频澳门 | 国产精品自在自线亚洲 | 2018国产天天弄谢 | 色mimi| 中文字幕伊人香蕉在线 | YELLOW视频直播在线观看高清 | 国模精品一区二区三区视频 |