ObjectGrid-Verfügbarkeit verwalten

Der Verfügbarkeitsstatus einer ObjectGrids-Instanz bestimmt, welche Anforderungen zu einer bestimmten Zeit verarbeitet werden können. Sie können die Schnittstelle StateManager verwenden, um den Status einer ObjectGrid-Instanz zu definieren und abzurufen.

Informationen zu diesem Vorgang

Es sind vier Verfügbarkeitsstatus für eine bestimmte ObjectGrid-Instanz vorhanden.

Abbildung 1. Verfügbarkeitsstatus einer ObjectGrid-Instanz
Die Verfügbarkeitsstatus sind ONLINE, QUIESCE, OFFLINE und PRELOAD
ONLINE
Der Status ONLINE ist der Standardverfügbarkeitsstatus für ein ObjectGrid. Ein ObjectGrid mit dem Verfügbarkeitsstatus ONLINE kann alle Anforderungen eines typischen eXtreme-Scale-Clients verarbeiten. Anforderungen von Preload-Clients werden jedoch zurückgewiesen, wenn das ObjectGrid den Status ONLINE hat.
QUIESCE
Der Status QUIESCE ist ein temporärer Status. Ein ObjectGrid mit dem Verfügbarkeitsstatus QUIESCE wird bald in den Status OFFLINE versetzt. Wenn ein ObjectGrid den Status QUIESCE hat, können ausstehende Transaktionen verarbeitet werden. Neue Transaktionen werden jedoch zurückgewiesen. Ein ObjectGrid kann bis zu 30 Sekunden im Status QUIESCE verbleiben. Danach wird der Verfügbarkeitsstatus in OFFLINE geändert.
OFFLINE
Der Status OFFLINE führt zur Zurückweisung aller Transaktionen, die an das ObjectGrid gesendet werden.
PRELOAD
Der Status PRELOAD kann verwendet werden, um Daten von einem Preload-Client in ein ObjectGrid zu laden. Während das ObjectGrid den Status PRELOAD hat, kann nur ein Preload-Client Transaktionen im ObjectGrid festschreiben. Alle anderen Transaktionen werden zurückgewiesen.

Eine Anforderung wird zurückgewiesen, wenn ein ObjectGrid nicht den erforderlichen Verfügbarkeitsstatus hat, der diese Anforderung unterstützt. Es wird eine Ausnahme des Typs "AvailabilityException" ausgegeben, wenn eine Anforderung zurückgewiesen wird.

Vorgehensweise

  1. Anfangsstatus eines ObjectGrids mit der ObjectGrid-XML-Konfigurationsdatei festlegen.

    Sie können das Attribut initialState in einem ObjectGrid verwenden, um dessen Anfangsstatus anzugeben. Nach Abschluss der Initialisierung ist ein ObjectGrid normalerweise für Routing bereit. Der Status kann später geändert werden, um zu verhindern, dass Datenverkehr an ein ObjectGrid weitergeleitet wird. Wenn das ObjectGrid initialisiert werden muss, aber nicht sofort verfügbar ist, können Sie das Attribut initialState verwenden.

    Das Attribut "initialState" wird in der XML-Konfigurationsdatei des ObjectGrids definiert. Der Standardstatus ist ONLINE. Die gültigen Werte sind:
    • ONLINE (Standardeinstellung)
    • PRELOAD
    • OFFLINE
    Weitere Informationen zum Attribut initialState finden Sie unter ObjectGrid-XML-Deskriptordatei.

    Wenn das Attribut "initialState" in einem ObjectGrid definiert wird, muss der Status explizit auf ONLINE zurückgesetzt werden, oder das ObjectGrid bleibt nicht verfügbar. Es tritt eine Ausnahme des Typs "AvailabilityException" ein, wenn das ObjectGrid nicht den Status ONLINE hat.

    Weitere Informationen finden Sie in der Dokumentation zur API AvailabilityState.

    Attribut "initialState" für das vorherige Laden verwenden

    Wenn das ObjectGrid vorher mit Daten geladen wird (Preload), kann es einen Zeitraum zwischen Verfügbarkeit des ObjectGrids und Wechseln in einen Preload-Status geben, in dem Clientdatenverkehr blockiert werden kann. Um diesen Zeitraum zu verhindern, kann der Anfangsstatus eines ObjectGrids auf PRELOAD gesetzt werden. Das ObjectGrid setzt zwar die erforderlichen Initialisierungsprozesse fort, blockiert den Datenverkehr aber so lange, bis sich der Status ändert und der Preload-Prozess durchgeführt werden kann.

    Die Status PRELOAD und OFFLINE blockieren zwar beide den Datenverkehr, aber Sie müssen den Status PRELOAD verwenden, wenn Sie einen Preload-Prozess einleiten möchten.

    Verhalten beim Failover und Lastausgleich

    Wenn ein Replikatdatengrid in ein primäres Datengrid hochgestuft wird, verwende das Replikat nicht die initialState-Einstellung. Wenn das primäre Shard zur Neuverteilung verschoben wird, wird die initialState-Einstellung nicht verwendet, weil die Daten an die neue primäre Position kopiert werden, bevor der Verschiebevorgang durchgeführt wird. Wenn keine Replikation konfiguriert ist, übernimmt das primäre Shard den initialState-Wert, wenn ein Failover stattfindet und ein neues primäres Shards verteilt werden muss.

  2. Verfügbarkeitsstatus mit der Schnittstelle StateManager ändern.

    Verwenden Sie die Schnittstelle "StateManager", um den Verfügbarkeitsstatus eines ObjectGrids festzulegen. Zum Festlegen des Verfügbarkeitsstatus eines auf den Servern ausgeführten ObjectGrids übergeben Sie einen entsprechenden ObjectGrid-Client an die Schnittstelle "StateManager". Der folgende Code veranschaulicht, wie der Verfügbarkeitsstatus eines ObjectGrids geändert wird.

    ClientClusterContext client = ogManager.connect("localhost:2809", null, null);
    ObjectGrid myObjectGrid = ogManager.getObjectGrid(client, "myObjectGrid");
    StateManager stateManager = StateManagerFactory.getStateManager();
    stateManager.setObjectGridState(AvailabilityState.OFFLINE, myObjectGrid);
    Jedes Shard des ObjectGrids nimmt den gewünschten Status an, wenn die Methode "setObjectGridState" in der Schnittstelle "StateManager" aufgerufen wird. Wenn die Methode zurückkehrt, sollten alle Shards im ObjectGrid den richtigen Status haben.

    Verwenden Sie ein ObjectGridEventListener-Plug-in, um den Verfügbarkeitsstatus eines serverseitigen ObjectGrids zu ändern. Ändern Sie den Verfügbarkeitsstatus eines serverseitigen ObjectGrids nur, wenn das ObjectGrid eine einzige Partition hat. Falls das ObjectGrid mehrere Partitionen hat, wird die Methode "shardActivated" für jedes primäre Shard aufgerufen, was zu überflüssigen Aufrufen zum Ändern des ObjectGrid-Status führt.

    public class OGListener implements ObjectGridEventListener, 
    			ObjectGridEventGroup.ShardEvents {
        public void shardActivated(ObjectGrid grid) {        
                StateManager stateManager = StateManagerFactory.getStateManager();
                stateManager.setObjectGridState(AvailabilityState.PRELOAD, grid);        
        }
    }

    Da der Status QUIESCE ein Übergangsstatus ist, können Sie die Schnittstelle "StateManager" nicht verwenden, um ein ObjectGrid in den Status QUIESCE zu versetzen. Ein ObjectGrid nimmt diesen Status auf seinem Weg zum Status OFFLINE vorübergehend an.

  3. Verfügbarkeitsstatus abrufen.

    Verwenden Sie die Methode "getObjectGridState" der Schnittstelle "StateManager", um den Verfügbarkeitsstatus eines bestimmten ObjectGrids abzurufen.

    StateManager stateManager = StateManagerFactory.getStateManager();
    AvailabilityState state = stateManager.getObjectGridState(inventoryGrid);
    Die Methode "getObjectGridState" wählt ein zufälliges primäres Shard im ObjectGrid aus und gibt dessen Verfügbarkeitsstatus zurück. Da alle Shards eines ObjectGrids denselben Verfügbarkeitsstatus haben bzw. auf dem Übergang zu demselben Verfügbarkeitsstatus sein sollten, gibt diese Methode ein akzeptables Ergebnis für den aktuellen Verfügbarkeitsstatus des ObjectGrids zurück.