Atualmente, estamos no processo de projetar a arquitetura de nossa nova configuração de nuvem do Apache Mesos. O objetivo é unificar nossos sistemas movendo pilhas diferentes para a mesma arquitetura. As principais cargas de trabalho são a análise de big data usando o Apache Spark e nossa infraestrutura corporativa, incluindo servidores web, servidores de correio etc.
A idéia é executar nossos serviços da Web em contêineres do Docker executando sobre um dos agendadores disponíveis para o Mesos (Marathon / Chronos, Aurora ou Singularity). Este seria, portanto, o primeiro grupo de estrutura do Mesos. Ao lado, teríamos a estrutura do Apache Spark e várias estruturas de banco de dados para armazenamento de dados. Este seria o segundo grupo de estruturas do Mesos. Escolheremos os detalhes depois de executá-los todos em paralelo para teste.
Temos problemas para decidir, no entanto, em que base executar o próprio Mesos. Idealmente, queremos executá-lo o mais próximo possível do metal. Também queremos usar uma solução de orquestração para garantir que os daemons do Mesos e framework estejam sempre em execução / reiniciados em caso de falha. As opções que estamos considerando são as seguintes:
1) Executando o Mesos e as estruturas como contêineres de docker em um sistema operacional mínimo. Nesse sentido, atualmente estamos nos inclinando para o CoreOS e Fleet.
2) Executando o Mesos e os frameworks diretamente nos servidores Ubuntu / Debian. Para esta opção, estamos nos inclinando para o Foreman e o Puppet.
Quanto à questão, procuramos identificar a solução que, em ordem de importância:
- é o menos complexo de configurar
- é o mais fácil de manter e manter atualizado
- tem o mínimo de sobrecarga
Nós não trabalhamos com o CoreOS antes, mas é a opção que parece estar caminhando. Um grande problema (subjetivo) que tenho com isso é que executamos o Mesos nos contêineres do Docker e, em seguida, executamos os contêineres do Docker no Mesos. Isso parece "impuro" e errado para mim. Essa consideração é sem mérito?
Um pensamento semelhante diz respeito à redundância entre as camadas. Para explicar de onde eu venho, eu preferiria que o Mesos fosse um sistema operacional real que simplesmente roda bem em cima do metal. Parece que, independentemente da base usada, você acaba com a mesma funcionalidade pretendida em mais de uma camada da arquitetura (por exemplo, CoreOS & Fleet & SystemD == Mesos & Marathon & Chronos). Isso é inevitável?
Existem outras boas opções para executar a camada abaixo do Mesos que não consideramos, tendo em mente nossos critérios?