Monday 16 May 2011

Azure Deployment de 20 minutos para 30 segundos

As últimas semanas foram super-aterefadas a colocar online o projecto http://www.bizsimplex.com (ainda BETA), a corrigir bugs e a planear o trabalho das próximas semanas, mesmo assim tive um pouco de tempo para um projecto que estava na gaveta que tinha que ser implementado.

Todos os que desenvolvem para Azure já se depararam com o problema do deployment. É um problema incontornável, pois, quando fazemos o upload dos novos binários temos que esperar que seja criada três máquinas virtuais que irão conter a nossa aplicação e ainda arranca-las.
Este processo poderá demorar de 15 minutos a 30 minutos no pior dos cenários. Numa pequena empresa como a IBST, este tempo de deployment é totalmente, completamente, absolutamente inconsebível pois dependemos da rapidez de resolução dos problemas dos nossos clientes como arma para o nosso sucesso.

Como temos mais do que um WebSite na mesma WebRole, faz com que o deployment (por mais pequeno que seja) num, manda abaixo todos nesse período. Se fizermos dois ou três deplyments por dia em sites diferentes teriamos um downtime em todos os nossos serviços de mais de 60 minuto.

Desta forma resolvi meter as mãos na massa, procurar alguma informação e descobri que podemos correr um loop na WebRole.Run que cria os vários sites no IIS da instancia.
Desta forma o que fiz foi: colocar um ZIP file no BlobStorage com o site e nesse loop fazer o download desse ZIP, descompacta-lo e criar a WebApplication no IIS. Voilá, funcionou na perfeição.

Depois de colocar ainda umas validações que indicam que só faz download de ficheiros novos, coloquei online e sempre que um ZIP é actualizado o sistema vai busca-lo e cria uma nova aplicação no IIS, isto tudo em menos de 30 segundos.
O projecto ainda não está pronto para todos veres ou usarem, pelo que não vou mostrar a ninguém. Para os que pensam que os 30 minutos de deplyment no azure é um problema, acreditem, é possivel ultrapassar.

Paulo Aboim Pinto

No comments: