Observação: esta é uma postagem de convidado de Vojta Jakubec, da Tecnologias ConcurA empresa de gerenciamento de despesas de viagem fornece serviços de gerenciamento de viagens e despesas para empresas.
Na Concur, temos experiência na criação de software como serviço há mais de 15 anos. Com 93 milhões de passageiros de companhias aéreas fazendo reservas por meio de nosso produto Travel & Expense no ano passado, estamos liderando o mercado de viagens de negócios. Para colocar isso em perspectiva, qualquer avião comercial em todo o mundo teria, em média, mais de 3 passageiros que reservaram a passagem por meio de nosso software.
No entanto, a execução de um produto SaaS bem-sucedido por mais de uma década também tem algumas desvantagens. Nós nos encontramos em uma situação em que tivemos que estender a vida útil da nossa interface de usuário de front-end muito além das expectativas originais. Uma parte significativa dela ainda está no ASP clássico, que era a pilha de tecnologia da Microsoft antes do surgimento do .NET. Para atender às demandas de nossos clientes, adotamos várias medidas técnicas para modernizar o ambiente.
Cache de dados no ASP clássico
Uma das iniciativas que tomamos foi introduzir o cache de dados na camada ASP. Cada chamada entre a interface do usuário e a camada intermediária leva vários milissegundos. O problema é que o mecanismo de renderização ASP clássico não oferece nenhuma maneira de paralelizar essas chamadas, de modo que o tempo total de execução da página continua aumentando. Em alguns casos, ele pode chegar a várias centenas de milissegundos. Por esse motivo, precisamos reduzir ao mínimo o tempo de obtenção de dados de nível intermediário.
Nossa solução foi hospedar um cache de dados no Couchbase. Em vez de fazer uma chamada cara de 30 ms para a camada intermediária, a interface do usuário pode obter os mesmos dados em menos de 1 ms do cache no Couchbase. A chamada à camada intermediária só é necessária quando não há dados em cache.
Para minimizar o tempo de acesso aos dados, tivemos que acessar os dados do Couchbase nativamente do ASP clássico. O roteamento por meio de uma camada de serviço adicional só aumentaria a latência e prejudicaria nossos esforços de armazenamento em cache. Por esse motivo, criamos um wrapper COM de código aberto em torno do SDK .NET para o Couchbase. Ele permite que qualquer aplicativo capaz de trabalhar com objetos COM trabalhe nativamente com servidores Couchbase.
Implantação do COM SDK
O cenário de implantação mais simples é copiar os arquivos do Couchbase COM SDK para o seu servidor e registrar as classes COM com o Regasmo ferramenta. Você pode obter os binários na versão mais recente do Versão do GitHub ou crie o projeto você mesmo. A ferramenta Regasm faz parte da instalação do .NET Framework e já deve estar presente em seu servidor.
Nesse ponto, o Couchbase COM SDK deve estar disponível para seus aplicativos.
Configuração do COM SDK
Mapear as classes de configuração do .NET em objetos COM significaria um esforço significativo de longo prazo para manter os dois em sincronia. Felizmente, o SDK do .NET nos deu a opção de usar arquivos de configuração externos. Na prática, é exatamente como trabalhar com arquivos App.Config ou Web.config em qualquer aplicativo .NET. Para obter mais detalhes, consulte Documentação do SDK do .NET.
Exemplo de configuração do COM SDK no código ASP:
O exemplo acima abrirá um arquivo de configuração no caminho especificado, procurará a seção de configuração chamada "aspCacheConfigSection" e configurará o SDK .NET subjacente com ela. Essa é uma operação única que pode ser feita em global.asa no início do aplicativo.
Otimização do uso de recursos
No ASP, os usuários normalmente criam e destroem objetos COM com bastante rapidez. Ao separar o tempo de vida dos objetos SDK .NET subjacentes de seus invólucros de objetos COM, conseguimos otimizar esse caso de uso sem afetar negativamente o uso de recursos ou o desempenho. Todos os objetos COM SDK bucket que representam um bucket do Couchbase usam, na verdade, um objeto singleton .NET SDK bucket subjacente.
Exemplo de cache ASP simples
O exemplo a seguir pressupõe que você já tenha configurado o SDK para se conectar a um cluster do Couchbase que tenha um bucket chamado "default".
Sempre começamos criando uma classe de fábrica, da qual solicitamos um objeto que nos permite trabalhar com um bucket nomeado ("default" neste exemplo). Usando a operação Get, encontramos e usamos imediatamente os dados em cache ou emitimos uma solicitação de nível intermediário e armazenamos o resultado no Couchbase. Observe que a operação Upsert para armazenar dados recebe um parâmetro adicional que especifica a expiração, nesse caso, 60 segundos.
Conclusão
Com esse simples envoltório COM em torno do Couchbase .NET SDK, ganhamos todo o poder que o Couchbase pode oferecer nativamente em aplicativos ASP clássicos. Isso nos permitiu dimensionar facilmente nossa UI ASP com apenas alguns ajustes no código. A criação do COM SDK também levou a várias contribuições para aprimorar o .NET SDK e ampliar os limites de como ele pode ser usado.