SQL Server - Microsoft

Download Report

Transcript SQL Server - Microsoft

T1-308
マイクロソフト株式会社
アプリケーションプラットホーム製品部
太田佳伸
概要
SQL Services とは
SQL Data Services (SDS)
機能
フロントエンド
データモデル、クエリ、データアクセス
バックエンド
サブシステム、コンポーネント
アーキテクチャ
可用性
スケーラビリティ
まとめ
今後、適用シナリオ、関連テクノロジ
Windows Azure のデータベースサービス
SQL Services の将来像
Reporting
Data Mining
Reference Data
ETL
SQL Server の持つ機能をベースにクラウド向けに開発
し、広範なデータプラットフォームサービスとして提供
SQL Data Services
試用可能なデータベースサービス
必要な要件
ミッションクリティカルサービスとしての
非機能要件
スケーラブル、スケールフリー
高い可用性
リモートレプリケーション
要求に応じたオンデマンドサービス
容易な操作性、管理性
マルチテナンシー、プライバシーの確保
適切な価格
信頼性
必要な要件
ストレージ
•
•
•
•
BLOB
柔軟性
構造化と非構造化データ
アーカイブ
•
•
•
•
プロセッシング
デリバリー
フィルタリング
集約
ユーザ定義ロジック
オンライン-オフラインイン
デックス
• ネットワーク上の距離を認
識
• スタティックコンテンツ、ラ
イブコンテンツそれぞれに
適切な扱い。
• 例:近接ノードにコピーを
配置
実績のある SQL Server テクノロジをベースにしたデータスト
レージ
SDS バックエンドは SQL Server の大規模な疎結合クラスターに
より構成
分散Fabric による大規模で自律的なプラットフォーム
バックエンドノード間は分散ファブリックで接続
スケーラビリティと可用性
レプリカノードの形成
データはすべて複数の分散レプリカを持つ
障害時のリカバリ
障害検知とリーダー選出
Web フレンドリなプロトコルによるアクセス
柔軟な ACE データモデル
クライアントを選ばない REST、SOAP によるアクセス
汎用的な LINQ を使用したクエリ
データベースユーティリティサービス
アプリケーション
アジリティ
単純で柔軟なデータ
モデル
REST と SOAP プロ
トコル
SDK
即時性
スケーラビリティ制
限の緩和
ビジネスレベルの
SLA
ストレージ容量と処
理能力の制限を撤
廃
実績ある Microsoft
SQL Server をベース
に構築
使用状況の急激な
増加への対応
可用性、信頼性、堅牢
性を高度に維持
従量制による柔軟な
ビジネスモデル
バックアップ、ディザス
タリカバリ機能
Windows Azure
Storage Service
• クラウドサービスにお
けるストレージサービ
ス
• ストレージと検索機能
のコアとなるセットを
提供する
• クラウドにおけるファ
イルストレージ
SQL Data Services
ADO.NET Data
Services
• クラウドにおけるデー
タベースサービス
• SQL Server の機能を
クラウドのスケールに
• 構造化、非構造化
データの処理エンジン
• SQL Server 2008 を
はじめとするデータ
ソースをサービス化
• クラウドへの展開もオ
ンプレミスでのデータ
サービスも可能
SQL Data Services Front End
REST /
SOAP
REST /
SOAP
REST /
SOAP
REST /
SOAP
REST /
SOAP
REST /
SOAP
REST /
SOAP
SDS
Runtime
SDS
Runtime
SDS
Runtime
SDS
Runtime
SDS
Runtime
SDS
Runtime
SDS
Runtime
Data
Access
Libraly
Data
Access
Lib
Data
Access
Lib
Data
Access
Lib
Data
Access
Lib
Data
Access
Lib
Data
Access
Lib
SQL Server
SQL Server
SQL Server
SQL Server
SQL Server
SQL Server
SQL Server
Distributed
Fabric
Distributed
Fabric
Distributed
Fabric
Distributed
Fabric
Distributed
Fabric
Distributed
Fabric
Distributed
Fabric
Mgmt.
Services
Mgmt.
Services
Mgmt.
Services
Mgmt.
Services
Mgmt.
Services
Mgmt.
Services
Mgmt.
Services
フロントエンドの機能
ACE データモデル
LINQ によるデータ検索
REST、SOAP アクセス
バックエンドアーキテクチャ
サブシステムとコンポーネント
可用性
分散 Fabric と障害検知、ノード選出
レプリケーション
再構成エージェント(Reconfigure Agent)
スケーラビリティ
パーティションマネージャ
Service
https://data.database.windows.net/v1/
Authority
https://authority.data.database.windows.net/v1/
Container
https://authority.data.database.windows.net/v1/container
Entity
https://authority.data.database.windows.net/v1/container/entity
データベースサーバ
従来のDBとの
対比
データベース & テーブル
タプル
Authority
Container
Entity
• コンテナの集合
• 名前空間に対応
• DNS 名を所有(DNS のオーソリティに対応
• フレキシブルエンティティの集まり
• サーチやオペレーションの対象としては最も広範囲な
集まり
• 名前と値の対からなるプロパティバッグ
• スキーマを使わない
• ストレージ内での最小単位(更新削除の単位)
フレキシブル エンティティ モデル
名前と値の対からなるプロパティの集合
メタデータプロパティとフレックスプロパティ
スキーマを使わない
ストレージ内でのCRUDの最小単位
メタデータ プロパティ
ID – コンテナ内でユニーク、エンティティ毎にクライアントが指定
Kind – エンティティタイプ、アプリケーションやユーザのタイプ
Version – 操作毎にタイムスタンプを更新、サーバが管理
フレックス プロパティ
メタデータプロパティ以外のすべてのユーザ定義プロパティ
既存インスタンス型に対する変更、追加が可能
単純スカラー型と BLOB をサポート
decimal, string, bool, datetime, binary
すべてのプロパティにインデックスが付けられている
同一コンテナ内であっても異なるプロパティや型を使
用可能
プロパティ
名前
型
値
メタデータ
ID
EntityId
VWGOLF-01
Kind
EntityKind
Car
Description
String
Reliable, one owner, …
Price
Decimal
12000.00
ListingDate
Datetime
01-01-2008
LocationZip
String
98052
プロパティ
名前
型
値
メタデータ
ID
EntityId
MINICOOPER-264
Kind
EntityKind
FunCar
Description
String
Reliable, one owner, …
Price
Decimal
12000.00
ListingDate
String
1st January, 2008
LocationZip
String
98052
EngineSize
Decimal
1600
フレックス
プロパティ
フレックス
プロパティ
Kind の違い
=エンティティタイ
プの違い
異なる型を使用可能
異なるプロパティを
使用可能
<s:EntitySet xmlns:s="http://schemas.microsoft.com/sitka/2008/03/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:x="http://www.w3.org/2001/XMLSchema">
<FunCar>
<s:Id>MINICOOPER-264</s:Id>
<s:Version>530715</s:Version>
<Description xsi:type=“x:string”>Reliable,one owner,...</Description>
<Price xsi:type="x:decimal">12000.00</Price>
<ListingDate xsi:type="x:string">30th December, 2008</ListingDate>
<LocationZip xsi:type="x:string">98052</LocationZip>
<EngineSize xsi:type="x:decimal">1600</EngineSize>
</FunCar>
<Car>
<s:Id>VWGOLF-01</s:Id>
<s:Version>530716</s:Version>
<Description xsi:type="x:string">Reliable,one owner,...</Description>
<LocationZip xsi:type="x:string">98052</LocationZip>
<Price xsi:type="x:decimal">12000.00</Price>
<ListingDate xsi:type="x:dateTime">2008-12-30T07:15:39.43</ListingDate>
</Car>
</s:EntitySet>
SDS Explorer
クエリ
Web リクエストに LINQ 形式で記述
GET https://yota.data.database.windows.net/v1/vbsimage
?q=‘from e in entities where e[“LocationZip”]==“98052” select e’ HTTP/1.1
Accept: application/x-ssds+xml
Authorization: Basic *************
Host: yota.data.database.windows.net
ブール演算子
<, >, <=, >=, !=, ==, …
エンティティメタデータとフレックスプロパティの条件指定が
可能
ジョイン
コンテナ内でのジョイン操作が可能
メタデータプロパティを使用する場合
メタデータプロパティは ”.” を使用
例
from e in entities where e.Kind=="FunCar" select e
from e in entities where e.Id=="VWGOLF-01“ select e
フレックスプロパティを使用する場合
フレックスプロパティはインデックス形式を使用
例
from e in entities where e["LocationZip"]=="98052“
select e
from e in entities
where e["LocationZip"]=="98052“ && e["Price"]<=14000
&& e["ListingDate"]<=DateTime("12-30-2008")
select e
JOIN
SOAP
Web 参照
独自 API
.NET Services アクセスコントロールとの統合
REST
クライアントプラットフォームや開発言語の自由度
が高い
BLOB が使用可能
https://database.windows.net/soap/v1/
Generic.Listに
static void Main(string[] args)
{
using (SitkaSoapServiceClient proxy =
new SitkaSoapServiceClient("SitkaSoapEndpoint"))
{
proxy.ClientCredentials.UserName.UserName = userid;
proxy.ClientCredentials.UserName.Password = password;
Scope myAuthorityScope = new Scope();
myAuthorityScope.AuthorityId = "yota";
Container c1 = new Container();
c1.Id = “Products2”;
try
{
コンテナ作成時には
オーソリティをスコー
プに設定
コンテナを作成し、ID
メタデータを設定
Scope newScope = proxy.Create(myAuthorityScope, c1);
Console.WriteLine("Container {0} created!", c1.Id);
}
catch (FaultException<Error> e)
{
}
スコープとエンティティ
を設定してCreate
SOAP Only
Username, Password
using (SitkaSoapServiceClient client = new
SitkaSoapServiceClient("UsernameTokenEndpoint"))
{
}
X.509 certificate
using (SitkaSoapServiceClient client = new
SitkaSoapServiceClient("CertificateTokenEndpoint"))
{
X509Certificate2 cert = new X509Certificate2("someCert.pfx",
"password");
client.ClientCredentials.ClientCertificate.Certificate = cert;
}
CardSpace
using (SitkaSoapServiceClient client = new
SitkaSoapServiceClient("CardSpaceTokenEndpoint"))
{
}
const string requestPayload =
@"<s:Container
xmlns:s='http://schemas.microsoft.com/sitka/2008/03/'>
<s:Id>Books</s:Id></s:Container>“;
HttpWebRequest request =
(HttpWebRequest)HttpWebRequest.Create(serviceUri);
必要な情報を設定した
Payload を作成
request.Credentials = new NetworkCredential(userName, password);
request.Method = "POST";
POST=create
UTF8Encoding encoding = new UTF8Encoding();
PUT=update
DELETE=delete
request.ContentLength = encoding.GetByteCount(requestPayload);
GET=retrieve
request.ContentType = "application/x-ssds+xml";
using (Stream reqStm = request.GetRequestStream())
{
reqStm.Write(encoding.GetBytes(requestPayload), 0,
request.ContentLength);
}
request.GetResponse().Close();
Payload を送信
REST Only
String containerUrl =
"https://authorityId.data.beta.mssds.com/v1/containerId";
HttpWebRequest request =
(HttpWebRequest)HttpWebRequest.Create(containerUrl);
request.Method = "POST";
request.ContentType = "image/jpeg";
request.Headers["Content-Disposition"] =
"attachment; filename={0}" + filename;
request.Headers["Slug"] = entityId;
request.ContentLength = blobStream.Length;
request.AllowWriteStreamBuffering = false;
byte[] credentialBuffer = new
UTF8Encoding().GetBytes(String.Format(“{0}:{1}”, username,
password));
request.Headers["Authorization"]=
“Basic "+Convert.ToBase64String(credentialBuffer);
using (Stream writeStream = request.GetRequestStream())
{
int read = 0;
while ((read = blobStream.Read(buffer, 0, buffer.Length)) > 0)
{
writeStream.Write(buffer, 0, read);
}
request.GetResponse().Close();
}
フロントエンドの機能
ACE データモデル
LINQ によるデータ検索
REST、SOAP アクセス
バックエンドアーキテクチャ
サブシステムとコンポーネント
可用性
分散Fabricと障害検知、ノード選出
レプリケーション
再構成エージェント(Reconfigure Agent)
スケーラビリティ
パーティションマネージャ
フロントエンドノード
フロントエンドノード
フロントエンドノード
SDS
フロントエンド
REST/SOAP
REST/SOAP
REST/SOAP
ACE ロジック
ACE ロジック
ACE ロジック
データアクセスライブラリ
データアクセスライブラリ
データアクセスライブラリ
マスタークラスター
サービス管理
Provisioning
Deployment
Health
Monitoring
マスターノード
パーティションマ
ネージャ
マスターノード
パーティション
マネージャ
データノード
コンポーネント
データノード
コンポーネント
Data Node
SQL
MgmtS
Server
ervice
s
Fabric
Data Node
SQL
MgmtS
Server
ervice
s
Fabric
データクラスター
Data Node
SQL
MgmtS
Server
ervice
s
Fabric
Data Node
SQL
MgmtS
Server
ervice
s
Fabric
ファブリックメッセージ
レプリケーションメッセージ
Data Node
SQL
MgmtS
Server
ervice
s
Fabric
パーティションマップのフェッチ
SQL Client コネクション
マスターノード(プライマリマスター)
SQL Server
データノード 100
パーティション
管理
SQL Server
P
S
S
S
Fabric
パーティションマネージャ
グローバル
パーティション
マップ
レプリケーショ
ン
エージェント
負荷分散
Partition Placement
Advisor
リーダー選出
ローカル
パーティションマップ
Fabric
リングトポロジ
PM ロケーション解析
障害検知
再構成エージェント
データ
ノード 101
データ
ノード 102
データ
ノード 103
データ
ノード
104
データ
ノード 105
P
S
S
P
S
P
S
S
P
S
P
S
S
S
P
P
S
S
P
S
P
S
S
S
S
2種類のノード
データノード:アプリケーションデータ
マスターノード:クラスターメタデータ
確実な障害検知
各ノード上で、SQL Serverと Fabric プロセスが相互に稼働
状態を監視
Fabric プロセスは、他ノードの Fabric プロセスの状態を監
視
ローカルの障害は、Fail-Fast で対応する
パーティション単位でレプリカを持つことで障害時の
負荷分散と復旧時のパラレルなデータ構築が可能
障害検知
2重リンクのリング構造
自動調整(新規ノードの検索と追加)
分散システムバイナリサーチとID Namespace
整合性・一貫性をもった可用性
複数のレプリカ
レプリカへの操作の適用の一貫性
シリアライザビリティ
複数のノードが2重リンクから
成るリングを構成
Fabric 間の通信により隣接
ノードの障害を検知
常にリングをメンテナンス
ノード内は SQL Server と
Fabric で相互監視
SQL Server と Fabric のラ
イフスパンは同じ
再度リングを構成するように隣
接ノードを探索
ID 1
ID 13
ID 30
ID 15
ID 23
分散バイナリサーチ
200
180
210
174
218
151
225
r7
250
135
r6
r-6
2
120
r5
103
98
30
r4
90
17
r-5
r-4
40
83
46
76
64
50
Routing Table at Node 64:
Successor = 76
Predecessor = 50
Neighborhood = (83, 76, 50, 46)
Routing nodes = (200, 2, 30, 46, 50,
64, 64, 64, 64, 64,
83, 98, 135, 200)
レプリカセット
プライマリが実行した適用順序を踏襲する
クォーラムをサポート
クォーラムは動的に再構成される
レプリカセット
Ack
Value
WRITE
プライマリが受信し、プライマリ
Ack
ノードでトランザクションを処理
該当するローのみを、それをホス
トするセカンダリレプリカノードに転
送、COMMIT TRAN を送信
複数のセカンダリからCOMMIT
TRAN に対する ACK が返った場
合、プライマリはクライアントに
S
ACK を送信
ACK の送信が遅れたセカンダリ
からの ACK は無視、ACK でない
場合、セカンダリは障害があると
判断リングから除外
Ack
P
Ack
S
Read
Write
Write
Write
Ack
Write
Write
S
S
リングの再構築
再構築が必要になる4つのケース
プライマリの障害
プライマリの排除、セカンダリのプライマリへの昇格
セカンダリの障害
パフォーマンスの問題から単純にリングから排除
プライマリの障害回復による復帰
セカンダリとして参加
セカンダリの新規追加
大量のデータを事前に復旧するビルドフェーズを経て、データ転送
による妨害をすることがなくなった時点でリングに参入
前提:確実な障害検知とリーダー選出が可能
パーティション
コンテナとパーティション
パーティション単位の分散化
フェールオーバー
コンテナ
SDS フロントエンド
一貫性の単位
クライアントはコンテナを
指定してアクセスを行う
パーティション
コンテナを包含するフェ
イルオーバーの単位
信頼性と可用性の観点
からレプリケートされる
フェールオーバー時に再
構築
SDS バックエンド
コンテナ X
パーティションマネージャ
マスタークラスターで稼働するサービス
すべてのパーティションの稼働状態を把握
障害のあるノードからのレプリカの再配置
すべてのパーティションに対してレプリカの数が一定以
上に保たれていることの確認
全ノードの負荷のバランスを保つ
各データノードには複数のパーティションが割り当
てられる
1. ノード 3: Fabric がノード 2 の障害を検知し、PMであ
るマスターノードに通知
2. マスターノード: ノード 2 が持っているプライマリパー
ティション(P2を含む)に対するセカンダリを探し、その中
から新しいプライマリを選出
3. マスターノード: ノード 1 を新プライマリとして決定、
ノード 1 とノード 3 に通知、GPMを更新
4. ノード 1: 他のセカンダリであるノード 3 に対して最新
データの確認
5. ノード 1: P2に対するプライマリに昇格、再構成を実行
マスターノード
Partition Manager
Global
Partition Map
ノード 1
再構成
エージェント
レプリケーションエー
ジェント
P1
ノード 2
ノード 3
Primary
Primary
P2
ローカルパーティショ
ンマップ
Secondary
P3
P3
Secondary
P2
P3
Secondary
P1
P2
P4
今後の拡張
想定するシナリオ
使用例
最後に
SQL Server ライクな機能追加
カスタムスキーマ、リッチデータ型
リレーショナル機能
複雑なクエリ、プロジェクション、集約、制約
INSERT、UPDATE のバッチ処理化
データアップロードとダウンロードの高速化、差分バックアッ
プ
分散クエリ、分散トランザクション
ADO.NET Data Service
ビジネスレベルの SLA
データの地理的分散
ディザスタリカバリ
運用効率
オンプレミスサーバの
バイパス
クエリが可能な
アーカイブ
モバイ
ル
アプリケーション
アプリケー
ション
データハブ
アプリケーション
Access
同期
統合
SQL Data Services
SQL Data Services
SQL Data Services
アプリケーション
モバイル連携
シナリオ
工事現場の写真撮影
課題
同じような写真の整理が困難
工事は一過性、サーバホストの常時維持は
困難かつ不経済
ジョイントベンチャーのようなサーバ管理の主
体の特定が困難
サーバ構築のための要員確保が困難
写真とともに保存したいデータが多岐にわた
る
オンプレミス DB のセキュリティ要件
SDS
工事開始、終了とともに使用開始、停止が可
能
必要な非機能要件は既に実現済み
標準プロトコルによりデバイスの制限が緩和
DB スキーマを持たない
On-Premise
データベース
SQL Data
Services
SQL Services
Windows Azure プラットフォームにおいて、Microsoft がホスト
するデータサービス
データストレージと広範な処理、BI をホストするサービス
SQL Data Services
既に使用可能なクラウドコンピューティング
プリミティブデータに対するデータベースサービス
テクノロジ
実績のある SQL Server をベース
Web フレンドリなプロトコル
分散 Fabric による可用性とスケーラビリティ
関連テクノロジ
Velocity – キャッシュ、データアクセスの遅延を緩和、分散
Fabricを使用
Huron - Sync データハブ、同期によるインターネットを介した
データ共有