Atualizando Serviços OSGi para Plug-ins do eXtreme Scale com xscmd

O WebSphere eXtreme Scale suporta o upgrade de pacotes configuráveis de plug-in do servidor de contêiner enquanto a grade está ativa. Este suporte permite que administradores concluam atualizações e adições do aplicativo sem precisar reiniciar processos da grade.

Antes de Iniciar

Conclua as etapas a seguir antes de atualizar pacotes configuráveis OSGi do eXtreme Scale para uma nova versão:
  1. Inicie servidores do eXtreme Scale em uma estrutura OSGi suportada.
  2. Separe todos os plug-ins do eXtreme Scale em pacotes configuráveis e eles devem usar classificações de serviço para identificar cada versão dos plug-ins.
  3. Especifique objetos de cache como tipos primitivos Java como byte[], Integer ou String, ou eles devem ser armazenados usando um plug-in MapSerializerPlugin. Os objetos de dados são armazenados no pacote configurável do eXtreme Scale e não são atualizados. Apenas os plug-ins que interagem com os dados são atualizados.
  4. Projete os dados de objeto de cache para serem compatíveis na versão. Novos plug-ins devem ser capazes de interagir com os dados criados por plug-ins antigos.
  5. Projete plug-ins para atender aos eventos de ObjectGridLifecycle e BackingMapLifecycle para atualizar quaisquer referências a outros plug-ins ou os metadados que os plug-ins possam ter para que eles possam ser atualizados quando ele for atualizado.
  6. O processo de atualização do OSGi do eXtreme Scale afeta somente servidores. Você deve atualizar de modo independente quaisquer clientes que estão usando plug-ins.

Sobre Esta Tarefa

Sem de ativação do OSGi, se um administrador precisar atualizar os plug-ins do aplicativo ou objetos de cache, cada nó da grade deverá ser atualizado um por um, causando uma sobrecarga na rede, memória e utilização da CPU. Isso é necessário pois os plug-ins e objetos Java do cache são armazenados diretamente na grade. Quando classes são atualizadas sem reiniciar os processos, os plug-ins da grade têm conflitos porque cada classe possui um ClassLoader diferente.

O produto eXtreme Scale inclui o utilitário xscmd e MBeans que permitem aos administradores visualizar todos os pacotes configuráveis do plug-in instalados em cada estrutura OSGi de hosting do contêiner da grade e escolher qual revisão usar. Quando o xscmd é usado para atualizar os plug-ins para uma nova classificação, a grade é posicionada no modo quiesce e todas as transações são drenadas, os plug-ins são atualizados e a grade é ativada novamente. Se ocorrer um erro durante o processo de atualização, o processo é retrocedido e a classificação antiga é restaurada.

Procedimento

  1. Crie uma versão do pacote configurável, aumentando o número da versão no manifesto do pacote configurável e aumentando a classificação para cada serviço de plug-in do eXtreme Scale. Se a versão do pacote configurável original for Bundle-Version: 1.0.0, a próxima versão poderá ser definida como Bundle-Version: 1.1.0.

    Se a classificação de serviço original for ranking="1", a próxima classificação poderá ser definida como ranking="2".

    Importante: As classificações do serviço OSGi devem ser números inteiros.
  2. Copie o novo pacote configurável para cada nó de estrutura do OSGi que está hospedando um servidor de contêiner do eXtreme Scale.
  3. Instale o novo pacote configurável na estrutura do OSGi. O pacote configurável é designado a um identificador de pacote configurável; por exemplo:
    osgi> install <URL to bundle>
  4. Inicie o novo pacote configurável usando o identificador de pacote configurável designado; por exemplo:
    osgi> start <id>

    Depois que o novo pacote configurável é iniciado, o rastreador de serviço OSGi do eXtreme Scale detecta o pacote configurável e o torna disponível para atualização.

  5. Use o comando xscmd -c osgiAll para verificar se cada servidor de contêiner vê o novo pacote configurável. O comando osgiAll consulta todos os contêineres na grade para todos os serviços que são referenciados no arquivo XML do descritor do ObjectGrid e exibe todas as classificações que estão disponíveis; por exemplo:
    xscmd -c osgiAll 
    
    Server: server1
       OSGi Service Name          Available Rankings
       -----------------          ------------------
       myLoaderServiceFactory     1, 2
       mySerializerServiceFactory 1, 2
    
    Server: server2
       OSGi Service Name          Available Rankings
       -----------------          ------------------
       myLoaderServiceFactory     1, 2
       mySerializerServiceFactory 1, 2
    
    Summary - All servers have the same service rankings.
  6. Use o comando xscmd -c osgiCheck para verificar se uma ou mais classificações de serviço são destinos de atualização válidos; por exemplo:
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  7. Se o comando osgiCheck não localizou nenhum erro resultante, suspenda o balanceador do serviço de posicionamento para evitar movimentos de shard, no caso de uma falha durante o processo de atualização. Para suspender o posicionamento, use o comando xscmd -c suspendBalancing para cada grade de objeto e conjunto de mapas que são afetados pela atualização; por exemplo:
    xscmd -c suspendBalancing -g MyGrid -ms MyMapSet
  8. Após o balanceamento ter sido suspenso para cada grade de objeto e conjunto de mapas, use o comando xscmd -c osgiCheck novamente para verificar se uma ou mais classificações de serviço são destinos de atualização válidos; por exemplo:
    xscmd -c osgiCheck -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2
    
    CWXSI0040I: The command osgiCheck has completed successfully.
  9. Após o balanceamento ter sido suspenso para a grade de objeto e o conjunto de mapas, use o comando osgiUpdate para atualizar o serviço em todos os servidores para uma grade de objeto e um conjunto de mapas; por exemplo:
    xscmd -c osgiUpdate  -sr 
    mySerializerServiceFactory;2,myLoaderServiceFactory;2 -g MyGrid -ms MyMapSet
  10. Verifique se o upgrade foi bem-sucedido; por exemplo:
    Update succeeded for the following service rankings:
    Service                     Ranking
    -------                     -------
    mySerializerServiceFactory  2
    myLoaderServiceFactory      2
  11. Depois de verificar que a classificação foi atualizada com êxito, ative o balanceamento novamente, usando o comando xscmd -c resumeBalancing; por exemplo:
    xscmd -c resumeBalancing -g MyGrid -ms MyMapSet
  12. Pare e desinstale o pacote configurável antigo em cada estrutura do OSGi que está hospedando o contêiner do eXtreme Scale. Por exemplo, insira o seguinte código no console do Equinox Eclipse:
    osgi> stop <id>
    osgi> uninstall <id>

Resultados

O pacote configurável do eXtreme Scale foi atualizado para uma nova versão.