Active Directory 網域服務 中的程式設計人員復寫模型
以下是 Active Directory 網域服務 複寫模型的描述。
Active Directory 網域 控制器 (DC) 的所有更新都是使用 LDAP 要求來執行,這些要求會為每個要求建立、修改或刪除一個物件。 單一要求可以在 對象上設定或修改多個屬性。
更新要求會以部分 DC 的不可部分完成交易處理。 整個更新都會發生,或沒有任何更新。 如果要求者收到更新要求的成功回應,則整個要求已成功(已認可)。 這稱為「原始寫入」。無法將多個LDAP要求分組成單一較大的交易。
在原始寫入中,DC 會計算每個新的或修改屬性值的「戳記」,並將這個戳記附加至值,以便在複寫值時,也會復寫戳記。 新的戳記是唯一的,而且在更新的情況下,新戳記大於該 DC 上舊值的戳記。
有時候,DC 會選取自上次DC執行複寫以來已變更的物件集。 然後,針對每個物件,它會將單一訊息傳送給所有其他DC,其中包含自上次復寫物件之後變更的所有目前屬性值。 復寫訊息可靠且依序傳遞,但可能需要更多時間才能傳遞。
當某個DC收到另一個DC的複寫訊息時,它會處理它,如下所示:如果複寫訊息中值上的戳記大於目前值的戳記,DC就會套用更新:否則 DC 會捨棄更新。 每個復寫訊息都會套用為不可部分完成的交易,就像原始寫入一樣。
這是 Active Directory 網域服務 複寫模型。 此模型的主要屬性包括:
- 原始寫入單一物件是不可部分完成的。
- 復寫變更時,會傳送原始寫入所做的所有變更,或沒有任何變更。
- 復寫至單一對象的寫入是不可部分完成的,但衝突會逐屬性解析。
模型不保證對不同物件所做的變更復寫順序。 請勿撰寫假設變更會以原始寫入順序複寫的應用程式。 模型不保證如果對象的屬性變更兩次,則會復寫這兩個值:複寫只會在複寫時傳送目前的值。
此模型與實際不同,有數種方式只會影響效能。 例如,Active Directory 伺服器會將包含變更的復寫訊息傳送至多個物件,但處理這類多物件訊息的內容,就好像是一系列單一物件訊息一樣。 Active Directory 伺服器不會如模型所述執行點對點複寫,而是會執行與模型同等運作的較複雜且更有效率的可轉移複寫。