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