Netty (1/6)

1.701 visualitzacions
Ves al primer missatge no llegit

Laurent Caillette

no llegida,
19 de des. 2016, 5:26:3219/12/16
a tec...@googlegroups.com
Salut tous,

Allez encore un feuilleton pour ceux qui aiment la programmation réseau !

"Netty"
http://netty.io
est un socle technique pour programmer des entrées-sorties
non-bloquantes en Java, en exploitant au mieux les ressources système.

À lire ça on a vite fait de croire que Netty se limite à un public
très restreint, et suffisamment informé pour se passer d'une
présentation de Netty ("Si tu ne sais pas ce que c'est, alors c'est
que tu n'en as pas besoin.") Toutefois, Netty simplifie énormément la
programmation réseau de bas niveau, au point où c'est peut-être le
moment de repenser à ce qu'on peut coder soi-même. À part ça le code
de Netty est d'une telle qualité que n'importe quel développeur Java
tirera bénéfice de sa lecture.

Netty fournit principalement :
- Une approche standardisée de la répartition du travail entre les
fils d'exécution ("threads") associés à des canaux de communication
("channels").
- Des protocoles empilables (TLS, gzip, HTTP, WebSockets, ProtoBuf...)
- Des aides pour optimiser l'utilisation de la mémoire avec notamment
des tampons mémoire ("buffers") recyclables.

On peut aussi décrire Netty comme la réponse sur étagère à des
problèmes bien connus quand on veut émettre ou recevoir des flux de
données avec de gros volumes et de faibles latences. N'importe quel
programmeur Java peut comprendre qu'il faut minimiser le nombre de
threads, ou recycler les tampons mémoire pour limiter la sollicitation
du ramasse-miettes ("garbage collector"). Mais comment satisfaire
toutes ces contraintes au sein d'un modèle de programmation cohérent ?
C'est là que Netty fait merveille, en homogénéisant le code sans
sacrifier les performances, tout laissant d'énormes possibilités
d'adaptation et de personnalisation des couches de bas niveau.

Alors faut-il jeter son vieux Tomcat pour tout réécrire avec du Netty
? La question est mal posée vu que Tomcat c'est le truc à jeter de
toutes façons. Disons qu'on a un conteneur de Servlet embarqué quelque
part. Si on ne fait pas trop de bidouilles et qu'on est content des
performances, pas besoin de s'énerver. Après si on commence à faire
des choses compliquées avec des API propriétaires, ou aussi mal
foutues que les requêtes asynchrones de `Servlet 3.0`, là c'est le
moment de regarder du côté de Netty. Pareil si on s'est mis à entasser
la quicaillerie avec du Jetty, du CometD, du Simple et du Apache HTTP
Client, Netty fournit l'occasion d'homogénéiser tout ça, avec un gain
de performance probable à la clé.

À l'origine de Netty, on trouve une réécriture de Mina (un autre socle
technique de bas niveau) par Trustin Lee, qui n'est autre qu'un des
auteurs de Mina. Netty a longtemps été un sous-projet de JBoss avant
de devenir un projet indépendant. Norman Maurer, un des principaux
auteurs de Netty à ce jour, a été débauché de Red Hat par Apple pour
travailler sur les infrastructures en ligne. Parmi la liste des
utilisateurs de Netty, on trouve des noms tels que Netflix, Facebook
ou Twitter, et des produits tels que Spark et Storm. On peut
considérer Netty comme un standard de fait, au même titre que Spring
ou Hibernate, bien qu'il s'adresse à un public légèrement différent.
Netty est disponible sous license `Apache 2`.

L'épisode à venir présente le modèle de programmation de Netty.
Respon a tots
Respon a l'autor
Reenvia
0 missatges nous