Hallo Habrowsk-Bürger! In diesem Beitrag möchten wir unsere Eindrücke von der Konferenz für Java-Entwickler von
Joker 2018 teilen, von denen wir gehört haben, dass sie am denkwürdigsten waren.
Wir hoffen, dies hilft Ihnen beim Navigieren im Video der Konferenz, wenn es öffentlich zugänglich ist. In der Zwischenzeit haben wir nach Möglichkeit Links zu Präsentationen hinzugefügt.

Tag 1
Gehen Sie nicht von der Komplexität weg, rennen Sie - Venkat Subramaniam
Agil ist die Fähigkeit, sich an Veränderungen anzupassen. Die effektive Verwendung von Agile wird durch unsere selbst erstellte Systemkomplexität verhindert.
Der Bericht von Venkat enthält eine Liste von Problemen, die das System des Sprechers komplizieren, sowie allgemeine Hinweise zur Softwareentwicklung. Es ist unwahrscheinlich, dass dieser Bericht eine Offenbarung sein wird, aber selbst offensichtliche Dinge müssen bekannt sein. Manchmal ist es nützlich, sie im Speicher zu aktualisieren und zu verwenden.
Wie wir Systeme komplex machen:
- Bewegliche Teile
Nehmen Sie eine unnötige Konfiguration vor, erstellen Sie nicht verwendete Komponenten, erstellen Sie zu viele Ebenen usw. - Unlesbarer Code
"Dieser Code funktioniert, aber es sieht so aus, als sollte er nicht funktionieren." Schwer zu lesender Code führt zur Unsichtbarkeit von Änderungen. Undurchsichtige Änderungen erzeugen Fehler und beeinträchtigen das Verständnis, was mit dem Objekt geschieht. - Zu viele Abhängigkeiten
Abhängigkeiten werden schnell inkompatibel. Je mehr es gibt, desto schwieriger ist es, sie zu verwalten. - Rücksichtslose Leidenschaft für die Einführung neuer Technologien
Versuchen Sie, Ihre Fragen zu beantworten:
- Was kostet die Einführung einer neuen Technologie?
- Wie einfach wird es sein, die ausgewählte Technologie aufzugeben?
- Eine Bibliothek oder ein Framework? Sie verwenden die Bibliothek und das Framework „umgibt Sie“. Es ist viel einfacher, eine Bibliothek abzulehnen als ein Framework. Daher muss die Entscheidung zur Verwendung des Frameworks sorgfältiger getroffen werden. Wenn es einfach sein wird, zum alten Ansatz zurückzukehren, und wenn wir ihn beweisen können, müssen wir ihn annehmen. Laden Sie nicht herunter, was Sie wirklich nicht brauchen.
- Resume Driven Development. - Zufällige Schwierigkeit
Zum Beispiel Multithreading auf niedriger Ebene. Wenn Sie das Problem mit dem Thread-Pool gelöst haben, haben Sie jetzt den Problempool.
Transaktionskaskaden oder Aufbau einer Transaktions-Microservice-Architektur - Harald Wendel ( Präsentation )
Harald erzählte, wie das Projekt das Problem der Organisation verteilter Transaktionen löste, indem Transaktionen entfernt und durch State Machine ersetzt wurden. Um die Konsistenz zwischen Microservices zu gewährleisten, müssen sie Unterstützung für Bedingungen, einschließlich Behinderungen, implementieren und auf ihre Änderungen reagieren. Das Projekt verwendet Kafka, um zwischen Diensten zu kommunizieren.
Tatsächlich hat der Bericht eine Idee: Transaktionen beim Wechsel zu einem verteilten System abzubrechen.
So funktioniert die frühere Transaktionsoperation:
- Es handelt sich immer noch um eine Transaktion, aber nur ein Geschäftsvorgang (bedingt einer) wird in die Datenbank übernommen. Andere innerhalb der Transaktion speichern eine Datenbank für Kafka.
- Außerdem erhalten wir im Rahmen der Transaktion eine neue staatliche Geschäftstransaktion. Dies ist ein vollständig korrekter, in sich geschlossener Zustand.
- Ein spezieller Handler liest die Basis: entweder Polling oder Commit-Hook für die Entität, wenn sich der Handler an derselben Stelle wie die Entität befindet. Dann sendet eine Nachricht an Kafka.
- Kafka-Abonnenten verarbeiten Nachrichten. Hier ist der Standard-Liefergarantiemechanismus für uns nützlich. Nachrichten sind zur richtigen Zeit in Kafka und werden eines Tages vom Dienst verarbeitet.
- Während der Verarbeitung können sich Abonnenten auf ihre Datenbanken festlegen und ihren Status ändern. In diesem Fall tauschen die Dienste den Staat aus.
- Rollback Geschäftsvorfall Nr. Und es gibt drei Möglichkeiten, um Probleme zu behandeln:
- Warten Sie bis zum Ende, bis die Nachricht von Kafka korrekt verarbeitet wurde.
- Wenn ein Fehler auftritt (und die erforderliche Anzahl von Wiederholungen), wird der entsprechende "fehlerhafte" Status gestartet.
- Senden Sie eine Nachricht an Kafka, die vom Initiator der Geschäftstransaktion (und anderen Teilnehmern) verarbeitet werden soll, um Schritte zum Zurücksetzen ihrer lokalen Transaktionen zu unternehmen.
Java-Prozessspeicher in den Regalen - Andrey Panguin
Der Bericht von Andrey kann als Referenz und Anleitung zum Debuggen von Problemen mit nativem Speicherverlust am Beispiel eines Nicht-Heap-Speichers verwendet werden.
Der Bericht ist nützlich, um zu verstehen, wer und was Gedächtnis frisst. Andrei zeigt Tools zur Speicheranalyse, einschließlich AsyncProfiler, das in Idea integriert ist: "Der kommende IntelliJ IDEA 2018.3 integriert einen Profiler für Stichproben mit geringem Overhead, der JVM und nativen Code profilieren kann - Async Profiler."
Wir empfehlen jedem, es sich anzusehen und seine Module und Microservices in denselben Schritten auszuführen.
Pattern Matching und seine imaginären Freunde - Tagir Valeev
Tagir spricht über die Möglichkeiten von Programmiersprachen: Was, wie, wann und mit welchen Krücken kann in Java auftreten, welche Probleme müssen die Entwickler und die Community der Sprache dafür lösen. Es gibt wenig offensichtliche praktische Anwendbarkeit, aber es kann auf lange Sicht nützlich sein.
Abenteuer von Senior Holmes und Junior Watson in der Welt der Softwareentwicklung [Joker Edition] - Evgeny Borisov und Baruch Sadogursky ( Präsentation )
Die Zusammenfassung des Berichts war bereits faszinierend. Holmes und Watson versprachen, einige Rätsel der täglichen Entwicklung zu lösen: Tools, Bibliotheken und Frameworks, die normale Entwickler in ihrer täglichen Routine verwirren.
Wir haben die nützlichsten Punkte in der Geschichte notiert:
- In Spring 5 können Sie Bins und anderes Spring-Material in eine externe Groovy-Datei einfügen. Das heißt, Sie müssen nicht neu erstellen, sondern neu starten, um beispielsweise BeanPostProcessor hinzuzufügen.
- Sie müssen sich den Namen der Bohnen merken. Beispielsweise können Sie keine ConversionService-Bean erstellen, weil Dies ist bereits im Darm des Frühlings.
- Sie müssen sich an die Standards erinnern. Zum Beispiel ist Multipart nur für Post zulässig, und Spring schaut zu.
- Müssen die Dokumentation lesen. Lassen Sie uns am Beispiel eines Lebensraums erklären. AllArgsConstructor fügt die Annotation java.beans.ConstructorProperties für den Konstruktor hinzu. Wenn keine Annotation vorhanden ist, verwendet Jacson außerdem den Standardkonstruktor und die Getter, weil Konstruktorparameternamen werden nach der Kompilierung nicht gespeichert. Wenn eine Anmerkung vorhanden ist, werden darin Parameternamen angegeben (gemäß der Java-Beans-Konvention), und Jacson verwendet den Konstruktor. Änderungen an der Annotation von Lombok SneakyThrows Geprüfte Ausnahmen zu nicht aktivierten Ausnahmen.
- Der Bericht warf auch eine interessante Frage auf: "Brauchen wir grundsätzlich geprüfte Ausnahmen?" Wir dachten.
Tag 2
Reaktiver Hardcore: So erstellen Sie Ihren Publisher <?> - Oleg Dokuka
Wir können sagen, dass dies eine Einführung in die reaktive Programmierung ist: Der Bericht beschreibt grundlegende Konzepte und Abstraktionen. Oleg zeigt die gesamte Entwicklung unserer Argumentation, die uns dazu veranlasst, Publisher aus der Standardbibliothek für reaktive Streams zu implementieren. Wir empfehlen Ihnen, nachzuschauen, um zu verstehen, woher die Beine wachsen.
Maschinelles Lernen in Java vom Nichts zur Produktion in einer Stunde - Derek Ferguson ( Präsentation )
Sie können es hören, wenn Sie maschinelles Lernen studieren. Obwohl nicht sehr klar ist, für wen der Bericht bestimmt war. Wenn die Leute verstehen, ist es für sie nicht mehr interessant. Wenn sie nicht verstehen, wird dieser Bericht nicht aussortiert. Es gibt zu wenig Informationen, um sie zu verstehen.
Die Hauptbotschaft lautet: Sie können Google TensorFlow verwenden, um Modelle aus Java zu trainieren, aber die Schulungsunterstützung ist begrenzt. Sie können jedoch trainierte Modelle verwenden. Laden Sie beispielsweise ein trainiertes Modell in einen TensorFlow-Microservice und senden Sie Anforderungen von Java oder einem anderen Microservice an diesen, um eine Antwort zu erhalten. Erkennen Sie zum Beispiel ein Bild, erkennen Sie anhand der Symptome, welche Art von Krankheit ...
Das TensorFlow-Team verfügt außerdem über ein Docker-Image mit TensorFlow, mit dem Modelle dort geladen und Anforderungen für die Verwendung dieser Modelle gesendet werden können. Süß!
Micronaut vs Spring Boot oder Wer ist der Kleinste hier? - Kirill Tolkachev und Maxim Gorelikov
Cyril und Maxim verglichen moderne Frameworks hinsichtlich der Startgeschwindigkeit, der zum Ausführen benötigten Speichermenge und der Komplexität der Codierung.
Eine Tatsache hat unsere Aufmerksamkeit erregt: Micronaut implementiert DI zur Kompilierungszeit und Spring zur Laufzeit / Laufzeit. Dadurch kann Micronaut schneller starten. Aber bis die Release-Version von Micronaut veröffentlicht wurde, muss man ein Wort nehmen.
Reaktiver Distributor ok.ru/music - Vadim Tsesko ( Präsentation )
Vadim Tsesko spricht über die Architektur des Musikvertriebs in Odnoklassniki. Der Bericht enthält eine Beschreibung der Server und ihrer Rollen, eine Beschreibung des Ausgleichs und der Bereitstellung von Fehlertoleranz und Hochverfügbarkeit. Separat - über den reaktiven Ansatz in einem realen Fall ohne spezielle technische Details. OK zeigte ein funktionierendes Beispiel für die Verwendung eines reaktiven Ansatzes.
Es werden verschiedene Konzepte, Best Practices und Architekturen für den Erhalt eines fehlertoleranten Dienstes aufgrund von Balancing und Replikation sowie andere Tricks zum Zwischenspeichern von Daten für eine schnelle Datenlieferung an den Benutzer vorgestellt. Wie immer verfügt OK in der Präsentation über eine Reihe von Links, mit denen Sie das Thema auf der Folie genauer untersuchen können.
Reaktiver Frühling - Josh Long
Der Bericht, für den wir gereist sind :) Eigentlich nicht, aber Josh Long ist einer der beiden großen Stars der Konferenz. Sein Bericht ist cool, kombiniert sowohl Humor als auch Technologie.
Was wir in der Praxis als Bericht bezeichnen, war eine Live-Codierungssitzung zum Erstellen reaktiver Mikrodienste mit Spring WebFlux. Es vermittelt ein allgemeines Verständnis der reaktiven API, bietet ein Beispiel für die Verwendung in Spring 5 und der Bonus ist eine unterhaltsame Präsentation. Es gab auch ein Beispiel mit Reactive Proxy als Alternative zu Zuul. Wir raten jedem zu schauen.
Die Welt ist endlich reaktiv geworden. Oder der Gesamteindruck der Joker- Berichte
Es gab viele Berichte darüber und diskutierte es noch mehr in den Diskussionsbereichen. Tatsächlich ist die große Frage, ob die Welt reaktiv geworden ist oder schon lange so, aber jetzt haben sie sich einen neuen Namen für die alten Muster ausgedacht und neues Blut in sie gegossen.
Unter den Berichten über Reaktivität waren für jeden Geschmack: und rein technisch, zum Beispiel Josh Long, der erklärte, wie man im Frühjahr Reaktivität macht. Und reale Fälle von Reaktivität - zum Beispiel Vadim Tsesko von Classmates.
Unsere Haupttechnologie ist der Frühling, daher halten wir den Josh Long-Bericht für ein Muss. (
Link zum Repository aus dem Bericht ). Es gibt ein Beispiel für einen reaktiven Dienst, der mit Mongo reagiert, und einen reaktiven Dienst, der einen anderen reaktiven Dienst reaktiv überträgt. Es war ziemlich nützlich für uns, es herauszufinden.