Задать вопрос
BeriaFantom
@BeriaFantom
Full Stack Razrabotchik

Что такое распределенная система?

Сколько раз встречаю понятие distributed system, никак не могу понять, что оно означает. Google трактует сложно и не понятно, нету конкретных примеров. Объясните, пожалуйста, доступным языком, что к чему.
  • Вопрос задан
  • 548 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
A distributed system is a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal.


Мне кажется более чем понятное определение.

Если простым языком, представьте себе что вы разделили ваше приложение на куски и раскидали эти куски по разным физическим машинам. Что бы что-то сделать каждый кусочек общается с другими отправляя им сообщения и получая ответы. Если на какую-то часть системы приходится большая нагрузка чем на остальные - можно продублировать этот кусочек на нескольких серверах и т.д. Так же в случае больших объемах данных удобно хранить данные по частям на разных серверах.

Это один из основных подходов при построении реально больших проектов. Можеет так же почитать про микросервисы и другие схожие подходы.
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Самый простой пример - хранение информации. Пусть у нас будет 5 серверов, которые будут хранить файлы. Для того, чтобы распределить нагрузку по этим серверам мы будем каждый файл класть на один из серверов, а сервер выбирать по очень простому алгоритму, будем считать хеш имени видеофайла и делить его на остаток от деления на 5 ( по количеству серверов). Так как предполагается, что хеширование у нас подчиняется нормальному распределению, то файлы на серверах тоже будут распределены равномерно.
Итого, когда нам нужно узнать, на каком сервере лежит файл, нам достаточно посто посчитать хеш, найти остаток от деления и обратиться к нужному серверу.
Тоже самое можно сделать не только с хранением, а и с вычислениями. Передавать задачу на один из серверов по какому то признаку, например по текущей загрузке или по наличию свободной памяти или еще ко какому признаку.

Пример на питоне
import hashlib
h = hashlib.md5('my_cool_filename').hexdigest() # получили 16-разрядную строку
# h =  '13061a556715c93e5543f20b7001c669' - это строка
hi = int(h,16) # перевели ее в лонг
# hi = 25287019810011413006158894310673729129L
index = int(h,16) % 5 # нашли остаток от деления
# index = 4L


Еще раз, нужно не делить, а взять остаток от деления, операция %
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
распределенная на несколько серверов система, что тут не понятного.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы