-
Notifications
You must be signed in to change notification settings - Fork 0
MS_MSDTC
- 戻る(プラットフォーム・アーキテクチャ、データアクセスのいろいろ)
- MS-DTC
- TransactionScope
MS-DTC は、
- 1996 年に初めて登場した Microsoft Transaction Server(MTS)
- MTS の後継である Windows DNA の中核コンポーネントの COM+
- COM+ の後継である Enterprise Services(.NET に対応)
- SQL Server で言うリンク サーバ(Oracle で言う DB リンク)。
から利用することで、2 相コミットを実現する、
- トランザクション マネージャ(TM)
- リソース マネージャ(RM)
である。
- トランザクション管理とは何か
http://itpro.nikkeibp.co.jp/article/lecture/20070528/272630/
移行メモ(正誤): MS-DTC 自身は トランザクション マネージャ(TM)であって、
リソース マネージャ(RM)ではない。
RM に当たるのは、実際にデータを保持している
SQL Server / Oracle / MSMQ などの各リソース側である。
MS-DTC は複数の RM を跨いだ 2 相コミットを調停する役割を担う。
補足(2相コミットの流れ): MS-DTC が調停する 2 相コミット(2PC)は
以下の 2 フェーズからなる。
フェーズ 内容 1. Prepare TM が各 RM に「コミットできるか」を問い合わせる。RM はログを永続化し、コミットもロールバックもできる状態で待つ 2. Commit / Abort 全 RM が Prepare に成功したら Commit を指示。1 つでも失敗すれば全体を Abort Prepare 後・Commit 指示前に TM が落ちると、RM は
in-doubt(未確定)トランザクションとして資源をロックしたまま待ち続ける。
これが分散トランザクションで最も厄介な障害モードで、
復旧には TM の回復処理(または手動解決)が必要になる。
クラウドやマイクロサービスで 2PC が敬遠される主因でもある。
補足(最新化:.NET での分散トランザクション):
ランタイム MS-DTC への昇格 .NET Framework サポート .NET Core 〜 .NET 6 未サポート(昇格時に PlatformNotSupportedException).NET 7 以降 Windows のみサポート(Linux は未サポート) 代替として、結果整合性を前提とした設計
(Saga パターン、Outbox パターン)を採るのが現在の定石。
詳細はクラウド設計パターンを参照。
1997 年に提唱されたアーキテクチャで、
- COM+ をベースにした分散オブジェクト環境と
- HTML をベースにした WWW 環境の
統合を図ることを目的としている。
Windows 2000 で実現された。
下記のマイクロソフト独自技術と TP モニタ・リソース マネージャ機能などなどを兼ね備えた
AP サーバ コンポーネント。
-
COM(Component Object Model):
ソフトウェアの再利用を目的としたモジュールのコンポーネント化の技術 -
DCOM(Distributed Component Object Model):
ネットワーク上に分散するコンポーネント間通信の技術。
-
COM+ の機能を .NET 開発でも利用可能にした COM+ の後継である AP サーバ コンポーネント。
-
アンマネージ コードでの仕様であるCOM、DCOM.etc に関連する技術の
いくつかは、.NET の技術にリプレースされている。 -
.NET における Enterprise Services(COM+)について
https://learn.microsoft.com/ja-jp/previous-versions/dotnet/articles/ms973847(v=msdn.10)
補足(最新化):
System.EnterpriseServices(ServicedComponent)と
.NET リモーティングは、いずれも .NET Core 以降には移植されていない。
COM+ 相当の機能が必要な場合は .NET Framework に留まるか、
gRPC(gRPC)や HTTP API での置き換えを検討する。
補足(MS-DTC が動かないときの確認点): 分散トランザクションの障害は
ネットワーク/構成に起因することが多い。確認順は概ね以下。
- 両ノードで Distributed Transaction Coordinator サービスが起動しているか
dcomcnfg(コンポーネント サービス)の MS-DTC のセキュリティ構成で
ネットワーク DTC アクセス、送受信の許可、認証方式が両側で整合しているか- ファイアウォールで **RPC エンドポイント マッパ(TCP 135)**と
動的ポート範囲が開いているか- 名前解決(両方向の FQDN / NetBIOS 名)が通るか
検証には
DTCPing/DTCTesterが使える。
-
SQL Server における分散トランザクション
Microsoft SQL Server Japan Support Team Blog -
分散トランザクション コーディネーター | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows/win32/cossdk/com--transactions
Tags: 移行, インフラストラクチャ, Windows, データアクセス, SQL Server
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。