powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Написание высоконагруженного сервера на Джаве.
25 сообщений из 27, страница 1 из 2
Написание высоконагруженного сервера на Джаве.
    #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
Написание высоконагруженного сервера на Джаве.
    #38658240
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dymytry ,
1) Отнюдь, ни о какой запредельной оптимизации во всяких Tomcat, и уж тем более JBoss, речи не идет совсем. Это обычные приложения для пользования ширнармассами. Если нужно выжимать максимум - всегда пишут свое. Кому-то нужна очень хитрая сериализация, кому-то нужна запись вне хипа, кому-то нужна хитрая логика обработчика (напр. Disruptor), и т.д.. Тем более, что написание своего сервера под конкретную специализированную задачу - это не такое уж сложное занятие. Трудоемкость создания своего сервера на порядки ниже трудоемкости создания Tomcat/JBoss.
2) Суть NIO - один (или несколько, но немного) поток слушает события с сокета. При получении события - он отдает это событие в другой поток для обработки, а сам тут же начинает слушать следующие события. Поэтому NIO многопоточен по умолчанию.
...
Рейтинг: 0 / 0
Написание высоконагруженного сервера на Джаве.
    #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
Написание высоконагруженного сервера на Джаве.
    #38659140
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dymytryможет ли NIO работать в несколько потоков?

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

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

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

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

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

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

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

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

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

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

Прежде чем бредить в прямом эфире, неплохо бы изучить вопрос. И лучше с разных сторон. А то смешно читать)
Пруф? Вот задача отсортировать банковские счета: java , а вот С/C++ . Ну вам пальчик покажи - рассмеетесь, наверное.
...
Рейтинг: 0 / 0
Написание высоконагруженного сервера на Джаве.
    #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
Написание высоконагруженного сервера на Джаве.
    #38661516
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,

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

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

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

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

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


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