lundi 29 décembre 2014

Java pour les grands ... du web et les autres

Cet article vise à recenser quelques cas d'usage spectaculaires ou inattendus de technologies Java avec sans l'usage du langage Java lui même.

Il vise aussi à dissiper certains doutes quant aux capacités de Java à opérer dans des contextes difficiles : haute disponibilité, BigData, forte charge, ...

Au vu des cas d'utilisation qui suivent, notamment dans le domaine de la haute disponibilité et du big data, peut-on croire un seul instant que des sociétés comme Apple, Yahoo, Netflix, Spotify, ... confieraient leurs données ou leurs services à une technologie qui ne "scale" pas et qui n'est pas performante ?

JavaCard : une système d'exploitation pour carte à puces

Oracle revendique 2 milliards de déploiement par an sur différents types de matériels.

Sources:
http://www.oracle.com/us/technologies/java/embedded/card/overview/index.html
http://fr.wikipedia.org/wiki/Java_Card

BigData : le stockage

Apache Cassandra est une BDD NoSQL Java, voici quelques déploiements :

- Apple : 75 000 noeuds stockant plus de 10 Péta octets de données
- Netflix : 2 500 noeuds 420 Téra octets, 1 trillion de requête par jour
- eBay : 100 noeuds 250 T octets

Au départ développée par Facebook puis donné à la fondation Apache.

De très nombreux clients prestigieux : Cern, GitHub, ...

Sources :
http://cassandra.apache.org/,
http://fr.wikipedia.org/wiki/Cassandra_%28base_de_donn%C3%A9es%29


Apache HBase est aussi une BDD NoSQL Java, voici quelques déploiements :
- Facebook : remplace Cassandra depuis 2012 pour stocker les messages.
- Twitter
- Yahoo

Sources :
http://hbase.apache.org/
http://fr.slideshare.net/brizzzdotcom/facebook-messages-hbase
http://wiki.apache.org/hadoop/Hbase/PoweredBy



Administration système : Puppet

Oui, vous ne rêvez pas. Les profils système sont probablement ceux qui dénigrent le plus Java et souvent ceux qui connaissent le moins cet écosystème.

Et pourtant, une des technologies les plus emblématiques du monde système vient de mettre un pied dans le monde Java : Puppet.

Puppet Server tournera maintenant sur une JVM, les raisons évoquées sont claires :

"
The JVM is an ideal platform to use for long-running server side applications. It's been battle-tested over the last 20 years, and it’s an extremely fast, stable, and reliable platform on which to run applications like web servers, message queues, and other services.

Additionally, it has a wealth of existing tools, libraries, and frameworks that serve as tremendously valuable building blocks to enable rapid development and allow developers to focus their efforts on domain-specific problems.

Several great profiling tools and debuggers available in the JVM ecosystem give developers and users unparalleled insight into the behavior and performance of their applications.

Sophisticated instrumentation and metrics APIs allow us to track the most important characteristics of a running application, and expose them in a highly visible, user-friendly fashion. And because JVM-based applications are portable across most of our supported platforms, we don’t need to spend as much time building and packaging things for each individual platform.
"

Pour résumé :

- richesse de l'écosystème : la question quand on fait du Java n'est pas de trouver une librairie pour tel besoin mais plutôt de choisir dans celles disponibles.

- portabilité : j'invite les amateurs de Python, C, Ruby et autres à mettre à l'épreuve cette propriété fort intéressante pour les éditeurs de logiciel qui peuvent alors se concentrer sur leur métier

- instrumentation et métriques : fondamental pour le cloud et autres besoins, ce point est particulièrement industrialisé pour la plateforme Java

Sources:
http://puppetlabs.com/blog/new-era-application-services-puppet-labs


API à fort traffic
 
L'API de Netflix est fortement sollicité et doit respecter des niveaux de service strict pour délivrer une bonne expérience utilisateur.

Le trafic en 2012, voir l'article dans les sources , est impressionnant : 1 milliard de requête par jour, 100 000 requêtes à la seconde.

Le tout sur une architecture Java à base de Tomcat/Jetty et une approche SOA.

Plusieurs protocoles sont disponibles pour optimiser les appels à l'API : Protobuf, Thrift, ...

Sources :
http://techblog.netflix.com/2012/02/fault-tolerance-in-high-volume.html


BigData : l'analyse des données

LinkedIn libère son moteur d'analyse des données: Cubert.

Sources:
https://engineering.linkedin.com/big-data/open-sourcing-cubert-high-performance-computation-engine-complex-big-data-analytics




Internet des objets

La communauté Java s'intéresse fortement à ce sujet : https://community.java.net/community/iot

La fondation Eclipse propose une plateforme Iot : http://iot.eclipse.org/java/


 BigData : la recherche

 ElasticSearch est un moteur de recherche et un conteneur de données NoSQL.

Quelques déploiements :
- Deezer
- Github
- SoundClound
- MacGraw and Hill
- Gendarmerie nationale

La société qui développe ElasticSearch propose d'autres produits Kibana,LogTash qui sont prisés dans le domaine de la gestion des logs.

Sources:
http://www.elasticsearch.org/case-studies/
http://www.elasticsearch.org/overview/kibana/



Administration système : Zookeeper

Apache Zookeeper a été développé par Yahoo pour différents besoins : c'est un système distribué de coordination utile pour des tâches comme l'élection de leader, le déploiement de configuration, ...


Déploiements:
- Yahoo
- Rackspace
- Zynga : http://code.zynga.com/2011/08/updating-thousands-of-configuration-files-in-under-a-second/
- ...

Utilisé par:
- Apache HBase
- Akka
- Redis
- ...

Sources:
https://cwiki.apache.org/confluence/display/ZOOKEEPER/PoweredBy
http://fr.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper



Qualité et analyse de code

Sonar reste pour moi un des plus beaux outils de ces dernières années, il permet un niveau d'analyse et de contrôle sur le code Java qui est très important : http://www.sonarqube.org/, tout en étant ouvert à d'autres langages.


Voici ce que Sonar peut produire comme analyse:
http://nemo.sonarqube.org/

2 commentaires:

  1. Olivier, tu peux aussi rajouter tout ce qui tourne autour de Pentaho et PDI (Pentaho Data Integrator ou Kettle) qui permet d'avoir un ETL et de faire du décisionnel big data (ou pas...) en Java.
    https://github.com/pentaho
    Et bonne année 2015 à Java!!!!

    RépondreSupprimer