Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Kajadian sababaraha poé katukang Konférénsi Hydra. The guys ti Grup JUG.ru diondang speaker ngimpi (Leslie Lamport! Cliff Klik! Martin Kleppmann!) Sarta devoted dua poé ka sistem disebarkeun sarta komputasi. Kontur mangrupikeun salah sahiji tina tilu mitra konperénsi éta. Urang ngobrol di stan, ngobrol ngeunaan gudang disebarkeun kami, maén bingo, sarta direngsekeun puzzles.

Ieu postingan kalawan analisa tugas di stand Kontur ti panulis téks maranéhanana. Saha anu aya dina Hydra - ieu mangrupikeun alesan anjeun pikeun nginget pangalaman anu pikaresepeun, anu henteu - kasempetan pikeun manteng uteuk anjeun gedé O- notasi.

Malah aya pamilon anu ngabongkar flipchart kana slides pikeun nuliskeun kaputusan maranéhanana. Abdi henteu bercanda - aranjeunna nyerahkeun tumpukan kertas ieu pikeun verifikasi:

Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Total aya tilu tugas:

  • ngeunaan milih réplika ku beurat pikeun balancing beban
  • ngeunaan asihan hasil query ngalawan database di-memori
  • on mindahkeun kaayaan dina sistem disebarkeun kalawan topologi ring

Tugas 1. ClusterClient

Ieu diperlukeun pikeun ngajukeun hiji algoritma pikeun pilihan efisien K ti N replika beurat sistem disebarkeun:

Tim anjeun ditugaskeun pikeun ngembangkeun perpustakaan klien pikeun klaster N titik anu disebarkeun sacara masif. Perpustakaan bakal ngalacak rupa metadata pakait sareng titik (misalna latency maranéhanana, 4xx / 5xx ongkos respon, jsb) jeung nangtukeun floating titik beurat W1..WN ka aranjeunna. Pikeun ngadukung strategi palaksanaan sakaligus, perpustakaan kedah tiasa milih K tina N titik sacara acak-kasempetan dipilih kedah sabanding sareng beurat titik.

Ngajukeun algoritma pikeun milih titik éfisién. Estimasi pajeulitna komputasi na ngagunakeun notasi O badag.

Naha sadayana dina basa Inggris?

Kusabab dina formulir ieu pamilon konferensi perang jeung aranjeunna sarta kusabab Inggris éta basa resmi Hydra. Tugas sapertos kieu:

Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Candak kertas jeung pensil, pikir, ulah buru-buru muka spoiler langsung 🙂

Analisis solusi (video)

Dimimitian jam 5:53, ngan 4 menit:

Sareng ieu kumaha lalaki anu nganggo flipchart nampilkeun solusina:


Analisis solusi (téks)

Solusi di handap ieu aya dina permukaan: jumlah beurat sadaya réplika, ngahasilkeun angka acak tina 0 dugi ka jumlah sadaya beurat, teras pilih i-replica supados jumlah beurat réplika tina 0 dugi ka (i-1) th. nyaeta kirang ti angka acak, sarta jumlah replica beurat ti 0 mun i-th - leuwih ti eta. Janten bakal tiasa milih hiji réplika, sareng pikeun milih anu salajengna, anjeun kedah ngulang sadayana prosedur tanpa nganggap réplika anu dipilih. Kalayan algoritma sapertos kitu, pajeulitna milih hiji réplika nyaéta O(N), pajeulitna milih réplika K nyaéta O(N K) ~ O(N2).

Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Pajeulitna kuadrat téh goréng, tapi bisa ningkat. Jang ngalampahkeun ieu, urang bakal ngawangun tangkal ruas pikeun jumlah beurat. Tangkal anu jerona lg N bakal dicandak, dina daunna bakal aya beurat réplika, sareng dina titik sésana - jumlah parsial, dugi ka jumlah sadaya beurat dina akar tangkal. Salajengna, urang ngahasilkeun angka acak tina 0 kana jumlah sadaya beurat, manggihan replica i-th, piceun tina tangkal, sarta ngulang prosedur pikeun manggihan réplika sésana. Kalayan algoritma ieu, pajeulitna ngawangun tangkal nyaéta O(N), pajeulitna milarian réplika i-th sareng miceunana tina tangkal nyaéta O(lg N), pajeulitna milih réplika K nyaéta O(N + K. lg N) ~ O(N lg N) .

Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Kompleksitas log linier langkung saé tibatan pajeulitna kuadrat, khususna pikeun K.

Éta algoritma ieu dilaksanakeun dina kode Perpustakaan ClusterClient tina proyék "wetan". (Aya, tangkal ieu diwangun dina O (N lg N), tapi ieu teu mangaruhan pajeulitna ahir algoritma nu.)

Pancén 2. Zebra

Diperlukeun ngajukeun algoritma pikeun nyortir dokumén anu éfisién dina mémori ku médan anu teu sawenang-wenang:

Tim anjeun ditugaskeun pikeun ngembangkeun database dokumén dina mémori. Beban kerja anu umum nyaéta milih dokumén N luhur anu diurutkeun ku widang numerik sawenang-wenang (henteu indéks) tina kumpulan ukuran M (biasana N <100 << M). Beban kerja anu rada kurang umum nyaéta milih N luhur saatos ngalangkungan dokumén S luhur (S ~ N).

Ngajukeun algoritma pikeun ngaéksekusi queries sapertos éfisién. Estimasi pajeulitna komputasi na ngagunakeun notasi O badag dina kasus rata-rata jeung skenario hal awon.

Analisis solusi (video)

Dimimitian jam 34:50, ngan 6 menit:


Analisis solusi (téks)

Solusi permukaan: nyortir sadaya dokumén (contona sareng gancang-gancang), teras nyandak dokumén N+S. Dina hal ieu, pajeulitna asihan rata-rata O (M lg M), paling awon O (M2).

Éta écés yén nyortir sadaya dokumén M teras nyandak ngan sabagian leutik tina éta henteu éfisién. Pikeun henteu nyortir sadaya dokumén, algoritma cocog gancang milih, anu bakal milih N + S tina dokumén anu dipikahoyong (aranjeunna tiasa diurutkeun ku algoritma naon waé). Dina hal ieu, pajeulitna bakal turun ka O(M) rata-rata, sedengkeun kasus awon bakal tetep sarua.

Nanging, anjeun tiasa ngalakukeun éta langkung éfisién - nganggo algoritma binér numpuk streaming. Dina hal ieu, dokumén N + S munggaran ditambahkeun kana min- atanapi max-numpuk (gumantung kana arah diurutkeun), lajeng unggal dokumen salajengna dibandingkeun akar tangkal, nu ngandung minimum atawa maksimum dokumen ayeuna, sarta ditambahkeun kana tangkal lamun perlu. Dina hal ieu, pajeulitna dina hal awon, mun anjeun kudu terus ngawangun deui tangkal, nyaeta O (M lg M), pajeulitna rata-rata O (M), sakumaha kalayan quickselect.

Nanging, streaming tumpukan tétéla langkung éfisién kusabab kanyataan yén dina prakna kalolobaan dokumén tiasa dipiceun tanpa ngawangun deui tumpukan saatos ngabandingkeun tunggal sareng unsur akar na. Asihan sapertos ieu dilaksanakeun dina database dokumén dina mémori Zebra anu dikembangkeun sareng dianggo dina Kontur.

Pancén 3. Swap kaayaan

Ieu diperlukeun pikeun ngajukeun algoritma pang éfisiénna pikeun mindahkeun kaayaan:

Tim anjeun ditugaskeun pikeun ngembangkeun mékanisme bursa kaayaan mewah pikeun gugusan N node anu disebarkeun. Kaayaan titik i-th kudu dialihkeun ka titik (i+1)-th, kaayaan titik N-th kudu dipindahkeun ka titik kahiji. Hiji-hijina operasi anu dirojong nyaéta swap kaayaan nalika dua titik tukeur kaayaanana sacara atom. Perlu dipikanyaho yén swap kaayaan butuh M milliseconds. Unggal titik tiasa ilubiung dina swap kaayaan tunggal dina waktos anu ditangtukeun.

Sabaraha lami kanggo mindahkeun kaayaan sadaya titik dina klaster?

Analisis solusi (téks)

Solusi permukaan: tukeur kaayaan unsur kahiji sareng kadua, teras kahiji sareng katilu, teras kahiji sareng kaopat, sareng saterasna. Sanggeus unggal bursa, kaayaan hiji unsur bakal di posisi nu dipikahoyong. Anjeun kudu nyieun O (N) permutations sarta méakkeun O (N M) waktos.

Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Waktos linier panjang, ku kituna anjeun tiasa tukeur kaayaan unsur dina pasangan: kahiji jeung kadua, katilu jeung kaopat, jeung saterusna. Sanggeus unggal bursa kaayaan, unggal unsur kadua bakal di posisi katuhu. Anjeun kudu nyieun O (lg N) permutations sarta méakkeun O (M lg N) waktos.

Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Sanajan kitu, kasebut nyaéta dimungkinkeun pikeun nyieun shift malah leuwih efisien - teu linier, tapi dina waktu konstan. Jang ngalampahkeun ieu, dina hambalan kahiji anjeun kudu tukeur kaayaan unsur kahiji jeung nu panungtungan, nu kadua jeung penultimate, jeung saterusna. Kaayaan unsur anu terakhir bakal aya dina posisi anu leres. Sareng ayeuna urang kedah tukeur kaayaan unsur kadua sareng anu terakhir, anu katilu sareng anu penultimate, sareng saterasna. Saatos babak bursa ieu, nagara bagian sadaya elemen bakal aya dina posisi anu leres. Bakal aya O(2M) ~ O(1) permutations dina total.

Analisis tugas tina konperénsi Hydra - balancing beban sareng neundeun mémori

Solusi sapertos kitu moal kaget saurang ahli matematika anu masih émut yén rotasi mangrupikeun komposisi dua simétri axial. Ku jalan kitu, éta trivially digeneralisasi pikeun shift teu ku hiji, tapi ku posisi K <N. (Tulis dina komentar kumaha kahayang.)

Naha anjeun resep teka-teki? Naha anjeun terang solusi anu sanés? Bagikeun dina komentar.

Sareng ieu aya sababaraha tautan anu mangpaat dina tungtungna:

sumber: www.habr.com

Tambahkeun komentar