La conferencia se llevará a cabo en San Petersburgo del 11 al 12 de julio , dedicada al desarrollo de sistemas paralelos y distribuidos. La característica de Hydra es que reúne a grandes científicos (que generalmente solo se pueden encontrar en conferencias científicas en el extranjero) y a destacados ingenieros prácticos en un mismo programa que mezcla ciencia y práctica.
Hydra es una de nuestras conferencias más importantes de los últimos años. Su preparación fue muy seria, con la selección de ponentes y presentaciones. La semana pasada se publicó con el director de JUG.ru Group, Alexey Fedorov ().
Nosotros ) sobre tres importantes participantes, fundadores de la teoría de sistemas distribuidos: Leslie Lamport, Maurice Herlihy y Michael Scott. ¡Es hora de hablar en detalle sobre todo el programa!

Motivación
Si te dedicas a la programación, de una forma u otra te enfrentas a la multiprocesación y al cómputo distribuido. Los especialistas en los campos correspondientes trabajan directamente con ellos, pero la distribución se asoma indirectamente en todas partes: en cualquier computadora multinúcleo o servicio distribuido siempre hay algo que ejecuta cálculos en paralelo.
Existen muchas conferencias que abordan diferentes aspectos de la programación aplicada. Al otro lado del espectro, tenemos escuelas científicas especializadas que, en forma de conferencias, desvelan grandes volúmenes de teoría compleja. Por ejemplo, simultáneamente con Hydra, en San Petersburgo se lleva a cabo . En la conferencia Hydra nos esforzamos por combinar tanto la dura práctica como la ciencia, y todo lo que se encuentra en su intersección.
Reflexiona sobre esto: vivimos en un tiempo extraordinario en el que es posible conocer en persona a los fundadores del campo de la ciencia y la ingeniería en el que trabajamos. Los físicos no conocerán a Newton ni a Einstein; el tren ya partió. Pero aún hay quienes establecieron las bases de la teoría de los sistemas distribuidos, inventaron lenguajes de programación populares y llevaron todo esto a prototipos funcionales. Estas personas no abandonaron su trabajo a medias, están trabajando actualmente en problemas relevantes en universidades y compañías de renombre mundial, y son las mayores fuentes de conocimiento y experiencia en la actualidad.
Por otro lado, la posibilidad de encontrarse con ellos generalmente queda en el terreno de lo teórico: pocos de nosotros podemos monitorear constantemente eventos públicos en alguna universidad de Rochester y luego hacer un viaje rápido a EE. UU. y volver a la conferencia de Michael Scott. Visitar a todos los participantes de Hydra costaría una pequeña fortuna, sin contar la gran cantidad de tiempo perdido (aunque suena como una aventura interesante).
Por otro lado, tenemos muchos ingenieros destacados que están trabajando en problemas actuales de sistemas distribuidos, y definitivamente tienen mucho que contar. Pero el problema es que ellos, operan, y su tiempo es valioso. Sí, si eres empleado de Microsoft, Google o JetBrains, la probabilidad de encontrarte a uno de los ponentes conocidos en un evento interno aumenta drásticamente, pero en general, no es algo que suceda a diario.
Así, la conferencia Hydra cumple una importante función que la mayoría de nosotros no podemos hacer por nuestra cuenta: reúne en un solo lugar y momento a personas cuyas ideas o cuyas interacciones pueden cambiar tu vida. Admito que no todos necesitan sistemas distribuidos ni conceptos fundamentales complejos. Se puede pasar toda la vida programando CRUD en PHP y ser completamente feliz. Pero para aquellos que lo necesitan, esta es su oportunidad.
Desde el primer anuncio de la conferencia Hydra en Habr, ha pasado bastante tiempo. Durante este período, se ha realizado un gran trabajo, y ahora tenemos una lista de casi todas las presentaciones. ¡Nada de algoritmos monohilo aburridos, solo puro hardcore distribuido! Terminemos con las palabras generales y veamos qué tenemos ahora en nuestras manos.
Keynotes
Los keynotes inician y cierran los días de la conferencia. Normalmente, el propósito del keynote inaugural es establecer el ambiente general y la dirección de la conferencia. El keynote de clausura hace un resumen y explica cómo debemos vivir con los conocimientos y habilidades adquiridos durante los días de la conferencia. Inicio y final: lo que recordaremos mejor y, en general, tiene una importancia especial.
Cliff Click —
Cliff es una leyenda en el mundo de Java. A fines de la década de 1990, escribió una tesis para su doctorado titulada , que se convirtió en la base para HotSpot JVM Server Compiler después de un tiempo. Dos años más tarde, ya estaba trabajando en Sun Microsystems en la JVM y demostró al mundo que JIT tenía un lugar. Toda esta historia sobre cómo Java es uno de los tiempos de ejecución modernos más rápidos con las optimizaciones más inteligentes y rápidas proviene de Cliff Click. Al principio, se pensaba que si algo estaba disponible para el compilador estático, no había necesidad de intentar jit. Gracias al trabajo de Cliff y su equipo, todos los nuevos lenguajes comenzaron a crearse con la idea de la compilación JIT por defecto. Sin duda, no fue un trabajo de una sola persona, pero Cliff tuvo un papel muy importante en ello.
En la keynote de apertura, Cliff hablará sobre otro de sus proyectos — , una plataforma en memoria para el aprendizaje automático distribuido y escalable para aplicaciones industriales. Más específicamente, sobre el almacenamiento distribuido de pares «clave-valor» dentro de ella. Es un almacenamiento muy rápido con muchas propiedades interesantes (la lista exacta está en ), que permiten usar soluciones similares en matemáticas de transmisión de grandes datos.
Otra charla que dará Cliff es — . Otra parte de su biografía es una década , donde actualizó y mejoró muchas cosas en el hardware y el stack de tecnologías de Azul: compiladores JIT, tiempo de ejecución, modelo de hilos, manejo de errores, trabajo con la pila, interrupciones hardware, carga de clases, y así sucesivamente — ya entendieron.
La parte más interesante comenzó cuando hicieron hardware para grandes empresas — un superordenador para ejecutar Java. Era algo bastante innovador, diseñado específicamente para Java, que tiene requisitos especiales — barreras de memoria para lectura para la recolección de basura de baja latencia, arreglos con comprobación de límites, llamados virtuales… Una de las tecnologías más impresionantes fue la memoria transaccional hardware. Todo el L1 de cualquiera de los 864 núcleos podía participar en una escritura transaccional, lo cual es especialmente importante para trabajar con bloqueos en Java (los bloques synchronized pueden funcionar en paralelo, siempre que no haya conflicto real en la memoria). Sin embargo, una buena idea se enfrentó a una dura realidad — y en esta charla, Cliff explicará por qué HTM y STM no son muy adecuadas para las necesidades prácticas de la computación multihilo.
Michael Scott —
— profesor de Ciencias de la Computación en la Universidad de Rochester, con la que el destino lo ha vinculado , y en su universidad natal Wisconsin–Madison, fue decano durante cinco años. Se dedica a la investigación en programación paralela y distribuida, así como en el diseño de lenguajes y enseña estos temas a los estudiantes.
El mundo entero conoce a Michael gracias a su manual , cuya última edición se publicó relativamente hace poco — en 2015. Su trabajo reciba como uno de los más reconocidos en el ámbito de los cálculos distribuidos y en la biblioteca en línea de la Universidad de Rochester. También podría conocerlo como el autor del famoso algoritmo de Michael-Scott de .
En cuanto al mundo de Java, hay un caso especial: junto con Doug Lea, desarrolló esos algoritmos no bloqueantes y las colas sincronizadas que utilizan las bibliotecas de Java. De esto tratará la keynote «Estructuras de datos duales» — la implementación de estas estructuras en Java SE 6 permitió mejorar el rendimiento java.util.concurrent.ThreadPoolExecutor. Si le interesa saber de antemano qué son estas «Estructuras de datos duales», hay .
Maurice Herlihy —
— ganador de dos premios Dijkstra. El primero — por su trabajo en (Universidad de Brown), y el segundo, más reciente — (Universidad de Virginia Tech). El premio Dijkstra se otorga por trabajos cuyas contribuciones y su impacto han sido notables durante al menos diez años, y es claro que Maurice es uno de los especialistas más reconocidos en el área. Actualmente, trabaja como profesor en la Universidad de Brown y tiene muchos logros que podrían llenar un párrafo.
En esta keynote de cierre, Maurice hablará sobre la teoría y práctica de los sistemas distribuidos basados en blockchain desde la perspectiva de la teoría clásica de cálculos distribuidos y cómo esto simplifica muchos problemas relacionados. Esta es una charla estrictamente temática de la conferencia — no trata sobre el bombo del minado, sino sobre cómo nuestro conocimiento puede ser sorprendentemente efectivo y relevante para una variedad de tareas.
En julio de 2017, Maurice ya estuvo en Rusia para la escuela SPTDC, participó en un meetup de JUG.ru y la grabación está disponible en YouTube:

Programa principal
A continuación, habrá una breve revisión de las charlas incluidas en el programa. Algunas de las charlas se describen aquí en detalle, mientras que otras son más breves. Las descripciones largas, principalmente, fueron asignadas a las charlas en inglés que requieren referencias a trabajos científicos, términos de Wikipedia, etc. La lista completa se puede . La lista en el sitio web se actualizará y complementará.
Leslie Lamport —
Leslie Lamport es autor de trabajos fundamentales en computación distribuida. se traduce como «Lamport TeX». Fue él quien por primera vez, en 1979, introdujo el concepto , y su artículo recibió el premio Dijkstra.
Esta es la parte más inusual del programa, porque no es ni siquiera una charla, sino una sesión de preguntas y respuestas. Cuando una parte significativa de la audiencia ya está familiarizada (o puede familiarizarse) con los numerosos trabajos basados en «la teoría de Lamport», así como con sus propios artículos y charlas, es crucial dedicar todo el tiempo disponible a la comunicación directa.
La idea es sencilla: ves dos charlas en YouTube: y y preparas al menos una pregunta, a lo que Leslie responde.
La primera de estos dos videos ya hemos . Si no tienes una hora para ver el video, puedes leer todo esto rápidamente en formato de texto.
Nota: hay muchos más videos de Leslie Lamport en YouTube. Por ejemplo, hay uno excelente . La versión offline de todo este curso está en , y en YouTube la ha subido para una visualización más cómoda en dispositivos móviles.
Martin Kleppmann —
Martin Kleppmann es investigador en la Universidad de Cambridge, trabajando en CRDT y verificación formal de algoritmos. El libro de Martin , publicado en 2017, ha sido muy exitoso y ha llegado a las listas de bestsellers en el área de almacenamiento y procesamiento de datos. Kevin Scott, CTO de Microsoft, : «Este libro debería ser obligatorio para ingenieros desarrolladores. Es un recurso raro que une teoría y práctica, ayudando a los desarrolladores a diseñar e implementar de manera más inteligente la infraestructura y sistemas de procesamiento de datos». Algo similar dijo el creador de Kafka y CTO de Confluent, Jay Kreps.
Antes de dedicarse a la investigación académica, Martín trabajó en la industria y fue cofundador de dos startups exitosas:
- Rapportive, que se dedicaba a mostrar el perfil social de los contactos de tu correo electrónico, fue adquirida por LinkedIn en 2012;
- Go Test It, un servicio para la prueba automática de sitios web en diferentes navegadores, fue adquirido por RedGate en 2009.
En general, aunque Martín es menos conocido que nuestros oradores principales, ya ha podido contribuir al desarrollo de la computación distribuida y a la industria.
En esta presentación, Martín hablará sobre un tema más cercano a su investigación académica. En Google Docs y software similar para la edición colaborativa de documentos, la "edición colaborativa" implica la tarea de replicación: cada usuario tiene su propia réplica del documento compartido, que luego modifica, y todos los cambios se envían a la red a los demás participantes. Los cambios en los documentos sin conexión conducen a una inconsistencia temporal del documento en relación con los demás participantes, y la re-sincronización requiere la gestión de conflictos. Para esto existen (CRDT), que en esencia es algo relativamente nuevo, cuya esencia fue formulada apenas en 2011. En esta charla se discutirá qué ha sucedido desde entonces en el mundo de CRDT, cuáles son los logros más recientes, y se abordará el enfoque para crear aplicaciones de primera en local y el uso de la biblioteca de código abierto en particular.
La próxima semana publicaremos en Habr una gran entrevista con Martín, será interesante.
Pedro Ramalhete —
Pedro trabaja en Cisco y ha estado desarrollando algoritmos paralelos durante unos diez años, incluyendo mecanismos de sincronización, estructuras de datos sin bloqueos y sin bloqueos, y todo lo que puedas imaginar sobre este tema. Sus intereses científicos y de ingeniería actuales se centran en Construcciones Universales, Memoria Transaccional de Software, Memoria Persistente y tecnologías similares que permiten implementar aplicaciones correctas, escalables y resilientes. Además, es autor de un blog ampliamente conocido en círculos especializados llamado .
En las estructuras de datos paralelas es donde actualmente opera la mayoría de las aplicaciones multihilo, desde el uso de colas de mensajes entre actores hasta estructuras de datos indexadas en almacenes de clave-valor. En Java JDK han funcionado con éxito durante muchos años, y en C++ se van añadiendo gradualmente.
La forma más sencilla de implementar una estructura de datos paralela es mediante una implementación secuencial (monohilo), en la que los métodos están protegidos por mutexes. Esto está al alcance de cualquier principiante, pero tiene problemas evidentes de escalabilidad y rendimiento. Al mismo tiempo, las estructuras de datos lock-free y wait-free no solo manejan mejor los errores, sino que también tienen un perfil de rendimiento más favorable; sin embargo, su desarrollo requiere una profunda experiencia y adaptación a un uso específico. Una línea de código incorrecta puede ser suficiente para romperlo todo.
¿Cómo hacer que incluso un no experto pueda diseñar e implementar tales estructuras de datos? Se sabe que cualquier algoritmo secuencial se puede hacer seguro para hilos mediante o bien , o memoria transaccional. Ambos pueden bajar el umbral de entrada para resolver esta tarea. Sin embargo, ambos enfoques suelen llevar a una implementación ineficiente. Pedro hablará sobre cómo lograron hacer estas construcciones más eficientes y cómo se pueden usar para sus algoritmos.
Heidi Howard —
Heidi Howard, al igual que Martin, es investigadora de sistemas distribuidos en la Universidad de Cambridge. Su especialización es la consistencia, alta disponibilidad, rendimiento y consenso distribuido. Es más conocida por la generalización del algoritmo Paxos llamado .
Recordemos que — un conjunto de protocolos para resolver el problema del consenso en una red de computadoras poco fiables, basado en los trabajos de Leslie Lamport. Así, algunos de nuestros ponentes trabajan en problemas inicialmente propuestos por otros de nuestros ponentes, y eso es maravilloso.
La posibilidad de encontrar un consenso entre varios hosts — para direccionamiento, elección de líder, bloqueo o coordinación — es una cuestión fundamental de los sistemas distribuidos modernos. Paxos es actualmente el método principal para resolver problemas de consenso, y a su alrededor se llevan a cabo numerosas investigaciones para ampliar y optimizar el algoritmo para diversas necesidades prácticas.
En este informe revisaremos la base teórica de Paxos, suavizando los requisitos originales y generalizando el algoritmo. Veremos que Paxos, en esencia, es solo una de las múltiples variantes dentro de un amplio espectro de enfoques para el consenso, y que otros puntos en este espectro también son muy útiles para construir buenos sistemas distribuidos.
Alex Petrov —
Alex es un especialista en bases de datos y sistemas de almacenamiento, y lo que es más importante para nosotros, es committer en . Actualmente trabaja junto a O’Reilly en el libro Database Internals.
Para sistemas con (en la terminología en español — 'consistencia eventual'), tras la caída de un nodo o partición de red, se debe resolver la siguiente disyuntiva: continuar atendiendo solicitudes a costa de la consistencia, o bien, negarse a hacerlo sacrificando la disponibilidad. En tal sistema, los quorums, subconjuntos de nodos que garantizan que al menos uno contendrá el último valor, pueden ser una buena solución límite. Se pueden sobrevivir fallos y pérdida de conexión con algunos nodos, continuando respondiendo con los valores más recientes.
Sin embargo, todo tiene su precio. Un esquema de replicación con quorums significa un aumento en el costo de almacenamiento: es necesario almacenar datos redundantes en varios nodos al mismo tiempo para garantizar un número suficiente de copias disponibles en el momento de la falla. Resulta que no es necesario almacenar todos los datos en todas las réplicas. Se puede aliviar la carga en el almacenamiento si se mantiene la información solo en parte de los nodos, utilizando nodos especiales (Replica Transitoria) para los escenarios de manejo de fallos.
A lo largo del informe, abordaremos , un esquema de replicación utilizado en y , y la implementación de este concepto en Apache Cassandra bajo los nombres .
Dmitry V'yukov —
Dmitri es un desarrollador en Google, trabajando en pruebas dinámicas de C/C++ y Go, así como en Address/Memory/ThreadSanitizer y herramientas similares para el núcleo de Linux. Ha contribuido en Go con un planificador escalable de goroutines, un encuestador de red y un recolector de basura paralelo. Es experto en programación concurrente, autor de una docena de nuevos algoritmos no bloqueantes y es poseedor de Intel.
Ahora un poco sobre la presentación. En el lenguaje Go hay soporte nativo para la programación concurrente en forma de goroutines (hilos ligeros) y canales (colas FIFO). Gracias a estos mecanismos, a los usuarios les resulta muy fácil y agradable escribir aplicaciones modernas de múltiples hilos, y se siente como magia. Como entendemos, no hay magia aquí. En esta presentación, Dmitri profundizará en las complejidades del funcionamiento del planificador de Go y mostrará los secretos detrás de esta 'magia'. Al principio, ofrecerá una visión general de los componentes clave del planificador y explicará cómo funciona. Luego nos familiarizaremos más con aspectos individuales, como la estrategia de aparcamiento/desaparcar y el manejo de llamadas de sistema bloqueantes. Finalmente, Dmitri hablará un poco sobre las posibles mejoras en el planificador.
Dmitri Bugaychenko es
Dmitri ha trabajado casi 9 años en la subcontratación, sin perder contacto con la universidad y el entorno académico. El análisis de grandes datos en Odnoklassniki fue para él una oportunidad única de combinar la preparación teórica y la base científica con el desarrollo de productos reales y demandados.
El análisis distribuido de grafos ha sido y sigue siendo un desafío complejo: cuando surge la necesidad de obtener información sobre las conexiones de un vértice vecino, a menudo es necesario transferir datos entre máquinas, lo que lleva a un aumento en el tiempo de ejecución y la carga en la infraestructura de red. En esta presentación, veremos cómo se puede lograr una aceleración significativa en el procesamiento utilizando estructuras de datos probabilísticas o hechos como la simetría del grafo de amistades en la red social. Todo esto se ilustra con ejemplos de código en Apache Spark.
Denis Ryscov es
Denis es desarrollador. , experto en la verificación de modelos de consistencia, en algoritmos de consenso y en transacciones distribuidas. Actualmente trabaja en Microsoft y anteriormente estuvo involucrado en sistemas distribuidos en Amazon y Yandex.
En esta presentación, conoceremos los protocolos de transacciones distribuidas que se han propuesto en los últimos años, los cuales pueden implementarse del lado del cliente sobre cualquier almacenamiento de datos que soporte actualización condicional (compare and set). La esencia es que la vida no termina con el compromiso en dos fases; las transacciones se pueden agregar sobre cualquier base de datos — a nivel de aplicación, pero diferentes protocolos (2PC, Percolator, RAMP) tienen diferentes compensaciones y no se obtienen sin costo.
Aleksey Zinovyev —
Aleksey () — es nuestro veterano ponente y miembro de comités de programas en otras conferencias. Practicante y formador en EPAM Systems, ha trabajado con Hadoop/Spark y otras tecnologías de big data desde 2012.
En esta presentación, Aleksey abordará los problemas de adaptación de los algoritmos clásicos de aprendizaje automático para su ejecución en modo distribuido basado en su experiencia con Apache Spark ML, Apache Mahout, Apache Flink ML y su experiencia en la creación de Apache Ignite ML. También discutirá la implementación de algoritmos de ML distribuidos en estos marcos.
Y para terminar, dos ponencias de Yandex sobre Yandex Database.
Vladislav Kuznetsov —
Vladislav es desarrollador en Yandex en el grupo de plataforma distribuida. Yandex Database es un sistema de gestión de bases de datos (SGBD) geográficamente distribuido y escalable horizontalmente, que tolera fallos de discos, servidores, racks y centros de datos sin violar la consistencia. Para asegurar la resiliencia se utiliza un algoritmo propietario para alcanzar consenso distribuido, así como una serie de soluciones técnicas que se discutirán en la presentación. Esta charla puede ser interesante tanto para desarrolladores de SGBD como para aquellos que desarrollan soluciones aplicativas basadas en el SGBD.
Semyon Chechirin —
Semyon es desarrollador en el grupo de plataforma distribuida de Yandex, trabajando en la posibilidad de uso multitenancy de la instalación de YDB.
Yandex Database está diseñada para consultas OLTP y cumple con los requisitos ACID para sistemas transaccionales. En este informe, exploraremos el algoritmo de planificación de transacciones que subyace en el sistema transaccional YDB. Analizaremos qué entidades participan en las transacciones, quién asigna un orden global a las transacciones, cómo se logra la atomicidad de las transacciones, la fiabilidad y un nivel de aislamiento estricto. Tomaremos un ejemplo común para discutir las implementaciones de transacciones utilizando el compromiso en dos fases y transacciones deterministas. Compararemos sus diferencias.
¿Qué sigue?
El programa de la conferencia sigue enriqueciéndose con nuevos informes. En particular, esperamos un informe de Nikita Koval () de JetBrains y Oleg Anastasyev () de la compañía Odnoklassniki. Nikita trabaja en algoritmos para corrutinas en el equipo de Kotlin, mientras que Oleg desarrolla la arquitectura y soluciones para sistemas de alta carga en la plataforma de Odnoklassniki. Además, hay 1 slot condicionalmente vacío, con candidatos en los que el comité del programa está trabajando en este momento.
La conferencia Hydra se llevará a cabo del 11 al 12 de julio en San Petersburgo. Las entradas se pueden . Tenga en cuenta la disponibilidad de entradas en línea: si por alguna razón no puede llegar a San Petersburgo en esos días.
¡Nos vemos en Hydra!
Fuente: habr.com
