SQL Azure架構分析概述

    SQL Azure (之前被稱爲 SQL Server Data Services) 是由微軟SQL Server 2008爲主,建構在Windows    Azure雲操作系統之上,運行雲計算 (Cloud Computing)的關係數據庫服務,是一種雲存儲(Cloud Storage)的實現,提供網絡型的應用程序數據存儲的服務。

 
圖1 SQL Azure Logo
一、基礎架構
       SQL Azure的基底是SQL Server 2008,不過它是一個特殊設計的SQL Server 2008,並且以Windows Azure爲基座平臺,配合Windows Azure的特性,SQL Azure也是一種分散在許多物理基礎架構(Physical Infrastucture)與其內部許多虛擬服務器(Virtual Servers)的一種雲存儲服務,外部應用程序或服務可以不用在乎數據庫實際存儲在哪裏,就可以利用SQL Azure顯露的SQL Server Fabric殼層服務以接受外部連接,並且在內部使用連接繞送(connection routing)的方式,讓連接可以對應到正確的服務器,而且數據庫是在雲中由多個服務器來提供服務,每一次連接所提供服務的服務器可能會不同,因此也可以保證雲存儲的高度可用性(High availability)。
SQL Azure於架構上分成四個層次,如下圖2所示:
圖2 SQL Azure架構
1.客戶端層(Client Layer):
       SQL Azure顯露表格化數據流(Tabular Data Stream)的協議,供外界連接至SQL Azure服務器服務,外部應用程序可以使用像ADO.NET、ODBC或是專供給PHP的驅動程序產生TDS,並通過SSL (TDS over SSL)傳送至SQL Azure,而對於輕量級或是Web 2.0級的應用程序(如AJAX、Silverlight),則可以先在Windows Azure中架設一個Service之後,利用該Service來訪問SQL Azure,或是利用ADO.NET Data Services的方式,向外提供REST API以訪問SQL Azure。
2.服務層(Service Layer,圖標中的Data Provisioning Layer):
        服務層是提供客戶端應用程序與平臺服務層之間的一個閘道(gateway),並且提供了數據發佈(provisioning)、計費與計量(billing and metering)以及連接繞送(connection routing)。在此層中會使用指定的Azure服務平臺帳戶來計算訪問的流量等參數以作爲計費標準,同時將命令繞送至實際存在數據的服務器位置運行服務。
3.平臺層(Platform Layer,圖標中的Data Service Layer):
         平臺層是實際提供數據服務的一羣物理服務器以及虛擬服務器羣,這些服務器羣擁有許多的SQL Server運行個體,並且由SQL Azure fabric中控管理。SQL Azure fabric是一個可集成網絡服務器以及存儲體的分佈式運算系統(distributed computing system),它提供了在許多物理服務器主機間的自動化備援(failover)、負載平衡(load balancing)以及數據庫複製等重要功能。
管理服務(management service)提供了服務器的健康監控、軟件更新(software upgrade)與修補(patch)的自動安裝等等。
4.基礎架構層(Infrastructure Layer):
       基礎架構層提供了支持服務層所需的IT基礎架構、物理服務器與操作系統,以及管理營運等的支持。
二、數據庫支持與顯露接口
        SQL Azure基於Windows Azure提供的帳戶服務支持,因此在Azure服務平臺上建立的帳戶均可以使用在SQL Azure上用,同時SQL Azure也是利用Azure服務平臺的帳戶識別,當帳戶在Windows Azure上建立並申請使用SQL Azure時(利用SQL Azure門戶網站),SQL Azure會利用這個帳戶的信息產生一個專供該帳戶使用的SQL Azure Server,如果在本機或服務器上的SQL Server安裝一樣,SQL Azure Server本身是一個獨立的數據庫服務器環境,擁有自己的master數據庫以及自己的數據庫安全環境(包含用戶與登錄信息)。
每個SQL Azure Server都有一個自己的DNS名稱,例如:mysqlazureserver.ctp.database.windows.net。
       在SQL Azure Server中,用戶可以在這個空間中建立自己的數據庫(利用CREATE DATABASE指令),一個SQL Azure Server可以包含很多的用戶數據庫,數據庫中可以包含表格以及其他數據庫對象。
      SQL Azure支持了大多數的數據型別,也支持了 XML 數據類型,不過有部份數據型別(像是BLOB型別以及地理數據型別)沒有在支持清單中。同時 SQL Azure 也使用了Transact-SQL作爲內核查詢語言。目前 SQL Azure 已支持ODBC、ADO.NET以及PHP的訪問方式,利用TDS over SSL (Tabular Data Stream over SSL)的方式直接連接到SQL Azure。
三、Transact-SQL的支持
       作爲SQL Server版本Transact-SQL的子集,不是所有的功能在SQL Azure上都有被支持,由於物理服務器架構以及安全性的問題,許多分佈式的查詢法以及常用的數據庫複製法都沒有辦法被SQL Azure支持,而在SQL Server 2005開始加入的SQL CLR能力也無法在SQL Azure上支持(因爲它必須要掛載在SQL Azure物理服務器上,但客戶端通常無法知道當下連到的服務器是否爲有安裝SQL CLR組件的那一臺)。
受支持的Transact-SQL特性:
  •          常數
  •         數據限制
  •          數據光標
  •         數據庫索引管理與索引重建
  •          本地數據庫暫存表格
  •          保留字
  •          預存程序
  •          數據庫統計管理
  •          數據庫交易
  •          觸發程序
  •          數據庫表、數據表聯結以及表格變量
  •          Transact-SQL語言元素,像是對數據庫、表格、用戶與登錄等的建立、修改與刪除
  •          用戶定義函數
  •          查看錶
未受支持的Transact-SQL特性:
  •          SQL CLR
  •          數據庫文件配置
  •          數據庫映射
  •          分佈式查詢
  •          分佈式交易
  •          文件組羣管理
  •          全局暫存表格
  •          稀疏數據與索引
  •          SQL Server組態選項
  •          SQL Server Service Broker
  •          系統表格
  •          追蹤旗標。
四、安全性
SQL Azure Server會有兩種安全組羣:
  1. 服務器角色:有 dbmanager 以及 loginmanager 兩種。
    ►dbmanager:賦與用戶可以建立數據庫(即CREATE DATABASE指令)的權利
    ►loginmanager:賦與用戶可以建立登錄帳戶(即CREATE LOGIN指令)的權利
  2. 數據庫角色:與安裝在本機或服務器上版本的SQL Server相同
          SQL Azure Server目前只支持使用SQL驗證(SQL Authentication)的安全驗證方式,以往的Windows驗證在SQL Azure上不支持。而在SQL Azure Server建立時,除了master數據庫以外,還會再多建立一個具有SQL Server的sa帳戶相等權力的帳戶,供用戶操作SQL Azure Server用,此帳戶稱爲服務器級主帳戶(server-level principal)。
         然而,SQL Azure Server的帳戶與安全控制會有下列限制:
  •          只有服務器級主帳戶才具有變更密碼的能力, loginmanager 組羣的成員帳戶不具變更密碼的權限,同時如果要訪問master數據庫,則該用戶帳戶必須要被對應到master數據庫,同時服務器級主帳戶是不可以變更或刪除的,同時只要是被設爲服務器級主帳戶的用戶,就算沒有給予 dbmanager 或 loginmanager ,仍然可以建立數據庫並管理用戶
  •          只要是登錄服務器,一律以master爲默認數據庫,US-English爲默認的登錄語系
  •          若要運行CREATE/ALTER/DROP LOGIN或CREATE/DROP DATABASE,必須要先連至master數據庫
  •          當要在ADO.NET運行前述指令時,不可以使用參數化命令,而且前述命令於每個SQL批次也只能有一個(且是唯一的一個)
  •          當要運行CREATE USER配合FOR/FROM LOGIN選項時,它也必須是SQL批次中唯一的一個
  •          當要運行ALTER USER配合WITH LOGIN選項時,它也必須是SQL批次中唯一的一個
  •          只有服務器級主帳戶以及被賦與 dbmanager 角色的成員纔有運行CREATE DATABASE與DROP DATABASE的權力
  •          只有服務器級主帳戶以及被賦與 loginmanager 角色的成員纔有運行CREATE LOGIN、ALTER LOGIN與DROP DATABASE的權力
  •          若想訪問master數據庫,則該帳戶必須要對應到master數據庫。
 
作者: 付海軍
出處:http://space.e800.com.cn/fuhj02
版權:本文版權歸作者和億八佰共有
轉載:歡迎轉載,爲了保存作者的創作熱情,請按要求【轉載】,謝謝
要求:未經作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責任
個人網站: http://txj.shell.tor.hu
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章