lundi 29 décembre 2014

Spectacular Java


This post is a sample of what Java technology can do with or without Java Language.

Some use cases are spectacular and show the capacity of Java to operate under hard conditions : high availability, BigData, ...


JavaCard : an OS for card

Oracle claims two milliards deployments per year on various hardwares.

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

BigData : storage

Apache Cassandra is a NoSQL DB written in Java, here are some deployments :

- Apple : 75 000 nodes, 10 peta bytes of data
- Netflix : 2 500 nodes, 420 tera bytes of data, 1 trillion requests per day
- eBay : 100 nodes 250 tera bytes of data

Originally built by Facebook then given to Apache fundation.

Shiny customers   : Cern, GitHub, ...

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


Apache HBase is also a NoSQL DB written Java :
- Facebook : replace Cassandra since 2012 to store messages.
- Twitter
- Yahoo

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



System admin : Puppet

Yes, it's real.

Operationals are probably the most hateful people about Java and probably the most ignorant about it.

Although, one of the most known and use system technology use Java : Puppet.

Puppet Server run now on JVM :

"
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.
"

Summary :

- ecosystem wealth
- portability : try to run a  Python, C, Ruby software on many Linux and unix flavors without turning mad
- instrumentation and metrics : a must have feature for cloud others needs, this a strong feature in Java platform (JMX, Java Agent, AOP, ...)

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


API under heavy load

Netflix API is heavily used and must respect SLA to deliver a good user experience.

In 2012 ( check above link ) is impressive : 1 billion request per day, 100 000 request per second.

Based on a Tomcat/Jetty architecture and SOA approach.

Many protocols are used to improve performance : Protobuf, Thrift, ...

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


BigData : data analysis

LinkedIn open source Cubert.

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




Internet of things

Java community is passionate about this subject : https://community.java.net/community/iot

Eclipse fundation offers an Iot platform : http://iot.eclipse.org/java/


 BigData : search

 ElasticSearch is a search engine and a data storage.

Some customers :
- Deezer
- Github
- SoundClound
- MacGraw and Hill
- France, Gendarmerie nationale

ElasticSearch company has many satellite products : Kibana, LogTash are a  must for logs processing.

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



System admin : Zookeeper

Apache Zookeeper has been built by Yahoo for many needs : it's a distributed  coordination system useful for many  tasks like  election leader, deployment configuration, ...

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

Used by:
- Apache HBase
- Akka
- Redis
- ...

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


Quality and code analysis

Sonar is for me one of the best tool of recent years, it allows a fine code analysis : http://www.sonarqube.org/, its open to other languages.


Here are samples of Sonar analysis:
http://nemo.sonarqube.org/

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/

dimanche 9 novembre 2014

Glassfish : un an après, Glassfish est-il vraiment mort ?

Il y a 1 an  Oracle décidait d'abandonner le produit commercial Oracle Glassfish Server et incitait ses clients à migrer sur son serveur WebLogic.

Aussitôt, un concert de voix plus ou moins bien intentionnées avaient posté ça et là des articles alarmistes sur le nième coup de canif porté à Java par Oracle et sur l'urgence d'abandonner Glassfish.

Quel est le problème ?



Oracle est suspect depuis le début de son aventure Java : on soupçonne cette entreprise d'avoir une stratégie cachée concernant Java.


Le but inavoué serait donc de tuer Java après avoir dépensé des milliards de dollars pour acquérir cette technologie via le rachat de SUN.

Oracle serait également aux yeux de ces détracteurs un piètre défenseur de l'esprit Open Source qui anime la communauté Java.

Il y aurait donc un complot Oracle visant à détruire Java. 

Personnellement, je n'ai pas encore compris quel était l'intérêt économique d'une opération de ce type et personne n'a été capable de me l'expliquer mais les théories du complot se moquent bien de la logique.

Qu'Oracle soit fort mal à l'aise avec les pratiques d'un écosystème basé sur l'Open Source et qu'il y ait eu des maladresses est une autre histoire.

Oracle est un des plus grands éditeur commercial de logiciels et de solutions d'entreprise : la défense agressive de ses intérêts fait partie de son ADN dans un environnement concurrentiel fort, comme les autres éditeurs d'ailleurs.

Il est clair que cette agressivité passe mal auprès de la communauté Java qui était habituée à une approche plus douce de la part de SUN.


L'aventure Glassfish, une preuve de plus du complot Oracle  ? 


La décision d'Oracle concerne la version commerciale de Glassfish qui propose des extensions commerciales à la version Open Source Gratuite.

Glassfish reste l'implémentation de référence de JEE ce qui par définition même implique la gratuité et l'ouverture des sources de ce serveur : toute implémentation de référence doit respecter cette règle.

Par ailleurs, tout éditeur de logiciel commercial décide comme bon lui semble de la vie de ses produits. 

C'est un droit inaliénable  pour tous les éditeurs du monde qui impacte tous les ans des millions d'utilisateur : Microsoft arrête le support de ceci ou cela et pousse ses clients sur X ou Y, SAP arrête le support de .., .... 

Google ne se prive pas pour arrêter des produits par ailleurs fort utilisés ou appréciés par exemple, lors des fameux nettoyages de printemps.

Dépendre d'un éditeur et d'un produit commercial est un risque quelque soit le contexte, Oracle ou pas.

Les gens l'oublient trop souvent ...

Ce mouvement d'Oracle est donc typique de l'attitude d'un éditeur qui défends ses intérêts. D'autre part, il indique à ses clients que l'équivalent d'OGS est le serveur WebLogic. 

Les clients qui voulaient donc un serveur JEE avec support ont une solution qui n'est pas forcément plus onéreuse mais effectivement ce serveur n'est plus la version commerciale de Glassfish.

Oracle n'a cependant pas abandonné Glassfish Open Source.

Glassfish Open Source n'est pas prêt pour la production car c'est une implémentation de référence ?


Des bloggeurs ont avancé cet argument qui est assez étonnant.

La plupart des serveurs JEE sont d'abord des intégrateurs de composants développés par les uns et les autres. 

Ces composants sont plus la plupart des implémentations de référence des différentes normes JEE.

L'intégration de ces composants forme le serveur JEE qui se voit aussi doté de composants non présents dans la norme JEE : administration, clustering, ...

Regardons de plus près quelques exemples de partage de composants entre serveur JEE :



Glassfish Wildfly
JDK Open JDK Open JDK
CDI Weld Weld
JSF Mojarra Mojarra
JPA EclipseLink Hibernate
JAX-RS Jersey RestEasy
JAX-WS Metro CXF
JSONP jsonp jsonp
Websocket Tyrus Undertow
Batch Spring Jberet
EL Glassfish EL Glassfish EL


Développer un serveur JEE certifié est tout simplement une tâche titanesque; aujourd'hui aucun éditeur fusse-t-il commercial, n'a développé un serveur JEE 7 sans utiliser des composants tiers.

Or, Spring Batch ou bien Mojarra sont des composants de type RI utilisés par des serveurs dit de production : il n'y a pas de distribution dégradée de Mojarra, Spring Batch, Glassfish EL ou Weld.

Enfin, les documentations des différents serveurs montrent qu'il est possible de substituer des implémentations par d'autres : EclipseLink par Hibernate et vice versa par exemple. 

Cette capacité est liée à la norme JEE qui définit une séparation claire entre l'API et l'implémentation.

Les éditeurs de serveur JEE se comportent comme les grands de l'industrie automobile, à la fois intégrateur et innovateur.

Glassfish Open Source n'est pas prêt pour la production car les fonctions avancées de production vont disparaître ?


En effet, ces fonctions avancées ne font partie de JEE : l'éditeur les proposait cependant avec Glassfish 3 parce que la version Open Source et Commerciale partageaient un tronc commun assez large.

A partir du moment où la version commerciale meurt pourquoi Oracle se fatiguerait à fournir ces fonctions dans la version Open Source ?

Depuis de nombreuses années, Tomcat est utilisé sans proposer de véritables fonctions avancées dans ce domaine et sans que cela nuise à sa renommée ou à sa popularité.

Nombre de ces fonctionnalités comme le clustering ou le load balancing peuvent être assurés par des composants tiers comme Nginx ou Apache Httpd, voire ne sont de toutes façons pas très recommandées : la réplication de session est par exemple loin d'être l'état de l'art des applications webs qui recommande l'approche stateless avec REST pour permettre une scalabilité forte notamment dans le cadre d'un déploiement dans un cloud intelligent.

En 2014, Glassfish 4 propose toujours ces fonctionnalités malgré la crainte des commentateurs de l'époque.

Conclusion

Lors de l'annonce de l'abandon du support commercial, une vague de réaction négative a pris le dessus sur la raison.

Oracle de part son attitude parfois agressive envers ses compétiteurs Open Source a le don de crisper la communauté Java et certaines de ses grandes voix.

Il n'empêche que depuis un an, Glassfish continue son bonhomme de chemin. 

Java n'a jamais autant avancé avec Java 8 et des ambitions importantes sont affichés pour la suite.

Même James GOSLING, l'inventeur de Java qui est parti  en claquant la porte, a adouci son jugement

Dans tous les cas, il faut toujours limiter les adhérences aux implémentations et essayer de ne dépendre que des APIs JEE dans vos applications. 

Quant aux fonctions avancées non JEE, limitez leurs usages au strict nécessaire voire diminuez le risque en utilisant d'autres produits qui semblent moins risqués.

JEE est d'ailleurs un socle assez unique quand on le compare à d'autres écosystèmes qui n'offrent pas ce niveau de normalisation ce qui rend la dépendance à un produit inévitable et donc très risquée sur le moyen/long terme (les technologies webs clientes sont assez spectaculaires à cet égard).













samedi 2 août 2014

MongoDB For Java Developers : j'ai obtenu mon certificat de complétion avec 90% !


Intrigué depuis un certain temps par deux tendances majeures de l'IT, les MOOCs et les bases de données NoSQL, j'ai décidé de me lancer dans une formation MongoDB dispensé par l'université MongoDB.

A mon sens, les MOOCs vont jouer un grand rôle dans la formation des professionnels de l'IT.

C'est un moyen très pratique de monter en compétences rapidement sur des technologies émergentes.

Le problème est ensuite d'obtenir une reconnaissance de ces compétences fraîchement acquises.

Et là, c'est plus compliqué !

J'ai choisi le cours de l'université Mongo car c'est les cours sont dispensés par l'éditeur de la solution et qu'il propose un certificat de complétion.

Ce certificat est obtenu suite :
- à un contrôle continu : 50% de la note
- à un examen final : 50% de la note

Ce certificat est vérifiable via une URL indiquée sur le certificat PDF.

Les cours dispensés lors de la formation m'ont paru de bonne qualité. Le contrôle continu et l'examen sont relativement faciles mise à part quelques questions plus scabreuses.

Au final, je suis très satisfait de cette expérience.

A noter que l'université MongoDB propose des certifications payantes (150 $), je n'ai pas encore sauté le pas. 

MongoDB est un succès médiatique aujourd'hui : je pense que c'est en grande partie dû au fait qu'ils soignent leur communication, leurs documentations et ont une approche clairement developer friendly.

La technologie en elle même ne me paraît pas clairement au dessus des autres bases de données NoSQL.

MongoDB est une belle technologie mais les SGBDs traditionnelles organisent la contre attaque via l'ajout de fonctions NoSQL de plus en plus avancées. 

Or en matière de données, les entreprises sont très réticentes à migrer vers une autre solution technique vu les enjeux et les coûts associés.

Nous verrons si ces bases de données NoSQL qui profilèrent depuis quelques temps tiendront la distance. MongoDB pourrait être une de celle là.



vendredi 30 mai 2014

Acheter ou louer son logement ? Nouvelle version ...


J'ai mis à jour mon simulateur que vous pouvez tester ici : http://www.acheteroulouer.eu/#/

J'ai changé les choses suivantes :
- plus d'épargne négative
- ajout de deux graphiques pour comparer les dépenses et l'épargne
- ajout de sections repliables pour limiter les éléments affichés

Comme pour la première version, j'utilise toujours AngularJS et Zurb.

Ces deux frameworks me donnent entière satisfaction à ce jour.


Quelques exemples :