Я заинтересован в разработке простого сетевого сервера, который принимает и обслуживает ограниченное количество соединений (<25) изнутри локальной сети в любое время. Сервер динамически генерирует изображения и передает их клиентам со скоростью ~ 40-50 МБ / с. Какие-либо предложения / комментарии по имеющимся примерам дизайна для такого сервера - многопоточность, многозадачность, другие парадигмы дизайна, которые следует иметь в виду? А что, если этот сервер настроен на прием соединений (> 10000) из любой точки Интернета. Изменится ли какие-нибудь параметры? Есть ли доступные примеры?
Это в основном вопрос типа программирования. Я не ищу сжатия изображений или каких-либо других конкретных алгоритмов или транспортов. Просто более высокий уровень общего дизайна. Должна ли быть многопоточность, какой тип очередей? Какой язык лучше всего подходит, почему? Есть ли в наличии литература / книги / статьи и т. Д.? (кроме пришедшего)
Цените любые указатели
Еще один вопрос об архитектуре высокого уровня. Вау 2 за один день. Я чувствую себя особенным.
Правильно. Что бы вы ни делали, это должно быть быстро и легко.
Я бы, наверное, поигрался с сервером, управляемым событиями. Node.js кажется хорошим кандидатом для этого.
Не беспокойтесь слишком о количестве одновременных подключений или, если уж на то пошло, о скорости передачи данных.
Правильный язык для использования - это тот, который вы знаете лучше всего, но было бы неплохо и язык с приличными HTTP-библиотеками.
Да. Наверное, должна быть многопоточность, если этого требует дизайн. Видите ... Сначала вам нужно спроектировать программное обеспечение, а затем подумать о системах, находящихся под ним.
Возможно, начните с большого листа бумаги и карандаша и запишите все, что вы хотите, чтобы он делал, пока у вас а) не кончится материал или б) кончится карандаш.
Затем идите и исследуйте, как все это делать.
Затем наймите людей, которые знают, что делают. Похоже, вы пытаетесь сделать все сразу, все сами.
Итак, у вас есть сервер, генерирующий вещи, и вы ищете сервер, принимающий и делающий его доступным в Интернете? Через http?
Принимать файлы легко с помощью сетевых файловых систем. В зависимости от операционной системы генерирующей машины установите на обслуживающей машине NFS или samba. Смонтируйте файловую систему на генераторе. На генераторе запустите программы и попросите их записать образы в монтировании, файлы будут автоматически доступны (как локальные файлы) на обслуживающей машине.
В наши дни обслуживание локальных статических файлов через http довольно просто, на linux / bsd я бы рекомендовал использовать nginx. Упомянутый вами параллелизм быстро подтолкнет вас к большой пропускной способности, в зависимости от количества, которое вы перемещаете на территорию CDN.
Примечание: в этом дизайне вы не упоминаете метаданные об изображениях (какое изображение создается, в какое время, каково его содержимое и т. Д.) И как запускается создание.
Изменится ли какие-нибудь параметры?
Да. это не был бы сервер. Есть какие-нибудь подсказки, сколько вычислительной мощности вам потребуется для параллельной генерации 10.000 изображений? И с учетом вашей пропускной способности для 25 клиентов, это будет от 16 ГБ / с до 20 ГБ / с только в полосе пропускания (коэффициент 400).
Вы, наверное, говорите здесь о 400-500 серверах.
«Gearman - это система, позволяющая передавать работу другим машинам, отправляя вызовы функций машинам, которые лучше подходят для выполнения работы, для выполнения работы параллельно, для балансировки нагрузки множества вызовов функций или для вызова функций между языками».