Форум: "Прочее";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];
ВнизМейнстрим интернет разработки Найти похожие ветки
← →
Дмитрий Тимохов (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;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.004 c