Auswirkungen auf Directory-Enabled Anwendungen

Version Skew

Versionsänderung tritt auf, wenn Anwendungen dieselben Objekte aus unterschiedlichen Replikaten lesen, bevor eine Änderung repliziert wurde. Anwendungen, die das Remotereplikat lesen, erkennen das unveränderte Objekt. Versionsverknüfung ist ein Problem, wenn eine bestimmte Anwendung oder eine Reihe von Anwendungen die Daten im Verzeichnis zum Interoperieren verwenden.

Beispielsweise kann ein RPC-Dienst seine Endpunkte im Verzeichnis mit standard-RPC-APIs (z. B. RpcNsBindingExport) veröffentlichen. Clients stellen eine Verbindung mit dem Dienst her, indem sie den gewünschten Endpunkt im Verzeichnis nachschlagen ( RpcNsBindingLookupBegin, RpcNsBindingLookupNext usw.) und bindung an ihn.

Angenommen, ein RPC-Dienst S₁ veröffentlicht Endpunkt Es₁ und wechselt anschließend zu einem anderen Computer. Der ursprüngliche Endpunkt Es₁ wird in Es2 geändert und spiegelt die Adresse des neuen Computers wider. Clients, die Remotereplikate des Verzeichnisdiensts lesen, können keine Verbindung mit dem Dienst herstellen, bis der aktualisierte Endpunkt repliziert wird. Das Verschieben eines Diensts von einem Computer auf einen anderen ist jedoch ein seltenes Vorkommen; Daher sollte diese Unterbrechung/Verzögerung selten auftreten, insbesondere, wenn die Bewegung des Dienstes gut geplant ist.

Teilupdates

Im Allgemeinen tritt ein partielles Update auf, wenn eine Anwendung eine Reihe von Daten liest, während eine andere Anwendung in dieselbe Gruppe von Daten schreibt. Dies ist eine Situation, die bei jeder Anwendung in einem multimasterten System auftreten kann. Es gibt viele Möglichkeiten, dies zu erreichen. Sie könnten mehrere Anwendungen gleichzeitig in denselben Datensatz schreiben. Wenn Sie dies auf diese Weise betrachten, ist der Verzeichnisreplikationsdienst nur eine andere Anwendung, die möglicherweise in denselben Datensatz geschrieben werden kann, den eine andere Anwendung lesen kann. Dies könnte ein potenzielles Problem für eine Anwendung sein. Das Zeitfenster, in dem sich ein partielles Update auf Ihre Anwendung auswirken kann, ist jedoch relativ klein. Dies sollte selten ein Problem für Anwendungen sein, die nicht von der Synchronisierung mehrerer Objekte abhängig sind. Wenn Ihre Anwendung stark von der Synchronisierung einer verwandten Gruppe von Objekten abhängig ist, sollten Sie die Auswirkungen einer partiellen Aktualisierung im Anwendungsentwurf berücksichtigen.

In Bezug auf die Verzeichnisreplikation tritt ein partielles Update auf, wenn Anwendungen denselben Satz von Objekten aus verschiedenen Replikaten lesen, während die Replikation ausgeführt wird. Anwendungen im Remotereplikat sehen einige, aber nicht alle Änderungen.

Hinweis

Das Fenster, in dem sich die teilweise Aktualisierung auf eine Anwendung auswirken kann, ist klein: Die Anwendung muss mit dem Lesen von Objekten beginnen, während die eingehende Replikation ausgeführt wird, nachdem mindestens eine der zugehörigen, geänderten Objekte empfangen wurde, aber bevor alle empfangen wurden. Die Zeit zwischen den Updates am Quellreplikat wirkt sich direkt auf die Größe dieses Fensters aus– Aktualisierungen, die in der Zeit eng zusammen auftreten, werden rechtzeitig repliziert. Teilaktualisierung kann ein Problem sein, wenn eine Anwendung einen verwandten Satz von Objekten verwendet.

 

Beispielsweise kann ein Remotezugriffsdienst das Verzeichnis verwenden, um Richtlinien- und Profildaten zu speichern. Die Richtliniendaten werden in einer Gruppe von Objekten und dem Profil in einem anderen Satz gespeichert. Wenn ein Benutzer eine Verbindung mit dem Remotezugriffsdienst herstellt, liest der Remotezugriffsdienst die Richtlinie vor, um zu ermitteln, ob der Benutzer eine Verbindung herstellen darf, und wenn ja, welches Profil für die Benutzersitzung gelten soll. Teilaktualisierung kann sich auf verschiedene Arten auf den Remotezugriffsdienst auswirken:

  • Wenn die Richtlinie komplex ist und aus mehreren Objekten besteht, kann der Remotezugriffsdienst eine teilweise aktualisierte Richtlinie lesen, die zu falscher Denial- oder Bewilligung von Diensten für den Benutzer führt, die Unfähigkeit, die Richtlinie aufgrund interner Inkonsistenzen zu verarbeiten usw.
  • Wenn sowohl die Richtlinie als auch die Profile aktualisiert wurden, verarbeitet der Dienst die Richtlinie möglicherweise ordnungsgemäß, wendet jedoch ein veraltetes Profil an, da die Richtlinienobjekte repliziert wurden, aber die Profilobjekte nicht.
  • Wenn das Profil komplex ist und aus mehreren Objekten besteht, verarbeitet der Dienst die Richtlinie möglicherweise ordnungsgemäß, wendet jedoch ein teilweise aktualisiertes Profil an, da die Richtlinienobjekte repliziert wurden, aber nur einige der Profilobjekte haben dies getan.

Kollisionen

Kollisionen treten auf, wenn die gleichen Attribute von zwei oder mehr Replikaten eines bestimmten Objekts während des gleichen Replikationsintervalls geändert werden. Der Replikationsprozess versöhnt die Kollision; aufgrund der Abstimmung kann ein Benutzer oder eine Anwendung einen anderen Wert als die von ihnen geschriebene "sehen".

Ein einfaches Beispiel ist Benutzeradresseninformationen: Ein Benutzer ändert eine Adressadresse bei Replikat R1, und ein Administrator ändert dieselbe Adressadresse bei Replikat R2. Ein geschriebener Wert verteilt sich, bis ein anderer Wert durch den Kollisionsausgleichsmechanismus über diesen Wert ausgewählt wird. Solange ein Wert weiterhin gegen andere Werte im Konfliktauflösungsprozess "gewinnen" bleibt, wird der Wert weiterhin verteilt. Letztendlich wird dieser "Gewinn"-Wert an R1,R2 und alle anderen Replikate weitergegeben, wenn keine anderen Änderungen vorgenommen werden.

Die Kollisionsauflösung ist ein Problem für Anwendungen, die Annahmen über die interne Konsistenz von Objekten oder Sätzen von Objekten machen. Beispielsweise speichert ein Netzwerkbandbreitenverwaltungsdienst Netzwerkbandbreitendaten für ein bestimmtes Netzwerksegment im Verzeichnis in einem Objekt O1. Das Objekt enthält die in Bits pro Sekunde verfügbare Bandbreite und die maximale Bandbreite, die jeder einzelne Benutzer reservieren kann. Der Dienst erwartet, dass die verfügbare Bandbreite des Benutzers immer kleiner oder gleich der verfügbaren Bandbreite ist.

Gehen Sie dabei vom folgenden Ereignisablauf aus:

  • Das Objekt im anfänglichen vollständig replizierten Zustand gibt die verfügbare Bandbreite als 56 Kilobit pro Sekunde, und der Benutzer kann die verfügbare Bandbreite als 9.600 Bit pro Sekunde reservieren.
  • Ein Administrator bei Replikat R₁ ändert die Werte in 64k und 19.200.
  • Ein Administrator bei Replikat R ändert die Werte auf 10 Millionen und 1 Millionen, bevor das Update von R₁ eingeht.

Vorausgesetzt, die betreffenden Attribute verfügen über gleiche Versionsnummern, wenn die Updates auftreten, gibt es eine kleine, aber reale Möglichkeit, dass das Objekt mit einer maximalen Bandbreite von 64k enden wird und ein Benutzer maximal 1 Millionen reserviert werden kann – wenn die Anwendung die Aktualisierungen als separate Schreibvorgänge ausführt. Die Anwendung sollte beide Eigenschaften immer in einem einzigen Vorgang aktualisieren.