fbpx
Escalando Horizontalmente com Oragon Architecture Application Server

Olá, como vai você?

Espero que bem, espero também que esteja em uma posição confortável, pois pretendo falar sobre como podemos escalar aplicações e serviços horizontalmente com o 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 filahuboard oragon
  • 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:

  1. Framework 4.5.1
  2. Owin Self Hosted
  3. Web Api sob OWIN
  4. SignalR sob OWIN
  5. OMvc (Oragon MVC) também sobre OWIN
  6. Host NuGet (em estudo)
  7. Empacotamento dinâmico de aplicações com NuGet (em estudo)
  8. Embedded Web Application (toda hopedada em uma DLL, contendo)
    1. ExtJS
    2. Bootstrap
    3. Jquery
    4. Linq to JS
    5. RadioJS
    6. JQuery

e muito mais!

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.

Um grande abraço e até a próxima!

 

 

 

 

 

 

 

Todo o desenvolvimento está sendo feito direto no GitHub, e o projeto é Open Source, mas fique atento, é dual license.

O Cloud Native .NET é meu principal projeto.

Onde empenho energia para ajudar, acompanhar, direcionar Desenvolvedores, Líderes Técnicos e jovens Arquitetos na jornada Cloud Native.

Conduzo entregando a maior e mais completa stack de tecnologias do mercado.

Ao trabalhar com desenvolvedores experientes, eu consigo usar seu aprendizado com .NET, banco de dados, e arquitetura para encurtar a jornada.

Ao restringir à desenvolvedores .NET eu consigo usar do contexto de tecnologias e problemas do seu dia-a-dia, coisas que você conhece hoje, como WCF, WebForms, IIS e MVC, por exemplo, para mostrar a comparação entre o que você conhece e o que está sendo apresentado.

É assim que construímos fundamentos sólidos, digerindo a complexidade com didática, tornando o complexo, simples.

É assim que conseguimos tornar uma jornada densa, em um pacote de ~4 meses.

Eu não acredito que um desenvolvedor possa entender uma tecnologia sem compreender seus fundamentos. Ele no máximo consegue ser produtivo, mas isso não faz desse desenvolvedor um bom tomador de decisões técnicas.

É preciso entender os fundamentos para conseguir tomar boas decisões.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Luiz Carlos Faria

Mensagem do Autor

Espero que goste desse post. Não deixe de comentar e falar o que achou.

Se acha que esse post pode ajudar alguém que você conheça, compartilhe!

 

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.