Um monte de novos arquivos com nomes de arquivos exclusivos regularmente "aparece" 1 em um servidor. (Como centenas de GB de novos dados diariamente, a solução deve ser escalável para terabytes. Cada arquivo tem vários megabytes de tamanho, até várias dezenas de megabytes.)
Existem várias máquinas que processam esses arquivos. (Dezenas, a solução deve ser escalável para centenas.) Deve ser possível adicionar e remover facilmente novas máquinas.
Existem servidores de armazenamento de arquivos de backup nos quais cada arquivo recebido deve ser copiado para armazenamento de arquivo. Os dados não devem ser perdidos, todos os arquivos recebidos devem ser entregues no servidor de armazenamento de backup.
Cada arquivo recebido myst deve ser entregue em uma única máquina para processamento e deve ser copiado para o servidor de armazenamento de backup.
O servidor receptor não precisa armazenar arquivos depois de enviá-los a caminho.
Por favor, informe uma solução robusta para distribuir os arquivos da maneira descrita acima. A solução não deve ser baseada em Java. Soluções Unix-way são preferíveis.
Os servidores são baseados no Ubuntu, estão localizados no mesmo data center. Todas as outras coisas podem ser adaptadas para os requisitos da solução.
1 Observe que omiti intencionalmente informações sobre como os arquivos são transportados para o sistema de arquivos. O motivo é que os arquivos estão sendo enviados por terceiros por diversos meios legados hoje em dia (estranhamente, via scp e via ØMQ). Parece mais fácil reduzir a interface de cluster cruzado no nível do sistema de arquivos, mas se uma ou outra solução exigir algum transporte específico - os transportes herdados podem ser atualizados para esse.
Respostas:
Aqui está uma solução para o que você está procurando. Nenhum java está envolvido na criação deste sistema, apenas bits de código aberto prontamente disponíveis. O modelo apresentado aqui pode funcionar com outras tecnologias além das que estou usando como exemplo.
Essa configuração deve poder ingerir arquivos a taxas extremas de velocidade, considerando servidores suficientes. A obtenção de velocidades de ingestão agregada de 10 GbE deve ser possível se você aumentar o tamanho suficiente. Obviamente, processar tantos dados com tanta rapidez exigirá ainda mais servidores na sua classe de máquinas de processamento. Essa configuração deve escalar até mil nós e provavelmente além (embora até que ponto dependa exatamente do que você está fazendo com tudo isso).
Os profundos desafios de engenharia estarão no processo de gerenciamento de fluxo de trabalho oculto dentro do processo AMQP. Isso é tudo software, e provavelmente construído sob medida para as demandas do seu sistema. Mas deve ser bem alimentado com dados!
fonte
Dado que você esclareceu que os arquivos chegarão via scp, não vejo nenhum motivo para a existência do servidor front-end, pois o mecanismo de transporte é algo que pode ser redirecionado na camada 3.
Eu colocaria um diretor LVS (par) na frente, com um pool de servidores de processamento atrás e uma política de redirecionamento round-robin. Isso facilita muito adicionar e subtrair servidores de / para o pool, aumenta a confiabilidade porque não há servidor front-end para cair e significa que não precisamos resolver a questão de obter / enviar sobre como obter os arquivos o front-end para os servidores de processamento porque não há front-end.
Cada servidor de pool deve fazer duas coisas ao receber um arquivo - primeiro, copie-o para o armazenamento em arquivo, processe o arquivo e envie-o a caminho.
fonte