/ / algoritmus pre rovnomerné rozdelenie hodnôt do všetkých procesov - algoritmus, dizajn, jazyk-agnostika, distribuovaný

algoritmus pre rovnomerné rozdelenie hodnôt do všetkých procesov - algoritmus, dizajn, jazyk-agnostik, distribuovaný

Musím napísať distribuovaný systém so štyrmiprocesov pracujúcich na štyroch rôznych uzloch. Distribuovaný systém má pracovať nasledovne: generátor náhodných čísel generuje náhodné číslo v každom procese. Cieľom je vyrovnať tieto hodnoty vo všetkých procesoch správou prechádzajúcou medzi procesmi. Takýto proces A je server, ktorý dostane čísla zo všetkých procesov a potom ich objednáva, aby poslali časť svojho čísla do jedného alebo viacerých ďalších procesov, aby vyrovnali všetky čísla, ktoré majú procesy v držbe. Napríklad počet A je 30, počet B je 65, počet C je 35 a počet D je 70. A vypočítava 30 + 65 + 35 + 70 = 200 delí 4 = 50. Teraz proces A , server, vie, kto má menej ako priemer a ktorý má viac ako priemer. Teraz je otázka, ako sa A rozhodne, kto odošle číslo komu? na vyrovnanie hodnôt všetkých procesov. vezmite prosím na vedomie, že A nemôže priamo pokyn procesu znížiť alebo zvýšiť jeho počet, napr. nemôže poslať správu na B a povedať, aby zníženie o 15 a potom poslať ďalšiu správu na C a povedať, aby zvýšil o 15. A musí poslať správu B, ktorá povedie B znížiť o 15 a potom poslať správu do C a povedať, aby sa zvýšil o 15, alebo inými slovami povedať B poslať 15 vašich počtom na C. Vďaka vopred. Zaki.

odpovede:

0 pre odpoveď č. 1

Problém, ktorý popísate, je známy ako distribuovaná agregácia, Existuje niekoľko vhodných riešenírôzne predpoklady v sieti (aké uzly sú spojené? môžu sa správy stratiť?), funkcia na výpočet (priemer? sum?) a tak ďalej. Dobrý prehľad s odkazmi na algoritmy, ktoré môžete použiť, nájdete na adrese http://arxiv.org/abs/1110.0725.


1 pre odpoveď č. 2

Pretože to, čo viem, nie je špecifické recept alebo len dobre definovať vzor realizovaťdistribuovaný systém (aj ak existuje materiál, ktorý poskytuje usmernenia k argumentu, pozri odkaz na konci otázky). Tu sa podieľajú rôzne možnosti výberu, ktoré určia konečný systém, jeho škálovateľnosť, ako bude reagovať, ako bude pevné, atď.

Označili ste otázku ako jazyk agnostiky. Som presvedčený, že dobré pojmy počítajú viac ako technológie, ale nakoniec musí byť zvolená a takýto systém je príliš zložitý na to, aby bol postavený s jazykom, ktorý nie je viac než známy.

Chcel by som ju postaviť s C #, pretože je to môj primárny vývojový jazyk, postupovať s technikami orientovanými na agilný vývoj.

  1. Najprv sa pokúsim načrtnúť a makro-architektonický dizajn, zdôrazňujúc zainteresované subjekty a ich zodpovednosť (bez toho, aby sa dostali príliš veľa podrobností).
  2. Potom sa budem snažiť kódovať prvý jednoduchý prototyp ktorý zahŕňa dva uzly.
  3. Keď prototyp funguje, pokúsim sa nájsť slabé stránky a nechajte ho pracovať so štyrmi uzlami.
  4. Ak sa vyskytnú problémy, zopakujte posledný bod, kým to nebude splniť požiadavky.

Prejsť do detailov, môžete ju dokonca stavať surové zásuvky; ale aby to bolo jednoduché, navrhujem, aby ste našli svoj systém Protokol HTTP (napríklad pomocou .NET BCL HttpListener a HttpClient komponenty ako základ) pre komunikáciu:

  1. Preddefinovaná sada súborov GET správa môže vykonávať synchronizáciu medzi servermi peer.
  2. POST správa sa môže použiť na výmenu údajov o náhodných číslach.

O generovaní čísla otvára úplne nový svet. Spolieham sa na externú službu, ako je ANU kvantový náhodný server (ak môžete počítať aktívne internetové pripojenie). Viem, že ste uviedli, že ste zaviedli algoritmus, dodal som to ako alternatívu (neviem, či sa táto časť môže zmeniť alebo nie).

Ako najmenšia vec odporúčam, aby ste si prečítali tento článok a tiež toto o peer-to-peer ak budete používať platformu .NET.