Bonjour, citoyens Habrovsk! Dans cet article, nous voulons partager nos impressions de la conférence pour les développeurs Java de
Joker 2018 , dont nous nous sommes le plus souvenus de ce que nous avons entendu.
Nous espérons que cela vous aidera à naviguer dans la vidéo de la conférence lorsqu'elle apparaîtra dans le domaine public. En attendant, nous avons ajouté des liens vers des présentations dans la mesure du possible.

Jour 1
Ne vous éloignez pas de la complexité, courez - Venkat Subramaniam
Agile est la capacité de s'adapter au changement. L'utilisation efficace d'Agile est empêchée par notre propre complexité de système créée.
Le rapport de Venkat contient une liste de problèmes qui compliquent le système du haut-parleur et des conseils généraux sur le développement de logiciels. Il est peu probable que ce rapport soit une révélation, mais même des choses évidentes doivent être connues, il est parfois utile de les rafraîchir en mémoire et de les utiliser.
Comment nous rendons les systèmes complexes:
- Pièces mobiles
Faites une configuration inutile, créez des composants inutilisés, créez trop de couches, etc. - Code illisible
"Ce code fonctionne, mais il semble qu'il ne devrait pas." La lecture difficile du code entraîne l'invisibilité des modifications. Les changements opaques génèrent des bogues et interfèrent avec la compréhension de ce qui se passe avec l'objet. - Trop de dépendances
Les dépendances deviennent vite incompatibles, plus il y en a, plus il est difficile de la gérer. - Une passion téméraire pour introduire de nouvelles technologies
Essayez de répondre à vos questions:
- Quel est le prix de l'introduction d'une nouvelle technologie?
- Dans quelle mesure sera-t-il facile d'abandonner la technologie sélectionnée?
- Une bibliothèque ou un framework? Vous utilisez la bibliothèque et le cadre «vous entoure». Il est beaucoup plus facile de refuser une bibliothèque qu'un framework. Par conséquent, la décision d'utiliser le cadre doit être prise avec plus de prudence. S'il sera facile de revenir à l'ancienne approche et si nous pouvons le prouver, nous devons la reprendre. Ne téléchargez pas ce dont vous n'avez vraiment pas besoin.
- Reprendre le développement piloté. - Difficulté aléatoire
Par exemple, le multithreading de bas niveau. Si vous avez résolu le problème avec le pool de threads, vous avez maintenant le pool de problèmes.
Cascades de transactions, ou comment construire une architecture de microservices transactionnels - Harald Wendel ( présentation )
Harald a expliqué comment le projet avait résolu le problème de l'organisation des transactions distribuées en supprimant les transactions et en les remplaçant par State Machine. Pour maintenir la cohérence entre les microservices, ils doivent implémenter la prise en charge des conditions, y compris les handicaps, et répondre à leur changement. Le projet utilise Kafka pour communiquer entre les services.
En fait, le rapport a une idée: abandonner les transactions lors du passage à un système distribué.
Fonctionnement de l'ancienne opération de transaction:
- Il est toujours transactionnel, mais une seule opération commerciale (conditionnellement une) est validée dans la base de données. D'autres personnes dans la transaction enregistrent une base de données pour Kafka.
- De plus, dans le cadre de la transaction, nous obtenons une nouvelle transaction commerciale avec l'État. Il s'agit d'un État autonome entièrement correct.
- Un gestionnaire spécial lit la base: interrogation ou validation du hook sur l'entité, si le gestionnaire est au même endroit que l'entité. Envoie ensuite un message à Kafka.
- Les abonnés de Kafka traitent les messages. Ici, le mécanisme de garantie de livraison standard nous est utile. Les messages sont à Kafka au bon moment et seront un jour traités par le service.
- Pendant le traitement, les abonnés peuvent s'engager dans leurs bases de données et changer leur état. Dans ce cas, les services échangent l'État.
- N ° de transaction commerciale d'annulation. Et il existe trois options pour gérer les problèmes:
- Jusqu'à la fin, attendez que le message de Kafka soit traité correctement.
- Si une erreur se produit (et le nombre de répétitions requis), elle se traduit par le démarrage de l'état "erroné" correspondant.
- Envoyer un message à Kafka pour être traité par l'initiateur de la transaction commerciale (et les autres participants), afin de prendre des mesures pour annuler leurs transactions locales.
Mémoire de processus Java sur les étagères - Andrey Panguin
Le rapport d'Andrey peut être utilisé comme référence et comment sur les problèmes de débogage avec une fuite de mémoire native par l'exemple de la mémoire non-tas.
Le rapport est utile pour comprendre qui et quoi mange de la mémoire. Andrei montre des outils pour analyser la mémoire, y compris AsyncProfiler, qui est intégré à Idea: "Le prochain IntelliJ IDEA 2018.3 intègre un profileur d'échantillonnage à faible surcharge qui peut profiler la JVM et le code natif - profileur Async."
Nous recommandons à tout le monde de le regarder et d'exécuter leurs modules et microservices dans les mêmes étapes.
Correspondance de motifs et ses amis imaginaires - Tagir Valeev
Tagir parle des possibilités des langages de programmation: quoi, comment, quand et avec quels béquilles peuvent apparaître en Java, quels problèmes les développeurs et la communauté du langage doivent-ils résoudre pour cela. Il y a peu d'applicabilité pratique évidente, mais elle peut être utile à long terme.
Aventures de Senior Holmes et Junior Watson dans le monde du développement logiciel [Joker Edition] - Evgeny Borisov et Baruch Sadogursky ( présentation )
Le résumé du rapport était déjà intrigant. Holmes et Watson ont promis de résoudre plusieurs énigmes du développement quotidien: des outils, des bibliothèques et des cadres qui embarrassent les développeurs ordinaires dans leur routine quotidienne.
Nous avons noté les points les plus utiles de l'histoire:
- Au printemps 5, vous pouvez ajouter des bacs et d'autres trucs de printemps dans un fichier groovy externe. C'est-à-dire pas besoin de reconstruire, il suffit de redémarrer, par exemple, pour ajouter BeanPostProcessor.
- Vous devez vous rappeler le nom des haricots. Par exemple, vous ne pouvez pas créer un bean ConversionService, car c'est déjà dans les intestins du printemps.
- Vous devez vous souvenir des normes. Par exemple, les parties multiples ne sont autorisées que pour la publication et Spring les surveille.
- Besoin de lire la documentation. Expliquons en utilisant l'exemple d'un lomb. AllArgsConstructor ajoute l'annotation java.beans.ConstructorProperties pour le constructeur. De plus, s'il n'y a pas d'annotation, Jacson utilise le constructeur et les getters par défaut, car les noms des paramètres du constructeur ne sont pas enregistrés après la compilation. S'il y a une annotation, les noms des paramètres y sont indiqués (selon la convention des beans java) et Jacson utilise le constructeur. Lombok SneakyThrows modifie les annotations Checked exceptions to Unchecked exceptions.
- Le rapport soulève également une question intéressante: «Avons-nous besoin d'exceptions vérifiées en principe?» Nous avons pensé.
2e jour
Hardcore réactif: comment construire votre éditeur <?> - Oleg Dokuka
On peut dire qu'il s'agit d'une introduction à la programmation réactive: le rapport décrit les concepts de base et les abstractions. Oleg montre toute l'évolution de notre raisonnement, ce qui nous amène à implémenter Publisher à partir de la bibliothèque Reactive Streams standard. Nous vous conseillons de regarder afin de comprendre d'où viennent les jambes.
Apprentissage automatique en Java de rien à la production en une heure - Derek Ferguson ( présentation )
Vous pouvez l'écouter si vous étudiez le Machine Learning. Bien qu'il ne soit pas très clair à qui le rapport était destiné. Si les gens comprennent, alors pour eux, ce n'est plus intéressant. S'ils ne comprennent pas, alors ce rapport ne sera pas trié, il y a trop peu d'informations pour comprendre.
Le message principal est le suivant: vous pouvez utiliser Google TensorFlow pour entraîner des modèles à partir de Java, mais la prise en charge de la formation est limitée. Mais vous pouvez utiliser des modèles formés. Par exemple, chargez un modèle formé dans un microservice TensorFlow et envoyez-lui des demandes de Java ou d'un autre microservice pour obtenir une réponse. Par exemple, reconnaissez une image, dites par symptômes, quel type de maladie ...
L'équipe TensorFlow dispose également d'une image Docker avec TensorFlow, qui peut être utilisée pour y charger des modèles et envoyer des demandes d'utilisation de ces modèles. Doux!
Micronaut vs Spring Boot, ou qui est le plus petit ici? - Kirill Tolkachev et Maxim Gorelikov
Cyril et Maxim ont comparé les cadres modernes en termes de vitesse de démarrage, de quantité de mémoire nécessaire à l'exécution et de complexité de codage.
Un fait a retenu notre attention: Micronaut implémente DI au moment de la compilation et Spring au moment de l'exécution / exécution. Cela permet à Micronaut de démarrer plus rapidement. Mais jusqu'à ce que la version finale de Micronaut soit sortie, il faut prendre un mot.
Distributeur réactif ok.ru/music - Vadim Tsesko ( présentation )
Vadim Tsesko parle de l'architecture du distributeur de musique à Odnoklassniki. Le rapport contient une description des serveurs et de leurs rôles, une description de l'équilibrage et la manière dont la tolérance aux pannes et la haute disponibilité sont fournies. Séparément - sur l'approche réactive sur un cas réel sans détails techniques particuliers. OK a montré un exemple pratique d'utilisation d'une approche réactive.
Divers concepts, meilleures pratiques et architecture pour obtenir un service tolérant aux pannes en raison de l'équilibrage et de la réplication et d'autres astuces pour la mise en cache des données pour une livraison rapide des données à l'utilisateur sont présentés. Comme toujours, dans la présentation, OK a un tas de liens pour une étude plus approfondie du sujet de la diapositive.
Printemps réactif - Josh Long
Le reportage pour lequel nous voyagions :) En fait non, mais Josh Long est l'une des deux grandes stars de la conférence. Son rapport est cool, allie à la fois humour et technologie.
Ce que nous appelons un rapport dans la pratique était une session de codage en direct sur la création de microservices réactifs à l'aide de Spring WebFlux. Il donne une compréhension générale de ce qu'est l'API réactive, offre un exemple d'utilisation dans Spring 5 et le bonus est une présentation amusante. Il y avait aussi un exemple avec Reactive Proxy comme alternative à Zuul. Nous conseillons à chacun de regarder.
Le monde est enfin devenu réactif. Ou l'impression générale des rapports Joker
Il y a eu de nombreux rapports à ce sujet et en avons discuté encore plus dans les domaines de discussion. En fait, la grande question est de savoir si le monde est devenu réactif ou si cela fait si longtemps, mais maintenant, ils ont trouvé un nouveau nom pour les anciens modèles et y ont versé du sang neuf.
Parmi les rapports sur la réactivité étaient pour tous les goûts: et purement technique, par exemple, Josh Long, qui a dit comment faire de la réactivité au printemps. Et de vrais cas d'utilisation de réactivité - par exemple, Vadim Tsesko de Classmates.
Notre technologie principale est le printemps, nous considérons donc le rapport Josh Long comme un incontournable. (
Lien vers le référentiel du rapport ). Il existe un exemple de service réactif qui réagit avec Mongo et d'un service réactif qui procède de manière réactive à un autre service réactif. Il nous a été très utile de le découvrir.