Migração de AppFabric para NCache

 

Introdução

O cache distribuído foi reconhecido como uma parte importante e integral de aplicativos Web .NET de alto desempenho. Isso vale para os aplicativos de usuário final que exigem tempo de resposta rápido dos serviços de camada intermediária implantados ou componentes da Web. Por essas razões, a Microsoft introduziu AppFabric, um cache distribuído na memória, para fornecer um aumento de desempenho e escalabilidade para aplicativos que usam o .NET Framework.

AppFabric caching tem sido usado principalmente para armazenar dados de estado de sessão ASP.NET e para fornecer recursos básicos de cache de objetos. Mas mesmo que o cache seja parte integrante de qualquer sistema N-Tier, a Microsoft blogou que AppFabric o suporte termina em 11 de abril de 2017 para todas as versões. Este é um bom incentivo para pilhas .NET que empregam AppFabric para mudar para um cache distribuído melhor e com suporte.

 

Por que encontrar um AppFabric Substituição?

Então, o que o fim suporta realmente significa? Isso significa:

  • Sem correções de bugs
  • Nenhuma atualização de segurança
  • Sem novos recursos ou solicitações de recursos
  • Sem perguntas e respostas específicas do produto
  • Sem suporte gratuito ou pago
  • Sem correções
  • Nenhuma atualização de conteúdo online (artigos baseados em conhecimento, etc.)

Portanto, significa que você usará AppFabric por sua conta e risco. A Microsoft não será responsável por contratempos ou bugs. Por isso, temos que avaliar se as operações de negócios podem sustentar o tempo de inatividade devido a um bug sem resolução rápida.

Essas perguntas podem levá-lo a alternativas. Se você estiver pronto para uma alternativa, existe uma que fornece migração perfeita de sua configuração atual para um cache distribuído .NET com alterações mínimas de código, portanto, não apresenta nenhum bug. Esse cache distribuído alternativo não apenas oferece suporte à migração contínua, mas também é mais rápido e fornece mais recursos do que AppFabric.

 

Escolha NCache como seu AppFabric Substituição

NCache é uma escolha forte como alternativa. A Microsoft de fato recomendou NCache na sua anúncio fim AppFabric . NCache ganhou essa recomendação, pois é amplamente usado na comunidade .NET e tem sido líder de mercado em cache distribuído .NET para 10 anos consecutivos. NCache fornece desempenho excepcional juntamente com uma ampla gama de recursos, incluindo:

  • Clusters de alta disponibilidade e autorrecuperação
  • Escalabilidade linear durante o tempo de execução
  • Consulta SQL em dados em cache
  • Sincronização com fontes de dados
  • Cache de cliente
  • Monitoramento e gerenciamento baseado em GUI
  • Bloqueio distribuído
  • Portabilidade .NET e Java
  • Computação de Big Data através do MapReduce em .NET
  • Suporte oficial 24 horas por dia, 7 dias por semana

Outros benefícios de NCache incluem facilidade de uso (ele é classificado por uma empresa de analistas líder como o cache distribuído mais fácil de usar) fortes recursos de gerenciamento e monitoramento por meio de suas ferramentas GUI criadas especificamente e está disponível como código aberto (no GitHub) com custo praticamente zero antes e depois da migração. Open Source e a versão Enterprise, com suporte oficial, estão disponíveis no local e na nuvem (Amazon Web Services e Azure).

 

Como funciona o dobrador de carta de canal NCache também é melhor do que Redis

Enquanto Redis é um bom cache In-Memory, o Redis comunidade observa que Redis não está pronto para o Windows, apesar da disponibilidade de um Redis Porta do Windows. Redis não é totalmente escalável nem oferece recursos de alta disponibilidade. Redis' conjunto de ferramentas de monitoramento e gerenciamento é apenas CLI. NCache oferece muitas vantagens sobre Redis como mostrado neste link de vídeo (e este compartilhamento de slides guia inteligente) Incluindo.

  • Mantendo o cache atualizado (invalidação de cache e sincronização de banco de dados)
  • Pesquisa SQL
  • Código do lado do servidor (leitura/gravação, MapReduce)
  • Cache do cliente (próximo ao cache)
  • Suporte a vários data centers (replicação GEO)
  • Plataforma e tecnologia (nativos Windows e .NET)

Para atender às necessidades de qualquer ambiente operacional, NCache fornece três maneiras de migrar aplicativos .NET de AppFabric para NCache; cada método tem seu próprio conjunto de vantagens.

Os três métodos de migração são:

  1. NCache Opção de migração 1: wrapper para NCache Enterprise
  2. NCache Opção de migração 2: wrapper para NCache EUA
  3. NCache Opção de migração 3: chamadas de API diretas

NCache AppFabric Os wrappers oferecem uma migração mais suave e contínua, mas a migração por meio de chamadas diretas à API oferece mais controle e permite que você aproveite todos os recursos do NCache.

 

NCache Opção de migração 1: wrapper para NCache Enterprise

Para aquelas organizações que procuram a transição mais fácil e rápida de AppFabric, esse wrapper fornece a migração mais fácil de todos os tempos. Apenas três pequenas alterações são necessárias no aplicativo .NET para torná-lo NCache compatível sem introduzir quaisquer possíveis bugs. Essas mudanças são:

  1. Adicionar NCache no App.config ou Web.config
    <appSettings>
    <add key="region1" value="myPartitionedCache"/>
    <add key="Expirable" value="True"/>
    <add key="TTL" value="5"/>
    </appSettings>
  2. Adicione referências ao NCache Biblioteca Alachisoft.NCache.Data.Caching.dll e remova o AppFabric Bibliotecas.
  3. Alterar Microsoft.AppFabric NameSpaces para Alachisoft.NCache. Por exemplo, substitua:
    using Microsoft.ApplicationServer.Caching.Client;
    using Microsoft.ApplicationServer.Caching.core;
    

    com:

    using Alachisoft.NCache.Data.Caching;

E é isso! Nenhuma outra alteração de código é necessária no aplicativo .NET.

 

NCache Opção de migração 2: wrapper para NCache EUA

utilização NCache Open Source permite migrar de AppFabric sem custo, pois ambos os produtos são gratuitos. NCache Open Source tem um conjunto mais limitado de recursos em comparação com a edição Enterprise, mas sem qualquer degradação no desempenho do cache principal.

Para facilitar a migração, uma versão separada do AppFabric invólucro é fornecido para NCache OSS, que é compatível com a API de código aberto. Dado menos recursos em NCache Open Source, NCache Open Source wrapper funciona em torno dos recursos ausentes que incluem:

  • Versionamento de itens de cache
  • Grupos
  • Eventos baseados em cache
 

Controle de versão do item de cache

A NCache Open Source invólucro para AppFabric supera o desafio de manter o controle de versão do item encapsulando cada objeto dentro de outra classe. Isso é feito introduzindo uma nova classe chamada MetaDataCapsule no wrapper modificado.

namespace Alachisoft.NCache.Data.Caching.Util
{
   [Serializable]
   class MetaDataCapsule
   {
      private object value;
	  
      public ItemVersion CacheItemVersion { get; set; }
      public string Group { get; set; }
      public object Value { get { return this.value; } }
	  
      private MetaDataCapsule(object value, ItemVersion version, string group)
      {
         this.CacheItemVersion = version;
         this.Group = group;
         this.value = value;
      }
      public static MetaDataCapsule Encapsulate(object value, string region)
      {
	  return new MetaDataCapsule(value, 1, region);
      }
   }
}

Isso ajuda a manter a versão do item de um objeto e a transportar outras informações úteis, se necessário. A classe é marcada como Serializable, pois precisa trafegar pela rede.

Para garantir a consistência da versão do item e do objeto em todas as várias instâncias de aplicativos diferentes ou semelhantes, o bloqueio distribuído é usado. O bloqueio distribuído é uma característica do NCache que permite que vários aplicativos acessem e modifiquem o mesmo recurso sem comprometer a consistência dos dados e evitando possíveis condições de corrida.

LockHandle lockhandle = null;
MetaDataCapsule oldMetadata;
bool lockAcquired = GetLock(_key, ref lockhandle, out oldMetadata);
if(!lockAcquired)
{
 _NCache.Unlock(key);
 throw new DataCacheException("Unable to acqurie lock to update Item Version");
}
//Return in case of version provided
if (oldVersion != null && oldMetadata.CacheItemVersion == oldVersion._itemVersion)
{
 _NCache.Unlock(key);
 return null;
}
if (lockAcquired)
 (_item.Value as MetaDataCapsule).CacheItemVersion = ++metadata.CacheItemVersion;
_NCache.Insert(_key, _item, lockhandle, true);

Em resumo, em cada operação Put:

  1. O item a ser atualizado é buscado e bloqueado (com expiração).
  2. O valor retornado é convertido como MetaDataCapsule e a versão atual do item é extraída.
  3. ItemVersion é incrementado em 1
  4. Os dados são inseridos de volta no cache.
  5. Se tudo funcionar bem, solte a trava com sobrecarga de INSERT (chave, item, alça de trava, liberação de trava)
  6. Para outros cenários excepcionais, desbloqueie o item seguido de uma exceção.

Bloquear no cenário acima garantirá que nenhum outro aplicativo possa atualizar ou remover o item se outro aplicativo estiver tentando modificar a mesma chave.

No código acima, existe um método chamado GetLock, a implementação é a seguinte.

// <summary>
// Tries to acqurie lock and return LockHandle and MetaDataCapsule object.
// If LockHandle is provided uses that instead.
// <para>Default Lock Timeout (default 5 seconds), Retry Count (default 3)
// and retry interval (default 100 ms) is set when Cache Handler is instantiated.
// </para>
// </summary>
// <param name="key">Formatted Key i.e compile from formatter</param>
// <param name="lockHandle">Either provide a lock or keep it null to acquire a new lock
// </param>
// <param name="metadata">The returned object for internal use</param>
// <returns>true if lock was acquired</returns>
internal bool GetLock(string key, ref LockHandle lockHandle, 
                         out MetaDataCapsule metadata)
{
   //Item is locked
   int count = _retries;
   while (count != 0)
   {
      //If lock was provided attempt to acquire the lock from the given handle
      if (lockHandle == null)
      {
         lockHandle = new LockHandle();
      }

      object obj = _NCache.Get(key, _defaultLockTime, ref lockHandle, true);

      //obj is null of the lock was not acquired
      if (obj == null)
      {
         count--;
         Thread.Sleep(_retryTimeOut);
      }
      else
      {
         metadata = obj as MetaDataCapsule;
         return true;
      }
   }
   lockHandle = null;
   metadata = null;
   return false;
}

O método GetLock tentará adquirir o bloqueio três vezes. Se falhar, ele retornará "null" permitindo que o método de chamada trate essa exceção. Assim, com a ajuda do Bloqueio Distribuído, o AppFabric invólucro para NCache Open Source mantém a versão do item de cache inserido pelos aplicativos cliente, incluindo casos de exceção.

 

Limitação de NCachede código aberto AppFabric Invólucro

Devido à falta de alguns recursos corporativos na edição de código aberto, as seguintes funções são marcadas como "obsoletas" e marcadas com "erro de compilação de lançamento" para garantir uma alteração de código e evitar surpresas.

  1. Qualquer API com tags
  2. Limpar região (não suportado por causa de grupos)
  3. GetObjectsInRegion (não suportado por causa de grupos)
  4. Retornos de chamada em nível de cache/região

Portanto, se seu aplicativo depende muito desses recursos, selecionar NCache Enterprise versão pode ser a melhor opção para permitir uma migração mais suave, perfeita e livre de bugs.

 

NCache Opção de migração 3: chamadas de API diretas

Para desenvolvedores que desejam aproveitar ao máximo muitos NCache Enterprise recursos, você pode preferir ligar diretamente para o NCache API em vez de usar o wrapper. Você também pode usar o 'método unwrap' do AppFabric wrapper para trabalhar diretamente com NCache tão bem.

De qualquer forma, é recomendável realizar sua migração em duas fases. Na fase 1, continue a usar seu AppFabric recursos, mas substitua seu cache por NCache. Na Fase 2, implemente novas NCache funcionalidades que não estavam disponíveis em AppFabric.

 

Fase I: Uso AppFabric apenas recursos

Nesta fase seu foco é apenas substituir AppFabric. Portanto, entender como esses dois caches distribuídos se comportam é importante (veja mais detalhes abaixo e no seção de referência no final). Como mencionado, AppFabric armazena dados em regiões em máquinas específicas. Por outro lado, para replicar os dados da sua região em NCache você pode criar um cache para cada AppFabric região, ou você pode criar NCache grupos para manter AppFabric dados da região.

  1. Regiões para grupos

    NCache Grupos/Subgrupos fornece várias maneiras de agrupar itens em cache. Como as regiões residem dentro de um cache nomeado, NCache usa grupos para reproduzir esse comportamento. A única diferença é que em AppFabric uma chave precisa ser exclusiva apenas em uma região e não em todo o cache nomeado. Considerando que em NCache, a chave precisa ser exclusiva em todo o cache e não importa a qual grupo ela pertence. Esse obstáculo pode ser rapidamente superado se os nomes das regiões forem pré-anexados a todas as chaves.

    Por exemplo:

    In AppFabric, uma operação Add básica se parece com o seguinte:

    // AppFabric API
    regionCache.Add(stringKey, stringValue);

    E NCache o comando básico não é diferente, exceto que um nome de região pode ser especificado como um grupo no comando:

    // NCache API
    cacheInstance.Add(regionName + ":" + stringKey, stringValue, regionName);
    // Where regionName is as Group
    

    Aqui, cada chave é anexada com o nome da região para obter exclusividade entre as chaves de cache. Um grupo é atribuído à chave para uma recuperação mais rápida ou para facilitar a recuperação de dados usando consultas SQL ao realizar operações de pesquisa.

  2. Regiões como caches separados

    A outra maneira de agrupar itens em cache é eliminar completamente a correlação de região para grupo e usar um cache separado para cada região. Para obter o mesmo resultado, onde cada região recebe um cache separado, um mapa de nomes de regiões correspondentes aos caches pode ser armazenado.

    // NCache API
    cacheInstance = map.get(regionName);
    cacheInstance.Add(stringKey, stringValue);

    Neste exemplo, não há necessidade de pré-anexar a chave de região à chave de cache, pois os caches em NCache são mutuamente exclusivos, mesmo que residam no mesmo cluster.

    Se seu aplicativo deve lidar com muitas regiões (por exemplo, mais de 15), é melhor usar regiões como grupos, pois 15 caches por cluster é um número máximo de caches recomendado (mesmo que um cluster possa hospedar logicamente um número infinito de caches) .

 

Fase II: Adicionar avançado NCache características

Na próxima fase, você pode aproveitar os recursos que NCache fornece quais AppFabric e Redis falta. Características como:

  1. Mantendo o cache atualizado (invalidação de cache e sincronização de banco de dados)

    A sincronização de banco de dados é um recurso muito importante para qualquer bom cache distribuído. Como a maioria dos dados armazenados em cache vem de um banco de dados relacional, sempre há situações em que outros aplicativos ou usuários podem alterar os dados e fazer com que os dados armazenados em cache se tornem obsoletos.

  2. Pesquisa SQL

    Os aplicativos geralmente desejam buscar um subconjunto desses dados e, se puderem pesquisar o cache distribuído com uma linguagem de consulta semelhante a SQL e especificar atributos de objeto como parte dos critérios, isso tornará o cache distribuído muito mais útil para eles.

  3. Código do lado do servidor

    Muitas pessoas usam o cache distribuído como "cache no lado", onde buscam dados diretamente do banco de dados e os colocam no cache. Outra abordagem é "cache through", onde seu aplicativo apenas solicita os dados ao cache. E, se os dados não estiverem lá, o cache distribuído os obterá de sua fonte de dados. A mesma coisa vale para a escrita.

    Junto com isso, NCache também suporta MapReduce que permite Big Data Analytics em dados In-Memory, produzindo resultados quase em tempo real.

  4. Cache do cliente (próximo ao cache)

    O cache do cliente é simplesmente um cache InProc/OutProc local na máquina cliente, mas que permanece conectado e sincronizado com o cluster de cache distribuído. Dessa forma, o desempenho do aplicativo realmente se beneficia dessa "proximidade" sem comprometer a integridade dos dados.

  5. Suporte a vários data centers (replicação GEO)

    A replicação de WAN é um recurso importante para muitos aplicativos implantados em vários data centers para fins de recuperação de desastres ou para balanceamento de carga do tráfego regional.

    A ideia por trás da replicação de WAN é que ela não deve reduzir a velocidade do cache em cada local geográfico devido à alta latência da WAN. NCache fornece Bridge Topology para lidar com tudo isso.

 

Conclusão e Recursos Adicionais

Suporte para Microsoft AppFabric termina em abril de 2017. Este white paper apresenta três maneiras possíveis de migrar aplicativos .NET de AppFabric para NCache, e as vantagens de fazer essa alteração. NCache é um cache .NET estável, completo e distribuído, disponível como Open Source no Azure e Amazon Web Services, bem como no NCache local na rede Internet. Suporte completo também está disponível.

Usando o grátis NCache AppFabric invólucro para qualquer um NCache Open Source or NCache Enterprise, oferece o método de migração mais fácil, sem codificação e sem bugs. Migrando chamando diretamente o NCache API fornece mais controle de dados e permite que todos NCache recursos. Todos os métodos de migração são descritos neste whitepaper.

Verifique esses recursos adicionais para atender às suas necessidades de avaliação e produto.

 

Referência

Acessando regiões em AppFabric

Regiões in AppFabric são contêineres lógicos de pares de chave-valor armazenados em uma instância de um cache, que é vinculado a uma máquina servidora. Por causa disso, os dados dentro das regiões não podem ser distribuídos. Essa estrutura arquitetônica afirma permitir buscas mais rápidas. Mas reduz significativamente o desempenho geral em comparação com um cache distribuído.

NCache é um cache distribuído em seu núcleo. Todos os dados dentro NCache é distribuído e uma cópia de backup é mantida em outra máquina física se o Réplica de partição (PR) topologia é usada. PR fornece réplicas de failover de classe mundial, desempenho super-rápido e failover para zero perda de dados.

Assim, as regiões de AppFabric são configurados como caches separados em NCache sem comprometer nenhum dos recursos de busca de dados. o AppFabric wrapper assume essa complexidade e armazena automaticamente todos os dados da região no nome de cache fornecido. O único requisito é que os caches em NCache deve pré-existir. Você cria caches via NCache Novos Negócios, uma ferramenta de gerenciamento de cluster baseada em GUI. Uma vez que os caches são criados, os dados que residem em AppFabric regiões são distribuídas para o especificado NCache cluster(s). Apesar de os dados serem verdadeiramente distribuídos, não há comprometimento em sua capacidade de executar pesquisas avançadas, incluindo consultas SQL (consultas SQL não estão disponíveis com AppFabric em absoluto).

Criando e Configurando Caches

A outra diferença notável entre NCache e AppFabric é a forma como ambos os produtos são configurados. AppFabric é configurado pelo aplicativo em tempo de execução (mesmo a criação do cache) e em contraste NCache é configurado antes que o cache seja iniciado. Por exemplo, topologias de cache não podem ser alteradas em tempo de execução, enquanto outras configurações, por exemplo, expirações padrão de cache, etc., podem ser alteradas posteriormente e são chamadas de hotapplyable. Embora NCache pode ser gerenciado usando o aplicativo .NET (incluindo a criação de cache), mas é preferível gerenciar a partir do NCache Manager - Uma ferramenta única dedicada para gerenciar os clusters de cache. Um cache também pode ser criado, configurado e mantido a partir da CLI.

Enquanto NCache AppFabric-wrapper fornece a maneira mais fácil de migrar aplicativos .NET para NCache, que também é com o mínimo de alterações de código possível, alguns desenvolvedores ainda preferem aproveitar todos os recursos que NCache deve oferecer. É aí que chamar diretamente o NCache API ajuda. Há também a opção de usar os dois métodos chamando o método Unwrap do AppFabric embrulho.

Topologias de cache

A AppFabric cluster não é completamente dinâmico. Dependência de "regra da maioria dos anfitriões líderes" significa que o cluster pode ser desativado com muita facilidade se até mesmo um host principal for desativado. Esses nós de host principais também se assemelham à arquitetura "mestre" e "escravo" e, portanto, também não são totalmente ponto a ponto.

NCache Considerando que é altamente dinâmico e permite adicionar ou remover servidores de cache em tempo de execução sem qualquer interrupção no cache ou em seu aplicativo. Os dados são reequilibrados automaticamente (chamado transferência de estado) em tempo de execução sem qualquer interrupção ou degradação de desempenho. NCache os clientes continuam se comunicando com os servidores de cache, independentemente do estado do servidor. Os clusters garantem a execução das operações do cliente mesmo quando o balanceamento de dados está em andamento.

Isso significa que mesmo para NCache, não há nós "master" ou "slave" no cluster. Existe um nó “coordenador primário” que é o nó mais sênior. E, se cair, o próximo nó mais sênior se torna automaticamente o coordenador primário. Tudo isso acontece sem qualquer interrupção nas operações do cliente.

O que fazer a seguir?

© Copyright Alachisoft 2002 - . Todos os direitos reservados. NCache é uma marca registrada da Diyatech Corp.