Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra β€” балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

НСсколько Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ ΡΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ конфСрСнция Hydra. РСбята ΠΈΠ· JUG.ru Group пригласили спикСров ΠΌΠ΅Ρ‡Ρ‚Ρ‹ (ЛСсли Лэмпорт! ΠšΠ»ΠΈΡ„Ρ„ Клик! ΠœΠ°Ρ€Ρ‚ΠΈΠ½ КлСппманн!) ΠΈ посвятили Π΄Π²Π° дня распрСдСлённым систСмам ΠΈ вычислСниям. ΠšΠΎΠ½Ρ‚ΡƒΡ€ Π±Ρ‹Π» ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΠΏΠ°Ρ€Ρ‚Π½Ρ‘Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ. ΠœΡ‹ ΠΎΠ±Ρ‰Π°Π»ΠΈΡΡŒ Π½Π° стСндС, рассказывали ΠΏΡ€ΠΎ наши распрСдСлённыС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΊΠΈ, ΠΈΠ³Ρ€Π°Π»ΠΈ Π² Π±ΠΈΠ½Π³ΠΎ, Ρ€Π΅ΡˆΠ°Π»ΠΈ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ.

Π­Ρ‚ΠΎ пост с Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ Π½Π° стСндС ΠšΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° ΠΈΡ… тСкста. ΠšΡ‚ΠΎ Π±Ρ‹Π» Π½Π° Π“ΠΈΠ΄Ρ€Π΅ β€” это ваш ΠΏΠΎΠ²ΠΎΠ΄ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ приятныС впСчатлСния, ΠΊΡ‚ΠΎ Π½Π΅ Π±Ρ‹Π» β€” шанс Ρ€Π°Π·ΠΌΡΡ‚ΡŒ ΠΌΠΎΠ·Π³ΠΈ big O-Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ.

Π‘Ρ‹Π»ΠΈ Π΄Π°ΠΆΠ΅ участники, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ Ρ„Π»ΠΈΠΏΡ‡Π°Ρ€Ρ‚ Π½Π° слайды, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ своё Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π― Π½Π΅ ΡˆΡƒΡ‡Ρƒ β€” ΠΎΠ½ΠΈ сдали Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠ°Ρ‡ΠΊΡƒ Π±ΡƒΠΌΠ°Π³ΠΈ:

Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra — балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

ВсСго Π±Ρ‹Π»ΠΎ Ρ‚Ρ€ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΏΠΎ вСсам для балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ
  • ΠΎ сортировкС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запроса ΠΊ in-memory Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ состояния Π² распрСдСлённой систСмС с ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠΉ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ

Π—Π°Π΄Π°Ρ‡Π° 1. ClusterClient

НуТно Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ эффСктивного Π²Ρ‹Π±ΠΎΡ€Π° K ΠΈΠ· N Π²Π·Π²Π΅ΡˆΠ΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ распрСдСлённой систСмы:

Your team is tasked with developing a client library for a massively distributed cluster of N nodes. The library would keep track of various metadata associated with nodes (e.g., their latencies, 4xx/5xx response rates, etc.) and assign floating point weights W1..WN to them. In order to support the concurrent execution strategy, the library should be able to pick K of N nodes randomlyβ€”a chance of being selected should be proportional to a node’s weight.

Propose an algorithm to select nodes efficiently. Estimate its computational complexity using big O notation.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ всё Π½Π° английском?

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ с Π½ΠΈΠΌΠΈ Π±ΠΎΡ€ΠΎΠ»ΠΈΡΡŒ участники ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ английский Π±Ρ‹Π» ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ языком Π“ΠΈΠ΄Ρ€Ρ‹. ВыглядСли Π·Π°Π΄Π°Ρ‡ΠΊΠΈ Ρ‚Π°ΠΊ:

Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra — балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ Π±ΡƒΠΌΠ°Π³Ρƒ ΠΈ ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Π½Π΅ Ρ‚ΠΎΡ€ΠΎΠΏΠΈΡ‚Π΅ΡΡŒ сразу ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ спойлСры πŸ™‚

Π Π°Π·Π±ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Π²ΠΈΠ΄Π΅ΠΎ)

Начало Π² 5:53, всСго 4 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹:

А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠΈΡ‚Ρ‡ΠΈΠ»ΠΈ своё Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ самыС рСбята с Ρ„Π»ΠΈΠΏΡ‡Π°Ρ€Ρ‚ΠΎΠΌ:


Π Π°Π·Π±ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (тСкст)

На повСрхности Π»Π΅ΠΆΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСса всСх Ρ€Π΅ΠΏΠ»ΠΈΠΊ, ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ случайноС число ΠΎΡ‚ 0 Π΄ΠΎ суммы всСх вСсов, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ i-Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎ сумма вСсов Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΎΡ‚ 0 Π΄ΠΎ (i-1)-ΠΎΠΉ мСньшС случайного числа, Π° сумма вСсов Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΎΡ‚ 0 Π΄ΠΎ i-ΠΎΠΉ β€” большС Π½Π΅Π³ΠΎ. Π’Π°ΠΊ получится Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ всю ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, Π½Π΅ рассматривая Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ. Π‘ Ρ‚Π°ΠΊΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ β€” O(N), ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° K Ρ€Π΅ΠΏΠ»ΠΈΠΊ β€” O(NΒ·K) ~ O(N2).

Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra — балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€” это ΠΏΠ»ΠΎΡ…ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ. Для этого построим Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² для сумм вСсов. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ Π΄Π΅Ρ€Π΅Π²ΠΎ Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ lg N, Π² Π»ΠΈΡΡ‚ΡŒΡΡ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ вСса Ρ€Π΅ΠΏΠ»ΠΈΠΊ, Π° Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ… β€” частичныС суммы, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ суммы всСх вСсов Π² ΠΊΠΎΡ€Π½Π΅ Π΄Π΅Ρ€Π΅Π²Π°. Π”Π°Π»Π΅Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ случайноС число ΠΎΡ‚ 0 Π΄ΠΎ суммы всСх вСсов, Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ i-ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, удаляСм Π΅Ρ‘ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° ΠΈ повторяСм ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ для поиска ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Ρ€Π΅ΠΏΠ»ΠΈΠΊ. Π‘ Ρ‚Π°ΠΊΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ построСния Π΄Π΅Ρ€Π΅Π²Π° β€” О(N), ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поиска i-ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈ удалСния Π΅Ρ‘ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° β€” O(lg N), ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° K Ρ€Π΅ΠΏΠ»ΠΈΠΊ β€” O(N + K lg N) ~ O(N lg N).

Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra — балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎ-логарифмичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ приятнСС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ, особСнно для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… K.

ИмСнно этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΊΠΎΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ClusterClient ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° «Восток». (Π’Π°ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎ строится Π·Π° O(N lg N), Π½ΠΎ Π½Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° это Π½Π΅ влияСт.)

Π—Π°Π΄Π°Ρ‡Π° 2. Zebra

НуТно Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ эффСктивной сортировки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² памяти ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ нСиндСксированному полю:

Your team is tasked with developing a sharded in-memory document database. A common workload would be to select top N documents sorted by an arbitrary (non-indexed) numeric field from a collection of size M (usually N < 100 << M). A slightly less common workload would be to select top N after skipping top S documents (S ~ N).

Propose an algorithm to execute such queries efficiently. Estimate its computational complexity using big O notation in the average case and the worst case scenarios.

Π Π°Π·Π±ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Π²ΠΈΠ΄Π΅ΠΎ)

Начало Π² 34:50, всСго 6 ΠΌΠΈΠ½ΡƒΡ‚:


Π Π°Π·Π±ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (тСкст)

РСшСниС Π½Π° повСрхности: ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ quicksort), Π·Π°Ρ‚Π΅ΠΌ Π²Π·ΡΡ‚ΡŒ N+S Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки Π² срСднСм β€” O(M lg M), Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ β€” O(M2).

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС M Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ‚Π΅ΠΌ Π²Π·ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΡ‚ Π½ΠΈΡ… β€” нСэффСктивно. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ quickselect, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ N+S Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ). Π’ этом случаС ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² срСднСм ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ Π΄ΠΎ O(M), Π° Ρ…ΡƒΠ΄ΡˆΠΈΠΉ случай останСтся Ρ‚Π΅ΠΌ ΠΆΠ΅.

Однако, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ эффСктивнСС β€” Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ binary heap streaming. Π’ этом случаС ΠΏΠ΅Ρ€Π²Ρ‹Π΅ N+S Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² min- ΠΈΠ»ΠΈ max-heap (Π² зависимости ΠΎΡ‚ направлСния сортировки), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ сравниваСтся с ΠΊΠΎΡ€Π½Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²Π°, Π³Π΄Π΅ содСрТится ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΈ ΠΏΡ€ΠΈ нСобходимости добавляСтся Π² Π΄Π΅Ρ€Π΅Π²ΠΎ. Π’ этом случаС ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, ΠΊΠΎΠ³Π΄Π° придётся постоянно ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ β€” O(M lg M), ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² срСднСм β€” O(M), ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ использовании quickselect.

Однако heap streaming оказываСтся эффСктивнСС Π·Π° счёт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² получаСтся ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ, Π½Π΅ пСрСстраивая ΠΊΡƒΡ‡Ρƒ, послС СдинствСнного сравнСния с Π΅Ρ‘ ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ элСмСнтом. Вакая сортировка Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π½ΠΎΠΉ in-memory Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Zebra, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² ΠšΠΎΠ½Ρ‚ΡƒΡ€Π΅.

Π—Π°Π΄Π°Ρ‡Π° 3. State swaps

НуТно Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ самый эффСктивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для сдвига состояний:

Your team is tasked with developing a fancy state exchange mechanism for a distributed cluster of N nodes. The i-th node’s state should be transferred to the (i+1)-th node, the N-th node’s state should be transferred to the first node. The only supported operation is the state swap when two nodes exchange their states atomically. It is known that a state swap takes M milliseconds. Every node is able to participate in a single state swap at any given moment.

How long does it take to transfer the states of all nodes in a cluster?

Π Π°Π·Π±ΠΎΡ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (тСкст)

РСшСниС Π½Π° повСрхности: ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ состояния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° состояниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠ΄Ρ‘Ρ‚ΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ O(N) пСрСстановок ΠΈ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ O(NΒ·M) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra — балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ врСмя β€” это Π΄ΠΎΠ»Π³ΠΎ, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒ состояния элСмСнтов ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ: ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ с Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° состояния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. ΠŸΡ€ΠΈΠ΄Ρ‘Ρ‚ΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ O(lg N) пСрСстановок ΠΈ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ O(M lg N) Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra — балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Однако, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сдвиг Π΅Ρ‰Ρ‘ эффСктивнСС β€” Π½Π΅ Π·Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅, Π° Π·Π° константноС врСмя. Для этого Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта с послСдним, Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ с прСдпослСдним ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. БостояниС послСднСго элСмСнта окаТСтся Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта с послСдним, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ с прСдпослСдним ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ПослС этого Ρ€Π°ΡƒΠ½Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² состояния всСх элСмСнтов окаТутся Π½Π° Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. ВсСго Π±ΡƒΠ΄Π΅Ρ‚ сдСлано O(2M) ~ O(1) пСрСстановок.

Π Π°Π·Π±ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ с ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Hydra — балансировка Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ in-memory Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‰Ρ‘ ΠΏΠΎΠΌΠ½ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ β€” это композиция Π΄Π²ΡƒΡ… осСвых симмСтрий. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΎΠ½ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ обобщаСтся для сдвига Π½Π΅ Π½Π° ΠΎΠ΄Π½Ρƒ, Π° Π½Π° K < N ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ. (ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ.)

ΠŸΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΈΡΡŒ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ? Π—Π½Π°Π΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ? Π”Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π² коммСнтариях.

А Π²ΠΎΡ‚ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ссылок напослСдок:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com