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