Трябва да напиша разпределена система с четирипроцеси, работещи на четири различни възли. Разпределената система трябва да работи по следния начин: генераторът на случайни числа генерира случайно число при всеки процес. Целта е да се изравнят тези стойности във всички процеси чрез предаване на съобщения между процесите. Така че процесът А е сървърът, който получава номерата от всички процеси и след това ги нарежда да изпратят част от номера си на един или повече други процеси, за да изравнят всички номера, които процесите притежават. Например, броят на А е 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 #, защото това е моят първичен език за разработка, като се процедира с техники, ориентирани към гъвкаво развитие.
- Първо ще се опитам да скицирам макро-архитектурен дизайн, подчертавайки ангажираните участници и тяхната отговорност (но без да се навлизат в много подробности).
- След това ще се опитам да кодирам първи прост прототип който включва два възела.
- Когато прототипът работи, аз ще се опитам да го намеря слаби точки и нека работи с четири възли.
- Ако има проблеми, повтаряйте последната точка до него отговарят на изискванията.
До голяма степен в детайлите, можете дори да го използвате сурови контакти; но за да се опрости, предлагам да откриете системата си HTTP протокол (например, като се използва .NET BCL HttpListener и HttpClient компоненти като основа) за комуникация:
- Предварително определен набор от
GET
съобщението може да извършва синхронизиране между сървърите на връстниците. POST
съобщението може да се използва за обмен на данни с произволни номера.
За генерирането на числа той отваря изцяло нов свят. Бих разчитал на външна услуга като ANU Quantum Случаен сървър (ако можете да преброите активна връзка с интернет). Знам, че сте заявили, че сте въвели алгоритъм, аз го предложих като алтернатива (не знам дали тази част може да бъде променяна или не).
Най-малкото нещо, предлагам ви да прочетете тази статия и също това относно партньорска към партньорската ако ще използвате .NET Framework.