# Понедельник 40 твитов
Всем привет! Мы начинаем новую неделю и с вами @KernelMadness
13:10Для начала о себе: я руковожу разработкой в компании CrowdSystems. Мы делаем краудсорсинг, аналитику, и работаем с большими объемами данных
13:14На этой неделе я планирую поговорить с вами про производительность Ruby, построение больших систем и будущее веб-разработки
13:15@rubyunderhood А что у вас на Руби написано/ за что отвечает?
Да практически все. Как это работает - расскажу попозже :) twitter.com/pinyslutty/sta…
13:18@rubyunderhood насколько большими?
В разных блоках по разному. В аналитике это десятки миллионов записей в выборке одного отчета. twitter.com/SiliconBangalo…
13:20@rubyunderhood Стандартный вопрос: что посоветуете почитать/курсы/подходы новичкам, которые учат Ruby/ Ruby on Rails
CodeSchool + менторство зрелого рубиста. И как вариант - mkdev twitter.com/pinyslutty/sta…
13:22@rubyunderhood по нынешним меркам это не очень большие объёмы, как мне кажется
Я и не говорил это мы работаем с ОЧЕНЬ большими данными) Но маленькими это не назовешь. twitter.com/SiliconBangalo…
13:23Давайте проголосуем, как вы решаете вопросы с производительностью в Ruby?
13:29Пока вы голосуете, хочу сказать вот что: Ruby совершенно замечательный язык, красивый и гибкий. Но эта гибкость обходится очень дорого.
13:32Как показывает практика, серьезные алгоритмы в нем лучше не реализовывать. Работа с памятью и объектами далеко не быстрая.
13:34Иногда спасают альтернативные реализации, но даже они вынуждены тащить с собой всю сложность языка и прирост скорости там не капитальный
13:35Для наших целей мы стараем все сложные манипуляции с данными проводить в SQL, и это работает. Postgres делает это очень эффективно.
13:37В Ruby мы производим сборку запроса и БД его исполняет. И да, многостраничные простыни у нас не редкость :)
13:38@rubyunderhood а где хранятся? PG/MongoDB/ES или что-то еще?
Postgresql twitter.com/ajieks/status/…
13:38@rubyunderhood ну как, в телефон теперь такое вполне помещается
Дело не в том куда это помещается, а как с этим работать в реальном времени производя вычисления twitter.com/SiliconBangalo…
15:05Если у вас есть опыт работы с большими данными - поделитесь! Что использовали, какие объемы?
15:22@rubyunderhood хадуп, спарк, десятки петабайт
privateblog.referralcandy.com/wp-content/upl… twitter.com/SiliconBangalo…
17:48@rubyunderhood использовал logit для 100кб данных - это биг дата или не биг ?
Еще один повод отказаться от выражения Big Data :) twitter.com/ipronix/status…
17:50@oleg_antonyan @rubyunderhood все так. но сколько народу на таком вопросе фантазировать начинают :) у меня был проект 2 часа реалтайт :)
Словоблудие это уже) В данном случае реалтайм это получение результата в рамках загрузки страницы. Не микросекунды. twitter.com/ipronix/status…
17:52Давайте проголосуем, как вы решаете вопросы с производительностью в Ruby?
Напоминаю что чуть ниже у нас тут есть опрос про производительность twitter.com/rubyunderhood/…
17:54@rubyunderhood словоблудие - лезть со своими загрузками страницы
А это уже агрессия twitter.com/ipronix/status…
17:58Одна из важнейших составляющих производительности в Ruby - это его GC. И это я бы хотел обсудить с вами, уважаемые фолловеры.
18:44На прошедшем Ruby-митапе в Рамблере был отличный доклад про устройство GC. К сожалению нет видео под рукой, может у кого то есть ссылка?
18:47В дополнение к предыдущему, вот еще один доклад от Тимофея Цветкова youtube.com/watch?v=iGlcG4…
18:51Эти 2 доклада позволяют понять, как работает GC в Ruby. Если в кратце, то лучше чем раньше. Но все равно не ок :)
18:53В итоге, это приводит к тому что сложные приложения потребляют память гигабайтами. Как бороться? Есть несколько способов, но об этом далее
18:56Самое простое - unicorn-worker-killer и его аналоги. Работает просто - перезапукает ruby-процесс по достижению лимита памяти
18:57Следующий этап - разобраться в вашем коде. Злоупотребление гемами, неоптимальные алгоритмы - это все замедляет ваше приложение.
19:00Зачастую некоторые вещи лучше и проще написать самому, чем тащить в проект непонятные блекбоксы с кучей зависимостей
19:01@rubyunderhood простые тоже могут жрать непомерно много
Да, все так. Особенно если притащить в проект пятерку модных гемов :) twitter.com/vchukhantsev/s…
19:02@rubyunderhood профайлеры наше все в таком случае19:03
Про профайлинг - неизбежная мера, если нужно работать с тем что есть. Сжирает кучу времени и нервов, но докопаться до истины можно
19:04Далее, тюнинг GC. Довольно забавное занятие, учитывая что нормальный GC вообще не должен о себе напоминать... Но, наш GC очень простой
19:06И в нем можно разобраться. После прослушивания тех двух докладов про GC его переменные обретают вполне конкретный смысл
19:07Про альтернативные реализации: JRuby, Rubinius. Я не сторонник таких средств, но в JRuby родной GC от JVM внушает уважение.
19:11Можно пробовать, если в проекте нет зависимостей от расширений на C для MRI.
19:12@rubyunderhood на fosdem2016 был хороший доклад про тюнинг GC.
Скоро видео будет.
fosdem.org/2016/schedule/…
Ждем видео) twitter.com/gaar4ica/statu…
19:18Что думаете насчет ActionCable? Кто пробовал уже?
20:04# Вторник 5 твитов
Доброе утро, рубисты! Давайте сегодня поговорим о вебсокетах и все что связано с этими
11:20Что вы используете для реализации сокетов? Faye? ActionCable? Другое решение? Возможно даже на другом языке
11:21@rubyunderhood так уже выяснили, что можно без них жить прекрасно11:32
samsaffron.com/archive/2015/1…
@rubyunderhood чаще всего использую обычный em и руками все пишу11:32
@rubyunderhood Faye15:28
# Среда 11 твитов
@rubyunderhood В попытках собрать комьюнити в Харькове facebook.com/groups/rubykh/ . Цель - пить пиво и общение. Прошу репост.11:25
Доброе утро, чат. Давайте сегодня обсудим вопрос разбухания наших любимых рельсовых приложений
11:27Думаю, у каждого была ситуация когда приложение вырастало до нереальных размеров, начинало грузиться минутами и жрать память гигабайтами
11:28И как обычно это приложение активно используется в продакшене, надо поддерживать в нем жизнь и дорабатывать дальше
11:30Что делать в этой ситуации? Оптимизировать то что есть, разделять на микросервисы? Поделитесь своим опытом
11:31А пока что голосовалка.
Ваш проект:
@rubyunderhood не хватает 4-го пункта: жирные и медленные микросервисы :D
Напалм 😂 twitter.com/oleg_antonyan/…
11:48@rubyunderhood мне кажется - разделять. Ну я стараюсь разделять еще до того, как все выходит из под контроля.11:57
@rubyunderhood ну + когда разделяешь - руки свободны, не обязательно rails, не обязательно ruby
Отличная тема, нагруженную часть можно написать например на Go twitter.com/jesteracer/sta…
11:58@rubyunderhood ага. Ну я пишу на elixir всякое такое.
+1 в нашу секту) twitter.com/jesteracer/sta…
12:51Я опубликовал "Надежный деплой Rails приложений" :) Принимаю критику, поздравления, вопросы и пожелания :) bit.ly/20vPan212:52
# Пятница 30 твитов
#msk @rubyunderhood Посоветуйте какой-нибудь комфортный #coworking . С общительным людьми, которые умеют не мешать. До поздна.
На нагатинской раньше был неплохой twitter.com/pismenny/statu…
11:16Друзья, а поделитесь кто что использует для обработки очередей? И почему?
13:48@rubyunderhood обработки или хранения?
Обработка. Ну и бекенд для хранения тоже можно упомянуть) twitter.com/fodoj/status/6…
13:58@rubyunderhood последний раз вот так делал bytes.babbel.com/en/articles/20…14:03
@rubyunderhood на mkdev все проще (чай не десятки тысяч событий в минуту) - sidekiq.14:06
@rubyunderhood, Active Job + Sidekiq + Redis - в моих проектах хватает с головой, очереди небольшие и легкообрабатываемые14:14
Sidekiq - хорошая штука. А что насчет утечек памяти, есть проблемы?
14:15@rubyunderhood перевели все на sidekiq около пол года назад, около 10+ api, полет ок15:27
@rubyunderhood для общения основного апп с серисами rabbitmq. На микросервисах сникерсы слушают и отвечают15:27
@pstepchenko @rubyunderhood да, могу рассказать, задавайте вопросы, постараюсь ответить :)15:52
@rubyunderhood утечки только от плагинов. Основной код вылизан хорошо :)
На простых тасках он как правило не течет, но проблема в том что нет механизма очистки после тяжелых задач twitter.com/anton_davydov/…
15:52@rubyunderhood тогда проблема не в сайдкике, а в твоём коде, который у тебя в воркерах течет :)
Ну тут можно удариться в дискуссию о том почему GC не работает и тд :D
В общем долго и сложно это отлаживать twitter.com/anton_davydov/…
У кого был опыт решения проблем с текучкой памяти/производительностью путем перехода на другие языки? Elixir/Go/Etc. Поделитесь опытом?
16:18@rubyunderhood обычно на руби и решал утечку памяти :)
Ты монстр профайлинга, тебе не лень :) Просто зачастую легче какой то геморройный блок переписать twitter.com/anton_davydov/…
16:31@anton_davydov @POS_troi @rubyunderhood на словах ты лев толстой!16:39
@rubyunderhood расскажи про аналитику в Crowdsystems, какие задачи решаете? Как решаете их? Что есть интересного?
Из недавнего - заставить рельсовое приложение эффективно отдавать результат большой выборки из бд, 1M записей twitter.com/killthekitten/…
17:02@rubyunderhood и при этом клиентская часть должна это переварить)
17:03И кстати да, мы сейчас активно хантим умных ребят! Ищем тех, кто опытен в руби, но не ограничивается им и знает что то еще: Elixir/Go/Node.
17:08Так что если вам надоело работать на текущем месте и вы хотите писать крутые штуки - напишите мне @KernelMadness
17:09@rubyunderhood ага, все так говорят, а потом "подвинь вот тут кнопочку на форме. *спустя неделю* А не, подвинь обратно".Без обид :)
Работа это не только кайф от крутых технологий, но и рутина. Эта кнопочка ведь действительно кому-то нужна) twitter.com/mr_the/status/…
17:12А еще мы очень любим SQL, и активно эксплуатируем наши базы. По опыту, 95% рубистов которые к нам приходили, не знали ничего сложнее JOIN
17:17Но мы любим учить, и поэтому уже через несколько месяцев они спокойно пишут большие оптимизированные запросы с агрегациями, оконками, и тд
17:18@rubyunderhood не, а в целом? Какого рода данные, какую аналитику строите и т.п.
Тут придется углубиться ооочень далеко, в паре фраз не расскажешь. Либо надо конкретнее) twitter.com/killthekitten/…
17:26@rubyunderhood отдельный вопрос – какое участие в этом принимает руби? С анализом данных в руби исторически все плохо.
Практически никакое. Весь анализ данных происходит в Postgres, в ruby мы лишь конструируем запросы и рендерим ответ twitter.com/killthekitten/…
18:06Производить какие-либо вычисление в ruby практически невозможно. Его предназначение - перекладывать данные из одного места в другое
18:07@rubyunderhood как команда разработки участвует в интерпретации результатов опросов? Насколько автоматизированы исследования?
Мы не интерпретируем их, для этого у нас есть команда аналитиков. twitter.com/killthekitten/…
18:08Данные, которые мы собираем, проходят цикл, в течении которого специально обученные люди валидируют их и готовят для показа клиентам.
18:09@rubyunderhood какой профит от использования вашей технологической платформы получает компания, заказывающая у вас исследования?
В первую очередь широкий охват территории twitter.com/killthekitten/…
18:10В силу техпроцесса, мы имеем возможность за адекватные деньги дать много данных по всей стране.
18:11# Воскресенье 1 твит
Дорогие рубисты, наше с вами время подходит к концу. Эту неделю провел @KernelMadness, было круто со всеми пообщаться!
21:59# Ссылки
other
- http://privateblog.referralcandy.com/wp-content/uploads/2014/03/obama-not-bad.jpeg
- https://www.youtube.com/watch?v=iGlcG4Oj-40
- https://www.nateberkopec.com/2015/08/05/rack-mini-profiler-the-secret-weapon.html
- https://samsaffron.com/archive/2015/12/29/websockets-caution-required
- https://www.facebook.com/groups/rubykh/
- http://bit.ly/20vPan2
- http://bytes.babbel.com/en/articles/2015-09-01-aws-data-pipeline.html