Highload. Помогите новичку

532 views
Skip to first unread message

Alexey M

unread,
Oct 4, 2013, 9:45:46 AM10/4/13
to erlang-...@googlegroups.com
Здравствуйте!

Сразу хочу извиниться за глупые вопросы. В программировании новичок. Поэтому решил попросить совета у более опытных товарищей.

Очень нравится тематика highload серверов. Сейчас встал вопрос о "проф. ориентации". Хочу начать углубленное изучение ЯП + фреймворков на этом языке. Выбираю между Java и Erlang. Понимаю, что сравнивать эти два языка как минимум некорректно, но все же. Что на ваш взгляд является более перспективным, если в дальнейшем хочу участвовать в разработке высоконагруженных серверов. Представьте, что вы вернулись на N лет назад. С учетом теперешнего опыта, чтобы вы стали учить и почему?

Нашел недавно тест производительности http://www.techempower.com/benchmarks/ . Java выглядит очень вкусно. Немного пощупал оба языка. Для себя пока сделал такие выводы-вопросы.
  • Производительность у Java выше. А что с распределенностью? В инете куча информации о том, что Erlang поддерживает распределенность из коробки. Но так ли это или надо немного поплясать с бубном?
  • Распределенные Java сервера тоже существуют. Но на сколько их сложнее (а может легче) писать по сравнению с Erlang?
  • А что на счет поддержки?
  • Erlang, как оказалось, достаточно простой и понятный язык. Java мне показалась на много сложнее. Особенно когда появляется многопоточный код.
Не знаю какие существуют области применения серверов (если так можно выразиться), но чтобы вы выбрали, если бы вам надо было написать back-end для высоконагруженного а) веб-поратала б) социальной игры в) большого бизнес-приложения.

Еще раз приношу извинения за глупые вопросы.

Maxim Velesyuk

unread,
Oct 4, 2013, 10:08:04 AM10/4/13
to erlang-...@googlegroups.com
А ты попробуй что-то для начала, потом нам расскажешь.

Yuri Zhloba

unread,
Oct 4, 2013, 10:10:32 AM10/4/13
to erlang-...@googlegroups.com
Выбор между Erlang и Java не столько технический, сколько политический. Этот выбор повлияет и на круг людей, в котором будешь общаться, и на круг компаний, где потенциально можно найти работу. Erlang сильно сузит и то и другое :)


4 октября 2013 г., 17:08 пользователь Maxim Velesyuk <loz....@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу erlang-...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.



--
Yuri Zhloba

skype: yzh44yzh
phone: +375 44 793 33 73

Yuri Zhloba

unread,
Oct 4, 2013, 10:12:42 AM10/4/13
to erlang-...@googlegroups.com
Ну а если все-таки про технические аспекты, то это долгий разговор. 

Вот, например, аргументы в пользу Erlang на поверхностном уровне, для новичков:


4 октября 2013 г., 17:10 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:

Danil A. Zagoskin

unread,
Oct 4, 2013, 10:20:50 AM10/4/13
to erlang-...@googlegroups.com
При этом поиск хорошей работы эрлангером может благополучно закончиться за неделю. В ближайшие года три дефицит специалистов, наверное, не сильно спадет.


4 октября 2013 г., 18:10 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:

Yuri Zhloba

unread,
Oct 4, 2013, 10:25:21 AM10/4/13
to erlang-...@googlegroups.com
"благополучно закончиться за неделю"

справедливо для мобильных людей, не отягощенных семьей и квартирой, для которых взять и умотать в другой город (страну) ничего не стоит :)


4 октября 2013 г., 17:20 пользователь Danil A. Zagoskin <da...@st-olen.ru> написал:

Bogunov

unread,
Oct 4, 2013, 10:31:48 AM10/4/13
to erlang-...@googlegroups.com
> "При этом поиск хорошей работы эрлангером может благополучно закончиться за неделю. В ближайшие года три дефицит специалистов, наверное, не сильно спадет."
Подозреваю, что для явиста этот срок равен 1 дню)


2013/10/4 Yuri Zhloba <yzh4...@gmail.com>



--
skype: i.bogunov
Regards, Bogunov Ilya

Maksim Leonov

unread,
Oct 4, 2013, 10:32:44 AM10/4/13
to erlang-...@googlegroups.com
Не надо выбирать, надо знать и то и другое =) Как минимум изучить
стоит оба языка.

4 октября 2013 г., 18:25 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:

Николай Измайлов

unread,
Oct 4, 2013, 10:41:20 AM10/4/13
to erlang-...@googlegroups.com
А давайте возмем ще golang
И выбор
golang, erlang, java


4 октября 2013 г., 18:32 пользователь Maksim Leonov <event...@gmail.com> написал:

Maxim Velesyuk

unread,
Oct 4, 2013, 10:58:04 AM10/4/13
to erlang-...@googlegroups.com
По-моему джаву стоит изучить чтобы понять что на ней писать не надо.

Николай Измайлов

unread,
Oct 4, 2013, 11:00:26 AM10/4/13
to erlang-...@googlegroups.com
Вот сижу пишу пот android вроде писать можно


4 октября 2013 г., 18:58 пользователь Maxim Velesyuk <loz....@gmail.com> написал:

Evgeniy Khramtsov

unread,
Oct 4, 2013, 11:13:40 AM10/4/13
to erlang-...@googlegroups.com
On 05.10.2013 01:00, Николай Измайлов wrote:
> Вот сижу пишу пот android вроде писать можно

Писать можно на всём.

--
Regards,
Evgeniy Khramtsov, ProcessOne.
xmpp:xr...@jabber.ru.

Boris Timokhin

unread,
Oct 4, 2013, 11:16:03 AM10/4/13
to erlang-...@googlegroups.com
Если бы мне кто-нибудь показал в java: smp, ets, rpc по кластеру, supervisors, горячую замену кода, как держать сотни тысяч подключений, не сжирая десятки гигабайт, и как, при этом, управляться только текстовым редактором - я бы тоже, наверное мучился выбором.


4 октября 2013 г., 17:45 пользователь Alexey M <alexey...@gmail.com> написал:

--

Un Lexx

unread,
Oct 4, 2013, 11:41:03 AM10/4/13
to erlang-...@googlegroups.com
я думаю ява предпочтительнее как первый язык. потом как упрешься в ограничения,сложность, 24/7  -
или выйдешь на уровень Архитектуры - можешь начать щупать Erlang.


4 октября 2013 г., 21:16 пользователь Boris Timokhin <mathe...@gmail.com> написал:

Max Lapshin

unread,
Oct 4, 2013, 12:38:17 PM10/4/13
to erlang-...@googlegroups.com
TL;DR: научись делать что-нибудь полезное, иди в толковую команду и переделай им все больные части на эрланге. Тратить свою жизнь впустую на джаву нафиг не нужно.


Давай я тебе попытаюсь рассказать немножко со своей колокольни.

Во-первых, что такое вообще хайлоад? Хайлоад — это прежде всего ответственность за большой поток данных.
Если ты льешь какие-то терабайты в секунду, но при этом можешь безболезненно это всё выключить, то это не хайлоад, а просто
трата впустую чужих (как правило государственных) денег.

Во-вторых, хайлоад — это всё таки большой поток данных и как-правило, кстати, пользовательских. Т.е. хайлоад
с высокой степенью надежности более присущ, как мне кажется, b2c бизнесам, чем b2b. Банку отключиться на час можно,
а вот процессинговому центру нет.

Что отсюда вытекает? Зачастую всё таки хайлоад проекты вырастают из обычных, а учитывая пункт про ответственность,
коней на переправе менять не любят, поэтому хайлоад софт часто просто делают из того, с чем начинали.

На эрланге крайне редко начинают проекты. Он ничуть не хуже джавы для делания веб-сайта (в смысле, что он так же мучительно кошмарен, как и джава), но за джавой закрепился образ универсального языка. Это совершенно лживый образ,
потому что джава по сравнению с С++ не годится ни для десктопа, ни для мобильных приложений. Она кое как годится лишь для серверов, где её успешно используют.


Т.е. тут ситуация такая, что если начали всё на джаве, то для того, что бы перейти на эрланг, надо быть либо хорошим инженером,
который понимает что делает, либо упоротым хипстером типа твиттера, которые скачут с технологии на технологию и баламутят рынок.

Однако, к счастью, далеко не все веб-проекты начинаются с джавы, поэтому всё таки в проект на руби или PHP добавить эрланг гораздо проще.

В любом случае хайлоад доверяют тем, кто себя зарекомендовал (см ответственность). Если будешь факапить и оно не будет работать, никакого хайлоада тебе не будет.





Теперь про другую сторону, личную. Наемному программисту от работы важен фан.
Выбирая джаву в чистом виде, как правило выбирают такую среду, в которой … нууу … Скорее фабрики синглтонов, чем что-то доброе и хорошее. При этом надо понимать, что всякая альтернативщина на джаве типа Clojure или Scala — это порой другие миры с людьми, которые к экосистеме и практикам ванильной джавы примерно так же относятся.

Т.е. это достаточно эмоциональный вопрос, однако я могу и немного немного фактов привести. Обычно, выбирая джаву, люди погружаются в ООП до крайностей, при этом в единственном хайлоад проекте на джаве, который я мог обозревать лично, никаких особых следов ООП головного мозга я не видел. Это видеостриминговый сервер Wowza. Там надо резко и четко рассовывать байтики в разные сокеты. Количество фабрик синглтонов минимально, по меркам джавы так их вообще нет.

Фактически у людей получилось, что они выбрали не джаву, как экосистему и культуру, а чисто JVM. Судя по успешности, можно сказать, что это правильный выбор. И учитывая, что обычное джава приложение работает примерно как 3Д игрушка в эмуляторе начала двухтысячных, можно предположить, что стандартная джавовская культура и весь тот хваленый набор библиотек, не особо подходят для хайлоада.




Поэтому можно говорить, что скорее надо сравнивать именно эрланг и JVM в каком-то своём виде.
Тут мы подходим к следующей проблеме: хайлоад устроен так, что проблему зачастую можно решить только на продакшне. Заходишь на сервер, правишь там сырцы, заливаешь их и смотришь. Джава тут сливает по полной: в ней не было, нет и непонятно планируется ли вообще горячая замена кода и если да, то как.

Ещё хайлоад — это про контроль за ресурсами. Какая разница, сколько попугаев ты можешь выжать на синтетическом тесте, если достаточно поорать на сервер, что бы у него немножко выросло время чтения с диска и твоя программа упадет, накопив слишком много запросов и пустит кластер вразнос? Для хайлоада очень важно — не жевать больше, чем ты сможешь проглотить и так далее.

Возможности интроспекции в джаве конечно очень сильно улучшены десятками крутых тулзов, но это как была система с общей кучей, так она ей и остается. Найти, что и где тупит и залипает в ней гораздо дольше и сложнее чем в эрланге именно в силу гениального в своей простоте и очевидности дизайна erlang VM (ну и 25 лет разработки, безусловно). 



При этом многие делают вполне себе сильно rps-ные проекты на каком-нибудь PHP, живущем за пачкой nginx-ов и оно у них работает и они себя убеждают в том, что это хорошо и «инженеру пофиг на чём писать». Я с этим несогласен, конечно, но это ничего не значит.




Alexander Alexeev

unread,
Oct 4, 2013, 1:51:37 PM10/4/13
to erlang-...@googlegroups.com
Учите оба.

Если в двух словах, с Java у вас больше шансов найти работу и приобрести
соответствующий опыт. В конце концов, программирование - это далеко не
одни только языки. А Erlang - на будущее, как более правильный язык, да
и для расширения кругозора не повредит.

Если более развернуто, то например: http://eax.me/beginning-programming/

> Здравствуйте!
>
> Сразу хочу извиниться за глупые вопросы. В программировании новичок.
> Поэтому решил попросить совета у более опытных товарищей.
>
> Очень нравится тематика highload серверов. Сейчас встал вопрос о
> "проф. ориентации". Хочу начать углубленное изучение ЯП + фреймворков
> на этом языке. Выбираю между Java и Erlang. Понимаю, что сравнивать
> эти два языка как минимум некорректно, но все же. Что на ваш взгляд
> является более перспективным, если в дальнейшем хочу участвовать в
> разработке высоконагруженных серверов. Представьте, что вы вернулись
> на N лет назад. С учетом теперешнего опыта, чтобы вы стали учить и
> почему?
>
> Нашел недавно тест производительности
> http://www.techempower.com/benchmarks/ . Java выглядит очень вкусно.
> Немного пощупал оба языка. Для себя пока сделал такие выводы-вопросы.
>
> - Производительность у Java выше. А что с распределенностью? В
> инете куча информации о том, что Erlang поддерживает распределенность
> из коробки. Но так ли это или надо немного поплясать с бубном?
> - Распределенные Java сервера тоже существуют. Но на сколько их
> сложнее (а может легче) писать по сравнению с Erlang?
> - А что на счет поддержки?
> - Erlang, как оказалось, достаточно простой и понятный язык. Java
> мне показалась на много сложнее. Особенно когда появляется
> многопоточный код.
>
> Не знаю какие существуют области применения серверов (если так можно
> выразиться), но чтобы вы выбрали, если бы вам надо было написать
> back-end для высоконагруженного а) веб-поратала б) социальной игры в)
> большого бизнес-приложения.
>
> Еще раз приношу извинения за глупые вопросы.
>
> --
> Вы получили это сообщение, поскольку подписаны на группу Erlang
> по-русски.
>
> Чтобы отказаться от подписки на эту группу и перестать получать из
> нее сообщения, отправьте электронное письмо на адрес
> erlang-russia...@googlegroups.com. Чтобы добавлять
> сообщения в эту группу, отправьте письмо по адресу
> erlang-...@googlegroups.com. Настройки подписки и доставки писем:
> https://groups.google.com/groups/opt_out.


--
Best regards,
Alexander Alexeev
http://eax.me/

Dmitry Demeshchuk

unread,
Oct 4, 2013, 4:59:06 PM10/4/13
to erlang-...@googlegroups.com
Давайте так. У любой технологии есть много критериев:

- порог вхождения
- удобство использования
- производительность
- сообщество (даже два критерия – размер и качество)
- востребованность (опять же – количество и качество компаний)

и т.д.

У Java я лично вижу только одно потенциальное преимущество – популярность (то бишь, большое сообщество и много компаний, нуждающихся в жаба-программистах). Дальше идут сплошные грабли: необходимость умения пользоваться сотнями, если не тысячами классов, толстыми Hibernate'ами, фабриками фабрик и прочими монструозными сущностями; куча кода и постоянное порождение классов и объектов при любом чихе; коллеги-индусы, пишущие код, от которого неизменно хочется плакать и бить автора стулом по голове; конторы, в которых инфраструктура и уровень познаний технических специалистов застряли где-то в конце восьмидесятых годов (отсутствие системы контроля версий, которую заменяет два десятка папок-копий на компе главного архитектора – нормальное явления, true story).

Если вас привлекает JVM (что немного логичнее, она действительно на многое способна) – посмотрите в сторону Scala или Clojure в качестве основного языка (но Java все-таки иногда пригодится для низкоуровневых кусков). У них сообщество гораздо умнее и адекватнее, писать на них куда как приятнее и легче, а производительность как минимум не хуже (а часто и лучше – потому что в них не плодятся лишние сущности, как это принято делать у труъ-жаба-программистов).
Да, этим вы сильно сузите список компаний, которым будете интересны (особенно в России), но зато получите доступ к небольшому количеству интересных контор, которые с одним только знанием Java вас бы не приняли.

С Erlang ситуация примерно такая же. С той разницей, что он инженерно повзрослее, благо история его развития исчисляется уже двумя с лишним десятками лет. Особенно преимущества заметны, когда появляется необходимость коммуницировать между серверами.

Главное – про недостаток работы на "экзотеческих" языках не верьте (про Ruby тоже так говорили не так давно, ага). Вам достаточно одной компании, в тысяче работать все равно не будете. Устройтесь учиться за еду^W^W, растите, решайте задачи, задавайте вопросы. Когда опыт накопится – с поиском следующих работодателей проблем не будет.

Alex Chistyakov

unread,
Oct 4, 2013, 5:14:41 PM10/4/13
to erlang-...@googlegroups.com
Этот вопрос звучит примерно как: "какие упражнения лучше делать - только присед или только жим лежа?"
В программировании, где все виртуально, такое вполне возможно, да - накачает человек, скажем, руку, и потом ходит и бьет всех этой рукой по лицу, что продолжается до тех пор, пока он не встретит человека, у которого накачана еще и нога.
За каждым языком программирования стоит не только абстрактная концепция, но и вполне конкретная история - время и место действия, окружающая среда, которые и привели к тому, что язык стал таким, а не каким-то другим. Популярная позиция "язык А плохо получился, потому что его писали дебилы" не имеет ничего общего с реальностью - людей в индустрии гораздо меньше, чем языков программирования, столько дебилов просто не нашлось бы.
Да, лучше никакой язык не изучать, конечно. Это все пустая трата времени и сил, а лучше быть богатым и здоровым.

--
SY,
Alex



2013/10/4 Alexey M <alexey...@gmail.com>

--

Max Lapshin

unread,
Oct 5, 2013, 2:31:33 AM10/5/13
to erlang-...@googlegroups.com
с Java у вас больше шансов найти работу и приобрести соответствующий опыт

Я не соглашусь.

Шансы найти работу означают, что человека легко возьмут в какой-нибудь сраный люксофт младшим помощником старшего заместителя писателя фабрик сигнлтонов. До хайлоада в таком окружении дорасти будет сложно.

Проще всего до хайлоада добраться именно в вебе: всё на виду, всё быстрее и проще. Веб на джаве делает гораздо меньшее количество контор, чем в энтерпрайзе, в силу огромной дороговизны и медленности джавы как технологии.

Alexey M

unread,
Oct 5, 2013, 1:37:31 PM10/5/13
to erlang-...@googlegroups.com
Спасибо всем за развернутые ответы. Особое спасибо хочу сказать Максиму Лапшену :)

пятница, 4 октября 2013 г., 17:45:46 UTC+4 пользователь Alexey M написал:

Dmitry Groshev

unread,
Oct 7, 2013, 2:56:18 PM10/7/13
to erlang-...@googlegroups.com
Erlang, Java и Clojure в треде.

Отдельными пунктами:
-highload это крайне размытое понятие. В мире многих «экспертов» с Хабры 10 запросов в секунду это уже highload. Конечно же, на таких масштабах абсолютно неважно, что вы используете. Во всех интересных случаях же невозможно дать однозначный ответ, т.к. каждая технология несёт в себе определённый набор плюсов и минусов, которые будут критичны для конкретного случая;
-Java это достаточно больно. Знать — стоит, тем более что она очень простая (все сложные области в основном касаются скорее JVM);
-JVM и Java это разные вещи. Насколько болезненна Java, настолько же божественна JVM. У неё есть некоторые проблемы, не существующие в Erlang'е (stop-the-world GC, например), но они обычно решаются (либо хаками, либо деньгами — C4 GC решает 99% проблем с GC) и являются продолжением достоинств (линейная скорость работы у GC Erlang'а никакая; мутабельных данных нет, даже когда они нужны). Если вам захочется пощупать, на что она способна, возьмите Clojure или Scala. Мне лично больше нравится первая;
-Erlang стоит изучить в любом случае, он простой и гарантированно сделает вас лучшим программистом;
-т.к. Erlang простой, на него легко переучивать программистов и они не будут стрелять себе в ноги;
-Clojure как язык *невероятно* мощнее Erlang'а. Огромное количество абстракций; доступ к экосистеме Java с кучей готовых библиотек; возможность писать код, работающий со скоростью голой Java (в свою очередь сравнимый с С без SSE). Проблема в том, что писать сложнее, вся эта мощь тупо занимает больше места в голове, нужно больше думать и дольше учиться;
-как только речь заходит о «распределённых системах» применительно к языкам, у меня начинает дёргаться глаз. Дело в том, что писать нормальный распределённый код в общем случае *очень* сложно. Настолько сложно, что язык сам по себе перестаёт играть роль, становится гораздо важнее набор требований (см. CAP-теорему) и ограничений, которые можно наложить на данные (как, например, возможность сливать произвольные снепшоты состояния данных, см. CRDT). В общем случае проще взять готовую платформу, tradeoff'ы и фичи которой вас удовлетворяют (будь то Riak, Zookeeper, Twitter Storm или любой микс из них) и пользоваться ею, надеясь не наткнуться на не найденный до сих пор баг. Косвенно это подтверждается тем, что Mnesia, несмотря на многие года разработки и использования, до сих пор способна входить в split brain, теряя данные (например http://dukesoferl.blogspot.ru/2008/03/network-partition-oops.html ).
-если бы я вернулся на N лет назад, я бы пролистал книгу по Java за неделю, нашёл бы работу на Erlang на год-другой и параллельно тыкал бы Clojure и Haskell в свободное время.



2013/10/4 Alexey M <alexey...@gmail.com>

--

Yuri Zhloba

unread,
Oct 7, 2013, 2:58:41 PM10/7/13
to erlang-...@googlegroups.com
вот это хороший ответ )


7 октября 2013 г., 21:56 пользователь Dmitry Groshev <lambda...@gmail.com> написал:
Reply all
Reply to author
Forward
0 new messages