|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Искал давеча информацию о том, как правильные пацаны запиливают клиент-серверное взаимодействие в .Net через TCP. На всех ресурсах где были сравнения с другими языками с конкретными цифрами, выводы были простые: C++ быстрее всех, Java чуть-чуть медленнее, .Net совсем плох. Разумеется, это относится к масштабируемым решениям на неблокирующих или асинхронных сокетах, на банальном блокирующем IO все одинаково - очень сложно запороть банальный вызов к API файловой системы. А сегодня я наткнулся на вот это: http://www.techempower.com/benchmarks/#section=data-r9 Ребята заморочились и написали огромную кучу бенчмарков для всевозможных серверов. И картину мы здесь видим точно такую же - .Net вообще не вывозит. У меня вопрос: что не так с .Net? Почему никто не может написать на нем нормальный высокопроизводительный сервер? Кривые руки разработчиков ASP.NET? Кривая платформа? Или просто напросто никто не пишет высокопроихводительный софт на .Net (читай - это никому не нужно)? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 12:24 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
платформа сама по себе не шустрая :) то же касается и java. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 12:27 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjv, cdtyjvC++ быстрее всех, Java чуть-чуть медленнее Высокая же производительность Java это такой же миф, как чебурашка верхом на единороге, катающий по радуге. Java тащится ровно там же, где и .NET, ±1-2% ничего не меняют. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 13:40 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvИли просто напросто никто не пишет высокопроихводительный софт на .Net (читай - это никому не нужно)? Кстати, пишет. При чём на уровне по скорости близком к CPP. Правда это сложновато, так как местами приходится писать unsafe код, работать с указателями, переписывать некоторые нативные классы и методы, нарушать принципы кодирования на C#, и копипастить вместо всяких там абстракций... Что касается Old School ASP.NET, то да он медленный. Но это не касается vNext, который на подходе (по клятвенным заверениям разработчиков). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 13:43 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
hVosttВысокая же производительность Java это такой же миф, как чебурашка верхом на единороге, катающий по радуге. Java тащится ровно там же, где и .NET, ±1-2% ничего не меняют.Вы ссылку то открывали? Java чуть-чуть медленнее плюсов. А .Net в разы медленнее и того, и другого. Это подтверждено бенчмарками с открытым исходным кодом, которые отревьюили на предмет валидности сотни разработчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 15:03 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
TooHotплатформа сама по себе не шустрая :) то же касается и java.Увы, Java значительно шустрее .Net. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 15:04 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvВы ссылку то открывали? Java чуть-чуть медленнее плюсов. А .Net в разы медленнее и того, и другого. Это подтверждено бенчмарками с открытым исходным кодом, которые отревьюили на предмет валидности сотни разработчиков. А углубиться в тему не пробовал? советую почитать https://github.com/TechEmpower/FrameworkBenchmarks/issues/362 А то, что на бенчах там форменное фуфло какое-то. Поверь, я и С++ могу заставить ковылять медленнее Visual Basic. Многие новички наивно и по-детски полагают, что перфоманс в первую очередь зависит от выбранного языка или платформы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 15:35 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
hVostt , Вы дали ссылку, где парню не понравились результаты из прогона №6. А я вам дал ссылку на прогон №9. Какие вопросы? Конкретно этот бенчмарк сделан таким образом, что только от платформы все и зависит. И он показывает, что .Net как платформа для нагруженных клиент-серверных приложений, мягко говоря, не ахти. Поэтому вы можете написать супер-крутую аппликацию, но голимая платформа не даст вам прыгнуть выше головы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 15:48 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvВы дали ссылку, где парню не понравились результаты из прогона №6. А я вам дал ссылку на прогон №9. Какие вопросы? Похоже у тебя проблемы с английским. Почитать переписку не судьба? Что тестировалось, как тестировалось, и почему такие результаты. Дело отнюдь не в ASP.NET. cdtyjvИ он показывает, что .Net как платформа для нагруженных клиент-серверных приложений, мягко говоря, не ахти. Расскажи эту сказочку для малышей команде StackOverflow.com , вот они поржут. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 16:13 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjv hVostt , Вы дали ссылку, где парню не понравились результаты из прогона №6. А я вам дал ссылку на прогон №9. Какие вопросы? Конкретно этот бенчмарк сделан таким образом, что только от платформы все и зависит. И он показывает, что .Net как платформа для нагруженных клиент-серверных приложений, мягко говоря, не ахти. Поэтому вы можете написать супер-крутую аппликацию, но голимая платформа не даст вам прыгнуть выше головы.По указанной Вами ссылке написЯно "JSON serialization"... Вас не сильно затруднит вменяемо объяснить, какое отношение к этому имеют TCP и HTTP , котрые Вы использовали для темы. По приведенной Вами ссылке "особо порадовали" надписи "Did not complete" для подавляющего количества тестов (практически всех) для платформы .NET... "Терзают смутные сомнения" (с), что т.н. тестировщики не особо владеют этой платформой, чтобы для нее провести достоверные тесты и сравнить получненные результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 16:14 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjv, Когда создатели собирались делать StackOverflow, они хотели делать его на RoR. Но в тот момент вышел ASP.NET MVC, и они выбрали его. Нагрузка за день и среднее время отклика (12 ноября 2013) Страницы вопросов с ответами — 28 миллисекунд (29.7 млн. запросов) Профили пользователей — 39 миллисекунд (1.7 мил. запросов) Список вопросов — 78 миллисекунд (1.1 млн. запросов) Домашняя страница — 65 миллисекунд (1 млн. запросов) Пойди, расскажи этим ребятам, какой ASP.NET медленный. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 16:21 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
hVostt, да не ведись ты на этот дешевый вброс ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 16:41 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
sphinx_mvcdtyjv hVostt , Вы дали ссылку, где парню не понравились результаты из прогона №6. А я вам дал ссылку на прогон №9. Какие вопросы? Конкретно этот бенчмарк сделан таким образом, что только от платформы все и зависит. И он показывает, что .Net как платформа для нагруженных клиент-серверных приложений, мягко говоря, не ахти. Поэтому вы можете написать супер-крутую аппликацию, но голимая платформа не даст вам прыгнуть выше головы.По указанной Вами ссылке написЯно "JSON serialization"... Вас не сильно затруднит вменяемо объяснить, какое отношение к этому имеют TCP и HTTP , котрые Вы использовали для темы.Ок, объясняю: 1) HTTP работает поверх TCP. 2) Полезной нагрузкой HTTP конкретно в этом бенчмарке является JSON объект. 3) Это лишь один из бенчмарков. Полистайте вкладки на этой же странице, там результаты и для других бенчмарков. Но .Net болтается внизу везде. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 16:49 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
hVosttcdtyjv, Когда создатели собирались делать StackOverflow, они хотели делать его на RoR. Но в тот момент вышел ASP.NET MVC, и они выбрали его. Нагрузка за день и среднее время отклика (12 ноября 2013) Страницы вопросов с ответами — 28 миллисекунд (29.7 млн. запросов) Профили пользователей — 39 миллисекунд (1.7 мил. запросов) Список вопросов — 78 миллисекунд (1.1 млн. запросов) Домашняя страница — 65 миллисекунд (1 млн. запросов) Пойди, расскажи этим ребятам, какой ASP.NET медленный. 29700000 запросов в день. 1237500 запросов в час. 20625 в минуту. 345 в секунду. Это, по-вашему, высокая нагрузка? Это может быть высокая нагрузка на СУБД, но не на нормальный веб-сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 16:52 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjv 345 в секунду. Это, по-вашему, высокая нагрузка? Вообще-то, да, высокая. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 17:17 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvЭто, по-вашему, высокая нагрузка? Да. При чём эти цифры привязаны к конкретному проекту, имеющему известную популярность, и на сегодняшний день в своей нише не имеет себе равных. Твой же подход к сравнению похож на сравнение автомобиля и пули. Пуля быстрей, значит явно лучше автомобиля. Я тебе привёл реальный проект, который вполне выдерживает нагрузки, т.е. успешно справляется со своими задачами. Ты же приводишь какие-то глупые бенчи. Если уж на то пошло, то надо программировать надо в машинных кодах, ибо быстрее уже точно ничего не может быть. Вообщем ты наивен как.. (как?) дитя. К чему эти вбросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 17:25 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjv29700000 запросов в день. 1237500 запросов в час. 20625 в минуту. 345 в секунду. У тебя ещё и с математикой проблемы большие. Боюсь спросить, ты школу хоть заканчивал? Хотя бы 5-ый класс? Очень сомневаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 17:27 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvTooHotплатформа сама по себе не шустрая :) то же касается и java.Увы, Java значительно шустрее .Net. Где вы узрели в моем сообщении о том, что шустрее? Идите в свою пещеру под названием java, вы найдете там много соратников-троллей, каким вы и являетесь. И высерайте там всем скопом свои java-шлакоблоки. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 17:28 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
МСУhVostt, да не ведись ты на этот дешевый вброс Так это даже не вброс. Это больше похоже на какие-то попытки оправдаться в собственной некомпетентности за счёт чьих-то чужих бенчмарков. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 17:29 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Бенчмарки - дело маркетологов, оплачивающих "недотесты", чтобы впарить свое говно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 17:31 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvTooHotплатформа сама по себе не шустрая :) то же касается и java.Увы, Java значительно шустрее .Net. WinAPI видимо разные ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 18:57 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
[quot cdtyjv]sphinx_mv2) Полезной нагрузкой HTTP конкретно в этом бенчмарке является JSON объект."Конкретно в этом бенчмарке" сравнивается производительность различных библиотек для сериализации JSON. Сугубо к сведению... Ни HTTP, ни тем более TCP ни к .NETу вообще, ни к сериализации в частности вообще не при делах. cdtyjv3) Это лишь один из бенчмарков. Полистайте вкладки на этой же странице, там результаты и для других бенчмарков. Но .Net болтается внизу везде. Нечего там "листать"! Потому что аргументировать "медлительность" .NET результатами тестов с пометкой "did not complete" - это диагноз. Независимо от того, в какую строку таблицы попал этот "результат". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 19:44 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
TooHotБенчмарки - дело маркетологов, оплачивающих "недотесты", чтобы впарить свое говно. Абсолютно верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 19:53 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
sphinx_mv"Конкретно в этом бенчмарке" сравнивается производительность различных библиотек для сериализации JSON. Сугубо к сведению... Ни HTTP, ни тем более TCP ни к .NETу вообще, ни к сериализации в частности вообще не при делах.Вы читать умеете вообще? авторIn this test, each response is a JSON serialization of a freshly-instantiated object that maps the key message to the value Hello, World! Окей, не нравится вам этот бенчмарк, откройте другой: http://www.techempower.com/benchmarks/#section=data-r9&hw=peak&test=plaintext Обычная отсылка plain text в респонсе. .Net там в не меньшей заднице. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 19:55 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvОбычная отсылка plain text в респонсе. .Net там в не меньшей заднице. В заднице там не .NET, а говнокод, который тестируется. И учи математику малыш, ты обделался в предыдущих «расчётах». ... Кто-нить мне объяснит, это он тупо дурака включает, или реально ....? Уже который топик маниакальными тупорылыми набросами. Ладно там хоть что-то было похожее на свои мысли, теперь же попёрли какие-то упоротые бенчмарки каких-то долболоидов. Я просто в ветку Java никогда не ходил и тамошний контингент не знаю. Но похоже, что всё печально... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 20:25 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
hVosttКто-нить мне объяснит, это он тупо дурака включает, или реально ....? реально. готовить не умеет - вот и мечет икру кабачковую ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 20:37 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvВы читать умеете вообще авторIn this test, each response is a JSON serialization of a freshly-instantiated object that maps the key message to the value Hello, World!"Положительное" отношение к сборке мусора в серверных приложениях еще никого до добра не доводило... cdtyjvОкей, не нравится вам этот бенчмарк, откройте другой: http://www.techempower.com/benchmarks/#section=data-r9&hw=peak&test=plaintext Обычная отсылка plain text в респонсе. .Net там в не меньшей заднице."В не меньшей заднице" там только тестеры-говнокодеры. Облажаться даже с plain-text - это надо ОЧЕНЬ постараться! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 21:32 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
sphinx_mv"Положительное" отношение к сборке мусора в серверных приложениях еще никого до добра не доводило...Причем здесь сборка мусора? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 21:39 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Да, собственно, у меня вопрос очень простой - почему на .Net не существует высокопроизводительных клиент-серверных решений? Потому что платформа кривая, или же потому что спроса на них нет? Вот, например, берем Java. У нее есть медленный Tomcat для непритязательных пользователей. Есть куча разных серверов приложений для корпоративного сектора, то же не особо поворотливых. А есть скоростные решения - Netty, gemini, undertow - для создания очень нагруженных, масштабируемых решений. И вот есть .Net, в котором есть тормозной ASP.NET, и никаких альтернатив. Нет, я искал скоростные решения. SuperSocket есть там какой-то, какая-то другая китайская поделка, еще парочку наколенных фреймоврков. Но все они любительские, то есть какой-то энтузиаст попилил, и забросил. Инфы по их использованию в реальных проектах нет. StackOverflow, обрабатывающий 300 запросов в секунду силами нескольких серверов, "нагруженным" назвать язык не поворачивается. Я на свой домашний компьютер поставлю и затюнингую Netty, он вам в 10 раз больше выдавать будет. То есть для веб-сервера это вообще не нагрузка. Я вам сейчас напишу на 200 строк кода сервер, который каждого клиента обрабатывает в отдельном потоке с блокирующим IO, он и то справится с 300 запросами в секунду. Это мизер. Выходит, что спроса нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 21:48 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvДа, собственно, у меня вопрос очень простой - почему на .Net не существует высокопроизводительных клиент-серверных решений? Tcp-сервер с SSL, 200-300 тысяч пакетов в секунду (ручной разбор байтовых массивов) на машине core i7 8 ядер 8 гигов оперативки - это высокопроизводительное решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 22:25 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Arm79Tcp-сервер с SSL, 200-300 тысяч пакетов в секунду (ручной разбор байтовых массивов) на машине core i7 8 ядер 8 гигов оперативки - это высокопроизводительное решение?Что такое "пакет"? TCP-пакет? Или изолированное сообщение? Дайте больше информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 22:30 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvЧто такое "пакет"? TCP-пакет? Или изолированное сообщение? Дайте больше информации. Пакет - примерно 100 байт (округляем, есть меньше, есть больше - но порядок именно такой) Пакет не одинаковый, поэтому приходилось не просто десериализовывать, а копить внутренние буферы данных, так как в зависимости от флагов получались разные типы сообщений Без анализа - десериализация только в один заранее известный тип - 300-400 тысяч пакетов в секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 22:59 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Arm79 , Понял. Да, это уже нормальный порядок цифр. Абсолютная сетевая скорость, конечно, не ахти - порядка 20Mb/s, но на мелких сообщениях сложно нормально грузить провод. А как они у вас обрабатываются? То есть 200К - это сколько принято сообщений, или же это циклы request-response? И сколько соединений? Это один клиент общающийся с одним сервером, или же множество клиентов? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 23:19 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjv Arm79 , Понял. Да, это уже нормальный порядок цифр. Абсолютная сетевая скорость, конечно, не ахти - порядка 20Mb/s, но на мелких сообщениях сложно нормально грузить провод. А как они у вас обрабатываются? То есть 200К - это сколько принято сообщений, или же это циклы request-response? И сколько соединений? Это один клиент общающийся с одним сервером, или же множество клиентов? Mb/s - это мегабайт в секунду или мегабит? ваша цифра - это мегабайт в сек Тестил на своей машине, сервер + ~600 клиентов. Больше запустить не смог, памяти перестало хватать, начался дикий своп и клиенты вылетали с ошибками. Так что речь идет об обмене данными на одной машине, считайте через localhost. И не забывайте, каждый клиент - это SSL канал, то есть время тратилось на симметричное шифрование. Принцип простой - открывается сеанс и сервер и клиент могут друг другу присылать информацию. В основном весь трафик шел с клиентов. Если бы был request-response, много бы потратилось времени на соединение и обмен ключами. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 23:28 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Arm79 , Я под request-response имею ввиду, что клиент отсылает серверу сообщение, а потом ждет от него ответа. Или же это был односторонний обмен: то есть одна сторона шлет другой просто поток сообщений, не дожидаясь ответов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 23:32 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvне дожидаясь ответов ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 23:33 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvДа, собственно, у меня вопрос очень простой - почему на .Net не существует высокопроизводительных клиент-серверных решений? У меня в корпоративной среде активно работают около 1000 пользователей в браузере. Все идет через прокси сервер c поддержкой SSL на базе FiddlerCore, который написан на .Net И при этом прокси на лету расшифровывает HTTPS трафик, так как есть необходимость обрабатывать, так же на лету, передаваемый и получаемый контент. И все пучком, никто не жалуется и сервер не загибается. Чем не высокопроизводительно? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 23:37 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvsphinx_mv"Положительное" отношение к сборке мусора в серверных приложениях еще никого до добра не доводило...Причем здесь сборка мусора?Т.е., Вы не в курсе, какое отношение имеет и как влияет на производительность сборщик мусора при массовом создании и удалении объектов? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 23:51 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
sphinx_mvПричем здесь сборка мусора?Т.е., Вы не в курсе, какое отношение имеет и как влияет на производительность сборщик мусора при массовом создании и удалении объектов?[/quot]Ну расскажите. У меня в секунду создаются миллионы объектов включая всякие коллекции и массивы, и в профайлере GC болтается где-то на уровне 1-2% CPU. Что я делаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2014, 23:59 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvУ меня в секунду создаются миллионы объектов включая всякие коллекции и массивы, и в профайлере GC болтается где-то на уровне 1-2% CPU. Что я делаю не так? возможно, у вас на сервере достаточно оперативки, и сборщик мусора не включается? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 00:06 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
TooHotcdtyjvДа, собственно, у меня вопрос очень простой - почему на .Net не существует высокопроизводительных клиент-серверных решений? У меня в корпоративной среде активно работают около 1000 пользователей в браузере. Все идет через прокси сервер c поддержкой SSL на базе FiddlerCore, который написан на .Net И при этом прокси на лету расшифровывает HTTPS трафик, так как есть необходимость обрабатывать, так же на лету, передаваемый и получаемый контент. И все пучком, никто не жалуется и сервер не загибается. Чем не высокопроизводительно?1000 пользователей в браузере это дай бог несколько десятков запросов в секунду. Под высокую нагрузку не тянет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 00:06 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Arm79cdtyjvне дожидаясь ответовЯ понял. 200-300К в принципе нормальные цифры. Другое дело, что loopback - это всегда синтетика. Поведение программы на реальном сетевом интерфейсе может значительно отличаться от того, что вы видите на loopback. Вот мы посчитали, что у вас там 20Mb/s = 160MBit/s. На гигабитной локалке вы сможете выжать еще больше. Если будете правильно паковать сообщения в TCP пакеты, то значительно больше. У меня из последних тестов было примерно ~100К честных request-response циклов, с размером сообщения порядка 500 байт каждое. Если это чисто request, который не ждет ответа, то цифры уже порядка 500-600К в секунду. Вопрос в том, что в .Net нет готовых решений, которые можно просто взять, и они будут вот так работать с нормальной производительностью и масштабируемостью. Надо все делать руками. А в Java ты просто берешь какой-нибудь Netty, и ни о чем не думаешь. Отсюда и вопрос - почему так? Где схожие коробочные решения на .Net? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 00:15 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Arm79cdtyjvУ меня в секунду создаются миллионы объектов включая всякие коллекции и массивы, и в профайлере GC болтается где-то на уровне 1-2% CPU. Что я делаю не так? возможно, у вас на сервере достаточно оперативки, и сборщик мусора не включается?Потребление памяти этого приложения - не более 200Mb в пике. GC, разумеется, включен, иначе я бы задохнулся через секунду. На дефолтных настройках конкретно это приложение так же задыхается. Там так или иначе аллоцируется ... нууу где-то 10КК объектов в секунду, и GC отжирает порядка 80%. Но GC надо использовать правильно. В Java настройка GC это целая эпопея, там порядка сотни параметров можно подкручивать. В .Net с этим делом попроще будет - включаешь gcServer , и ни о чем не думаешь, нагрузка сборщика на процессор сразу же приходит в норму. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 00:19 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvArm79пропущено... Я понял. 200-300К в принципе нормальные цифры. Другое дело, что loopback - это всегда синтетика. Поведение программы на реальном сетевом интерфейсе может значительно отличаться от того, что вы видите на loopback. Вот мы посчитали, что у вас там 20Mb/s = 160MBit/s. На гигабитной локалке вы сможете выжать еще больше. Если будете правильно паковать сообщения в TCP пакеты, то значительно больше. У меня из последних тестов было примерно ~100К честных request-response циклов, с размером сообщения порядка 500 байт каждое. Если это чисто request, который не ждет ответа, то цифры уже порядка 500-600К в секунду. Вопрос в том, что в .Net нет готовых решений, которые можно просто взять, и они будут вот так работать с нормальной производительностью и масштабируемостью. Надо все делать руками. А в Java ты просто берешь какой-нибудь Netty, и ни о чем не думаешь. Отсюда и вопрос - почему так? Где схожие коробочные решения на .Net? Так мы с вами все-таки пришли к мнению, что и на .Net можно писать высокопроизводительные решения, по скорости ничуть не уступающие Java? C Netty не работал, но не думаю, что сильно ошибусь, если скажу, что WCF + nettcpbinding + protocolbuffers вместо soap будет не хуже. ЗЫ Правильно паковать - это как? Я лично не выбирал формат пакетов - описание самописного протокола мне предоставили. Пришлось использовать что есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 00:23 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjv1000 пользователей в браузере это дай бог несколько десятков запросов в секунду. Под высокую нагрузку не тянет. Не прикидывайтесь идиотом, а то я впрямь стану так думать. Для прокси сервера это высокая нагрузка, тот же Kerio загибается от такого количества пользователей, даже при его включенном кэше. 1 клик пользователя и у вас могут быть десятки запросов с веб-страницы, при этом как я упомянул, дешифруется HTTPS трафик, плюс ко всему созданы и работают фильтры по URL и контенту, а также организовано каскадирование прокси для необходимых запросов. Если включить логирование в real time, в журнал срет с такой скоростью, что главный поток загибается в обработке очереди сообщений, приходится накапливать данные и сваливать их в лог по таймеру. А вы говорите "дай бог несколько десятков запросов в секунду" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 00:43 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Arm79C Netty не работал, но не думаю, что сильно ошибусь, если скажу, что WCF + nettcpbinding + protocolbuffers вместо soap будет не хуже. Даже ASP.NET MVC будет быстрее, чем aspx-страницы, используемые в тестах. А если взять WebAPI на Katana, то Netty нервно покурит в сторонке. Просто чел вышел из берлоги. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 13:39 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvУ меня вопрос: что не так с .Net? Не так с .NET то, то он создан для решения реальных задач, а не для дебильных микробенчмарков. Например почти все примеры из репозитария отдают ответ без буферизации, а .NET буферизирует. Буферизирует ответ для того, чтобы можно было парой строк включить HTTP-кеш, который работает как на клиенте, так и на сервере. А в говноподелках на куче всяких ферймворков прикрутить клиент-серверный кеш с валидацией и conditional get - надо будет тонну кода написать и он будет тормозить неслабо. В реальных задачах HTTP-кеширование - основной инструмент для повышения быстродействия сайта. Вот примеры: http://habrahabr.ru/post/168869/ http://habrahabr.ru/post/227129/ Если лень читать - взял банальный MvcMusicStore и прикручиванием кеша разогнал его в 5 раз. При этом пришлось в совокупности поправить 15 строк кода. И это я не трогал ни запросы, ни пытался что-либо оптимизировать в коде приложения. Кстати если буферизацию выключить, то вариант с C++, nodejs и Self-Hosted WebApi дали почти одинаковый результат на локальной машине. cdtyjvПочему никто не может написать на нем нормальный высокопроизводительный сервер? Кривые руки разработчиков ASP.NET? Кривая платформа? Или просто напросто никто не пишет высокопроихводительный софт на .Net (читай - это никому не нужно)? А с чего ты взял что никто не пишет или не может? На основании микробенчмарков? У меня был сервер который держал 150 клиентов и стримал данные с датчиков во 80 пактов в секунду. Пакеты были около 1к+оверхед от .net.tcp. При этом он насыщал 100мб сеть, кушая не более 20% одного ядра и 100мб памяти. Я не стал изобретать всякие велосипеды с кастомной сериализацией и прочей муйней, а просто поправил код, чтобы он отправлял только измененные данные и нагрузка сети упала до 10%. В практических задачах кешироване рулит в разы сильнее, чем скорость вообще любого компонента в отдельности. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 14:31 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
hVosttДаже ASP.NET MVC будет быстрее, чем aspx-страницы, используемые в тестах. А если взять WebAPI на Katana, то Netty нервно покурит в сторонке. Просто чел вышел из берлоги.Дадада. Ну так пойдите, запилите. Более того, этот бенчмарк уже есть - https://github.com/howarddierking/FrameworkBenchmarks/tree/aspnet-katana/aspnet-katana Но он не смержин в основной бранч. Видимо, потому что эта ваша katana никому особо не нужна. И ни одной статьи про ее перфоманс нет. Очевидно, что ничего интересного она из себя не представляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 15:01 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
gandjustasВ практических задачах кешироване рулит в разы сильнее, чем скорость вообще любого компонента в отдельности. соглашусь, для веб кеширование это основной инструмент повышения производительности. сам веб-сервер может еле шевелиться, а с кешированием летать. ещё необходимо учесть довольно громоздкий цикл жизни обработки запроса в классическом ASP.NET, который с одной стороны бьёт по производительности, с другой позволяет навешивать свою обработку, контроль пост- и пре-процессинг на любом этапе жизненного цикла, что существенно перевешивает вопросы скорости. естественно при грамотной работе с кешем и оптимизациями всё это перестаёт иметь значение. WebAPI же работает на достойном уровне, так почему же они его не тестили? потому что долбодятлы, вот почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 15:04 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
gandjustasВ практических задачах кешироване рулит в разы сильнее, чем скорость вообще любого компонента в отдельности.Окей, идите закэшируйте цены акций в торговом роботе. Речь идет не про HTTP, а про TCP в целом. HTTP - лишь обертка сверху. Существует огромная масса приложений, которым надо быстро гонять данные по сети. И здесь .Net почему-то ничего не может предложить из коробки. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 15:08 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvОчевидно, что ничего интересного она из себя не представляет. Очевидно, потому что какой-то долбодятел так решил? Очевидно, что ты не осилил, хотя это итак понятно. Тебе катану, asp.net и .net никто не навязывает. Не нравится не ешь. Не хватает мозгов, чтобы осилить, тем более. Взять, например, Java. У меня был опыт работы, работу я выполнил, понял что на Java вполне можно успешно решать задачи, но мне она не понравилось, так как мне есть с чем сравнивать. Однако я не хожу как мудила по форумам и не ору, что Java говнище, и почему она мне не понравилась. Зачем ты это делаешь до сих пор не пойму. А по поводу бенчей, я тебе сказал уже что ты не прав. Бенчи вообще не показатель производительности, так как невозможно обеспечить одинаковые условия, учитывая что разные ферймворки по-разному обрабатывают запросы, и кто-то при этом выполняет больше работы, кто-то меньше. На ASP.NET люди делают высоконагруженные проекты, с миллионами активных пользователей и миллионами посетителей в сутки. Вот когда население земли вырастет до сотней триллионов, тогда и поговорим. Вижу ты не любитель обсуждать в контексте реальных задач, не наигрался ещё в детский садик, у кого писька больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 15:13 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvИ здесь .Net почему-то ничего не может предложить из коробки. Да, есть такие ребята, которые могут подохнуть с голоду при набитом продуктами холодильнике, если на холодильнике будет написано «здесь еды нет». Ты по ходу один из них. Тебе лично никто ничего не предлагает кроме того, чтобы купить мозгов, всё есть из коробки, только ты не способен даже её открыть. О чём дальше разговаривать??? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 15:16 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
TooHot1 клик пользователя и у вас могут быть десятки запросов с веб-страницывот занафига так делать? серверу заняться нечем? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 15:24 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
AntonariyTooHot1 клик пользователя и у вас могут быть десятки запросов с веб-страницывот занафига так делать? серверу заняться нечем? А это вы лучше спросите у веб быдлокодеров, у которых cache control must revalidate, перегрузка всей страницы вместо элегантного ajax запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 16:12 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvИ здесь .Net почему-то ничего не может предложить из коробки. Быстрее чем Winsock2 работает - ничего не получится. можешь конечно открыть топик - "Винда-говно" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 16:58 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
Изопропил, Ну с тем, что Винда как серверная платформа никакая никто и не спорить. Все давно сидят на еполе, а Микрософт только только созрел до RIO. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 19:13 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
а пускай свеня напишет свой тестик, а мы имплементируем свой. И сравним результаты. Мне думается интересно получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 19:16 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvИзопропил, Ну с тем, что Винда как серверная платформа никакая никто и не спорить. Все давно сидят на еполе, а Микрософт только только созрел до RIO. epoll требует определенной архитектуры, когда управляющий поток делает wait, а потом раскидывает задачи по пулу. Делать wait в нескольких потоках невыгодно. В винде нет необходимости делать wait в одном потоке, завершение само приходит в пул через IOCP. RIO лишь оптимизирует немного это завершение, за счет того, что буфер из драйвера сетевой карты не копиируются, а запись-чтение происходит напрямую в буферы приложения, ну всякие мелочи, типа развязки очереди завершения, которые можно разглядеть только под микроскопом. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2014, 19:57 |
|
Почему в .Net такие медленные TCP и HTTP?
|
|||
---|---|---|---|
#18+
cdtyjvhVosttcdtyjv, Когда создатели собирались делать StackOverflow, они хотели делать его на RoR. Но в тот момент вышел ASP.NET MVC, и они выбрали его. Нагрузка за день и среднее время отклика (12 ноября 2013) Страницы вопросов с ответами — 28 миллисекунд (29.7 млн. запросов) Профили пользователей — 39 миллисекунд (1.7 мил. запросов) Список вопросов — 78 миллисекунд (1.1 млн. запросов) Домашняя страница — 65 миллисекунд (1 млн. запросов) Пойди, расскажи этим ребятам, какой ASP.NET медленный. 29700000 запросов в день. 1237500 запросов в час. 20625 в минуту. 345 в секунду. Это, по-вашему, высокая нагрузка? Это может быть высокая нагрузка на СУБД, но не на нормальный веб-сервер.Peak is more like 2600-3000 requests/sec on most weekdays. StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's All About Performance ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 11:04 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1402589]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
others: | 329ms |
total: | 511ms |
0 / 0 |