微軟SQL Azure 服務(wù)器端架構(gòu)解析
SQL Azure 的訂閱模型決定了各個(gè)訂閱之間的數(shù)據(jù)是隔離的。實(shí)際上,SQL Azure 平臺(tái)將用戶的數(shù)據(jù)保存在多個(gè)SQL Azure 物理服務(wù)器上,并且使用SQL Server 的復(fù)制功能(Replicas)實(shí)現(xiàn)了高可用性的要求。
如圖6-2 所示,在SQL Azure 平臺(tái),當(dāng)用戶創(chuàng)建了一個(gè)數(shù)據(jù)庫之后,SQL Azure 通過復(fù)制功能創(chuàng)建三個(gè)數(shù)據(jù)庫副本。這三個(gè)副本中有一個(gè)作為主數(shù)據(jù)庫,所有的數(shù)據(jù)請(qǐng)求都會(huì)首先應(yīng)用在這個(gè)主數(shù)據(jù)庫上,并且同步到另外兩個(gè)副本數(shù)據(jù)庫中。
主數(shù)據(jù)庫發(fā)生故障的時(shí)候,SQL Azure 會(huì)從另外兩個(gè)副本中選擇一個(gè)出來作為主數(shù)據(jù)庫,同時(shí)再創(chuàng)建一個(gè)新的副本以保證任何時(shí)候都有三個(gè)副本同時(shí)存在,如圖6-3 所示。通過基于三個(gè)副本的復(fù)制功能,SQL Azure 保證了99.9%的高可用性。
圖6-2 SQL Azure 創(chuàng)建的三個(gè)數(shù)據(jù)庫副本
圖6-3 SQL Azure 在主數(shù)據(jù)庫故障時(shí)創(chuàng)建新的副本
SQL Azure 在服務(wù)器端的架構(gòu)如圖6-4 所示。首先從Internet 上發(fā)送過來的數(shù)據(jù)庫請(qǐng)求會(huì)通過一個(gè)基于TDS(Tabular Data Stream)協(xié)議的負(fù)載均衡服務(wù)器處理。這個(gè)負(fù)載均衡使用黏滯性算法保證同一個(gè)鏈接的所有請(qǐng)求會(huì)被路由到同一臺(tái)物理服務(wù)器。同時(shí)由于其基于TDS 協(xié)議,保證了只要客戶端也使用了TDS 協(xié)議,那么這些請(qǐng)求都是可被接受的,比如ADO.NET、ODBC等,從而保證了SQL Azure 對(duì)于開發(fā)人員的使用一致性。
數(shù)據(jù)庫訪問請(qǐng)求通過負(fù)載均衡服務(wù)器轉(zhuǎn)發(fā)到Gateway 服務(wù)器上。Gateway 服務(wù)器在這里充當(dāng)一個(gè)代理和轉(zhuǎn)發(fā)的角色。首先它完成對(duì)請(qǐng)求的認(rèn)證和授權(quán)操作,保證只有合法的請(qǐng)求才能進(jìn)入下一級(jí)操作。同時(shí)它還對(duì)請(qǐng)求進(jìn)行防火墻驗(yàn)證,保證請(qǐng)求者的IP 必須是SQL Azure 防火墻中設(shè)置允許訪問的。最后,Gateway 還有一個(gè)內(nèi)部的訪問計(jì)數(shù)器用來防止DoS(Denial of Service)攻擊。如圖6-4 所示,Gateway 部分由多臺(tái)服務(wù)器組成,在進(jìn)行操作之后,它會(huì)基于連接字符串將TDS請(qǐng)求轉(zhuǎn)發(fā)給對(duì)應(yīng)的SQL Azure 物理服務(wù)器,也就是用戶數(shù)據(jù)庫真正保存的服務(wù)器中。
而對(duì)于為數(shù)眾多的數(shù)據(jù)庫服務(wù)器,SQL Azure 提供了底層控制模塊負(fù)責(zé)創(chuàng)建、遷移、配置、故障恢復(fù)和負(fù)載均衡等功能。