Meilleurs articles JPoint 2018: Java / JVM et ses performances, Kotlin, Spring, Docker

Nous avons déjà posté des vidéos des rapports JPoint 2018 sur YouTube et spécialement pour le hub Java sur Habré nous avons fait une sélection traditionnelle des meilleurs d'entre eux selon les visiteurs de la conférence.


Comme d'habitude, il y a des rapports «juniors» en haut, avec la note la plus élevée à la fin. Bien sûr, cela ne signifie pas qu'un rapport est bien pire qu'un autre: si vous changez la méthode de calcul, les lieux peuvent facilement changer. En réalité, nous l'avons changé, maintenant la version «soft quorum» de la notation est utilisée, en tenant compte du nombre de participants présents au rapport. Cette approche a ses inconvénients (par exemple, plus de personnes viennent aux keynote qu'à un rapport régulier, simplement parce que le public n'a pas le choix), mais dans l'ensemble donne une meilleure image de ce qui s'est passé.


Sous la coupe - et des vidéos des meilleurs rapports, et des liens vers leurs présentations, et de courtes descriptions, et un lien vers la liste de lecture complète.



Liste de lecture complète


La playlist complète avec toutes les vidéos discutées ci-dessous est disponible ici .


10. Outils de performance des conteneurs Linux pour les applications JVM


Télécharger des diapositives



La révolution des conteneurs a balayé tout le monde - le monde Java n'était pas sans lui. Néanmoins, Java a toujours eu et il y a certains problèmes et fonctionnalités, qui seront discutés dans le rapport de Sasha Goldstein.


Sasha est le créateur en série de la performance hardcore. L'année dernière, chez JPoint, il a fait un excellent discours sur l'utilisation du filtre de paquets Berkeley pour la JVM (je recommande désespérément de regarder une publication sur YouTube), et ce n'était qu'une question de temps avant qu'il ne passe en revue la conteneurisation. Le monde entre dans les nuages ​​et les dockers, ce qui à son tour nous pose de nombreux nouveaux problèmes. Comme vous l'avez peut-être remarqué, la plupart des systèmes de débogage et de profilage de bas niveau, après les avoir appliqués à des conteneurs, sont entourés de différentes fonctionnalités et jambages. Sasha a parcouru les principaux scénarios (utilisation du processeur, réactivité des E / S, accès aux bases de données partagées, etc.) à travers le prisme de l'utilisation d'outils modernes sur la plate-forme GNU / Linux, y compris BCC et perf.


Tout le monde n'a pas besoin de cette spécificité. C'est l'une des raisons pour lesquelles le rapport n'était qu'à la dixième place - il a réuni environ deux cents personnes (contre plus d'un millier de Tolkachev et Borisov), et notre algorithme de calcul de la notation est très sensible à la taille de l'audience.


Pour ceux qui sont en quelque sorte connectés avec des conteneurs, ce rapport doit être consulté. Cela vous fera gagner beaucoup de temps sur une recherche indépendante de tous les détails par une recherche complète d'innombrables utilitaires et comment les utiliser.


Je tiens également à noter que le rapport de Sasha du top 10 est presque le plus dense en termes de quantité d’informations pratiques par unité de temps. À partir de presque toutes les diapositives, vous pouvez vous copier des choses utiles. Afin de ne pas m'engager dans une relecture détaillée, je ne montrerai que la structure superficielle de la présentation:


Plan du rapport
  • Comment sont disposés les conteneurs?
    • Groupes de contrôle: CPU, mémoire, bloc E / S;
    • Espaces de noms: pid namespace, mount namespace, network namespace;
  • La différence entre les problèmes qui se posent:
    • Sur l'hôte;
    • Dans le conteneur;
    • Exemples de problèmes avec des solutions:
      • Connexion à JVM?
      • Données de performance JVM?
    • Démonstration des outils JVM sur l'hôte;
  • Outils d'information sur les ressources:
    • side-car pour la surveillance;
    • statistiques des dockers;
    • systemd-cgtop;
    • htop + cgroup ID;
    • nsenter ou docker exec;
    • Surveillance de démonstration des ressources de conteneurs;
  • Profilage des conteneurs CPU:
    • perf sur l'hôte: -G, mappage de symboles, mappage PID, partage de mappage perf (perf-map-agent);
    • Démo avec flammes; oos;
    • perf dans le conteneur en mode non privilégié;
    • profileur honnête, profileur asynchrone, perf vs profileur asynchrone;
    • Démo async-profiler;
    • BCC est un outil de profilage (il résout un certain nombre de problèmes par lui-même, mais il ne fonctionne que sur Linux 4.9+);
    • Étranglement;
  • Autres méthodes de surveillance:
    • cAdvisor, SysDig, New Relic, DataDog ...

9. Une fois par an, les jardins fleurissent: analyser la sémantique d'Apache Kafka «exactement une fois»


Télécharger des diapositives



Victor Gamov a un avantage complètement injuste sur les autres haut-parleurs. C'est l'homme qui a publié près de deux cents numéros du podcast Debriefing, l'auteur de plusieurs rapports, textes, articles et même le livre «Enterprise Web Development» d'O'Reilly. La présence même de Gamow ne fait rien de mieux. Je suis sûr qu'il pourrait parler avec la même intonation non pas de Kafka, mais de la croissance du géranium sur le rebord de la fenêtre, et ce serait toujours fascinant.


Nous avons ici un cas particulier: le sujet initialement holivorny sur la sémantique de «exactement une fois». Kafka s'est précipité pour tout utiliser à une échelle extraordinaire, ce qui a nécessité le traitement de la sémantique traditionnelle de livraison des messages. Ne mettez pas un doigt dans votre bouche - ils ont changé leurs chaussures en déplacement selon le protocole et le format de message corrects et ont fait tout ce dont ils avaient besoin. Tout au long du rapport, Victor explique comment il est organisé à l'intérieur et ce qu'il affecte.


Deux nouvelles, bonnes et mauvaises. Bon: tout est installé à Kafka. Mauvais: tout est installé à Kafka. Pour vivre avec, vous devez comprendre comment cela fonctionne et où grimper avec vos mains sales.


On pouvait s'attendre à une sorte de smoothie de Victor, mais ensuite il a eu un hardcore désespéré, et le plan est quelque chose comme ça:


Plan du rapport
  • Introduction à Kafka:
    • Thèmes
    • Cloisons
    • Journaux et décalages
    • Repères et leaders
    • Clients: producteurs et consommateurs
  • Producteur
    • Comment ça marche sur des exemples
    • Protocole du producteur
  • Consommateur
    • Comment ça marche sur des exemples
    • Protocole consommateur
  • Modèle de traitement
    • Lu, compté, enregistré
    • Types de pépins (tout s'est cassé, zombies)
  • Traitement de la sémantique
    • Au moins une fois, au plus une fois, exactement une fois
  • Sémantique «exactement une fois»
    • Avec des exemples
    • Faiblesses
      • nouvelles tentatives dangereuses
      • enregistrement offset non atomique
      • zombies
  • Corriger la première faiblesse: un producteur idempotent
  • Corrige la deuxième faiblesse:
    • Instantanés de Chandy Lamport
      • Principe
      • Comment vivre avec des échecs?
        • Difficile: plantage lors du traitement
        • Doux: se bloquer avant ou pendant la suppression d'un instantané
    • Transactions à Kafka
      • Deux types de marqueurs (COMMIT, ABORT)
      • Enregistrement atomique sur de nombreuses partitions (y compris! _Consumer_offsets)
  • Correction de la troisième faiblesse: l'escrime zombie
  • Isolement de lecture des consommateurs
  • EOS de bout en bout
    • Kafka connect source
    • Ruisseaux Kafka
    • Évier Kafka Connect

8. Combattre les pirates russes avec Kafka Streams et Firehose API


Télécharger des diapositives



Encore une fois Kafka! Gamow à nouveau! Oui, et avec Baruch Sadogursky ( jbaruch ) maintenant. Néanmoins, ce rapport n'est pas un smoothie, mais une pièce pratique très spécifique sur la façon dont, sur la plate-forme Bintray (dont Baruch est le dieu), en utilisant Apache Kafka (dont Victor est responsable) et Firehose, analyser les modèles de comportement et traiter de grandes quantités de données.


Si le rapport précédent sur l'intérieur de Kafka avait 245 diapositives, alors celui-ci n'en a que 17. C'est parce que vous devez le regarder! Il s'agit principalement d'un dialogue animé entre les démos principales et en direct. Ne vous attardez pas, ouvrez le vidosik et regardez.


7. Mémoire transactionnelle matérielle en Java


Télécharger des diapositives



Nikita Koval ( ndkoval ) est chercheur à JetBrains dans l'équipe Kotlin et doctorant à IST Autriche (il était chez Devexperts au moment de la conférence). Son rapport est en contraste frappant avec les «pirates russes», car ce n'est pas une lecture légère et divertissante, mais une histoire sur les internes complexes de VM. Si vous regardez les diapositives , vous pouvez trouver 150 feuilles, dont la plupart sont du code.


Si vous étiez chez JBreak au début de 2018, vous avez peut-être trouvé l'histoire de Nikita sur des choses complètement différentes - sur l'écriture d'une table de hachage multi-thread rapide en utilisant la puissance des architectures multicœurs modernes et des algorithmes spéciaux. D'accord, Nikita a un style . Je me souviens immédiatement de Shipilev.


Cette fois, nous parlerons de la mémoire transactionnelle, qui apparaît progressivement dans les processeurs modernes, mais qui ne sait toujours pas comment l'utiliser pour une personne ordinaire du monde JVM. En dehors de la JVM, bien sûr, tout est plus simple. Mais imaginez ce que vous dites à un développeur Web régulier de Spring: "Oui, éditez simplement vmstructs, empilez vos intrinsèques, reconstruisez OpenJDK et vous avez terminé!" Et il est comme ça: "Eh bien, bien sûr, je le fais tous les jours!" Nikita parle très clairement des façons d'utiliser, quelles optimisations sont déjà dans OpenJDK et comment effectuer des transactions directement à partir du code Java.


Plan du rapport
  • Introduction: pourquoi nous avons besoin du multithreading
  • Approches de construction d'algorithmes
    • Serrure brute
    • Serrure mince
    • Synchronisation non bloquante
    • Les trois types sont illustrés dans l'exemple de tâche concernant une banque de jouets.
  • Le multithreading est compliqué. Que faire
    • Transactions dans un monde parfait. Écrivez simplement atomic!
    • Où obtenir atomique:
      • Mémoire transactionnelle logicielle (STM). Scala STM, NOrec, Coroutines.
      • Mémoire transactionnelle matérielle (HTM). Haswell, Puissance 8.
      • Mémoire transactionnelle hybride
    • Intel RTM par des exemples
      • XBEGIN, XEND, XABORT, XTEST
      • Intel RTM + Java
        • Élision de verrouillage
        • java.util.concurrent.RTMSupport
      • Intrinsèque: interprète, C1, C2
      • Gros grain / sans verrouillage + RTMSupport sur les cartes

6. Nous profilons avec précision les microsecondes et les instructions du processeur


Télécharger des diapositives



Sergey Melnikov ( RainM ) de Raiffeisenbank nous a présenté le deuxième rapport de profilage. Fait intéressant, avant de travailler sur du code Java à faible latence, il a travaillé chez Intel en tant qu'ingénieur de performance de compilateur pour les langages C / C ++ / FORTRAN. Ce rapport a aussi de la perf! :-) Il y a aussi les caractéristiques matérielles des processeurs et la technologie Intel Processor Trace, qui vous permet de passer à l'étape suivante de la précision du profilage et de reconstruire l'exécution d'une section de programme. Il y a peu de tels rapports (par exemple, vous pouvez trouver le rapport Andi Kleen au Tracing Summit 2015), ils laissent généralement une mer de questions et ne brillent pas avec la pratique par rapport à Java. Ici, nous avons non seulement une personne qui a visité les deux mondes (Intel et Java dans la banque), mais qui sait également expliquer clairement des sujets complexes.


Plan du rapport
  • Qu'est-ce que c'est et pourquoi est-il nécessaire
    • Domaine - applications à faible latence
    • Exemple d'échange de Moscou
  • Choisissez un profileur
    • Comment profiler? Profileurs d'échantillonnage et d'instrumentation
    • profileur asynchrone
  • Nous apprenons au profileur à assembler un profil détaillé
    • Comment exécuter perf
    • Comment regarder dans le profil, dans la pile d'appels
    • perf-map-agent, sysctl, dmesg ...
  • Utilisation des événements PMU / PEBS en perf
  • Intel Processor Trace - qu'est-ce que c'est et comment profiler Java
    • Exigences: packages, matériel, système d'exploitation
    • Comment exécuter sur Skylake-X (Xeon et i9)

5. VMStructs: Pourquoi l'application doit-elle connaître les composants internes de la JVM


Télécharger des diapositives



Andrey ( apangin ) est une personne qui, à maintes reprises, recueille les rapports les plus profonds et les plus puissants. Dans le passé, Joker a réuni un peu moins d'un millier de personnes - c'est un record en termes de taille d'audience dans un rapport régulier qui n'est pas un discours. En cela, il est aidé par une décennie d'expérience de travail sur les machines virtuelles et la capacité d'expliquer le hardcore technique afin qu'il puisse être répété dans la pratique.


Beaucoup ne comprennent pas vraiment pourquoi se plonger dans une machine virtuelle si vous avez une application régulière sur un tomcat, avec une base de données et tout est comme il se doit. Ce rapport a un bon argument au niveau de "comment comprendre quelle requête va tirer beaucoup de données?" Si vous essayez d'instruire le code à l'aide de JMX, quelque chose d'étrange commence à se produire avec les performances. Premièrement, vous pouvez comprendre pourquoi cela se produit, et deuxièmement, ce qui peut être fait à ce sujet. À mon avis, ce rapport est précieux non pas tant avec un ensemble d'outils (bien qu'il y ait un peu de helfy là-bas), mais avec une démonstration de l'état d'esprit du développeur OpenJDK correct et comment se comporter dans des situations difficiles. Exprime la présence et explique la signification de choses spécifiques comme TLAB, Code Cache, Constant Pool, etc.


4. Coroutines à Kotlin


Télécharger des diapositives



Seul le paresseux ne connaît pas Kotlin maintenant, et vous, le lecteur, une fois lu jusqu'au quatrième paragraphe - évidemment pas des paresseux. Roman ( elizarov ) est un ancien développeur de logiciels de trading haute performance, et maintenant il est responsable des bibliothèques Kotlin. Nous avons déjà réalisé un entretien avec des Roms sur les coroutines , et il peut être utile de le relire avant ou après avoir consulté le rapport. Les coroutines sont un concept très ancien, depuis l'époque de Simula, mais tous les langages traditionnels ne les prennent pas en charge, ils n'apparaîtront pas bientôt en Java. Mais dans Kotlin, ils sont déjà dans la version stable.


Ce rapport répond à toutes les questions pertinentes sur les coroutines, c'est-à-dire à toutes les questions pertinentes de notre temps en général :-)


Plan du rapport
  • Image générale du développement des langues
  • Programmation de rappel asynchrone
  • Futures / Promesses / Rx
  • Coroutines à Kotlin
    • boucles régulières, gestion des exceptions, fonctions d'ordre supérieur
    • fonctions personnalisées d'ordre supérieur
    • tout ressemble à du code de blocage!
  • Comment ça marche?
    • fonctions de suspension, code avec points de suspension
  • Intégration
    • Retrofit async
    • Rappels et continuations (appel / cc de Scheme!)
    • contlinx-coroutines-core
      • jdk, goyave, nio, réacteur, rx1, rx2
  • Comment exécuter des coroutines?
  • asynchrone / attendre
    • Pourquoi n'y a-t-il pas de mot-clé en attente dans Kotlin?
    • La concurrence est difficile. Vous devez le faire explicitement.
    • L'approche de Kotlin à l'async
  • Concept Corutin: fils très légers
  • Interopérez avec Java
  • Coroutines synchrones - génération / rendement
    • Exemple de nombres de Fibonacci
  • Communiquer les processus séquentiels (CSP)
  • Bibliothèque vs langue
    • Le cœur de la langue doit être petit!
    • Mots-clés: asynchroniser / attendre, générer / produire
    • Modificateurs: suspendre
    • kotlinx-coroutines: lancement, async, runBlocking, future, delay, Job, Deferred, ...

3. Sur les épaules des géants: les langues étudiées par Kotlin


Télécharger des diapositives



Rapport sur Kotlin de l'un des créateurs de la langue - que faut-il d'autre pour le bonheur? L’essence et la structure de la présentation sont complètement différentes de celles du rapport précédent d’Elizarov. Le roman parlait de choses spécifiques - quoi, comment et pourquoi dans la conception de la coroutine, et comment l'utiliser, et j'en ai besoin pour améliorer les compétences de programmation sur Kotlin. Ici Andrei ( abreslav ) parle de choses qui améliorent l'érudition en général dans la vie et donnent une compréhension de sa place dans le monde. Si vous avez vu tous ces langages de vos propres yeux - Java, C #, Scala, Groovy, Python, Gosu - c'est encore plus intéressant, car il y a lieu de discuter (les visiteurs de la conférence pourraient probablement saisir l'occasion et vraiment discuter de leur compréhension des choses en direct dans la zone de discussion ) C'est «sept langues en sept semaines», mais seulement en une heure.


Soit dit en passant, nous avons récemment fait une interview séparée avec Andrey, mais il ne s'agit pas seulement de Kotlin, mais de beaucoup de choses différentes.


2. Les aventures de Senior Holmes et Junior Watson dans le monde du développement logiciel


Télécharger des diapositives



Faire des présentations impliquant plus d'un orateur est extrêmement difficile. Souvent, cela ressemble à ceci: la moitié du temps, l'un d'eux se tient sur la scène et s'ennuie, et ça a l'air très ennuyeux. Que dire de la performance conjointe de Baruch Sadogursky et Evgeny Borisov ( EvgenyBorisov ) - au contraire, elle a été magnifiquement réalisée, c'est une œuvre d'art. Les étoiles se sont réunies dans le bon ordre, et deux conférenciers de haut niveau possédant une vaste expérience et la pratique de diriger des présentations en binôme sont apparus sur la scène afin de discuter d'un sujet intéressant pour les deux. Pourquoi est-ce que j'insiste sur ce point - généralement les téléspectateurs n'ont aucune idée de ce qu'est la création d'une telle présentation, et ils tiennent tout pour acquis.


Mais le résultat a justifié l'investissement. Jugez par vous-même, c'est le discours du soir, le plus récent rapport de conférence, au cours duquel les gens sont déjà épuisés avec deux jours d'étain, ils veulent dormir, quelqu'un doit rentrer chez lui en ce moment et ainsi de suite. Et pourtant, plus de 600 personnes sont restées dans la salle, c'est sûr.


Ce n'est pas un rapport de référence, mais un reportage, il faut le regarder. Dans ce document, Holmes et Watson révèlent plusieurs énigmes que vous avez rencontrées, rencontrées ou rencontrerez dans le développement quotidien. Il n'y aura pas de tas de collecteurs d'ordures et de bytecode, mais il y aura des outils, des bibliothèques et des cadres qui déconcerteront les développeurs ordinaires dans leur routine quotidienne, conduiront à des temps d'arrêt, au profilage des délais et à des dépressions prolongées. En pratique, dans ce rapport, Sherlock et Watson sauvent votre front des paumes de visage et des râteaux sur lesquels quelqu'un a déjà marché.


Par conséquent, il n'y aura pas de bref résumé ici - commencez simplement la vidéo et regardez.


1. Démarrez-vous, le printemps arrive


Télécharger des diapositives




Baruch + Gamow, Baruch + Borisov, qui manque aux auteurs des rapports de paires populaires? C'est vrai, Borisov + Tolkachev ( tolkkv ). Un autre rapport sympa, qui, n'étant pas un discours, a rassemblé un nombre record de participants - plus d'un millier. Il y avait tellement de matériel, et c'est tellement intéressant que deux places lui ont été allouées dans le programme de la conférence - et vous devrez regarder deux vidéos sur YouTube en conséquence.


Il y a de nombreuses années, les programmeurs Java utilisaient «nouveau» pour créer des services. Ils ont fait beaucoup d'actions manuelles et une configuration mixte avec la logique métier. Ils ont même utilisé des techniques de copier-coller. De nombreuses lignes de code misérable ont été écrites, ce qui a même parfois fonctionné.


Puis vint le printemps. Beaucoup de choses ont changé avec lui ... Nous avons eu beaucoup de «magie» du cylindre magique de Spring, et notre code est devenu plus propre, simple et maintenable.


Et donc Spring Boot est apparu. D'une part, il résout des milliers de problèmes préexistants: conflits de version, tâches de configuration, travail avec les bacs d'infrastructure, problème de configuration de l'environnement et, bien sûr, lancement ou déploiement d'une application, y compris la création d'archives jar / war. D'un autre côté, Spring Boot a ajouté encore plus de magie à notre cylindre magique. En conséquence, il existe deux scénarios:


  • Tout fonctionne très bien, bien que personne ne sache comment.
  • Rien ne fonctionne et personne ne sait pourquoi.

Ce rapport révèle les secrets de base de la magie de Spring Boot. Vous comprendrez les principes et conventions de base des applications Spring Boot typiques. , , , , .


Conclusion


, . , , . , — . — !


En attendant, il est déjà possible d'acheter des billets pour le prochain JPoint. Il se tiendra du 5 au 6 avril 2019 au WTC Congress Center. Jusqu'au 1er janvier, il est toujours possible d'acheter des billets à bas prix !

Source: https://habr.com/ru/post/fr433858/


All Articles