Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Написание высоконагруженного сервера на Джаве. / 25 сообщений из 27, страница 1 из 2
02.06.2014, 02:21
    #38658205
Dymytry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Прослушал тут доклад человека с Одноклассников про высоконагруженный сервер, который они писали на Джаве для своих нужд. Возникли вопросы, хочу спросить здесь.

1. а зачем собственно писать свой Джава сервер? почему не взять Tomcat или Jboss, там наверняка все оптимизировано по самое не хочу.

2. известно, что есть 2 способа обрабатывать приходящие на сервер запросы.
1) через сокеты:
мы устанавливаем одно TCP соединение с каждым клиентом и выделяем на каждое соединение по потоку. поток считывает и отправляет данные с клиента ( вопрос 2.1: можно ли одновременно читать и писать в один сокет 2мя потоками?)
2) через NIO:
у нас есть селектор, который выбирает соединение только тогда, когда оно готово что-то делать, получается что обработка все равно однопоточная, но нет простоя потока когда один из клиентов молчит.
вопрос 2.2: может ли NIO работать в несколько потоков?

3. как вся эта кухня соотносится с наличием proxy? допустим перед нашим Джава сервером стоит nginx. он имеет tcp соединения с backend-сервером и по нему передает запросы от пользователей. получается что при джава-сервере на сокетах у нас будет всегда один сокет и один поток. памяти хватит, проблема только в быстродействии. проблемы с простоем нет.
так делают? чем такой вариант хуже NIO?
...
Рейтинг: 0 / 0
02.06.2014, 08:27
    #38658240
DEVcoach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Dymytry ,
1) Отнюдь, ни о какой запредельной оптимизации во всяких Tomcat, и уж тем более JBoss, речи не идет совсем. Это обычные приложения для пользования ширнармассами. Если нужно выжимать максимум - всегда пишут свое. Кому-то нужна очень хитрая сериализация, кому-то нужна запись вне хипа, кому-то нужна хитрая логика обработчика (напр. Disruptor), и т.д.. Тем более, что написание своего сервера под конкретную специализированную задачу - это не такое уж сложное занятие. Трудоемкость создания своего сервера на порядки ниже трудоемкости создания Tomcat/JBoss.
2) Суть NIO - один (или несколько, но немного) поток слушает события с сокета. При получении события - он отдает это событие в другой поток для обработки, а сам тут же начинает слушать следующие события. Поэтому NIO многопоточен по умолчанию.
...
Рейтинг: 0 / 0
02.06.2014, 09:20
    #38658266
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Dymytry1. а зачем собственно писать свой Джава сервер? почему не взять Tomcat или Jboss
"Сервер" это на столько широкое понятие, что им можно назвать всё что имеет серверный TCP сокет. Почему вы решили что сервер одноклассников это какая-то альтернатива "Tomcat или Jboss" я не знаю. В презентации 2011го года они заявляли что используют и Tomcat и JBoss.

Dymytry там наверняка все оптимизировано по самое не хочу.

Нет не всё. Эти сервера реализуют JEE спецификацию. Если вам нужна какая-то альтернативная архитектура, которая на JEE ложится слабо, то почему бы и не отказать от JEE контейнера? Как минимум в вопросах кластиризации ни Tomcat, ни JBoss никогда не славились. Умеют - да. Но достаточно ли хорошо - вопрос открытый.

Dymytry2. известно, что есть 2 способа обрабатывать приходящие на сервер запросы.
1) через сокеты:
2) через NIO:

Терминология хромает. NIO тоже работает через "сокеты". Это просто два разных Java API. А термин "сокеты" он немного из другой плоскости.

Dymytryмы устанавливаем одно TCP соединение с каждым клиентом и выделяем на каждое соединение по потоку. поток считывает и отправляет данные с клиента ( вопрос 2.1: можно ли одновременно читать и писать в один сокет 2мя потоками?)

Можно одновременно читать одним потоком и писать другим если траспортный протокол позволяет. Если имеется ввиду чтение двумя и более и запись двумя и более потоками, то эти чтение\запись нужно синхронизировать. Иначе протокол обменна данными невозможно контролировать.

Dymytryу нас есть селектор, который выбирает соединение только тогда, когда оно готово что-то делать, получается что обработка все равно однопоточная, но нет простоя потока когда один из клиентов молчит.
вопрос 2.2: может ли NIO работать в несколько потоков?

NIO даёт больше возможности выбрать любую архитукуру обработки. Не понятно что именно вкладывается в понятие "обработка". Она, ведь, асинхронная. Может быть сколько угодно потоков. В общем я вопрос не очень понял. А то что селекторы разгребаются в однин поток. Так этого потока достаточно для огромного числа клиентов. Он ведь больше ничего не делает, кромер как получает соединение и запускает обработку для него другими потоками.

Dymytry3. как вся эта кухня соотносится с наличием proxy? допустим перед нашим Джава сервером стоит nginx. он имеет tcp соединения с backend-сервером и по нему передает запросы от пользователей. получается что при джава-сервере на сокетах у нас будет всегда один сокет и один поток. памяти хватит, проблема только в быстродействии. проблемы с простоем нет.
так делают? чем такой вариант хуже NIO?
Это не proxy, а reverse proxy. Да, так делают. Но скорее из иных соображений. Шире возможности отбиться от DDoS. Быстрее отдавать статический контент сайтов.

В нормальных highload системах решение никогда не ограничивается одной лишь Java. Highload сервер подразумевает некоторую целостность всего гетерогенного окружения. И специфичиное железо, и не-Java решения для специфичных задач.
...
Рейтинг: 0 / 0
02.06.2014, 18:06
    #38659140
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Dymytryможет ли NIO работать в несколько потоков?

Может. Например, в jetty даже селекторы разгребаются в 2 потока.

Если пишешь свой сервер - там есть некоторый гемор по записи в nio-сокет, а именно с определением оптимального момента, когда лучше всего писать следующую порцию данных. Но это проблема не жабовская, а архитектурная.
...
Рейтинг: 0 / 0
02.06.2014, 21:25
    #38659326
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Для многопоточный асинхронной неблокирующей обработки (а вам то и надо, судя по всему) обычно используются классы с NIO.2

Например: http://docs.oracle.com/javase/7/docs/api/java/nio/channels/AsynchronousServerSocketChannel.html

Так же рекомендую почитать про proactor pattern.
...
Рейтинг: 0 / 0
02.06.2014, 22:21
    #38659358
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
DoSOfRedRiverДля многопоточный асинхронной неблокирующей обработки (а вам то и надо, судя по всему) обычно используются классы с NIO.2
Да, ну с фига ли именно NIO.2? Можно подумать NIO весь из себя блокирующий и синхронный?
...
Рейтинг: 0 / 0
03.06.2014, 19:26
    #38660643
schwa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Dymytry,

>>1. а зачем собственно писать свой Джава сервер? почему не взять Tomcat или Jboss, там наверняка все оптимизировано по самое не хочу.

Потому что надо заглянуть в исходники и посмотреть сколько там кода, который ничего не делает или изобретает велосипед (тред пулы в томкате, свои байт буфферы с тред пуллами в джетти и т.д.). Проекты страдают от легаси, а выигрыш в перформансе они могут получить скорее всего только коренным образом пересмотрев архитектуру.
...
Рейтинг: 0 / 0
03.06.2014, 19:27
    #38660648
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
schwaПотому что надо заглянуть в исходники и посмотреть сколько там кода, который ничего не делает или изобретает велосипед (тред пулы в томкате, свои байт буфферы с тред пуллами в джетти и т.д.).А что не так с тредпулами и байт бафферами?
...
Рейтинг: 0 / 0
03.06.2014, 19:39
    #38660670
schwa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
cdtyjvschwaПотому что надо заглянуть в исходники и посмотреть сколько там кода, который ничего не делает или изобретает велосипед (тред пулы в томкате, свои байт буфферы с тред пуллами в джетти и т.д.).А что не так с тредпулами и байт бафферами?
Велосипед на велосипеде и велосипедом погоняет. Были бы эти велосипеды еще новыми..
У меня такое ощущение, что они там про j.u.c. узнали позже меня, а у меня опыта программирования лет на 10 меньше чем там у них.
...
Рейтинг: 0 / 0
03.06.2014, 19:44
    #38660678
schwa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Конечно они сейчас на j.u.c. уже переползли небось, но это надо было сделать на 5 лет раньше.
...
Рейтинг: 0 / 0
03.06.2014, 20:42
    #38660724
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Dymytry, всё усложняется когда узнаёшь профиль нагрузки. Сколько физических серваков?
Сколько сессий? Кластер? Шардинг? Какие-то серваки кластеризуются. Какие-то нет.
Чем можно жертвовать в аварии? Ну и поддержка прОтоколов мать их так...

Конешно если у тебя виртуалка и приложение класса "сферический хомяк в вакууме" то тебе
всё равно какой сервер брать.
...
Рейтинг: 0 / 0
03.06.2014, 23:52
    #38660832
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Высоконагруженный сервер писать надо не на джава точно (посмотрите spoj, там java жрет 200мб против 5мб Си/Си++ и по скорости 2,5сек vs 0,2сек). Джава это уютненький энтерпрайз. Пример с одноклассниками - они, наверное раз 100 пожалели.
...
Рейтинг: 0 / 0
04.06.2014, 01:11
    #38660860
Написание высоконагруженного сервера на Джаве.
no56892Высоконагруженный сервер писать надо не на джава точно (посмотрите spoj, там java жрет 200мб против 5мб Си/Си++ и по скорости 2,5сек vs 0,2сек). Джава это уютненький энтерпрайз. Пример с одноклассниками - они, наверное раз 100 пожалели.

Прежде чем бредить в прямом эфире, неплохо бы изучить вопрос. И лучше с разных сторон. А то смешно читать)
...
Рейтинг: 0 / 0
04.06.2014, 05:28
    #38660901
Dymytry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Благодарю за интересное обсуждение!
...
Рейтинг: 0 / 0
04.06.2014, 10:31
    #38661046
DoSOfRedRiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Blazkowicz,

BlazkowiczДа, ну с фига ли именно NIO.2? Можно подумать NIO весь из себя блокирующий и синхронный?

Да оно удобней просто, на мой взгляд. Меньше мук с селекторами и прочим.
...
Рейтинг: 0 / 0
04.06.2014, 14:25
    #38661462
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Ищущий Знанияno56892Высоконагруженный сервер писать надо не на джава точно (посмотрите spoj, там java жрет 200мб против 5мб Си/Си++ и по скорости 2,5сек vs 0,2сек). Джава это уютненький энтерпрайз. Пример с одноклассниками - они, наверное раз 100 пожалели.

Прежде чем бредить в прямом эфире, неплохо бы изучить вопрос. И лучше с разных сторон. А то смешно читать)
Пруф? Вот задача отсортировать банковские счета: java , а вот С/C++ . Ну вам пальчик покажи - рассмеетесь, наверное.
...
Рейтинг: 0 / 0
04.06.2014, 14:57
    #38661511
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Сталкивался с проблемой low latency в сети, беглое изучение доков показало "что не все так однозначно" ( C ) дочь офицера.

Например, для высокопроизводительных сетей критичных к low latency явно нужно настраивать афинити на процессы/потоки - Java из коробки такой функциональности не предоставляет. Народ в И-нет уверяет, быстрее 40-50 ms выжимать из Java не удавалось. Хотя HP Low Latency Labs в своих тестах (на С) умудряется и 1.7-3 ms задержки показывать ))). Но для какого нибудь Web-сервера, понятное дело, 5 или 150 ms задержки совершенно не критично.

Но это взгляд делитанта. Субж не писал.
...
Рейтинг: 0 / 0
04.06.2014, 15:00
    #38661516
0FD
0FD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
no56892,

Ха-ха, не показатель, ведь там время работы программы замеряется, а не время работы алгоритма.
...
Рейтинг: 0 / 0
04.06.2014, 15:03
    #38661520
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
no56892Пруф? Вот задача отсортировать банковские счета: java , а вот С/C++ . Ну вам пальчик покажи - рассмеетесь, наверное.
Перестаньте позориться.
Тема про серверное приложение. Ваш "пруф" - единоразовая задача.
Ничего не сказано о настройках Java, которая по-умолчанию отжирает 100Мб под кучу и ещё пару десятков под JVM.
Сама задача, при этом, может отъедать столько же памяти, а разница в 100Мб на масштабе сервера в отличие от масштабов сортировки не значительна.
Не вижу ничего про "разгорев" JIT, который на 2х секундную задачу, влияет очень сильно. А вот на масштабе 24x7 сервере нивелируется абсолютно.

Ну, и пример SBANK вообще показательный на первой двадцате. 3 секунды Java супротив 2 секунд CPP. Вероятно, если предварительно разогреть и оптимизировать настройки под задачу, то можно выйти на те же 2 секунды.
...
Рейтинг: 0 / 0
04.06.2014, 16:08
    #38661622
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
#пошел учить матчасть
...
Рейтинг: 0 / 0
04.06.2014, 16:17
    #38661634
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
no56892Пруф? Вот задача отсортировать банковские счета:
Такой задачи не существует. Это синтетика которую придумывают любители бенчмарков.
...
Рейтинг: 0 / 0
04.06.2014, 19:16
    #38661875
Написание высоконагруженного сервера на Джаве.
maytonno56892Пруф? Вот задача отсортировать банковские счета:
Такой задачи не существует. Это синтетика которую придумывают любители бенчмарков.
А потом тему читает Шипилев, каментит и все такие сравниватели дружно садятся в лужу)
...
Рейтинг: 0 / 0
04.06.2014, 21:35
    #38661965
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Ищущий ЗнанияА потом тему читает Шипилев, каментит и все такие сравниватели дружно садятся в лужу)
Так то на хабре. Здесь можно не переживать.
...
Рейтинг: 0 / 0
04.06.2014, 21:44
    #38661967
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Ищущий Знанияmaytonпропущено...

Такой задачи не существует. Это синтетика которую придумывают любители бенчмарков.
А потом тему читает Шипилев, каментит и все такие сравниватели дружно садятся в лужу)

Алексей сравнивает работу разогретой машины.
А тут берутся критерии, крайне невыгодные для систев динамической компиляции.
Если б взяли сервер, который по запросу обрабатывает таски, и замеряли бы внемя выполнения 1000й таски - то время отклика бы было бы сравнимым.
А считать потребление памяти jvm, которая стремиться держать максимальный обьем памяти с "ручными" с/с++ вообще смешно.
...
Рейтинг: 0 / 0
05.06.2014, 12:54
    #38662462
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание высоконагруженного сервера на Джаве.
Ищущий Знанияmaytonпропущено...

Такой задачи не существует. Это синтетика которую придумывают любители бенчмарков.
А потом тему читает Шипилев, каментит и все такие сравниватели дружно садятся в лужу)
Кто этот замечательный господин? И почему его нет в этом топике? Наверное ему
с нами неинтересно или нам с ним. Поэтому не будем обсуждать ибо не по джентльменски
как-то да и икается ему сейчас не кисло.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Написание высоконагруженного сервера на Джаве. / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]