¡Hola, ciudadanos de Habrovsk! En esta publicación queremos compartir nuestras impresiones de la conferencia para desarrolladores de Java de
Joker 2018 , cuál de los que escuchamos fue la más memorable.
Esperamos que esto lo ayude a navegar el video de la conferencia cuando aparecen en el dominio público. Mientras tanto, hemos agregado enlaces a presentaciones siempre que sea posible.

Día 1
No te alejes de la complejidad, corre - Venkat Subramaniam
Ágil es la capacidad de adaptarse al cambio. El uso eficaz de Agile se evita mediante la complejidad de nuestro propio sistema creado.
El informe de Venkat contiene una lista de problemas que complican el sistema del orador y consejos generales sobre el desarrollo de software. Es poco probable que este informe sea una revelación, pero incluso las cosas obvias deben conocerse, a veces es útil actualizarlas en la memoria y usarlas.
Cómo hacemos complejos los sistemas:
- Partes móviles
Realice una configuración innecesaria, cree componentes no utilizados, cree demasiadas capas, etc. - Código ilegible
"Este código funciona, pero parece que no debería". El código difícil de leer conduce a la invisibilidad de los cambios. Los cambios opacos generan errores e interfieren con la comprensión de lo que está sucediendo con el objeto. - Demasiadas dependencias
Las dependencias se vuelven rápidamente incompatibles, cuanto más hay, más difícil es manejarlo. - Pasión temeraria por introducir nuevas tecnologías
Intenta responder a tus preguntas:
- ¿Cuál es el precio de introducir una nueva tecnología?
- ¿Qué tan fácil será abandonar la tecnología seleccionada?
- Una biblioteca o marco? Usas la biblioteca y el marco te "rodea". Es mucho más fácil rechazar una biblioteca que un marco. Por lo tanto, la decisión de utilizar el marco debe tomarse con más cuidado. Si será fácil volver al antiguo enfoque y si podemos demostrarlo, entonces debemos adoptarlo. No descargue lo que realmente no necesita.
- Desarrollo impulsado por currículum. - Dificultad aleatoria
Por ejemplo, multihilo de bajo nivel. Si resolvió el problema con el grupo de subprocesos, ahora tiene el grupo de problemas.
Cascadas de transacciones, o cómo construir una arquitectura de microservicio transaccional - Harald Wendel ( presentación )
Harald contó cómo el proyecto resolvió el problema de organizar transacciones distribuidas al eliminar las transacciones y reemplazarlas con State Machine. Para mantener la coherencia entre los microservicios, deben implementar el soporte para las condiciones, incluidas las discapacidades, y responder a su cambio. El proyecto utiliza Kafka para comunicarse entre servicios.
De hecho, el informe tiene una idea: abandonar las transacciones al cambiar a un sistema distribuido.
Cómo funciona la operación de transacción anterior:
- Todavía es transaccional, pero solo una operación comercial (condicionalmente una) está comprometida con la base de datos. Otros dentro de la transacción guardan una base de datos para Kafka.
- Además, como parte de la transacción, obtenemos una nueva transacción comercial del Estado. Este es un Estado autónomo totalmente correcto.
- Un controlador especial lee la base: ya sea sondeo o confirmación de enlace en la entidad, si el controlador está en el mismo lugar que la entidad. Luego envía un mensaje a Kafka.
- Los suscriptores de Kafka procesan mensajes. Aquí el mecanismo de garantía de entrega estándar es útil para nosotros. Los mensajes están en Kafka en el momento adecuado y algún día serán procesados por el servicio.
- Durante el procesamiento, los suscriptores pueden comprometerse con sus bases de datos y cambiar su estado. En este caso, los servicios de intercambio de Estado.
- Revertir la transacción comercial no. Y hay tres opciones para manejar problemas:
- Hasta el final, espere a que el mensaje de Kafka se procese correctamente.
- Si se produce un error (y el número requerido de repeticiones), se traduce para iniciar el estado "erróneo" correspondiente.
- Envíe un mensaje a Kafka para que lo procese el iniciador de transacciones comerciales (y otros participantes), a fin de tomar medidas para revertir sus transacciones locales.
Memoria de proceso Java en los estantes - Andrey Panguin
El informe de Andrey se puede utilizar como referencia y procedimientos sobre problemas de depuración con pérdida de memoria nativa con el ejemplo de la memoria sin almacenamiento dinámico.
El informe es útil para comprender quién y qué come la memoria. Andrei muestra herramientas para analizar la memoria, incluido AsyncProfiler, que está integrado en Idea: "El próximo IntelliJ IDEA 2018.3 integra un generador de perfiles de muestreo de baja sobrecarga que puede perfilar JVM y código nativo: generador de perfiles asíncrono".
Recomendamos a todos que lo vean y ejecuten sus módulos y microservicios en los mismos pasos.
Patronaje y sus amigos imaginarios - Tagir Valeev
Tagir habla sobre las posibilidades de los lenguajes de programación: qué, cómo, cuándo y con qué muletas pueden aparecer en Java, qué problemas tienen que resolver los desarrolladores y la comunidad del lenguaje. Hay poca aplicabilidad práctica obvia, pero puede ser útil a largo plazo.
Aventuras de Senior Holmes y Junior Watson en el mundo del desarrollo de software [Edición Joker] - Evgeny Borisov y Baruch Sadogursky ( presentación )
El resumen del informe ya era intrigante. Holmes y Watson prometieron resolver varios acertijos del desarrollo diario: herramientas, bibliotecas y marcos que dejan perplejos a los desarrolladores comunes en su rutina diaria.
Observamos los puntos más útiles de la historia:
- En Spring 5, puede agregar contenedores y otras cosas de primavera en un archivo maravilloso externo. Es decir no es necesario reconstruir, solo reinicie, por ejemplo, para agregar BeanPostProcessor.
- Debes recordar el nombre de los frijoles. Por ejemplo, no puede crear un bean ConversionService, porque Esto ya está en los intestinos de la primavera.
- Necesitas recordar los estándares. Por ejemplo, multiparte solo está permitido para publicación, y Spring está mirando.
- Necesito leer la documentación. Vamos a explicar usando el ejemplo de un lomb. AllArgsConstructor agrega la anotación java.beans.ConstructorProperties para el constructor. Además, si no hay anotaciones, Jacson usa el constructor y los captadores predeterminados, porque los nombres de los parámetros del constructor no se guardan después de la compilación. Si hay una anotación, los nombres de los parámetros se indican en ella (de acuerdo con la convención de Java Beans), y Jacson usa el constructor. La anotación Lombok SneakyThrows cambia las excepciones marcadas a las excepciones no marcadas.
- El informe también planteó una pregunta interesante: "¿Necesitamos excepciones marcadas en principio?" Pensamos
Día 2
Hardcore reactivo: cómo construir su editor <?> - Oleg Dokuka
Podemos decir que esta es una introducción a la programación reactiva: el informe describe conceptos básicos y abstracciones. Oleg muestra toda la evolución de nuestro razonamiento, lo que nos lleva a implementar Publisher desde la biblioteca estándar de Reactive Streams. Le recomendamos que mire para entender de dónde crecen las piernas.
Aprendizaje automático en Java de la nada a la producción en una hora - Derek Ferguson ( presentación )
Puedes escucharlo si estudias Machine Learning. Aunque no está muy claro a quién se destina el informe. Si la gente entiende, entonces para ellos ya no es interesante. Si no entienden, entonces este informe no se resolverá, hay muy poca información para entender.
El mensaje principal es: puede usar Google TensorFlow para entrenar modelos desde Java, pero el soporte de capacitación es limitado. Pero puedes usar modelos entrenados. Por ejemplo, cargue un modelo entrenado en un microservicio TensorFlow y envíe solicitudes desde Java u otro microservicio para obtener una respuesta. Por ejemplo, reconocer una imagen, decir por síntomas, qué tipo de enfermedad ...
El equipo de TensorFlow también tiene una imagen Docker con TensorFlow, que se puede usar para cargar modelos allí y enviar solicitudes para usar estos modelos. Dulce
Micronaut vs Spring Boot, o ¿Quién es el más pequeño aquí? - Kirill Tolkachev y Maxim Gorelikov
Cyril y Maxim compararon los marcos modernos en términos de velocidad de inicio, la cantidad de memoria necesaria para ejecutar y la complejidad de la codificación.
Un hecho nos llamó la atención: Micronaut implementa DI en tiempo de compilación y Spring en tiempo de ejecución / ejecución. Esto permite que Micronaut comience más rápido. Pero hasta que se lance la versión de lanzamiento de Micronaut, hay que tomar una palabra.
Distribuidor reactivo ok.ru/music - Vadim Tsesko ( presentación )
Vadim Tsesko habla sobre la arquitectura del distribuidor de música en Odnoklassniki. El informe contiene una descripción de los servidores y sus roles, una descripción del equilibrio y cómo se proporcionan tolerancia a fallas y alta disponibilidad. Por separado: sobre el enfoque reactivo en un caso real sin detalles técnicos especiales. OK mostró un ejemplo funcional de uso de un enfoque reactivo.
Se presentan varios conceptos, mejores prácticas y arquitectura para obtener un servicio tolerante a fallas debido al equilibrio y la replicación y otros trucos para almacenar datos en caché para la entrega rápida de datos al usuario. Como siempre, en la presentación, OK tiene un montón de enlaces para un estudio más profundo del tema de la diapositiva.
Primavera reactiva - Josh Long
El informe para el que viajábamos :) En realidad no, pero Josh Long es una de las dos grandes estrellas de la conferencia. Su informe es genial, combina humor y tecnología.
Lo que llamamos un informe en la práctica fue una sesión de codificación en vivo sobre la creación de microservicios reactivos utilizando Spring WebFlux. Brinda una comprensión general de lo que es la API reactiva, ofrece un ejemplo de uso en Spring 5 y la ventaja es una presentación divertida. También hubo un ejemplo con Reactive Proxy como alternativa a Zuul. Aconsejamos a todos a mirar.
El mundo finalmente se ha vuelto reactivo. O la impresión general de los informes de Joker
Hubo muchos informes sobre esto y lo discutimos aún más en las áreas de discusión. De hecho, la gran pregunta es si el mundo se ha vuelto reactivo o si ha pasado tanto tiempo, pero ahora se les ocurrió un nuevo nombre para los viejos patrones y vertieron sangre nueva en ellos.
Entre los informes sobre reactividad se encontraban para todos los gustos: y puramente técnicos, por ejemplo, Josh Long, quien dijo cómo hacer reactividad en la primavera. Y casos reales de uso de reactividad, por ejemplo, Vadim Tsesko de Classmates.
Nuestra tecnología principal es Spring, por lo que consideramos que el informe Josh Long es una visita obligada. (
Enlace al repositorio desde el informe ). Hay un ejemplo de un servicio reactivo que reacciona con Mongo, y un servicio reactivo que representa de manera reactiva otro servicio reactivo. Fue bastante útil para nosotros descubrirlo.