19 hydrahoveder. Godt overblik over programmet

En konference finder sted den 11.-12. juli i St. Petersborg Hydra, dedikeret til udvikling af parallelle og distribuerede systemer. Tricket med Hydra er, at det forener seje videnskabsmænd (som normalt kun kan findes på udenlandske videnskabelige konferencer) og berømte praktiserende ingeniører i ét stort program i skæringspunktet mellem videnskab og praksis.

Hydra er en af ​​vores vigtigste konferencer i de sidste par år. Det gik forud for meget seriøs forberedelse, udvælgelse af oplægsholdere og rapporter. Sidste uge om dette habro interview udkom med direktøren for JUG.ru Group, Alexey Fedorov (23derevo).

Vi allerede fortalt om tre vigtige deltagere, grundlæggerne af teorien om distribuerede systemer - Leslie Lamport, Maurice Herlihy og Michael Scott. Det er tid til at tale mere detaljeret om hele programmet!

19 hydrahoveder. Godt overblik over programmet

Motivation

Hvis du er involveret i programmering, så har du på en eller anden måde at gøre med multithreading og distribueret computing. Eksperter inden for de relevante områder arbejder direkte med dem, men implicit ser distributionen på os alle steder fra: I enhver multi-core computer eller distribueret tjeneste er der noget, der udfører beregninger parallelt.

Der er mange konferencer, der dækker forskellige aspekter af applikationsprogrammering. På den anden side af spektret har vi specialiserede videnskabelige skoler, der afslører enorme mængder kompleks teori i forelæsningsformat. For eksempel er der parallelt med Hydra i St. Petersborg SPTDC skole. På Hydra-konferencen forsøgte vi at samle hård praksis, videnskab og alt i deres skæringspunkt.

Tænk over dette: vi lever i en fantastisk tid, hvor du personligt kan møde grundlæggerne af det naturvidenskabelige og tekniske område, som vi studerer. Fysikere vil hverken møde Newton eller Einstein – toget er kørt. Men ved siden af ​​os bor stadig dem, der skabte grundlaget for teorien om distribuerede systemer, opfandt populære programmeringssprog og for første gang legemliggjorde alt dette i fungerende prototyper. Disse mennesker sagde ikke deres job halvvejs op, de arbejder lige nu med presserende spørgsmål på verdenskendte universiteter og virksomheder og er de største kilder til viden og erfaring i dag.

På den anden side forbliver muligheden for at møde dem som regel rent teoretisk: De færreste af os kan konstant overvåge offentlige begivenheder på et eller andet University of Rochester og derefter skynde os til USA og tilbage til en forelæsning med Michael Scott. At besøge alle Hydra-medlemmer ville koste en mindre formue, ikke medregnet afgrunden af ​​spildtid (selvom det lyder som en interessant søgen).

Til gengæld har vi mange topingeniører, som arbejder med presserende problemer i distribuerede systemer lige nu, og de har bestemt meget at fortælle. Men her er problemet - de работают, og deres tid er værdifuld. Ja, hvis du er ansat hos Microsoft, Google eller JetBrains, stiger sandsynligheden for at møde en af ​​de kendte talere ved et internt arrangement kraftigt, men generelt set, nej, det sker ikke hver dag.

På denne måde udfører Hydra-konferencen en vigtig opgave, som de fleste af os ikke kan klare på egen hånd - på ét sted og på én gang samler den mennesker, hvis ideer eller interaktioner med hvem kan ændre dit liv. Jeg indrømmer, at ikke alle har brug for distribuerede systemer eller nogle komplekse fundamentale ting. Du kan programmere CRUD'er i PHP resten af ​​dit liv og forblive helt tilfreds. Men hvem har brug for det, dette er din chance.

Der er gået ret lang tid siden den første annoncering af Hydra-konferencen på Habré. I denne tid er der blevet arbejdet meget - og nu har vi en liste over næsten alle rapporterne. Ingen træge enkelttrådede algoritmer, kun ren distribueret hardcore! Lad os slutte af med generelle ord og se, hvad vi har på hånden nu.

Keynotes

Keynotes begynder og afslutter dagene for konferencen. Normalt er pointen med en indledende keynote at fastlægge den generelle ånd og retning for konferencen. Den afsluttende keynote trækker en streg og forklarer, hvordan vi kan leve med den viden og de færdigheder, som er erhvervet under konferencen. Begyndelsen og slutningen: hvad der huskes bedst, og generelt, har øget betydning.

Cliff klik Den H2O distribuerede K/V-algoritme

19 hydrahoveder. Godt overblik over programmet Cliff er en legende i Java-verdenen. I slutningen af ​​90'erne skrev han til sin ph.d.-afhandling et papir med titlen "Kombinering af analyser, kombination af optimeringer", som noget tid senere blev grundlaget for HotSpot JVM Server Compiler. To år senere arbejdede han allerede hos Sun Microsystems på JVM og viste hele verden, at JIT har ret til at eksistere. Hele denne historie om, hvordan Java er en af ​​de hurtigste moderne kørselstider med de smarteste og hurtigste optimeringer, kom fra Cliff Click. Allerede i begyndelsen troede man, at hvis noget er tilgængeligt for en statisk compiler, behøver du ikke engang at prøve at tude med det. Takket være arbejdet fra Cliff og team begyndte alle nye sprog at blive skabt med ideen om JIT-kompilering som standard. Dette var selvfølgelig ikke et enkeltmandsjob, men Cliff spillede en meget vigtig rolle i det.

I den indledende keynote vil Cliff fortælle om sin anden bestræbelse - H20, en in-memory platform til distribueret og skalerbar maskinlæring til industrielle applikationer. Eller mere præcist om den distribuerede lagring af nøgle-værdi-par inde i den. Dette er en meget hurtig opbevaring med en masse interessante egenskaber (den nøjagtige liste er inde beskrivelse), som tillader brugen af ​​lignende løsninger i matematikken til streaming af big data.

En anden rapport, som Cliff vil give er - Azul Hardware Transactional Memory-oplevelsen. En anden del af hans biografi - ti år arbejde hos Azul, hvor han opdaterede og forbedrede en masse ting i Azul-hardware- og teknologistakken: JIT-kompilere, runtime, trådmodel, fejlhåndtering, stakhåndtering, hardwareafbrydelser, klasseindlæsning og så videre og så videre - jamen, du får ide.

Den mest interessante del begyndte, da de lavede hardware til en stor virksomhed - en supercomputer til at køre Java. Det var en ret nyskabende ting, skræddersyet specifikt til Java, som har særlige krav - læsehukommelsesbarrierer til lav-pause affaldsopsamling, arrays med grænsekontrol, virtuelle opkald... En af de fedeste teknologier er hardwaretransaktionshukommelse. Hele L1 af enhver af de 864 kerner kunne deltage i transaktionsskrivning, hvilket er særligt vigtigt for at arbejde med låse i Java (synkroniserede blokke kan arbejde parallelt, så længe der ikke er nogen reel hukommelseskonflikt). Men den smukke idé blev knust af den barske virkelighed - og i dette foredrag vil Cliff fortælle dig, hvorfor HTM og STM ikke er særligt velegnede til de praktiske behov for multi-threaded computing.

Michael Scott - Dobbelte datastrukturer

19 hydrahoveder. Godt overblik over programmet Michael Scott - Professor i datalogi ved University of Rochester, som skæbnen forbandt ham med allerede 34 år gammel, og ved sit hjem University of Wisconsin-Madison var han dekan i fem år. Han forsker i og underviser elever i parallel og distribueret programmering og sprogdesign.

Hele verden kender Michael takket være lærebogen "Programmeringssprogpragmatik", hvis seneste udgave blev udgivet relativt nylig - i 2015. Hans arbejde "Algorithmer til skalerbar synkronisering på multiprocessorer med delt hukommelse" jeg har modtaget Dijkstra-prisen som en af ​​de mest berømte inden for distribueret computing og lyver åbenlyst ved University of Rochester Online Library. Du kender ham måske også som forfatter til selve Michael-Scott-algoritmen fra "Enkle, hurtige og praktiske ikke-blokerende og blokerende samtidige køalgoritmer".

Hvad angår Java-verdenen, er dette et særligt tilfælde: sammen med Doug Lea udviklede han de ikke-blokerende algoritmer og synkrone køer, som Java-biblioteker arbejder på. Det er præcis, hvad keynoten "Dual data structures" vil handle om - introduktionen af ​​disse strukturer i Java SE 6 har forbedret ydeevnen med 10 gange java.util.concurrent.ThreadPoolExecutor. Hvis du på forhånd undrer dig over, hvad disse "Dual data structures" er, så er der information om det relateret arbejde.

Maurice Herlihy - Blockchains og fremtiden for distribueret computing

19 hydrahoveder. Godt overblik over programmet Maurice Herlihy - vinder af to Dijkstra-priser. Den første er til arbejde på "Ventefri synkronisering" (Brown University), og det andet, nyere - "Transaktionshukommelse: Arkitektonisk støtte til låsefri datastrukturer" (Virginia Tech University). Dijkstra-prisen anerkender arbejde, hvis betydning og virkning har været synlig i mindst ti år, og Maurice er klart en af ​​de mest anerkendte eksperter på området. Han arbejder i øjeblikket som professor ved Brown University og har en stykke lang liste over præstationer.

I denne afsluttende keynote vil Maurice tale om teorien og praksisen i blockchain-distribuerede systemer fra synspunktet om klassikerne inden for distribueret computing, og hvordan det forenkler mange relaterede problemer. Dette er en rapport udelukkende om emnet for konferencen - slet ikke om minehype, men derimod om hvordan vores viden kan bruges fantastisk effektivt og hensigtsmæssigt i forhold til en række forskellige opgaver.

I juli 2017 kom Maurice allerede til Rusland for at deltage i SPTDC-skolen, deltog i JUG.ru-mødet, og optagelsen kan ses på YouTube:

Hovedprogram

Dernæst vil der være en kort oversigt over de rapporter, der indgår i programmet. Nogle af rapporterne beskrives her i detaljer, andre mere kort. Lange beskrivelser gik hovedsageligt til engelsksprogede rapporter, der krævede links til videnskabelige artikler, termer på Wikipedia og så videre. Den fulde liste er tilgængelig se på konferencens hjemmeside. Listen på hjemmesiden vil blive opdateret og suppleret.

Leslie Lamport - Spørgsmål og svar

19 hydrahoveder. Godt overblik over programmet Leslie Lamport er forfatter til banebrydende værker inden for distribueret databehandling. "LaTeX" står for "Lamport TeX". Det var ham, der først, tilbage i 1979, introducerede konceptet konsekvent konsistens, og hans artikel "Sådan laver man en multiprocessorcomputer, der udfører multiprocesprogrammer korrekt" modtog Dijkstra-prisen.

Dette er den mest usædvanlige del af programmet med hensyn til format, fordi det ikke engang er en rapport, men en spørgsmål og svar session. Når en væsentlig del af publikum allerede er bekendt (eller kan blive fortrolige) med alle mulige værker baseret på “Lamports teori”, hans egne artikler og rapporter, er det vigtigere at bruge al tilgængelig tid på direkte kommunikation.

Ideen er enkel - du ser to reportager på YouTube: "Programmering bør være mere end kodning" и "Hvis du ikke skriver et program, skal du ikke bruge et programmeringssprog" og forbered mindst et spørgsmål, og Leslie svarer.

Den første af disse to videoer har vi allerede forvandlet til en habro-artikel. Har du ikke en times tid til at se videoen, kan du hurtigt læse det hele i tekstform.

Bemærk: Der er mange flere Leslie Lamport-videoer på YouTube. For eksempel er der en stor TLA+ kursus. En offline version af hele dette kursus er tilgængelig på forfatterens hjemmeside, og han uploadede det til YouTube for nemmere visning på mobile enheder.

Martin Kleppmann - Synkronisering af data på tværs af brugerenheder til distribueret samarbejde

19 hydrahoveder. Godt overblik over programmet Martin Kleppmann er forsker ved University of Cambridge, der arbejder med CRDT og formel verifikation af algoritmer. Martins bog "Design af dataintensive applikationer", udgivet i 2017, viste sig at være meget succesfuld og kom på bestsellerlister inden for datalagring og -behandling. Kevin Scott, CTO hos Microsoft, sagde engang: “Denne bog burde være et must-have for softwareingeniører. Dette er en sjælden ressource, der kombinerer teori og praksis for at hjælpe udviklere klogere i at designe og implementere infrastruktur og datasystemer." Skaberen af ​​Kafka og CTO for Confluent, Jay Kreps, sagde noget lignende.

Før han flyttede ind i akademisk forskning, arbejdede Martin i industrien og var med til at stifte to succesrige start-ups:

  • Rapportiv, dedikeret til at vise den sociale profil af kontakter fra din e-mail, som LinkedIn købte i 2012;
  • Go Test It, en service til automatisk test af hjemmesider i forskellige browsere, som RedGate købte i 2009.

Generelt har Martin, selvom han er mindre berømt end vores keynotes, allerede været i stand til at yde et vist bidrag til udviklingen af ​​distribueret computing og til industrien.

I dette foredrag vil Martin fortælle om et emne tættere på hans akademiske forskning. I Google Docs og lignende dokumentredigeringssofaer refererer "samarbejdet redigering" til en replikeringsopgave: hver bruger har deres egen replika af det delte dokument, som de derefter ændrer, og alle ændringer sendes på tværs af netværket til resten af deltagere. Ændringer i dokumenter offline fører til midlertidig inkonsistens af dokumentet i forhold til andre deltagere, og gensynkronisering kræver konflikthåndtering. Det er præcis det, de er til for Konfliktfri replikerede datatyper (CRDT) er faktisk en ret ny ting, hvis essens først blev formuleret i 2011. Dette foredrag diskuterer, hvad der er sket siden da i CRDT-verdenen, hvad de seneste fremskridt er, tilgangen til at skabe lokale først-applikationer generelt og brugen af ​​et open source-bibliotek Automerge i særdeleshed.

I næste uge offentliggør vi et langt interview med Martin på Habré, det bliver interessant.

Pedro Ramalhete - Ventefri datastrukturer og ventefri transaktioner

19 hydrahoveder. Godt overblik over programmet Pedro arbejder hos Cisco og har udviklet parallelle algoritmer i de sidste ti år eller deromkring, inklusive synkroniseringsmekanismer, låse- og ventefri datastrukturer og alt hvad du kan forestille dig om dette emne. Hans nuværende forsknings- og ingeniørinteresser fokuserer på universelle konstruktioner, softwaretransaktionel hukommelse, persistent hukommelse og lignende teknologier, der muliggør korrekte, skalerbare og fejltolerante applikationer. Han er også forfatter til en blog, der er vidt kendt i snævre kredse Samtidighedsfreaks.

De fleste multitrådede applikationer kører nu på parallelle datastrukturer, fra brugen af ​​beskedkøer mellem aktører til indekserede datastrukturer i nøgleværdilagre. De har arbejdet med succes i Java JDK i mange år, og de bliver langsomt tilføjet til C++.

Den enkleste måde at implementere en parallel datastruktur på er en sekventiel (entrådet) implementering, hvor metoder er beskyttet af mutexes. Dette er tilgængeligt for enhver juni, men har åbenlyse problemer med skalering og ydeevne. Samtidig klarer låse- og ventefri datastrukturer ikke kun fejl bedre, men har også en bedre præstationsprofil – dog kræver deres udvikling dyb ekspertise og tilpasning til en specifik applikation. En forkert kodelinje er nok til at bryde alt.

Hvordan kan vi få det til, at selv en ikke-ekspert kan designe og implementere sådanne datastrukturer? Det er kendt, at enhver sekventiel algoritme kan gøres trådsikker ved at bruge enten universelt designeller transaktionshukommelse. For det første kan de sænke barrieren for adgang til at løse dette problem. Begge løsninger fører dog typisk til ineffektiv implementering. Pedro vil fortælle om, hvordan de formåede at gøre disse designs mere effektive, og hvordan du kan bruge dem til dine algoritmer.

Heidi Howard - Frigør distribueret konsensus

19 hydrahoveder. Godt overblik over programmet Heidi Howard er ligesom Martin en distribueret systemforsker ved University of Cambridge. Hendes specialer er konsistens, fejltolerance, ydeevne og distribueret konsensus. Hun er bedst kendt for sin generalisering af Paxos-algoritmen kaldet Fleksibel Paxos.

Husk på, at Paxos er en familie af protokoller til løsning af problemet med konsensus i et netværk af upålidelige computere, baseret på Leslie Lamports arbejde. Således arbejder nogle af vores talere på problemer, som oprindeligt blev foreslået af vores andre talere - og det er vidunderligt.

Evnen til at finde konsensus blandt flere værter – for adressering, ledervalg, blokering eller koordinering – er et grundlæggende problem i moderne distribuerede systemer. Paxos er nu den vigtigste måde at løse konsensusproblemer på, og der foregår en masse forskning omkring det for at udvide og optimere algoritmen til forskellige praktiske behov.

I dette foredrag vil vi gense det teoretiske grundlag for Paxos, lempe de oprindelige krav og generalisere algoritmen. Vi vil se, at Paxos i bund og grund kun er én mulighed blandt en lang række konsensustilgange, og at andre punkter på spektret også er meget nyttige til at bygge gode distribuerede systemer.

Alex Petrov — Reducer dine lageromkostninger med Transient Replication og Cheap Quorums

19 hydrahoveder. Godt overblik over programmet Alex er specialist i databaser og lagringssystemer, og endnu vigtigere for os, en committer inden for Cassandra. Han arbejder i øjeblikket på en bog, Database Internals, med O'Reilly.

Til systemer med eventuel konsistens (i russisk terminologi - "ultimativ konsistens"), efter at en node går ned eller en netværksopdeling, skal du løse følgende dilemma: enten fortsætte med at udføre anmodninger, ofre konsistens eller nægte at udføre dem og ofre tilgængelighed. I et sådant system kan kvorummer, overlappende undersæt af noder og sikring af, at mindst én node indeholder den seneste værdi, være en god kantløsning. Du kan overleve fejl og tab af forbindelse til nogle noder, mens du stadig reagerer med de seneste værdier.

Alt har dog sin pris. Et kvorumreplikeringsskema betyder øgede lageromkostninger: overflødige data skal gemmes på flere noder på én gang for at sikre, at der er nok kopier tilgængelige, når et problem opstår. Det viser sig, at du ikke behøver at gemme alle data på alle replikaerne. Du kan reducere belastningen på lageret, hvis du kun gemmer data på en del af noderne og bruger specielle noder (Transient Replica) til fejlhåndteringsscenarier.

I løbet af rapporten vil vi overveje Vidnekopier, replikeringsskemaet brugt i Spanner и mega butik, og implementeringen af ​​dette koncept i Apache Cassandra kaldet Forbigående replikering og billige kvorummer.

Dmitry Vyukov - Goroutiner udsat

19 hydrahoveder. Godt overblik over programmet Dmitry er en udvikler hos Google, der arbejder på dynamisk test for C/C++ og Go - Address/Memory/ThreadSanitizer og lignende værktøjer til Linux-kernen. Bidraget til Go en skalerbar goroutine-planlægger, en netværkspoller og en parallel skraldeopsamler. Han er ekspert i multithreading, forfatter til et dusin nye ikke-blokerende algoritmer og er ejer af Sort bælte Intel.

Nu lidt om selve rapporten. Go-sproget har indbygget understøttelse af multithreading i form af goroutiner (lette tråde) og kanaler (FIFO-køer). Disse mekanismer gør det meget nemt og behageligt for brugere at skrive moderne multi-threaded applikationer, og det ligner magi. Som vi forstår, er der ingen magi her. I denne tale vil Dmitry dykke ned i Go-planlæggerens forviklinger og vise hemmelighederne ved at implementere denne "magi". Først vil han give et overblik over planlæggerens hovedkomponenter og fortælle dig, hvordan det fungerer. Dernæst vil vi se nærmere på individuelle aspekter såsom parkerings-/afparkeringsstrategien og håndtering af blokeringssystemopkald. Til sidst vil Dmitry fortælle lidt om mulige forbedringer af skemalæggeren.

Dmitry Bugaichenko - Fremskyndelse af distribueret grafanalyse med sandsynlighedsskitser og mere

19 hydrahoveder. Godt overblik over programmet Dmitry arbejdede med outsourcing i næsten 9 år uden at miste kontakten til universitetet og det videnskabelige samfund. Big data-analyse i Odnoklassniki blev for ham en enestående chance for at kombinere teoretisk træning og videnskabeligt grundlag med udvikling af rigtige efterspurgte produkter.

Distribueret grafanalyse har været og forbliver en vanskelig opgave: Når det bliver nødvendigt at indhente information om forbindelserne til et nabovertex, skal dataene ofte overføres mellem maskiner, hvilket fører til øget eksekveringstid og belastning på netværksinfrastrukturen. I dette foredrag vil vi se, hvordan du kan få betydelige behandlingshastigheder ved at bruge sandsynlige datastrukturer eller fakta som venskabsgrafens symmetri i et socialt netværk. Alt dette er illustreret med kodeeksempler i Apache Spark.

Denis Rystsov - Reducer dine lageromkostninger med Transient Replication og Cheap Quorums

19 hydrahoveder. Godt overblik over programmet Denis - udvikler Cosmos DB, en ekspert i at kontrollere konsistensmodeller, konsensusalgoritmer og distribuerede transaktioner. Han arbejder i øjeblikket hos Microsoft, og før det arbejdede han på distribuerede systemer hos Amazon og Yandex.

I dette foredrag vil vi tage et kig på de distribuerede transaktionsprotokoller, der er blevet opfundet i løbet af de sidste par år, som kan implementeres på klientsiden oven på ethvert datalager, der understøtter betinget opdatering (sammenlign og sæt). Den nederste linje er, at livet ikke slutter med en to-fase commit, transaktioner kan tilføjes oven på alle databaser - på applikationsniveau, men forskellige protokoller (2PC, Percolator, RAMP) har forskellige afvejninger og gives ikke til os gratis.

Alexey Zinoviev - Ikke alle ML-algoritmer når til den distribuerede himmel

19 hydrahoveder. Godt overblik over programmet Alexei (zaleslaw) er mangeårig foredragsholder og medlem af programudvalg ved andre konferencer. Praktiserende træner hos EPAM Systems, og har været venner med Hadoop/Spark og andre big data siden 2012.

I dette foredrag vil Alexey fortælle om problemerne med at tilpasse klassiske maskinlæringsalgoritmer til udførelse i distribueret tilstand baseret på hans erfaring med at arbejde med Apache Spark ML, Apache Mahout, Apache Flink ML og erfaringen med at skabe Apache Ignite ML. Alexey vil også fortælle om implementeringen af ​​distribuerede ML-algoritmer i disse rammer.

Og endelig to rapporter fra Yandex om Yandex-databasen.

Vladislav Kuznetsov - Yandex Database - hvordan vi sikrer fejltolerance

19 hydrahoveder. Godt overblik over programmet Vladislav er udvikler hos Yandex i den distribuerede platformgruppe. Yandex Database er en horisontalt skalerbar, geo-distribueret, fejltolerant DBMS, der kan modstå fejl på diske, servere, racks og datacentre uden at miste konsistensen. For at sikre fejltolerance anvendes en proprietær algoritme til opnåelse af distribueret konsensus, samt en række tekniske løsninger, som er beskrevet detaljeret i rapporten. Rapporten kan være af interesse for både DBMS-udviklere og udviklere af applikationsløsninger baseret på DBMS.

Semyon Checherinda - Distribuerede transaktioner i YDB

19 hydrahoveder. Godt overblik over programmet Semyon er udvikler i den distribuerede platformsgruppe hos Yandex, der arbejder på muligheden for multi-tenant-brug af YDB-installationen.

Yandex Database er designet til OLTP-forespørgsler og overholder ACID-kravene til et transaktionssystem. I denne rapport vil vi overveje transaktionsplanlægningsalgoritmen, der ligger til grund for YDB-transaktionssystemet. Lad os se på, hvilke enheder der deltager i transaktioner, hvem der tildeler global ordre til transaktioner, hvordan transaktionsatomicitet, pålidelighed og et strengt isolationsniveau opnås. Ved at bruge et almindeligt problem som eksempel, lad os se på transaktionsimplementeringer ved hjælp af tofasede commits og deterministiske transaktioner. Lad os diskutere deres forskelle.

Hvad er det næste?

Konferenceprogrammet er fortsat fyldt med nye rapporter. Især forventer vi en rapport fra Nikita Koval (ndkoval) fra JetBrains og Oleg Anastasyev (m0nstermind) fra firmaet Odnoklassniki. Nikita arbejder på algoritmer for koroutiner i Kotlin-teamet, og Oleg udvikler arkitektur og løsninger til højbelastningssystemer i Odnoklassniki-platformen. Derudover er der 1 mere betinget tom plads, programudvalget arbejder lige nu med kandidater til det.

Hydra-konferencen finder sted den 11.-12. juli i St. Petersborg. Billetter er tilgængelige køb på den officielle hjemmeside. Vær opmærksom på tilgængeligheden af ​​onlinebilletter - hvis du af en eller anden grund ikke kan komme til St. Petersborg i disse dage.

Vi ses på Hydra!

Kilde: www.habr.com

Tilføj en kommentar