Typesafe a annoncé une preview d'Akka Streams, une implémentation open-source de la spécification des Reactive Streams actuellement à l'état de draft, s'appuyant sur une implémentation à base d'acteurs. L'initiative derrière les Reactive Streams vise à mettre au point un standard sur la Java Virtual Machine (JVM) pour le traitement des flux asynchrones avec back pressure non bloquante. L'asynchronisme est requis pour permettre l'utilisation parallèle des ressources de calcul et la back pressure pour s'assurer que le producteur de données ne submerge pas le consommateur et ne fasse pas potentiellement tomber tout le système. Les Reactive Streams sont issus d'une collaboration entre Twitter, Oracle, Pivotal, Red Hat, Applied Duality, Typesafe, Netflix, Spray.io et Doug Lea.
Nous sommes de plus en plus confrontés à des traitements basés sur des flux : certains traitent des flux vidéo, d'autres prennent en charge des transactions pour des millions d'utilisateurs concurrents, ou cherchent des patterns en temps-réel dans les actions des utilisateurs. Prendre en charge des flux de données, qu'il s'agisse de contenu temps-réel ou de transferts de données en masse, requiert une attention particulière car la consommation des ressources doit être contrôlée de façon précise afin qu'une source de données rapide ne submerge pas la destination du flux. L'objectif de la spécification des Reactive Streams est de créer un standard pour prendre en charge des flux de façon statiquement typée, hautement performante, avec une faible latence et de façon asynchrone, ceci avec un mécanisme de back pressure non bloquant intégré, qui aboutirait à un support standardisé sur la plateforme Java. La capacité de prendre en charge la back pressure entre les différentes étapes asynchrones d'exécution permettrait de distribuer le traitement des flux à travers un cluster d'une centaine de noeuds. Quand un système atteint les limites de ses capacités, il devient nécessaire de réagir aux débordements, ce qui est généralement fait, soit en ralentissant la source externe, soit en laissant tomber des requêtes de façon contrôlée.
Les Akka Streams, l'implémentation d'Akka des Reactive Streams, s'appuient sur des acteurs pour les mécanismes d'exécution, de distribution et de résilience. Un fluent DSL permet la formulation de graphes de traitements qui sont ensuite transformés en réseau d'acteurs. L'implémentation actuelle exécute chaque étape dans son acteur propre, mais les futures versions viendront avec des alternatives, comme la possibilité d'exécuter des opérations en masse depuis un seul acteur.
La spécification des Reactive Streams permet la création d'implémentations en garantissant conformité et inter-opérabilité. Il y a actuellement 3 implémentations de ce draft de spécification. La première est Akka Streams. La seconde est Reactor Composable, dont l'implémentation en cours de travail est explorée pour utilisation avec Reactor 1.1 et plus. La troisième est RxJava et est en cours de prototypage et d'exploration pour une intégration à RxJava 1.0.
Pour commencer, vous pouvez télécharger l'activateur Typesafe et vous lancer avec le template Scala des Akka Streams. L'équivalent Java est à venir. Pour plus d'informations, vous pouvez vous reporter à l'annonce officielle par Typesafe ou sur ReadWrite, Real-Time Data Streaming Get Standardized. Vous pouvez aussi vous inscrire au webinar Introducing Reactive Streams, prévu le 7 mai 2014 à 9:00 AM PDT.