KernelMadness

8 февраля 2016, Moscow, Russia

# Понедельник 40 твитов

Всем привет! Мы начинаем новую неделю и с вами @KernelMadness

10:10

Для начала о себе: я руковожу разработкой в компании CrowdSystems. Мы делаем краудсорсинг, аналитику, и работаем с большими объемами данных

10:14

На этой неделе я планирую поговорить с вами про производительность Ruby, построение больших систем и будущее веб-разработки

10:15
@rubyunderhood А что у вас на Руби написано/ за что отвечает?

Да практически все. Как это работает - расскажу попозже :) twitter.com/pinyslutty/sta…

10:18
@rubyunderhood насколько большими?

В разных блоках по разному. В аналитике это десятки миллионов записей в выборке одного отчета. twitter.com/SiliconBangalo…

10:20
@rubyunderhood Стандартный вопрос: что посоветуете почитать/курсы/подходы новичкам, которые учат Ruby/ Ruby on Rails

CodeSchool + менторство зрелого рубиста. И как вариант - mkdev twitter.com/pinyslutty/sta…

10:22
@rubyunderhood по нынешним меркам это не очень большие объёмы, как мне кажется

Я и не говорил это мы работаем с ОЧЕНЬ большими данными) Но маленькими это не назовешь. twitter.com/SiliconBangalo…

10:23

Давайте проголосуем, как вы решаете вопросы с производительностью в Ruby?

10:29

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

10:32

Как показывает практика, серьезные алгоритмы в нем лучше не реализовывать. Работа с памятью и объектами далеко не быстрая.

10:34

Иногда спасают альтернативные реализации, но даже они вынуждены тащить с собой всю сложность языка и прирост скорости там не капитальный

10:35

Для наших целей мы стараем все сложные манипуляции с данными проводить в SQL, и это работает. Postgres делает это очень эффективно.

10:37

В Ruby мы производим сборку запроса и БД его исполняет. И да, многостраничные простыни у нас не редкость :)

10:38
@rubyunderhood а где хранятся? PG/MongoDB/ES или что-то еще?

Postgresql twitter.com/ajieks/status/…

10:38
@rubyunderhood ну как, в телефон теперь такое вполне помещается

Дело не в том куда это помещается, а как с этим работать в реальном времени производя вычисления twitter.com/SiliconBangalo…

12:05

Если у вас есть опыт работы с большими данными - поделитесь! Что использовали, какие объемы?

12:22
@rubyunderhood использовал logit для 100кб данных - это биг дата или не биг ?

Еще один повод отказаться от выражения Big Data :) twitter.com/ipronix/status…

14:50
@oleg_antonyan @rubyunderhood все так. но сколько народу на таком вопросе фантазировать начинают :) у меня был проект 2 часа реалтайт :)

Словоблудие это уже) В данном случае реалтайм это получение результата в рамках загрузки страницы. Не микросекунды. twitter.com/ipronix/status…

14:52
Давайте проголосуем, как вы решаете вопросы с производительностью в Ruby?

Напоминаю что чуть ниже у нас тут есть опрос про производительность twitter.com/rubyunderhood/…

14:54
@rubyunderhood словоблудие - лезть со своими загрузками страницы

А это уже агрессия twitter.com/ipronix/status…

14:58

Одна из важнейших составляющих производительности в Ruby - это его GC. И это я бы хотел обсудить с вами, уважаемые фолловеры.

15:44

На прошедшем Ruby-митапе в Рамблере был отличный доклад про устройство GC. К сожалению нет видео под рукой, может у кого то есть ссылка?

15:47

В дополнение к предыдущему, вот еще один доклад от Тимофея Цветкова youtube.com/watch?v=iGlcG4…

15:51

Эти 2 доклада позволяют понять, как работает GC в Ruby. Если в кратце, то лучше чем раньше. Но все равно не ок :)

15:53

В итоге, это приводит к тому что сложные приложения потребляют память гигабайтами. Как бороться? Есть несколько способов, но об этом далее

15:56

Самое простое - unicorn-worker-killer и его аналоги. Работает просто - перезапукает ruby-процесс по достижению лимита памяти

15:57

Следующий этап - разобраться в вашем коде. Злоупотребление гемами, неоптимальные алгоритмы - это все замедляет ваше приложение.

16:00

Зачастую некоторые вещи лучше и проще написать самому, чем тащить в проект непонятные блекбоксы с кучей зависимостей

16:01
@rubyunderhood простые тоже могут жрать непомерно много

Да, все так. Особенно если притащить в проект пятерку модных гемов :) twitter.com/vchukhantsev/s…

16:02
@rubyunderhood профайлеры наше все в таком случае
16:03

Про профайлинг - неизбежная мера, если нужно работать с тем что есть. Сжирает кучу времени и нервов, но докопаться до истины можно

16:04

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

16:06

И в нем можно разобраться. После прослушивания тех двух докладов про GC его переменные обретают вполне конкретный смысл

16:07

Про альтернативные реализации: JRuby, Rubinius. Я не сторонник таких средств, но в JRuby родной GC от JVM внушает уважение.

16:11

Можно пробовать, если в проекте нет зависимостей от расширений на C для MRI.

16:12
@rubyunderhood на fosdem2016 был хороший доклад про тюнинг GC.
Скоро видео будет.
fosdem.org/2016/schedule/…

Ждем видео) twitter.com/gaar4ica/statu…

16:18

Что думаете насчет ActionCable? Кто пробовал уже?

17:04

# Вторник 5 твитов

Доброе утро, рубисты! Давайте сегодня поговорим о вебсокетах и все что связано с этими

8:20

Что вы используете для реализации сокетов? Faye? ActionCable? Другое решение? Возможно даже на другом языке

8:21
@rubyunderhood так уже выяснили, что можно без них жить прекрасно
samsaffron.com/archive/2015/1…
8:32
@rubyunderhood чаще всего использую обычный em и руками все пишу
8:32

# Среда 11 твитов

@rubyunderhood В попытках собрать комьюнити в Харькове facebook.com/groups/rubykh/ . Цель - пить пиво и общение. Прошу репост.
8:25

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

8:27

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

8:28

И как обычно это приложение активно используется в продакшене, надо поддерживать в нем жизнь и дорабатывать дальше

8:30

Что делать в этой ситуации? Оптимизировать то что есть, разделять на микросервисы? Поделитесь своим опытом

8:31

А пока что голосовалка.
Ваш проект:

8:33
@rubyunderhood не хватает 4-го пункта: жирные и медленные микросервисы :D

Напалм 😂 twitter.com/oleg_antonyan/…

8:48
@rubyunderhood мне кажется - разделять. Ну я стараюсь разделять еще до того, как все выходит из под контроля.
8:57
@rubyunderhood ну + когда разделяешь - руки свободны, не обязательно rails, не обязательно ruby

Отличная тема, нагруженную часть можно написать например на Go twitter.com/jesteracer/sta…

8:58
@rubyunderhood ага. Ну я пишу на elixir всякое такое.

+1 в нашу секту) twitter.com/jesteracer/sta…

9:51
Я опубликовал "Надежный деплой Rails приложений" :) Принимаю критику, поздравления, вопросы и пожелания :) bit.ly/20vPan2
9:52

# Пятница 30 твитов

#msk @rubyunderhood Посоветуйте какой-нибудь комфортный #coworking . С общительным людьми, которые умеют не мешать. До поздна.

На нагатинской раньше был неплохой twitter.com/pismenny/statu…

8:16

Друзья, а поделитесь кто что использует для обработки очередей? И почему?

10:48
@rubyunderhood обработки или хранения?

Обработка. Ну и бекенд для хранения тоже можно упомянуть) twitter.com/fodoj/status/6…

10:58
@rubyunderhood последний раз вот так делал bytes.babbel.com/en/articles/20…
11:03
@rubyunderhood на mkdev все проще (чай не десятки тысяч событий в минуту) - sidekiq.
11:06
@rubyunderhood, Active Job + Sidekiq + Redis - в моих проектах хватает с головой, очереди небольшие и легкообрабатываемые
11:14

Sidekiq - хорошая штука. А что насчет утечек памяти, есть проблемы?

11:15
@rubyunderhood перевели все на sidekiq около пол года назад, около 10+ api, полет ок
12:27
@rubyunderhood для общения основного апп с серисами rabbitmq. На микросервисах сникерсы слушают и отвечают
12:27
@pstepchenko @rubyunderhood да, могу рассказать, задавайте вопросы, постараюсь ответить :)
12:52
@rubyunderhood утечки только от плагинов. Основной код вылизан хорошо :)

На простых тасках он как правило не течет, но проблема в том что нет механизма очистки после тяжелых задач twitter.com/anton_davydov/…

12:52
@rubyunderhood тогда проблема не в сайдкике, а в твоём коде, который у тебя в воркерах течет :)

Ну тут можно удариться в дискуссию о том почему GC не работает и тд :D
В общем долго и сложно это отлаживать twitter.com/anton_davydov/…

13:16

У кого был опыт решения проблем с текучкой памяти/производительностью путем перехода на другие языки? Elixir/Go/Etc. Поделитесь опытом?

13:18
@rubyunderhood обычно на руби и решал утечку памяти :)

Ты монстр профайлинга, тебе не лень :) Просто зачастую легче какой то геморройный блок переписать twitter.com/anton_davydov/…

13:31
@anton_davydov @POS_troi @rubyunderhood на словах ты лев толстой!

😂 twitter.com/killthekitten/…

13:39
@rubyunderhood расскажи про аналитику в Crowdsystems, какие задачи решаете? Как решаете их? Что есть интересного?

Из недавнего - заставить рельсовое приложение эффективно отдавать результат большой выборки из бд, 1M записей twitter.com/killthekitten/…

14:02

@rubyunderhood и при этом клиентская часть должна это переварить)

14:03

И кстати да, мы сейчас активно хантим умных ребят! Ищем тех, кто опытен в руби, но не ограничивается им и знает что то еще: Elixir/Go/Node.

14:08

Так что если вам надоело работать на текущем месте и вы хотите писать крутые штуки - напишите мне @KernelMadness

14:09
@rubyunderhood ага, все так говорят, а потом "подвинь вот тут кнопочку на форме. *спустя неделю* А не, подвинь обратно".

Без обид :)

Работа это не только кайф от крутых технологий, но и рутина. Эта кнопочка ведь действительно кому-то нужна) twitter.com/mr_the/status/…

14:12

Но если честно, я уже забыл когда мы в последний раз двигали кнопки @mr_The, кроме шуток

14:13

А еще мы очень любим SQL, и активно эксплуатируем наши базы. По опыту, 95% рубистов которые к нам приходили, не знали ничего сложнее JOIN

14:17

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

14:18
@rubyunderhood не, а в целом? Какого рода данные, какую аналитику строите и т.п.

Тут придется углубиться ооочень далеко, в паре фраз не расскажешь. Либо надо конкретнее) twitter.com/killthekitten/…

14:26
@rubyunderhood отдельный вопрос – какое участие в этом принимает руби? С анализом данных в руби исторически все плохо.

Практически никакое. Весь анализ данных происходит в Postgres, в ruby мы лишь конструируем запросы и рендерим ответ twitter.com/killthekitten/…

15:06

Производить какие-либо вычисление в ruby практически невозможно. Его предназначение - перекладывать данные из одного места в другое

15:07
@rubyunderhood как команда разработки участвует в интерпретации результатов опросов? Насколько автоматизированы исследования?

Мы не интерпретируем их, для этого у нас есть команда аналитиков. twitter.com/killthekitten/…

15:08

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

15:09
@rubyunderhood какой профит от использования вашей технологической платформы получает компания, заказывающая у вас исследования?

В первую очередь широкий охват территории twitter.com/killthekitten/…

15:10

В силу техпроцесса, мы имеем возможность за адекватные деньги дать много данных по всей стране.

15:11

# Воскресенье 1 твит

Дорогие рубисты, наше с вами время подходит к концу. Эту неделю провел @KernelMadness, было круто со всеми пообщаться!

18:59

other