Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Notika pirms dažām dienām Hidras konference. PuiÅ”i no JUG.ru grupas uzaicināja sapņu runātājus (Leslie Lamport! Cliff Click! Martin Kleppmann!) un veltÄ«ja divas dienas sadalÄ«tajām sistēmām un skaitļoÅ”anai. Konturs bija viens no trim konferences partneriem. Mēs runājām pie stenda, runājām par mÅ«su izplatÄ«tajām krātuvēm, spēlējām bingo un risinājām mÄ«klas.

Å is ir viņu teksta autora ieraksts ar Kontur stenda uzdevumu analÄ«zi. KurÅ” bija uz Hidras - tas ir jÅ«su iemesls atcerēties patÄ«kamo pieredzi, kurÅ” nebija - iespēja izstiept savas smadzenes liels O- apzÄ«mējums.

Bija pat dalÄ«bnieki, kuri izjauca tāfeli slaidos, lai pierakstÄ«tu savu lēmumu. Es nejokoju - viņi nodeva Å”o papÄ«ra kaudzi pārbaudei:

Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Kopumā bija trīs uzdevumi:

  • par kopiju atlasi pēc svara slodzes lÄ«dzsvaroÅ”anai
  • par vaicājumu rezultātu kārtoÅ”anu, salÄ«dzinot ar atmiņā esoÅ”o datu bāzi
  • par stāvokļa pārsÅ«tÄ«Å”anu sadalÄ«tā sistēmā ar gredzena topoloÄ£iju

Uzdevums 1. ClusterClient

Bija nepiecieÅ”ams piedāvāt algoritmu efektÄ«vai K atlasei no sadalÄ«tas sistēmas N svērtajām replikām:

JÅ«su komandai ir uzdots izstrādāt klienta bibliotēku masveidā izplatÄ«tam N mezglu klasterim. Bibliotēka sekotu dažādiem ar mezgliem saistÄ«tiem metadatiem (piemēram, to latentumiem, 4xx/5xx atbildes ātrumiem utt.) un pieŔķirtu tiem peldoŔā komata svērumus W1..WN. Lai atbalstÄ«tu vienlaicÄ«gas izpildes stratēģiju, bibliotēkai jāspēj nejauÅ”i izvēlēties K no N mezgliem ā€” iespējai tikt izvēlētai jābÅ«t proporcionālai mezgla svaram.

Piedāvājiet algoritmu, lai efektÄ«vi atlasÄ«tu mezglus. Novērtējiet tā skaitļoÅ”anas sarežģītÄ«bu, izmantojot lielo O apzÄ«mējumu.

Kāpēc viss ir angļu valodā?

Jo Ŕādā formā konferences dalÄ«bnieki cÄ«nÄ«jās ar viņiem un tāpēc, ka angļu valoda bija Hidras oficiālā valoda. Uzdevumi izskatÄ«jās Ŕādi:

Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Ņem papÄ«ru un zÄ«muli, domā, nesteidzies uzreiz atvērt spoileri šŸ™‚

Risinājuma analīze (video)

Sākot no 5:53, tikai 4 minūtes:

Un lūk, kā puiŔi ar papīra tāfeli izvirzīja savu risinājumu:


Risinājuma analīze (teksts)

Uz virsmas ir Ŕāds risinājums: summējiet visu kopiju svarus, Ä£enerējiet nejauÅ”u skaitli no 0 lÄ«dz visu svaru summai, pēc tam izvēlieties i-reprodukciju tā, lai replikas svaru summa bÅ«tu no 0 lÄ«dz (i-1)th. ir mazāks par nejauÅ”u skaitli, un kopiju svaru summa no 0 lÄ«dz i-tajai ir lielāka par to. Tātad bÅ«s iespējams atlasÄ«t vienu kopiju, un, lai izvēlētos nākamo, jums ir jāatkārto visa procedÅ«ra, neņemot vērā izvēlēto kopiju. Izmantojot Ŕādu algoritmu, vienas replikas izvēles sarežģītÄ«ba ir O(N), K replikas izvēles sarežģītÄ«ba ir O(N K) ~ O(N2).

Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Kvadrātiskā sarežģītÄ«ba ir slikta, taču to var uzlabot. Lai to izdarÄ«tu, mēs veidosim segmentu koks par svaru summām. Tiks iegÅ«ts koks ar dziļumu lg N, kura lapās bÅ«s replikas atsvari, bet atlikuÅ”ajos mezglos - daļējās summas, lÄ«dz visu svaru summai koka saknē. Pēc tam mēs Ä£enerējam nejauÅ”u skaitli no 0 lÄ«dz visu svaru summai, atrodam i-to reprodukciju, noņemam to no koka un atkārtojam procedÅ«ru, lai atrastu atlikuŔās kopijas. Izmantojot Å”o algoritmu, koka veidoÅ”anas sarežģītÄ«ba ir O(N), i-tās replikas atraÅ”anas un izņemÅ”anas no koka sarežģītÄ«ba ir O(lg N), K replikas izvēles sarežģītÄ«ba ir O(N + K lg N) ~ O(N lg N) .

Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Lineārā logaritma sarežģītība ir labāka nekā kvadrātiskā sarežģītība, īpaŔi lielam K.

Tas ir Å”is algoritms ieviests kodā ClusterClient bibliotēkas no projekta "Austrumi". (Tur koks ir iebÅ«vēts O(N lg N), taču tas neietekmē algoritma galÄ«go sarežģītÄ«bu.)

Uzdevums 2. Zebra

Bija nepiecieÅ”ams piedāvāt algoritmu efektÄ«vai dokumentu ŔķiroÅ”anai atmiņā pēc patvaļīga neindeksēta lauka:

JÅ«su komandai ir uzdots izstrādāt dalÄ«tu atmiņā esoÅ”o dokumentu datubāzi. IzplatÄ«ta darba slodze bÅ«tu atlasÄ«t populārākos N dokumentus, kas sakārtoti pēc patvaļīga (neindeksēta) ciparu lauka no M izmēra kolekcijas (parasti N <100 << M). Nedaudz retāka darba slodze bÅ«tu atlasÄ«t labāko N pēc tam, kad tiek izlaisti populārākie S dokumenti (S ~ N).

Piedāvājiet algoritmu Ŕādu vaicājumu efektÄ«vai izpildei. Novērtējiet tā skaitļoÅ”anas sarežģītÄ«bu, izmantojot lielo O apzÄ«mējumu vidējā gadÄ«jumā un sliktākajā gadÄ«jumā.

Risinājuma analīze (video)

Sākot no 34:50, tikai 6 minūtes:


Risinājuma analīze (teksts)

Virsmas risinājums: kārtojiet visus dokumentus (piemēram, ar Quicksort), pēc tam paņemiet N+S dokumentus. Å ajā gadÄ«jumā ŔķiroÅ”anas sarežģītÄ«ba ir vidēji O(M lg M), sliktākajā gadÄ«jumā O(M2).

AcÄ«mredzami, ka sakārtot visus M dokumentus un pēc tam paņemt tikai nelielu daļu no tiem ir neefektÄ«vi. Lai nesakārtotu visus dokumentus, ir piemērots algoritms ātra atlase, kas atlasÄ«s N + S nepiecieÅ”amos dokumentus (tos var kārtot pēc jebkura algoritma). Å ajā gadÄ«jumā sarežģītÄ«ba vidēji samazināsies lÄ«dz O(M), savukārt sliktākajā gadÄ«jumā paliks nemainÄ«gs.

Tomēr jÅ«s varat to izdarÄ«t vēl efektÄ«vāk - izmantojiet algoritmu bināro kaudzes straumÄ“Å”ana. Å ajā gadÄ«jumā pirmie N+S dokumenti tiek pievienoti min- vai max-heap (atkarÄ«bā no kārtoÅ”anas virziena), un pēc tam katrs nākamais dokuments tiek salÄ«dzināts ar koka sakni, kurā ir paÅ”reizējais minimālais vai maksimālais dokuments, un vajadzÄ«bas gadÄ«jumā pievieno kokam. Å ajā gadÄ«jumā sarežģītÄ«ba sliktākajā gadÄ«jumā, kad nepārtraukti jāpārbÅ«vē koks, ir O(M lg M), sarežģītÄ«ba vidēji ir O(M), kā ar Quickselect.

Tomēr kaudzes straumÄ“Å”ana izrādās efektÄ«vāka, jo praksē lielāko daļu dokumentu var izmest, neatjaunojot kaudzi pēc vienas salÄ«dzināŔanas ar tās saknes elementu. Šāda ŔķiroÅ”ana realizēta Kontur izstrādātajā un lietotajā Zebra in-memory dokumentu datubāzē.

Uzdevums 3. Valsts mijmaiņas darījumi

Bija nepiecieÅ”ams piedāvāt visefektÄ«vāko stāvokļu maiņas algoritmu:

Jūsu komandai ir uzdots izstrādāt izdomātu stāvokļa apmaiņas mehānismu sadalītam N mezglu klasterim. I-tā mezgla stāvoklis jāpārnes uz (i+1)-to mezglu, N-tā mezgla stāvoklis jāpārnes uz pirmo mezglu. Vienīgā atbalstītā operācija ir stāvokļa mijmaiņa, kad divi mezgli apmainās ar stāvokļiem atomiski. Ir zināms, ka stāvokļa maiņa aizņem M milisekundes. Katrs mezgls jebkurā brīdī var piedalīties vienā stāvokļu mijmaiņā.

Cik ilgs laiks nepiecieŔams, lai pārsūtītu visu klastera mezglu stāvokļus?

Risinājuma analīze (teksts)

Virsmas risinājums: apmainÄ«ties ar pirmā un otrā elementa stāvokļiem, tad pirmā un treŔā, tad pirmā un ceturtā, un tā tālāk. Pēc katras apmaiņas viena elementa stāvoklis bÅ«s vēlamajā pozÄ«cijā. Jums ir jāveic O(N) permutācijas un jāpavada O(N M) laiks.

Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Lineārais laiks ir garÅ”, tāpēc elementu stāvokļus var apmainÄ«t pa pāriem: pirmo ar otro, treÅ”o ar ceturto utt. Pēc katras stāvokļa maiņas katrs otrais elements bÅ«s pareizajā pozÄ«cijā. Jāizveido O(lg N) permutācijas un jāpavada O(M lg N) laiks.

Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Taču ir iespējams maiņu padarÄ«t vēl efektÄ«vāku ā€“ nevis lineārā, bet konstantā laikā. Lai to izdarÄ«tu, pirmajā solÄ« ir jāmaina pirmā elementa stāvoklis ar pēdējo, otrā ar priekÅ”pēdējo un tā tālāk. Pēdējā elementa stāvoklis bÅ«s pareizajā pozÄ«cijā. Un tagad mums ir jāapmaina otrā elementa stāvoklis ar pēdējo, treŔā ar priekÅ”pēdējo un tā tālāk. Pēc Ŕīs apmaiņas kārtas visu elementu stāvokļi bÅ«s pareizā stāvoklÄ«. Kopā bÅ«s O(2M) ~ O(1) permutācijas.

Hydra konferences uzdevumu analÄ«ze - slodzes lÄ«dzsvaroÅ”ana un glabāŔana atmiņā

Šāds risinājums nemaz nepārsteigs matemātiķi, kurŔ joprojām atceras, ka rotācija ir divu aksiālu simetriju kompozīcija. Starp citu, tas ir triviāli vispārināts nobīdei nevis pa vienu, bet pa K <N pozīcijām. (Kā tieŔi, rakstiet komentāros.)

Vai jums patika mīklas? Vai jūs zināt citus risinājumus? Dalieties komentāros.

Un beigās ir dažas noderīgas saites:

Avots: www.habr.com

Pievieno komentāru