Escalando Horizontalmente com Oragon Architecture Application Server | LuizCarlosFaria .NET
Escalando Horizontalmente com Oragon Architecture…
Bom, com a implantação dos novos processos no iMusica, muita coisa aconteceu. Muitos problemas e demandas de negócio ganharam vida, mas a arquitetura em si ficou parada no host de processos. Bom, para você que não sabe o que é o Host de Processos. Foi desenvolvido no Oragon um processo base, capaz de hospedar serviços dos mais diversos:
Tarefas periodicamente agendadas
Escutas de filas de processamento
Pipelines complexos de processamento baseados em fila
Serviços WCF
Processos de Longa Duração e Processamento
Enfim, hospedamos tudo, exceto front-end. Essa é uma demanda comum nas empresas por onde passo, mas no iMusica escalar horizontalmente é uma demanda emergencial. O mecanismo criado exige certas configurações, que por mais simplificadas que sejam, demandam de uma reestruturação destas para que possamos alocar mais máquinas e mais recursos. Isso implica em:
Parar serviços
Atualizar configurações
Republicar serviços
Isso é uma tarefa bem simples quando falamos de uma ou duas aplicações. Esses 3 passos já representam um enorme avanço se comparado ao modelo anterior, no entanto temos algo ainda mais complexo pela frente. A capacidade de alocar dinamicamente mais hardware horizontalmente. Como se não bastasse o desafio, temos processos que obrigatoriamente sofrem com afinidade com algum pedaço da infraestrutura. No post Roadmap de Arquitetura – Um exemplo real eu citava os problemas com o grande volume de arquivos a serem manipulados. Bom, essa é uma característica do negócio, não há como não manipular ou trabalhar de forma diferente. Faz parte do nosso business, receber e manipular arquivos de mídia. Bom, mas nem tudo se resume a isso, e é nesse ponto que escalar horizontalmente e cross domain faz todo sentido.
A solução está sendo desenvolvida no Oragon Architecture, o projeto do qual sou responsável. Nesse momento estou trabalhando na maior reestruturação que o projeto já sofreu. A partir de agora, teremos nele um servidor de aplicação. Na prática, o host de processos evoluiu bastante, e durante o primeiro sprint ele ganhou a capacidade de hospedar dinamicamente diversas aplicações, ou a mesma aplicação diversas vezes, isolando cada aplicação em AppDomains específicos. A gestão ficou bem eficiente e as possibilidades cresceram substancialmente.
O surgimento da ideia do Servidor de Aplicação veio de um pensamento solitário baseado na técnica JACKE:
Já que eu hospedo dinamicamente aplicações
Já que tenho total controle sobre o ciclo de vida de diversas aplicações em um único processo
Então porque não, gerenciar isso remotamente?
Sem brincadeira nenhuma, com um imenso frio na barriga fui desenhando a ideia e o projeto foi brotando. As ideias foram amadurecendo e o projeto terá:
O Application Server terá uma interface robusta de gerenciamento de hosts
Cada host é um processo em uma máquina em qualquer lugar do planeta
O Application Server terá um servidor NuGet próprio e privado.
Os Hosts serão clientes do repositório NuGet público (aquele que conhecemos) e um o repositório privado, hospedado no Application Server
Os pacotes de deploy serão empacotados em pacotes NuGet
Cada host, remoto, saberá quais aplicações obter a partir do repositório NuGet do Application Server e quais dependência obter do repositório público
Em cenários onde os hosts não terão acesso ao repositório público (por restrições de infraestrutura), os pacotes que estão no repositório público poderão ser importados para o repositório privado.
Todos os hosts terão monitoramento ativo, detalhando o estado do seu domínio de aplicação e das aplicações hospedadas.
O Application Server monitorará ativamente o servidor no qual os Hosts estão hospedados, usando melhor Host para a coleta das informações da máquina.
Os protocolos de comunicação com o host são baseados em WebSocket, onde o canal é aberto a partir do Host em direção ao server, permitindo então comunicação bidirecional e ativa por parte do Application Server.
Bom, aqui já detalhei quase todo o projeto, mas não falei das possibilidades:
Hospedar hosts em diversos datacenters espalhados pelo mundo. Independente da brand, Azure, Amazon, Alog… e outros.
Controlar, e gerenciar hosts remotos, independente de sua localização geográfica
Segmentar hosts por afinidade com as demandas de cada parte da aplicação
Bom, algumas das ideias surgiram ainda nessa semana. Embora eu já tivesse pensado em criar os pacotes de aplicação, por exemplo, pensei em Zip`s, com extensões diferenciadas, mas olhando as novidades do vNext, estou certo de que a Microsoft pretende usar o próprio NuGet como primo do WAR.
A propósito, se gosta de tecnologia e gostaria de participar do projeto estou aberto e aceito parcerias para conduzir essa grande empreitada.
Vamos desmistificando algumas tecnologias:
Owin Self Hosted
Web Api sob OWIN
SignalR sob OWIN
OMvc (Oragon MVC) também sobre OWIN
Host NuGet (em estudo)
Empacotamento dinâmico de aplicações com NuGet (em estudo)
Embedded Web Application (toda hopedada em uma DLL, contendo)
Linq to JS
O projeto está hospedado no GitHub (https://github.com/luizcarlosfaria/Oragon.Architecture)
Todo o gerenciamento das atividades está sendo feito via huboard ( https://huboard.com/luizcarlosfaria/Oragon.Architecture )
Aceito dúvidas, críticas, sugestões, reclamações, pedidos de doces, enfeites para geladeira e tudo mais!!!
Mantenha-se conectado. No mais, aqui temos uma página para contato, onde você pode ver um pouco mais sobre minha carreira e quem eu sou.
Obrigado pela sua atenção, pelo seu tempo e espero você usando o Oragon Architecture em seus projetos. Estou trabalhando muito para que a solução possa atender a cada vez mais projetos.
Todo o desenvolvimento está sendo feito direto no GitHub, e o projeto é Open Source, mas fique atento, é dual license.
Category: Patterns & PracticesPor Luiz Carlos Faria 20/05/2014 Deixe um comentário
Marcações: Oragon Architecture Application HostingOragon Architecture Application ServerSignalRSoftware Architecture
AnteriorPost anterior:vNext – AppDomainPróximoPróximo post:Open Source, algumas ferramentas que irão te ajudar