Frage

Eine einzige Installation unseres Produkts speichert die Konfiguration in einer Reihe von Datenbanktabellen.

Keine der Installationen "kennt" über eine andere Installation.

Es war immer üblich, dass Kunden mehrere Kopien unseres Produkts in verschiedenen Rechenzentren installieren, die geografisch weit voneinander entfernt sind. Dies bedeutet, dass die Konfigurationsinformationen einmal erstellt und dann in andere Systeme exportiert werden müssen. Ein Teil der Konfiguration wird dann an die örtlichen Bedingungen geändert. zB IP -Adressen ändern usw. Dies ist ein klobiger, fehleranfälliger Ansatz.

Wir erhalten jetzt Anfragen nach der Fähigkeit, eine nahtlosere Strategie zum Austausch globaler Daten zu haben, aber dennoch lokale Modifikationen zu ermöglichen.

Wenn es nicht das lokale Modifikationsbit gäbe, könnten wir die Datenreplikationsfunktionen von Oracle verwenden.

Aufgrund von HA -Anforderungen, die die gesamte Konfiguration in der One -Datenbank mit Anforderungen mit der Option haben, ist keine Option.

Hat noch jemand auf dieses Problem gestoßen und haben Sie jemals eine gute programmatische Lösung dafür gefunden? Kennen Sie gute Papiere, die eine teilweise oder vollständige Lösung beschreiben könnten?

Wir sind *nix basieren und verwenden Oracle. Änderungen sollten ziemlich schnell an alle Knoten repliziert werden (eine Sekunde oder 2).

War es hilfreich?

Lösung

Ich bin mir nicht sicher, wie möglich, dass Sie die Art und Weise ändern, wie Sie mit Ihrer Konfiguration umgehen, aber wir haben etwas Ähnliches implementiert, indem wir die Idee lokaler Überschreibungen verwenden. Insbesondere haben Sie zwei identische Konfigurationstabellen (nennen Sie sie CentralConfig und LocalConfig). CentralConfig wird am zentralen Standort unterhalten und an Ihren Satellitenstandorten repliziert, wo es schreibgeschützt ist. LocalConfig kann auf der örtlichen Website eingerichtet werden. Ihre Prozedur, die Konfigurationsdaten abfragt, sucht zunächst nach den Daten in der lokalen Config -Tabelle und ruft sie, falls nicht gefunden, aus der CentralConfig -Tabelle ab.

Wenn Sie beispielsweise versucht haben, dies mit den Werten in der Tabelle von V $ Parameter zu tun, können Sie Ihre Konfiguration mit der First_Value -Funktion in SQL Analytics abfragen:

  SELECT DISTINCT
         NAME
       , FIRST_VALUE(VALUE) OVER(PARTITION BY NAME 
                                     ORDER BY localsort
                                ) VALUE
    FROM (SELECT t.*
               , 0 localsort
            FROM local_parameter t
           UNION
          SELECT t.*
               , 1 localsort
            FROM v$parameter t
         )
ORDER BY NAME;

Die Spalte für die Lokale in den Gewerkschaften ist nur, um sicherzustellen, dass die Werte von Local_Parameter Vorrang gegenüber den V $ -Parameterwerten haben.

In unserem System ist es tatsächlich viel anspruchsvoller als das. Zusätzlich zum "Namen" für den Parameter, den Sie nachschlagen, haben wir auch eine "Kontext" -Spalte, in der der Kontext beschreibt, den wir suchen. Zum Beispiel haben wir möglicherweise einen Parameter "Timeout", der zentral, aber selbst lokal eingestellt ist, aber wir haben mehrere Komponenten, die diesen Wert verwenden. Sie mögen alle gleich sein, aber wir möchten sie vielleicht auch anders konfigurieren. Wenn das Tool den Wert "Timeout" nachgibt, schränkt es auch nach Geltungsbereich ein. In der Konfiguration selbst können wir Platzhalter verwenden, wenn wir definieren, was wir für den Umfang wollen, z. B.:

CONTEXT       NAME    VALUE
------------- ------- -----
Comp Engine A timeout    15
Comp Engine B timeout    10
Comp Engine % timeout     5
%             timeout    30

Die obige Konfiguration besagt, dass für alle Komponenten eine Zeitüberschreitung von 30 verwendet wird. Verwenden Sie jedoch für Comp -Engines jeglicher Art eine Zeitüberschreitung von 5, aber für Comp Engines A & B verwenden Sie 15 bzw. 10. Die letzten beiden Konfigurationen können in CentralConfig gepflegt werden, die beiden anderen können jedoch in LocalConfig gepflegt werden, und Sie würden die Einstellungen auf diese Weise beheben:

  SELECT DISTINCT
         NAME
       , FIRST_VALUE(VALUE) OVER(PARTITION BY NAME 
                                     ORDER BY (TRANSLATE(Context
                                                        , '%_'
                                                        , CHR(1) || CHR(2)
                                              ) DESC
                                            , localsort
                                ) VALUE
    FROM (SELECT t.*
               , 0 localsort
            FROM LocalConfig t
           WHERE 'Comp Engine A' LIKE Context
           UNION
          SELECT t.*
               , 1 localsort
            FROM CentralConfig t
           WHERE 'Comp Engine A' LIKE Context
         )
ORDER BY NAME;

Es ist im Grunde die gleiche Abfrage, außer dass ich diesen Übersetzungsausdruck vor meinem Einheimischen einfügte und den Kontext einschränke. Was es tut, ist die % und _ Zeichen in CHR (1) & CHR (2), wodurch sie nach alphanumerischen Zeichen in der absteigenden Sorte sortiert werden. Auf diese Weise wird der explizit definierte "Comp Engine A" vor "Comp Engine %" kommen, was wiederum vor " %" kommt. In Fällen, in denen die Kontexte identisch definiert sind, hat die lokale Konfiguration Vorrang vor den zentralen. Wenn Sie wollten, dass lokal immer Trump Central, selbst in Fällen, in denen Central enger geschrieben wurde, würden Sie nur die Positionen der beiden Sortierbegriffe umkehren.

Andere Tipps

Die Art und Weise, wie wir dies tun, ähnelt mit Steve. Zunächst benötigen Sie einen zentralen Konfigurationsdienst, um alle Konfigurationen zu speichern, die Sie auf die verteilte Umgebung bewerben möchten. Jedes Mal, wenn Sie die Konfiguration ändern möchten, ändern Sie sie im zentralen Konfigurationsdienst. In jedem Produktionshost können Sie ein Schleifenskript schreiben, um die Konfiguration zu aktualisieren. Für eine ausgefeiltere Lösung müssen Sie eine Strategie einrichten, um eine falsche Konfiguration auf alle Server zu vermeiden, das wäre eine Katastrophe. Vielleicht benötigen Sie ein einfaches Schloss oder einen grauen Veröffentlichungsprozess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top