Lev Walkin ([info]lionet) wrote,
@ 2007-12-12 04:42:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:erlang

Смотрел Махоткина. Смотрел "О высокой производительности". Смотрел Scaling Twitter. Наткнулся на RabbitMQ. Наткнулся на следующий вывод Моторолы:

A case study by Motorola comparing the use of C++ and Erlang for telecoms software, circa 2006.
 
Чистый Erlang примерно в два-три раза более производителен чем C++ на их задаче, при этом имея фиксированную стоимость по памяти.



По моим же данным, в JS-Kit использование Erlang позволило сократить код в 8-16 раз (в зависимости от подсистемы) и позволило поднять capacity системы в ~5 раз за две недели, построив масштабируемый KV-storage кластер a-la Amazon Dynamo. Про Dynamo я прочитал уже постфактум и был удивлён тем, насколько у нас совпадают требования к сервисам и методы решения проблем с масштабируемостью.

У меня в итоге получилось 2240 строк кода на Erlang, на всё про всё. Этот код делает следующее:


  • Динамическое кеширование
  • Replication with differential updates to Key-Value pairs
  • Multi-node fault-tolerance
  • Обслуживает четыре порта, в том числе висит на порту 80 (HTTP), на двух других TCP портах для статистики и общения с C и Perl, а также на UDP для мелких запросов
  • Ведёт exponential moving average статистику по куче параметров для каждого клиента
  • Умеет ходит к memcached за данными, но смысл в этом исчезает

Короче, я доволен. После опыта с Erlang слайды со scalability-конференций типа "используйте memcached!", "денормализуйте таблицы!", "сегментируйте базу!" и т.п. смотрятся как призывы заточить шуруп об асфальт, ибо в арсенале только молоток.



(Post a new comment)


[info]blacklion
2007-12-12 01:46 pm UTC (link)
Правильно ли я понимаю, что у открытого Erlang'а большие проблемы с SMP и пока есть проблемы с 64 битными системами?

(Reply to this) (Thread)


[info]lionet
2007-12-12 02:01 pm UTC (link)
1. Какие проблемы с SMP, поясни? Или ты про мои предыдущие посты?
2. Я его гоняю на 64-битных системах (amd64, sparc9) без проблем.

(Reply to this) (Parent)(Thread)


[info]blacklion
2007-12-12 02:10 pm UTC (link)
1. Что-то я с пол года назад видел обсуждение в RU.UNIX[.BSD? не помню], что 1 Erlang-процесс с его сотнями легковесных потоков — 1 системный thread (lwp, если угодно) и, как следствие, не использует больше 1 ядра/процессора. И что у той системы, что можно КУПИТЬ, эта проблема решена. Это всё не так?

2. Что-то я помнил, что тогда же обсуждалось, что на amd64 тоже есть какие-то проблемы, в контексте FreeBSD. Сейчас посмотрел — ONLY_FOR_ARCHS= i386 amd64, так что минимум на amd64 оно и на FreeBSD дышит.

(Reply to this) (Parent)(Thread)


[info]kurilka
2007-12-12 02:16 pm UTC (link)
Нет такого разделения на открытый/покупной.
Проблемы с SMP были, т.к. это не очень давняя разработка, но вроде в R12B уже всё должно быть поборото в основном. С 64 битами вроде что-то похожее :)
Кстати с смп проблема решалась тупым запуском нескольких инстансов эмулятора эрланга на одной многопроцессорной тачке.

(Reply to this) (Parent)(Thread)


[info]blacklion
2007-12-12 02:21 pm UTC (link)
Ну, видимо, я действительно помню очень давний разговор, чуть не про R9

(Reply to this) (Parent)(Thread)


[info]kurilka
2007-12-12 02:27 pm UTC (link)
Ну не настолько уж древний, я баловаться с эрлангом с R10 начал вроде, а поддержка SMP в принципе там в R11B появилась (правда сначала не очень вылизанная)

(Reply to this) (Parent)


[info]just_ziz
2007-12-12 06:07 pm UTC (link)
Ничего там особо не поборото. Как тормозит в SMP так и тормозил. Разрешение этих проблем может и не за горами, конечно, но пока для продакшна приходиться пускать по отдельному биму на ядро.

(Reply to this) (Parent)


[info]lionet
2007-12-12 02:25 pm UTC (link)
1. Это всё не так было месяц назад, в релизе R11, и тем ещё более не так сегодня, когда уже доступен релиз R12. В сети ходит много графиков почти линейной (k=1.97) масштабируемости Erlang с ростом количества процессоров. (Я на днях опубликую свой, на моих реальных паттернах и моём стиле программирования, чтобы подтвердить или опровергнуть этот коэффициент). Но я прямо сейчас не использую SMP, ибо мои (почти) линейные тесты показали некоторое ухудшение производительности с флагами, врубающими SMP поддержку у R11 VM. Так как у меня не было на тот момент реального теста SMP, а синтетикой заниматься не хотел, то я на production выставил систему с показавшимися мне более безопасными настройками. (Врубание SMP в Эрланге — это всего лишь ключ компиляции и ключ при запуске VM, сам VM перекомпилировать не надо, если он нормально собран).

2. Да. У меня дышит на amd64/FreeBSD, и sparc9/Solaris. Этот флаг в порты добавили 20 Mar 2006, так что не знаю какие там проблемы были, тогда я этим не занимался. Вот чего добавили недавно — это отключение отключения поддержки kqueue во FreeBSD RELENG_6 [1], [2], я работаю с этим патчем.

(Reply to this) (Parent)


[info]sidentdv
2007-12-12 02:14 pm UTC (link)
Завсегда же было так, что более частное быстрее нежели чем более общее. Я собсно к чему(в контексте денормализации и партиционирования):

2.1 System Assumptions and Requirements
The storage system for this class of services has the following requirements:
Query Model: simple read and write operations to a data item that is uniquely identified by a key. State is stored as binary objects (i.e., blobs) identified by unique keys. No operations span multiple data items and there is no need for relational schema. This requirement is based on the observation that a significant portion of Amazon’s services can work with this simple query model and do not need any relational schema. Dynamo targets applications that need to store objects that are relatively small (usually less than 1 MB).

В принципе конечно большинство задач приводимы к подобной, вопрос только трудозатрат реализации этой приводимости и в последствии трудозатрат сопровождения в виде "хотелок пользователей".
Как всегда - ищется(или не ищется :)) золотая середина, зависящая от задачи.
А вообще, данный пункт мне чем-то напоминает mumps и в частности cache'.

ЗЫ: а результат конечно гут.

(Reply to this) (Thread)


[info]lionet
2007-12-12 02:38 pm UTC (link)
Я бы сказал, что большинство тех кто тюнит MySQL в итоге одним из пунктов сваливается в необходимость денормализации данных. То есть, кодируют—кодируют "по правильному", книжки по правильной структуре баз данных читают, может быть даже их в школе учили про то что сферическая база в вакууме должна быть полностью нормализованной... А в итоге приходят к тому чтобы денормализовывать данные. А если они уже это делают, то уж лучше сразу CouchDB брать, или хранить данные в файловой системе напрямую. Ибо это же пытаются сделать из MySQL.

То есть, резко оказалось, что никому нафиг транзакционная чистота и referential integrity не сдалась, кроме банков и других финансовых организаций. Весь Web 2.0 хочет "ok for 99.9% of customers, screw the rest".

(Reply to this) (Parent)(Thread)


[info]sidentdv
2007-12-12 03:02 pm UTC (link)
веб2.0 и финорганизации - это далеко не все.
Т.е. все сие верно в контексте веба (и то видимо не всегда), я про acid и referential integrity.
1. Я конечно мог не увидеть суслика, но майскля и что-то серьезное, не вебовское... не встречал (мало знаком с ней относительно, но кроме нормализации и индексов там есть разве что тюнить?)
2. couchdb - лимит базы в 2 гига. Объемы смешны конечно. Т.е. как оно работает на объемах гиг в 200 пока даже и непонятно.

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-12 03:05 pm UTC (link)
1. а что есть серьезное не вебовское? десктопные приложения? им scalability в терминах тысяч транзакций в секунду нафиг не сдалась.
2. поэтому я не использую couchdb или mnesia, а сделал своё. сейчас у меня порядка пятидесяти гигов. это "своё" — часть тех 2240 строк.

(Reply to this) (Parent)(Thread)


[info]kurilka
2007-12-12 03:07 pm UTC (link)
А можно про 50 гигов? :)
Что хоть примерно там "гоняется", если не секрет?

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-12 03:17 pm UTC (link)
Можно ;) Из-за cache locality я сделал такой маппинг (условно):

{customer, key, resource} -> [{key, [value]}]

То есть, по туплу из трёх элементов адресуется "документ" из ключей и многоуровневых значений.
Один такой документ требуется, например, чтобы описать один рейтинг (один набор звёздочек).

(Reply to this) (Parent)(Thread)


[info]just_ziz
2007-12-12 06:09 pm UTC (link)
А индексируется сие хозяйство как?

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-13 12:51 am UTC (link)
Отличный вопрос! Спасибо! :)

(Reply to this) (Parent)(Thread)


[info]just_ziz
2007-12-13 09:41 am UTC (link)
Я имел в виду, что это, просто хэш по трехэлементному туплу?

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-13 09:43 am UTC (link)
в первом приближении - да. там есть ньюансы, так как для каждой {customer, key} нужно иметь возможность адресовать вектор {resource}. но вообще — да, в эту сторону.

(Reply to this) (Parent)


[info]sidentdv
2007-12-12 03:19 pm UTC (link)
Не вопрос, тот же смсц, хотбиллинг (там тысячи).
Хотя конечно можно все это косвенно отнести к финприложениям.
Собсно к тому что майскля это то что пытаются впихнуть туда, куда не стоит и то что вебом все не заканчивается.

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-12 03:25 pm UTC (link)
финприложения, адназначна. особенно биллинг.

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

(Reply to this) (Parent)(Thread)


[info]sidentdv
2007-12-12 03:39 pm UTC (link)
Уху, еще то время было.
Собсно про что и речь,задачи+задачи+голова, а то у нас же как привыкли, либо с пушки по воробьям(калькулятор на оракле), либо что серебрянную пулю нашли и натягивают ее везде(про майсклю)...

(Reply to this) (Parent)


[info]kurilka
2007-12-12 04:10 pm UTC (link)
Я извиняюсь, но что есть "смсц"?

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-12 04:12 pm UTC (link)
SMSC, SMS Center. Программно-аппаратная платформа для приёма и форвардинга SMS'ок, которыми народ друг другу мозги забивает. Требуется операторам сотовой связи.

(Reply to this) (Parent)(Thread)


[info]kurilka
2007-12-12 04:16 pm UTC (link)
Ага, я так и подумал, а из диалога это явно не следовало :)

(Reply to this) (Parent)


[info]kurilka
2007-12-12 03:07 pm UTC (link)
Ммм, откуда про 2 гига?
Вот тут про другое речь - http://www.couchdbwiki.com/index.php?title=CouchDb_FAQ#How_much_stuff_can_I_store_in_CouchDB.3F
Про мнезию есть ограничение в 2 гига в следствие использования ets.
Которое, кстати, несколько обходится фрагментированием.

(Reply to this) (Parent)(Thread)


[info]sidentdv
2007-12-12 03:13 pm UTC (link)
Про 2 гига с линка, который Лев дал.

Due to a current limitation in the Erlang/OTP filesystem driver a
CouchDB database file can not grow beyond 2 gigabytes in size. This is not a limitation in CouchDB itself, but in the standard library it uses. This problem will be addressed in a future release.

(Reply to this) (Parent)(Thread)


[info]kurilka
2007-12-12 03:55 pm UTC (link)
А, блин, на первой странице :)
Внутри не ковырялся, но думаю что исходные заморочки что и у мнезии - ограничения ets (Erlang Term Storage)

(Reply to this) (Parent)


[info]kurilka
2007-12-12 02:20 pm UTC (link)
Не совсем понял как они на чистом эрланге в 2 раза быстрей плюсов сделали?
Хотя напоминает сфероконя - к сожалению не всё можно порешать на чистом эрланге, ну и от задачи очень зависит.

(Reply to this) (Thread)


[info]lionet
2007-12-12 02:32 pm UTC (link)
Ну ты знаешь, писать можно по-разному. Вон Apache пишут на чистом C, и из-за того что там проблемы с memory leaks и core dumps, даже сейчас основной моделью является worker processes и memory pool. То есть, порождаем кучу процессов, если один кирдыкнется — перезапустим. А внутри процесса позволяем memory leaks плодиться и размножаться, но только до конца реквеста. В конце реквеста просто подтираем пул.

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

Вот кстати релевантный слайд по поводу того, сколько кода в C++ уходило на maintenance а сколько — собственно на решение задачи:


(Reply to this) (Parent)(Thread)


[info]kurilka
2007-12-12 02:39 pm UTC (link)
Странно, что у них defeinsive в эрланге совсем отсутствует, если процесс "сдох", то его перезапустить кто-то ведь должен, или есть какая-то "магия"? :)

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-12 02:46 pm UTC (link)
-behavior(supervisor)., наверное. если он там у них один, то он просто в пикселах мог затеряться по количеству строк кода.

(Reply to this) (Parent)(Thread)


[info]kurilka
2007-12-12 02:49 pm UTC (link)
Ну да, наверное так :)

(Reply to this) (Parent)


[info]alexott
2007-12-12 02:56 pm UTC (link)
интересные данные

(Reply to this)


[info]squadette
2007-12-12 07:35 pm UTC (link)
каждый раз когда я читаю о твоих достижениях, у меня возникает ощущение, что "что-то я делаю не так".

(Reply to this) (Thread)


[info]lionet
2007-12-13 12:49 am UTC (link)
ну судя по тому что куча моих прорывов базируется на том, что я подцепил от или прочитал у тебя, то ты — гигант, а я просто сижу на твоих плечах.

(Reply to this) (Parent)


[info]wadcom
2007-12-12 09:54 pm UTC (link)
Интересно :-)

Но все pet projects как назло прекрасно решаются питоном. А на работе — не поймут, дикари-с. :-)

(Reply to this) (Thread)


[info]lionet
2007-12-13 04:10 am UTC (link)
Ну если пет-проджектам не нужно работать 24/7 (серверы-раздатчики-коллекторы), то тогда действительно Erlang будет не пришей кобыле хвост — неудобно утилиты на нём писать, даже через #!/usr/bin/env escript.

В этом случае лучше Haskell подойдёт ;)

(Reply to this) (Parent)(Thread)


[info]wadcom
2007-12-13 07:46 pm UTC (link)
...а что, Оля уже умеет патчить хакселл-код? :-)

"...чтобы легко и быстро написать ... на Хаскелле..." (c) vlm :-)

Слишком высокий барьер входа. Написал я утилитку — и что, мне теперь для каждой системы package делать? Или заставлять юзеров ставить себе хаскелл и стягивать нужные библиотеки?

Хорошо, когда это только in-house должно работать, или когда пользователи — гики. В остальных случаях все же Питон (или Руби, ведь он тоже щас на маке предустановлен? ;-)).

Иначе получается, что время, сэкономленное на написании кода, начинает расходоваться на его поддержку (не в смысле баги ловить, а в смысле пекеджинг+распространение).

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-13 08:06 pm UTC (link)
Да понятно, что каждой бочке — своя затычка. И не о распространении утилиток речь. Просто "Haskell allows me to write better program in other languages" ;)

btw, Оля питон не умела до тех пор пока патчить твой код не пришлось. Надо стало — разобралась :)

(Reply to this) (Parent)(Thread)


[info]wadcom
2007-12-15 12:30 am UTC (link)
"Haskell allows me to write better program in other languages"

Угу, на Эрланге, например :-)

После процедурных языков любой функциональный разворачивает мозги; у меня таким был лисп, например. То есть не в Хаскелле дело, а в парадигме. :-)

btw, Оля питон не умела до тех пор пока патчить твой код не пришлось. Надо стало — разобралась :)

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

(Reply to this) (Parent)(Thread)


[info]lionet
2007-12-15 12:59 am UTC (link)
Ну всё же есть разница в статически типизированном функциональном языке и в нетипизированном. То есть, после лиспа тебе Эрланг особо не нужен, нужен Хаскель :)

(Reply to this) (Parent)


Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…