BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Twitter rend open source Storm

Twitter rend open source Storm

Favoris

News originale le 26 septembre 2011

Twitter a rendu open source Storm, son système distribué de calcul temps réel. Le projet est disponible sur GitHub sous la licence Eclipse Public License 1.0. Storm est le système de calcul en temps réel développé par la société BackType, qui a depuis été acquise par Twitter. La dernière version du projet disponible sur GitHub est la version 0.8.1, et est écrite principalement en Clojure.

Storm fournit un ensemble d'outil pour réaliser du calcul en temps réel. Il peut être utilisé pour du traitement de flux, le traitement des messages et la mise à jour des bases de données en temps réel. Il s'agit d'une alternative à la gestion de son propre cluster de queues et de workers. Storm peut être utilisé pour du «calcul en continu», en faisant une requête sur les flux de données au fil de l'eau et fournissant les résultats directement aux utilisateurs dès qu'ils sont calculés. Il peut également être utilisé pour réaliser du "distributed RPC", en exécutant en parallèle un calcul coûteux à la volée. Selon Nathan Marz, l'ingénieur en chef du projet:

Storm rend facile l'écriture de calculs complexes en temps réel et assure leur scalabilité sur un cluster d'ordinateurs, faisant pour le traitement en temps réel ce que > Hadoop fait pour le traitement par batch. Storm garantit que chaque message sera traité. Et il est rapide - vous pouvez traiter des millions de messages par seconde sur un > petit cluster. Mieux que cela, vous pouvez écrire des topologies Storm en utilisant n'importe quel langage de programmation.

Les principales caractéristiques de Storm sont les suivantes:

  1. Un modèle de programmation simple. Semblable à la façon dont MapReduce simplifie le traitement par lot de manière parallèle, Storm simplifie le traitement en temps réel.
  2. Exécutable avec n'importe quel langage de programmation. Vous pouvez utiliser n'importe quel langage de programmation au-dessus de Storm. Les langages Clojure, Java, Ruby, Python sont supportés par défaut. Des langages supplémentaires peuvent être pris en charge simplement en implémentant le protocole de communication de Storm.
  3. Tolérant à la panne. Storm gère les processus d'exécutions et les erreurs de chaque noeud.
  4. Scalable horizontalement. L'exécution des calculs est parallélisée et utilise plusieurs threads, processus et serveurs.
  5. Garantit le traitement des messages. Storm garantit que chaque message est entièrement traité au moins une fois. Il se charge de rejouer les messages depuis leur source lorsqu'une tâche échoue.
  6. Rapide. Le système est conçu de telle sorte que les messages sont traités rapidement et utilise ØMQ comme queue de message.
  7. Fonctionne en mode local. Storm dispose d'un mode «local» où il simule un cluster Storm complet en mémoire. Cela permet de développer et tester de nouvelles topologies rapidement.

Le cluster Storm est composée d'un noeud maître (master) et de noeuds d'exécution (workers). Le noeud maître exécute un démon appelé "Nimbus" qui est responsable de la répartition du code, l'attribution des tâches, et pour la gestion des erreurs. Chaque noeud worker exécute un démon appelé «superviseur», qui reçoit les tâches à exécuter et qui démarre et arrête les processus d'exécution. Les démons Nimbus et Superviseur sont sans état et fail-fast, ce qui les rend robustes, la coordination entre eux étant gérée par Apache Zookeeper.

La terminologie Storm comprend les Streams, Spouts, Bolts, Tasks, Workers, Stream Groupings, et les Topologies. Les Streams sont les données en cours de traitement. Les Spouts sont les sources de données. Les Bolts traitent les données. Les Tasks sont des threads qui s'exécutent au sein d'un Spout ou d'un Bolt. Les workers sont les processus qui exécutent ces threads. Les Stream Groupings spécifient quelle données les Bolts reçoivent en entrée. Les données peuvent être distribuées de façon aléatoire (Shuffle), groupées selon la valeur du champ (Fields), diffusées à tous (All), diffusées à une seule tâche (Global), ou déterminée par une logique personnalisée (Direct) . La topologie est le réseau des noeuds de Spouts et des Bolts reliés par des Stream Groupings. Ces termes sont décrits plus en détail dans la page "Storm Concept" du wiki.

Les systèmes comparables à Storm sont Esper, StreamBase, HStreaming et Yahoo S4. Parmi ceux-ci, le plus proche est S4. La plus grande différence entre S4 et Storm est que ce dernier garantit le traitement des messages. Certains de ces systèmes ont une couche de persistance des données que Storm n'a pas. Avec Storm, il sera nécessaire d'utiliser une base de données externe comme Cassandra ou Riak dans les topologies pour persister des données.

Pour commencer à utiliser Storm, le meilleur moyen est encore de lire la documentation officielle. Elle présente les différents concepts de Storm, et fournit des exemples de code permettant pour xécuter des topologies Storm. Au cours du développement, exécutez Tempête en mode local pour pouvoir développer et tester des topologies sur votre machine locale. Lorsque vous êtes prêt, il suffit de lancer Storm en mode distant et d'injecter des topologies à exécuter sur un cluster de machines. Les utilisateurs de Maven peuvent utiliser la dépendance Storm du référentiel clojars.org.

Pour exécuter Storm sur un cluster, vous aurez besoin d'Apache Zookeeper, ØMQ, JZMQ, Java 6 et Python 2.6.6. Zookeeper est utilisé pour gérer les différents composants du cluster, ØMQ est utilisé comme système de messagerie interne et JZMQ est la librairie Java pour ØMQ. Il existe un projet storm-deploy qui permet de déployer en un clic des clusters Storm sur AWS. Il suffit de lire la page "Setting up a Storm cluster" sur le wiki du projet.

Pour plus d'informations à propos de Storm, visitez le Wiki officiel du projet. Vous pouvez également rejoindre la liste de diffusion de Storm et le canal de discussion IRC(#storm-user) sur freenode.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT