¡Hola, ciudadanos de Habrovsk!
Regresamos de una conferencia para desarrolladores de
DotNext .NET y sinceramente compartimos nuestras impresiones sobre los informes más memorables. Esperamos que nuestra revisión sea útil para aquellos que verán videos de actuaciones.
Parte de las presentaciones se publicaron en el sitio web de la conferencia, por lo que complementamos algunas de las revisiones con enlaces a ellas.

Día 1
Uso de Tarantool en proyectos .NET - Anatoly Popov ( presentación )
El informe comenzó con una revisión de la evolución de las bases de datos SQL -> NoSQL -> NewSQL, sus pros y sus contras. Anatoly dijo por qué, de hecho, la necesidad de NewSQL ha madurado: este es un intento de cruzar el rendimiento de NoSQL y el lenguaje de consulta SQL, para el cual hay disponibles mil millones de herramientas útiles.
Se mencionó la siguiente característica sobre Tarantool: los registros se almacenan como tuplas de longitud arbitraria. Debajo del capó, Tarantool usa árboles LSM.
La parte principal del informe, Anatoly, habló sobre la lucha por el rendimiento en la implementación del controlador Tarantool para .NET. Nuevas abstracciones de Readonly Span y el grupo IMemoryOwner entraron en acción. El estándar se toma 200k RPS, lo que le da al controlador Golang, y hasta ahora logró lograr 1/3 del resultado. El orador aseguró que mejoraría gradualmente los indicadores, pero los planes y las perspectivas futuras específicas permanecieron en la niebla.
Optimizaciones dentro de .NET Core - Egor Bogatov
Yegor rodeó su historia sobre las tripas de mono y ryuJIT con el humor apropiado, en contraste con la misma Unidad de Mutel, a quien le daba mucho sueño escuchar.
Egor cubrió el tema de la auto-vectorización de los cálculos en mono, también habló sobre las instrucciones SSE-AVX, ahora disponibles directamente desde C #.
Mirando hacia el futuro, nos dijo que en .Net Core 3 tier compilación nos espera, es decir un jit pesado separado aparecerá en tiempo de ejecución como servidor en Java. En ryuJIT, se esperan nuevas optimizaciones para el desenrollado de bucles y el análisis de escape (este último es aserrado por un estudiante, deje que el github lo ayude).
Nuestro comentario: Hoy, queda una reserva impresionante para un aumento aún mayor en el rendimiento de la plataforma, ya que muchas optimizaciones importantes del mundo Java y los compiladores estáticos clásicos todavía no se aplican en .Net.
Desarrollo web moderno con SAFE-Stack - Steffen Forkmann
Stefan es un ardiente apologista del lenguaje F #. En el informe, compartió su experiencia en desarrollo web, totalmente basado en cánones funcionales. Aquí tienes tanto el Framework web funcional de MVC (Saturno) como Fable para traducir F # a JS, y una interfaz de usuario tipo Elm, bastante sazonada con frases realmente agradables y muy buenas. El informe en su conjunto no es malo y confirma las habilidades sobrenaturales de las religiones alternativas.
Creación de aplicaciones Xamarin a prueba de modo avión - Gerald Versluis ( presentación )
Según el método de presentación, el informe es muy similar al informe SAFE-Stack y parece un programa "Smack": primero colocamos el componente Essentials para detectar el acceso a Internet en una placa con la aplicación, luego pasamos la API REST a través de Refit, enfriamos los datos en el caché de Akavache, espolvoreamos a Polly en la parte superior para el manejo inteligente de errores de solicitudes de red. No fue sin ironía holandesa, porque la aplicación se bloqueó continuamente al azar en el simulador.
Arquitectura multiinquilino de ASP.NET Core: desafíos y soluciones - Halil İbrahim Kalkan ( presentación )
El informe describe todas las características principales de la arquitectura de las aplicaciones multiempresa.
La idea principal es que cuando una empresa desarrolla aplicaciones SAAS, quiere utilizar la infraestructura al máximo. Por lo tanto, tiene varios clientes en el mismo servidor para que el servidor no permanezca inactivo. Esto causa un problema relacionado con el hecho de que todos los datos de diferentes clientes están como en la misma caldera. El informe se centra en soluciones que permiten un acceso confiable a estos datos.
Un excelente informe en el que todo se presenta en los estantes. Ejemplos simples y comprensibles sin detalles innecesarios: están escritos de manera muy elegante, utilizando patrones y enfoques modernos. Lo miré con gusto.
Diseño impulsado por el dominio: una receta para un pragmático - Alexey Merson ( presentación )
Un excelente informe sobre los conceptos básicos de DDD. ¿Qué libro leer primero: "azul" o "rojo"? ¿Cómo puede todo el equipo hablar el mismo idioma? ¿Es posible usar la denominación cirílica en los programas de C #? ¿Cómo dejar de tener miedo a la interfaz separada y hacer que el código de dominio sea independiente del resto de la aplicación? Todos estos puntos con ejemplos se destacan en este informe.
Alexey enfatiza la importancia del lenguaje (lenguaje único) para la implementación de un contexto limitado. Dijo cómo elegir el tamaño del contexto limitado y qué tipos de subdominio pueden ser. El informe también dice que un contexto limitado es igual a un microservicio, esto se correlaciona bien con nuestra experiencia en la implementación de proyectos.
Fue interesante escuchar sobre la esencia de la arquitectura bulbosa y las ventajas en comparación con la arquitectura de tres capas / cuatro capas.
El informe es ideal para aquellos que son nuevos en DDD y desean transferir sus monolitos a microservicios, y para aquellos que comienzan a desarrollar soluciones de microservicios.
Día 2
Prueba de unidad pragmática - Vladimir Khorikov ( presentación )
Uno de los mejores informes y oradores en nuestra opinión.
Vladimir clasificó a través de los estantes cuál es el verdadero propósito de las pruebas para el proyecto, qué métricas determinan la calidad de las pruebas, cómo se corresponden varios tipos de pruebas con estas métricas. Uno no puede estar en desacuerdo con todos los pensamientos, así que debe ver.
Khorikov ha grabado muchos cursos en Pluralsight: búscalo allí. Él también tiene un buen
blog .
Diseño instantáneo - Maxim Arshinov ( presentación )
Continuando con el informe de Merson sobre DDD, Maxim habló sobre la transición de capas clásicas de código a arquitectura de cebolla, a lo largo del informe refactorizando el método de actualización del correo electrónico del usuario. El resultado fue una tubería de decoradores (hola, yegor256) en el estilo CQRS con el tipo de DTO más estricto (hola, FSharpForFunAndProfit).
Como resultado, recibimos una guía de acción lista para usar, que se puede usar en el proyecto para obtener el mismo código elegante que Max.
En general, el informe está extremadamente lleno de ideas útiles. La experiencia de Maxim en la enseñanza tuvo un impacto positivo en su nivel de habilidades como orador: escuchar la presentación fue simplemente agradable.
Detrás del compilador de ráfagas, convirtiendo .NET IL a código nativo altamente optimizado usando LLVM - Alexandre Mutel
Aparentemente, Unity ha enseñado los juegos de clase A y, por lo tanto, igrodelov necesita un rendimiento mucho más cercano a C ++. Mutel contó cómo logran buenos resultados al destacar un subconjunto del lenguaje C # (HPC #), que tiene estructuras listas para un trabajo eficiente con memoria sin GC y algunas construcciones de lenguaje familiares.
La idea es aplicar este subconjunto solo para los métodos más costosos, de modo que en otros lugares las manos se desatarán como siempre (en la medida de lo permitido en el desarrollo del juego). Se está desarrollando un nuevo compilador de ráfaga AOT / JIT para compilar HPC #. La explosión en comparación con ryuJIT ya da 10 veces en algunas pruebas sintéticas.
Los ejemplos mostrados del ensamblador generado muestran cuán inteligente resultó el compilador. Y la solución sola y nadie se sorprende: el código IL se introduce en LLVM. Los intrínsecos también se escriben para las matemáticas utilizando una biblioteca de alto rendimiento de terceros.
El informe es difícil de entender, el orador es demasiado duro.
La vida de los actores en un clúster: por qué, cuándo y cómo - Vagif Abilov ( presentación )
El informe reveló que la mitad de la audiencia está sentada en F #. Esto es quizás lo más agradable que hubo en este informe. La actuación terminó con un canto en vivo sobre el cerebro dividido en un grupo. Es glorioso
Cómo sobrevivir bajo carga: servidor tolerante a fallas, cliente inteligente - Igor Lukanin ( presentación )
Igor habló sobre la cocina de gran carga en los proyectos de Kontur. Me sorprendió que la empresa utilizara un "equilibrador" en el cliente: la API envía información sobre la carga de los nodos del clúster y los estados 429, según los cuales el cliente comprende cómo distribuir las solicitudes. También mostró métricas de utilización de recursos y cómo determinar si todo es bueno o si todo es malo. Dijo cómo cotizar solicitudes por tiempo de espera y por cliente, y también por qué es mejor procesar la cola en orden LIFO.
El micrófono era propiedad de un orador experimentado, escuchar a Igor era cómodo.
Dodo IS Performance Architecture - Georgy Polevoy ( presentación )
Al principio, el informe parecía bastante aburrido: el ritmo incierto de la narración, diapositivas aburridas con listas de tecnologías, definiciones bien conocidas. En algún momento, surgió una sospecha: pronto el orador dirá que todo lo que se necesita es una línea en la entrada. Pero no fue tan simple.
Describiendo brevemente el informe, podemos decir que se dedicó a las características de la biblioteca de
Polly , como la Política de reintento, Aislamiento de mamparo, Respaldo, y está sazonado con excelentes ejemplos de la vida de Dodo Pizza.
La tendencia de los últimos años es utilizar la asincronía en todas partes. Pero esta tendencia tiene un efecto obvio: esto lleva al hecho de que los recursos del servidor están "obstruidos". Anteriormente, todo estaba limitado a un grupo de subprocesos. El servidor web tenía un grupo fijo de subprocesos que procesaban las solicitudes entrantes que realizaban operaciones sincrónicas. Esto limitó la carga en el servidor. Cada subproceso se lanzó y recibió otra solicitud de procesamiento cuando todo el trabajo estaba realmente terminado.
Hoy, los desarrolladores a menudo escriben código asincrónico sin pensar en las consecuencias. Como resultado, las secuencias del servidor web, que comienzan la siguiente tarea asincrónica, se liberan y procesan más y más solicitudes nuevas. Con el tiempo, el número de operaciones asincrónicas competitivas está creciendo, y el servidor web continúa aceptando más y más solicitudes.
El autor en su informe solo dice qué es la concurrencia y por qué debería ser limitada. Por cierto, esta y otras tareas de gestión de carga y tolerancia a fallas son ayudadas por la biblioteca Polly.
En general, incluso si no está desarrollando servicios altamente cargados, consulte este informe de todos modos.
Creación de aplicaciones receptivas y escalables - Jeffrey Richter ( presentación )
Este es un informe bastante viejo de Jeffrey Richter. Se puede encontrar en Internet durante al menos un año, y el tema no tiene pretensiones de novedad. ¡Pero demonios, es Jeffrey Richter! No pudimos evitar escuchar al autor del libro, que con razón se considera la biblia de cualquier desarrollador de C #. El viejo Jeffrey era una buena persona y un buen orador. Solo nos divertimos.