/ / алгоритъм за равномерно разпределение на стойностите на всички процеси - алгоритъм, дизайн, език-агностик, разпределени

алгоритъм за равномерно разпределение на стойностите на всички процеси - алгоритъм, дизайн, език-агностик, разпределени

Трябва да напиша разпределена система с четирипроцеси, работещи на четири различни възли. Разпределената система трябва да работи по следния начин: генераторът на случайни числа генерира случайно число при всеки процес. Целта е да се изравнят тези стойности във всички процеси чрез предаване на съобщения между процесите. Така че процесът А е сървърът, който получава номерата от всички процеси и след това ги нарежда да изпратят част от номера си на един или повече други процеси, за да изравнят всички номера, които процесите притежават. Например, броят на А е 30, броят на B е 65, C на брой е 35, а D е броят е 70. A изчислява 30 + 65 + 35 + 70 = 200 разделен на 4 = 50. Сега процес A , сървърът, знае кой е по-нисък от средния и кой има повече от средното ниво. Сега въпросът е как А решава кой изпраща кой номер на кого? за изравняване на стойностите на всички процеси. моля, обърнете внимание, че A не може директно да инструктира процес за намаляване или увеличаване на броя му, например не може да изпрати съобщение до B и да го каже да се намали с 15 и след това да изпрати друго съобщение до C и да го каже да увеличи с 15. A трябва да изпрати съобщение до B, което ще каже на B да се намали с 15 и след това да изпрати съобщение до C и да го каже да се увеличи с 15 или с други думи тя казва на Б да изпрати 15 от вашите брои в C. Благодаря предварително. Заки.

Отговори:

0 за отговор № 1

Проблемът, който описвате, е известен като разпределена агрегация, Съществуват редица решения, подходящи заразлични предположения в мрежата (какви възли са свързани? могат ли съобщенията да бъдат изгубени?), функцията за изчисляване (средна? сума?) и т.н. Добър преглед с препратки към алгоритми, които можете да използвате, можете да намерите на адрес http://arxiv.org/abs/1110.0725.


1 за отговор № 2

Защото това, което знам, не е конкретно рецепта или само добре дефинират модела за изпълнение на такиваразпределена система (също и ако има материал, който дава указания за аргумента, вижте връзката в края на въпроса). Тук са включени разнообразен избор, който ще оформи окончателната система, нейната мащабируемост, как ще реагира, как ще бъде солидна и т.н.

Маркирахте въпроса като език агностик. Убеден съм, че добрите концепции са нещо повече от технологиите, но в крайна сметка трябва да се направи избор и една система като тази е твърде сложна, за да бъде изградена с език, който не е само познат.

Бих го изградил с C #, защото това е моят първичен език за разработка, като се процедира с техники, ориентирани към гъвкаво развитие.

  1. Първо ще се опитам да скицирам макро-архитектурен дизайн, подчертавайки ангажираните участници и тяхната отговорност (но без да се навлизат в много подробности).
  2. След това ще се опитам да кодирам първи прост прототип който включва два възела.
  3. Когато прототипът работи, аз ще се опитам да го намеря слаби точки и нека работи с четири възли.
  4. Ако има проблеми, повтаряйте последната точка до него отговарят на изискванията.

До голяма степен в детайлите, можете дори да го използвате сурови контакти; но за да се опрости, предлагам да откриете системата си HTTP протокол (например, като се използва .NET BCL HttpListener и HttpClient компоненти като основа) за комуникация:

  1. Предварително определен набор от GET съобщението може да извършва синхронизиране между сървърите на връстниците.
  2. POST съобщението може да се използва за обмен на данни с произволни номера.

За генерирането на числа той отваря изцяло нов свят. Бих разчитал на външна услуга като ANU Quantum Случаен сървър (ако можете да преброите активна връзка с интернет). Знам, че сте заявили, че сте въвели алгоритъм, аз го предложих като алтернатива (не знам дали тази част може да бъде променяна или не).

Най-малкото нещо, предлагам ви да прочетете тази статия и също това относно партньорска към партньорската ако ще използвате .NET Framework.