Un tas de nouveaux fichiers avec des noms de fichiers uniques "apparaissent" régulièrement 1 sur un serveur. (Comme des centaines de Go de nouvelles données par jour, la solution doit être évolutive en téraoctets. Chaque fichier fait plusieurs mégaoctets, jusqu'à plusieurs dizaines de mégaoctets.)
Il existe plusieurs machines qui traitent ces fichiers. (Des dizaines, si la solution est extensible à des centaines.) Il devrait être possible d' ajouter et de supprimer facilement de nouvelles machines.
Il existe des serveurs de stockage de fichiers de sauvegarde sur lesquels chaque fichier entrant doit être copié pour le stockage d'archivage. Les données ne doivent pas être perdues, tous les fichiers entrants doivent finir livrés sur le serveur de stockage de sauvegarde.
Chaque fichier entrant doit être livré à une seule machine pour traitement et doit être copié sur le serveur de stockage de sauvegarde.
Le serveur récepteur n'a pas besoin de stocker les fichiers après leur envoi.
Veuillez conseiller une solution robuste pour distribuer les fichiers de la manière décrite ci-dessus. La solution ne doit pas être basée sur Java. Les solutions Unix-way sont préférables.
Les serveurs sont basés sur Ubuntu, sont situés dans le même centre de données. Toutes les autres choses peuvent être adaptées aux exigences de la solution.
1 Notez que j'omets intentionnellement des informations sur la façon dont les fichiers sont transportés vers le système de fichiers. La raison en est que les fichiers sont envoyés par des tiers par plusieurs moyens hérités différents de nos jours (étrangement, via scp et via ØMQ). Il semble plus facile de couper l'interface inter-cluster au niveau du système de fichiers, mais si l'une ou l'autre solution nécessite réellement un transport spécifique - les transports hérités peuvent être mis à niveau vers celui-ci.
Réponses:
Voici une solution à ce que vous recherchez. Aucun java n'est impliqué dans la fabrication de ce système, juste des bits Open Source facilement disponibles. Le modèle présenté ici peut fonctionner avec d'autres technologies que celles que j'utilise comme exemple.
Cette configuration devrait être capable d'ingérer des fichiers à des vitesses extrêmes avec suffisamment de serveurs. L'obtention de vitesses d'ingestion agrégées de 10 GbE devrait être réalisable si vous les augmentez suffisamment. Bien sûr, le traitement d'une quantité de données aussi rapide nécessitera encore plus de serveurs dans votre classe de machine de traitement. Cette configuration devrait évoluer jusqu'à un millier de nœuds, et probablement au-delà (bien que la distance dépende de ce que vous faites exactement avec tout cela).
Les défis majeurs de l'ingénierie seront dans le processus de gestion du workflow caché dans le processus AMQP. C'est tout un logiciel, et probablement construit sur mesure pour les exigences de votre système. Mais il faut bien se nourrir de données!
la source
Étant donné que vous avez précisé que les fichiers arriveront via scp, je ne vois aucune raison pour que le serveur frontal existe du tout, car le mécanisme de transport est quelque chose qui peut être redirigé au niveau 3.
Je mettrais un directeur LVS (paire) devant, avec un pool de serveurs de traitement derrière et une politique de redirection à tour de rôle. Cela rend très facile l'ajout et la soustraction de serveurs au / du pool, cela augmente la fiabilité car il n'y a pas de serveur frontal à tomber, et cela signifie que nous n'avons pas à répondre à la question pull / push sur l'obtention des fichiers à partir de l'interface aux serveurs de traitement car il n'y a pas d'interface.
Chaque serveur de pool doit alors faire deux choses lors de la réception d'un fichier: premièrement, copiez-le dans le stockage d'archives, puis traitez le fichier et envoyez-le en cours de route.
la source