|
Почему в .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 |
|
|
start [/forum/topic.php?fid=20&startmsg=38715411&tid=1402589]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 470ms |
0 / 0 |