Как построить имиджевый веб-сервер? - PullRequest
11 голосов
/ 10 июня 2009

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

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

Ответы [ 4 ]

8 голосов
/ 10 июня 2009

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

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

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

3 голосов
/ 10 июня 2009

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

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

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

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

alt text
(источник: microsoft.com )

2 голосов
/ 10 июня 2009

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

1 голос
/ 10 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...