Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1288467409
Novi4ok
2010-10-30 23:36
2011.02.13
Дельфи или Си?


2-1290533555
ZV
2010-11-23 20:32
2011.02.13
Сравнение времени функции TDateTime


2-1290266910
izja
2010-11-20 18:28
2011.02.13
DSpack фильтры


15-1288164422
Олег Крапивин
2010-10-27 11:27
2011.02.13
Ссылочку на спрвочник API. Пожалуйста!


2-1290458553
iDim
2010-11-22 23:42
2011.02.13
Data Mining (Сбор данных с сайтов и показом в программе)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский