Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.13;
Скачать: CL | DM;

Вниз

Мейнстрим интернет разработки   Найти похожие ветки 

 
Дмитрий Тимохов   (2010-10-31 01:04) [0]

Приветствую всех.

Хочу предложить тему для обсуждения.

Собственно откуда темя получилась. Я подписан на блог http://www.insight-it.ru. Автор начинал писать, когда еще был, видимо, школьником или студентом первого курса. Областью своих интересов автор выбрал high-load-интернет проекты. Он пишет об архитектуре известных интернет-гигантов.

Хватит рекламы.

Я вот про что хочу спросить. Он упоминает проект node.js, как составную часть мноих интернет-проектов. Например, ВКонтакт.

Я почитал node.js (наберите в гугле node.js - первая же ссылка). Суть - это server-side javascript. Т.е. на javascript можно писать HTTP (или TCP) сервера.

Как основное достоинство библиотеки выдвигается следующее - она не требует поток на клиента, она ивентная - т.е. множество клиентов обрабатывается в одном потоке.

Замечу, что node.js живет только в UNIX системах. Можно под Windows, но под эмуляцией UNIX. Насколько мне хватает своих знаний берклевких сокетов - они блокирующие: на каждый запрос "поднимается" процесс, который запрос обрабатывает. Т.е. как бы node.js (будучи, повторю, для UNIX) борется с недостатками UNIX - т.е. создает асинхронную среду обработки запросов.

Windows же двигает свое виденье работы с сетью, а именно - асинхроннные неблокирующие сокеты. Т.е. winsock позволяет реализовывать приложения сразу в асинхронном режиме - один поток может обрабатывать тысячи коннектов.

(думаю, всем понятно, что windows в режиме - поток (процесс) на запрос дохнет сразу)

А вот теперь тема для обсуждения.

Почему windows не выходит в лидеры по предоставлению серверной операционной системы? Почему, имеючи в базе асинхронность, windows не побил UNIX в части web-хостинга?


 
DVM ©   (2010-10-31 01:10) [1]


> Насколько мне хватает своих знаний берклевких сокетов -
> они блокирующие: на каждый запрос "поднимается" процесс,
>  который запрос обрабатывает.

неблокирующие там тоже есть - все на select() . И необязательно там форкать процесс каждый раз потоки там тоже есть.


 
antonn ©   (2010-10-31 01:36) [2]


> Почему, имеючи в базе асинхронность, windows не побил UNIX
> в части web-хостинга?

дорого


 
Дмитрий Тимохов   (2010-10-31 01:36) [3]

Ты пойми, тут не в технике вопрос. И не в холиворре.

Мне хочется разобраться в вопросе сабжа темы - что есть мейнстрим веб-разработки.

Почему все интернет-гиганты, которые я знаю, не живут на windows? Тогда как windows в силу своей модели сокетов дает в базе возможности, которые преследуются тем же node.js - асинхронность обработки запросов.

Хочется послушать лекцию в стиле "ты, сынок, послушай, что я тебе скажу...".


 
Anatoly Podgoretsky ©   (2010-10-31 08:30) [4]

> Дмитрий Тимохов  (31.10.2010 01:04:00)  [0]

Думаю ты не в курсе, на Виндоус возможны как асинхронные сокеты, так и
синхронные
И есть библиотеки, INDY и ICS


 
Дмитрий Тимохов   (2010-10-31 11:36) [5]


> Anatoly Podgoretsky ©   (31.10.10 08:30) [4]
>
> > Дмитрий Тимохов  (31.10.2010 01:04:00)  [0]
>
> Думаю ты не в курсе, на Виндоус возможны как асинхронные
> сокеты, так и
> синхронные
> И есть библиотеки, INDY и ICS


Ты издеваешься? ))

Я и на том и на том писал. От ICS отказался, т.к. плохо она все же через прокси ходит по HTTP с стороны клиента. Пользуюсь WinInet - намного лучше.

А вообще, ты к чему это?


 
Дмитрий Белькевич   (2010-10-31 11:42) [6]

Думаю, дорого. Представь гугл на win. Тысячи серверов. Каждый - стоит. Как железо, так и софт. Лучше линух допилить до более-менее утойчивого состояния, на больших проектах оправдано, думаю. Всё равно - один раз делать, потом копипаст.


 
Дмитрий Белькевич   (2010-10-31 11:43) [7]

хотя нафига там серверные операционки... но всё равно - дорого...


 
Дмитрий Белькевич   (2010-10-31 11:46) [8]

с другой стороны - ну что им нужно от win? ради одной асинхронности только?
какая функциональность у этих серваков? да никакая - тупо раздавать траффик. по большому счёту, можно вообще в железе сделать.


 
Anatoly Podgoretsky ©   (2010-10-31 12:22) [9]

> Дмитрий Белькевич  (31.10.2010 11:42:06)  [6]

Так известно, что их жаба давила.


 
Дмитрий Тимохов   (2010-11-01 11:09) [10]

Вот еще 2 представителя по теме асинхронных неблокирующих серверов
http://ru.wikipedia.org/wiki/Tornado_%28web_server%29
http://ru.wikipedia.org/wiki/Twisted

Все же удивляет, что важное сравнительное достоинство unix-систем по равнению с windows - легкое поднятие нового процесса - на деле оказывается не таким достоинством. Т.е. асинхронный режим работы все равно быстрее.

Интересно, а почему тогда в unix (linux) не сделают в базе асинхронные неблокирующие сокеты, зачем заставлять разработчиков придумывать довески?


 
Pseudoslav Miroedov   (2010-11-01 11:21) [11]

Дмитрий Тимохов   (01.11.10 11:09) [10]

>Интересно, а почему тогда в unix (linux) не сделают в базе асинхронные неблокирующие сокеты, зачем заставлять разработчиков придумывать довески?

Тяжелое наследие Unix, закрепленное в POSIX стандарте (его кардинальное изменение потребует изменение и сертификации по-новой всего POSIX-совместимого зоопарка ОС). В Windows NT как более молодой системе не гнушались применять более прогрессивные разработки.


 
Petr V. Abramov ©   (2010-11-01 12:07) [12]


> Все же удивляет, что важное сравнительное достоинство unix-
> систем по равнению с windows - легкое поднятие нового процесса
> - на деле оказывается не таким достоинством.

процесс в unix примерно соответствует потоку в венде. вендовому процессу (пул потоков с общей памятью и прочей полезностью типа открытых файлов) аналога вроде как нет.

> Т.е. асинхронный режим работы все равно быстрее.

а на веб-сервере принцип соединение на поток и не нужен, веб серверу максимально быстро отдать данные и забыть про клиента. В отличие от СУБД, которые про принципу поток-соедеинение все и сделаны.


 
tesseract ©   (2010-11-01 14:16) [13]


> Интересно, а почему тогда в unix (linux) не сделают в базе
> асинхронные неблокирующие сокеты,


AFAIK в POSIX нет сообщений и IRQ. Все по старинке через StdIn.


 
Дмитрий Тимохов   (2010-11-01 15:01) [14]


> Petr V. Abramov ©   (01.11.10 12:07) [12]


> а на веб-сервере принцип соединение на поток и не нужен,
>  веб серверу максимально быстро отдать данные и забыть про
> клиента.


Петь, это ты не прав. В HTTP 1.1 можно указывать надо ли забывать о клиенте или нет. В HTTP 1.0 тоже можно было указывать, но в 1.1. дефлот у keep-alive = true, а 1.0 - false.

Т.е. сейчас по дефолту большинство серверов все же держит коннект.


 
Омлет ©   (2010-11-01 15:03) [15]

Токийская биржа переходит на Linux
http://www.linux.org.ru/news/commercial/4415360

Лондонская фондовая биржа переходит на Linux после убытков из-за Windows
http://www.securitylab.ru/news/398616.php


 
Petr V. Abramov ©   (2010-11-01 15:06) [16]


> Дмитрий Тимохов   (01.11.10 15:01) [14]
>
>


> Т.е. сейчас по дефолту большинство серверов все же держит
> коннект.

т.е. в случае чё отвечает "есть коннект". но это не отменяет
> максимально быстро отдать данные и забыть

нету там всяких транзакций и прочей сложной нечисти


 
Petr V. Abramov ©   (2010-11-01 15:06) [17]

в 99% случаев


 
Anatoly Podgoretsky ©   (2010-11-01 15:08) [18]

> Омлет  (01.11.2010 15:03:15)  [15]

А NasDaq  и не думает переходить и еще ряд других бирж.


 
Медвежонок Пятачок ©   (2010-11-01 15:24) [19]

Петь, это ты не прав. В HTTP 1.1 можно указывать надо ли забывать о клиенте или нет. В HTTP 1.0 тоже можно было указывать, но в 1.1. дефлот у keep-alive = true, а 1.0 - false.

Т.е. сейчас по дефолту большинство серверов все же держит коннект.


кипалайв это филькина грамота.
бо кроме клиента его запросившего и сервера его поддерживающего есть еще прокси который посередине и который имеет свои представления о необходимости запрошенного кипалайва.


 
Игорь Шевченко ©   (2010-11-01 15:54) [20]


> процесс в unix примерно соответствует потоку в венде. вендовому
> процессу (пул потоков с общей памятью и прочей полезностью
> типа открытых файлов) аналога вроде как нет.


Бред какой


 
Petr V. Abramov ©   (2010-11-01 15:55) [21]


> Бред какой

а в чем бред?


 
Дмитрий Тимохов   (2010-11-01 16:01) [22]


> кипалайв это филькина грамота.
> бо кроме клиента его запросившего и сервера его поддерживающего
> есть еще прокси который посередине и который имеет свои
> представления о необходимости запрошенного кипалайва.


ну там кипэлайв и для прокси есть.

я в свое время, когда отказался от ICS в сторону WinInet для использования HTTP со стороны клиента, плотно полазил сриффером WireShark по сетевому обмену моего браузера на примет всяких флагов HTTP - на что они влияют. Наш, например, прокси (ISA) держит коннект, если ему скажешь proxy-keep-alive.  

Я понимаю, что весь топик какой-то неконкретный у меня получается. Просто меня очень удивила ситуация, что люди пишут для *nix систем свои асинхронные неблокирующие сервера, выступают с ними докладами на конференциях, пиаряться по-всякому. Странно это как-то... Т.е. получается что *nix системы плохо подходят для хостинга высоконагруженных систем!!! Бред как-то. Неужели linux используют так активно только из-за бесплатности!?


 
Игорь Шевченко ©   (2010-11-01 16:14) [23]


> а в чем бред?


в процитированной фразе


 
Petr V. Abramov ©   (2010-11-01 16:18) [24]

я понял, ни в чем


 
Pseudoslav Miroedov   (2010-11-01 16:20) [25]

Игорь Шевченко ©   (01.11.10 16:14) [23]

Вероятно, автор имеет ввиду непосредственно встроенный в Windows механизм готового пула потоков, которого в Linux действительно нет. И машину Тьюринга эту действительно только из-за бесплатности и используют.


 
Anatoly Podgoretsky ©   (2010-11-01 16:42) [26]

> Дмитрий Тимохов  (01.11.2010 16:01:22)  [22]

Во многих случаев, имеено потому что халява. Но не настолько линукс, сколько
Free BSD


 
tesseract ©   (2010-11-01 16:46) [27]


> И машину Тьюринга эту действительно только из-за бесплатности
> и используют.


У неё много других достоинств :-) Например простота и наглядность, как у титанового лома. А асинхронность можно и гвоздями прибить.


> Т.е. получается что *nix системы плохо подходят для хостинга
> высоконагруженных систем!!!


linux - это не все *nix системы ещё.


 
Медвежонок Пятачок ©   (2010-11-01 17:14) [28]

ну там кипэлайв и для прокси есть.

Он в протоколе есть и его можно попросить.
У сервера, который его не умеет.
И у прокси, который тоже может его не уметь.


 
DiamondShark ©   (2010-11-01 18:12) [29]


> Т.е. получается что *nix системы плохо подходят для хостинга
> высоконагруженных систем!!! Бред как-то. Неужели linux используют
> так активно только из-за бесплатности!?

А что вы хотели от системы 70-х годов?


 
Дмитрий Тимохов   (2010-11-01 18:40) [30]


>
> А что вы хотели от системы 70-х годов?


Дим, вот представь картину. Сижу пью пиво с вице-президентом одного нехилого банка. Их подразделение в России аутсорсит для всего банка по всему миру. В пики на Нью-йоркской фондовой бирже у ихнего софта 15% всей загрузки. Т.е. вроде как круто. Человек прошел от простого программиста - и на Windows писал, и на С и т.д. Он уверенно говорит, что видите ли виндовс имеет недостаток - жутко дорого форкануть процесс или поток - не важно то и то дорого, переключение контекста тоже дорого. А вот в UNIX это раз плюнуть и вот где собака зарыта в производительности. Т.е. на UNIX поток (процесс, не важно) на соединение сделать можно, а в Windows никак. Поэтому для их задач подходит только UNIX.

А тут я читаю, что оказывается эту архитектуру процесс-на-соединение разработчики стараются старательно обойти. Фреймворки пишут всякие!!!

Я по себе знаю (Розыч не даст соврать - он тоже свой сервер писал на схожей архитектуре), что асинхронные сервера очень производительны. Т.е. один рабочий поток на все коннекты очень быстро - даже моих знаний хватает, чтобы в локалке сделать сервер, обрабатывающий до 1500 запросов (простых, правда) в секунду.

У меня ощущение, что асинхронный сервер windows "сделает" блокирующий Linux. Какие мнения? (считайте темой для холивара:) )

ЗЫ Вопрос имеет практический смысл для меня. Я задумался о том, что хочу сделать свой интернет проект. Пока просто хочу, планы далекие. Интересно просто про архитектуру со знающими людьми пообщаться.


 
DiamondShark ©   (2010-11-01 18:59) [31]


>  Поэтому для их задач подходит только UNIX.

Правильно ли я понял, что если у их софта, скажем, сто тысяч одновременных соединений, то у них запускается столько же потоков (или процессов, как, пёс, оно там в ксах)?

А если не сто тысяч, то сколько?

А TCP-стек не лопается?

А эта вся монстрячина на одном сервере крутится, без всяких там кластеров и лоад-балансингов?

Ну не конретно же обсуждать что-то в стиле: "а вот мне один мужик под пивко говорил".


> А тут я читаю, что оказывается эту архитектуру процесс-на-
> соединение разработчики стараются старательно обойти.

И правильно делают. Процесс/поток дорогая штука по-определению. Неважно в какой системе. И дело не в скорости переключения, а в расходе ресурсов. Поток -- это, как минимум, стек и контекст. На много тысяч потоков может просто тупо не хватить памяти.


> У меня ощущение, что асинхронный сервер windows "сделает"
> блокирующий Linux. Какие мнения?  (считайте темой для холивара:
> ) )

Предлагаю для начала просто сделать бенчмарк на порождение потоков.
И ещё стресс-тест на то, при каком количестве потоков система выдохнется.
Запустить на винде и ксе.
Возможно, что и холиварить дальше не придётся.


 
Anatoly Podgoretsky ©   (2010-11-02 09:09) [32]

> tesseract  (01.11.2010 16:46:27)  [27]

Линукс это не Юникс, это в лучшем случае POSIX


 
Anatoly Podgoretsky ©   (2010-11-02 09:10) [33]

> DiamondShark  (01.11.2010 18:12:29)  [29]

Линукс живет с 1991 года, а коммерческие дистрибутивы с 1993 года, задолго
до 32 разрядных Виндоус.


 
Anatoly Podgoretsky ©   (2010-11-02 09:15) [34]

> Дмитрий Тимохов  (01.11.2010 18:40:30)  [30]

Немного устарело, но посмотри и рядом тоже

http://www.podgoretsky.com/ftp/Docs/Internet/High-Performance%20Networking%20Unleashed/


 
Anatoly Podgoretsky ©   (2010-11-02 09:19) [35]

> DiamondShark  (01.11.2010 18:59:31)  [31]

> А TCP-стек не лопается

лопнет, да просто портов не хватит на такое количество соединений

> На много тысяч потоков может просто тупо не хватить памяти.

Это не делают на 32 битной архитектуре и даже на 64 битной.
Для этого используют HP-UX или AIX на 128 битной архитектуре, со многими
сотнями террабайт памяти.


 
tesseract ©   (2010-11-02 10:26) [36]

>>что видите ли виндовс имеет недостаток - жутко дорого форкануть процесс или поток - не важно то и то дорого, переключение контекста тоже дорого.

Переключение контекста в windows на 10-15 % быстрее linux.


 
DiamondShark ©   (2010-11-02 10:51) [37]


> Anatoly Podgoretsky ©   (02.11.10 09:19) [35]
> Это не делают на 32 битной архитектуре
> и даже на 64 битной.Для этого используют HP-UX или AIX на
> 128 битной архитектуре, со многими сотнями террабайт памяти.


Или на кластере.



Страницы: 1 вся ветка

Текущий архив: 2011.02.13;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.006 c
13-1126698314
ilya39
2005-09-14 15:45
2011.02.13
Взаимодействие потоков в C#


15-1289165395
Юрий
2010-11-08 00:29
2011.02.13
С днем рождения ! 8 ноября 2010 понедельник


2-1290462726
Sarg77
2010-11-23 00:52
2011.02.13
Создание битовых массивов произвольной длинны


13-1126706390
MeF Dei Corvi
2005-09-14 17:59
2011.02.13
Уменьшение размера приложения


15-1288379376
TUser
2010-10-29 23:09
2011.02.13
Шестеренки