Как создать веб-сервер изображений?

Я пытаюсь создать сервер веб-изображений. Он одновременно служит изображениям для большого количества клиентов (10 тысяч +). (Это будет более легкая проблема, если будет меньше клиентов.) Каков хороший способ сделать это с задержкой по времени как можно меньше.

Я новичок в этом поле. Любое предложение будет приветствоваться.

Ответ 1

Определенно оглянитесь вокруг хорошей службы доставки. Akamai является самым известным.

Если вы действительно хотите сделать это самостоятельно, забудьте об Apache/IIS. намного более подходящими являются "легкие" веб-серверы. Два очень хороших lighthttp и NginX (wiki). NginX, в частности, имеет действительно прочную производительность.

Изменить. Сети распространения контента (CDN) процветают в последние несколько лет, и гораздо проще найти более простые и дешевые. В частности, довольно просто поставить статический контент в Amazon S3 и использовать CloudFront.

Ответ 2

С этим большим количеством клиентов вы можете захотеть изучить сеть доставки контента (например, Akamai). На первый взгляд это может показаться дорогостоящим, но если вы действительно смотрите на затраты на техническое обслуживание оборудования и, в частности, на стоимость полосы пропускания, он начинает иметь экономический смысл.

Ответ 3

Если вы хотите создать самый быстрый статический веб-сервер с наименьшей задержкой, вот как я это сделаю.

  • Используйте цикл событий, чтобы определить, какие сокеты готовы
  • Поместите эти сокеты в очередь
  • Создайте стек потоков для работы с сокетами (1 для каждого ядра). Когда они закончат, верните их в стек.
  • Назначить работу потокам.
  • Кэш всех файлов изображений в памяти.

Это, по сути, то, что порты завершения ввода-вывода минус кэширование файлов. Эта модель доступна в Windows и Solaris.

http://technet.microsoft.com/en-us/sysinternals/bb963891.aspx

alt text

Ответ 4

Как изображения должны быть поданы? Изображения, созданные на лету? или они статичны и хранятся в формате .jpg или другом формате в файловой системе?

В любом случае, я бы использовал ASP.NET.ashx(общие обработчики) и использовал классы System.Drawing.

Вы также хотите настроить балансировку сетевой нагрузки TCP/IP на http://support.microsoft.com/kb/323431