Nos últimos tempos vem se falando muito em computação na nuvem, computação distribuída, Linux containers, Big Data, etc. Junto com o crescimento dessas tecnologias também se observa o surgimento de inúmeras ferramentas para resolver os problemas encontrados nesta área da computação. Poderíamos citar várias, mas iremos falar brevemente sobre Apache Mesos. Não irei me aprofundar muito pois pretendo fazer mais artigos sobre o assunto detalhando mais em determinados tópicos.
O Apache Mesos é considerado o kernel de sistemas distribuídos. Ele foi criado com os mesmos princípios do kernel Linux, só que em outro nível de abstração. O Mesos roda em todos os nós de cluster e prove a frameworks como Apache Spark, Hadoop, Cassandra, Kafka, Elastic Search e outros uma API para alocar recursos e rodarem suas tasks através de todo o cluster ou cloud. Em um Mesos cluster, CPU, memória, disco e outros recursos computacionais de todas as máquinas, virtuais ou físicas, são abstraídos em um único pool de recursos. Facilitando a criação e otimizando a utilização de sistemas distribuídos.
Arquitetura
O Mesos tem como objetivo prover um core confiável e escalável para que diversas aplicações consigam compartilhar um mesmo cluster. Para isso, ele fornece uma API mínima que permite compartilhar recursos de forma eficiente entre os frameworks, dando a eles o controle para programarem e executarem suas tasks. Sua arquitetura é composta por três componente principais: Mesos master, Mesos agent e os frameworks.Frameworks são as aplicações que rodam em um Mesos cluster, cada um delas possui um scheduler e um executor. O scheduler é a aplicação que se registra no master para que então possa alocar recursos e enviar tasks para execução. O executor é o processo executado nos nó dos cluster para executar as tarefas do framework. O Mesos agent é o processo daemon que roda em todos os nós do cluster. Sua responsabilidade é alocar os recursos definidos para cada task enviada pelo Mesos master e executa-la (através do executor). O Mesos master, como o próprio nome diz, é o processo que gerencia todo cluster. Através do seu módulo de alocação é definido quanto de recursos deve ser oferecido para cada framework. É no master também que os agents se registram para reportar o quanto possuem de recursos disponíveis, atualizar o status das tasks em execução e etc.
Oferta de recursos
Para permitir que o mesmo cluster possa ser utilizado por diversos frameworks e o Mesos continue se mantendo simples e escalável, é utilizado uma abordagem de oferta de recursos. Isso significa que o Mesos master, utilizando o módulo de alocação, define o quanto de recursos devem ser ofertado para cada framework rodando no cluster. Uma vez feita a oferta, o scheduler da cada framework tem a liberdade de aceitar ou recusar os recursos.A oferta de recursos começa quando o agent registrado no master reporta o quando de recursos possui disponível para ser utilizado. Uma vez com essas informações, o módulo de alocação do master pode decidir o quando de recurso pode ser ofertado para cada framework. Lembrando que as ofertas podem ser diferentes, isso depende de qual módulo de alocação segue as políticas de alocação de cada organização. Uma vez feita a oferta o scheduler do framework tem a responsabilidade de aceitar ou recusa baseado em suas necessidades. Caso o framework decida aceitar a oferta é retornado ao master uma descrição das tarefas que devem ser executadas e quanto de recursos devem ser alocados para cada uma. O master por sua vez, envia esses dados para o agent que aloca os recursos especificados para o executor do framework, este por sua vez executa as tasks especificadas pelo scheduler. Não vou entrar muito em detalhes de como a oferta de recursos acontece na prática para não estender muito o texto. Pretendo entrar em detalhes em um artigo futuro sobre como implementar um framework.