Алекс Рыбаков

Алекс Рыбаков

Темы
Неделя
Oct 5, 2015 → Oct 11, 2015

Архив недели @flackus

Понедельник


На этой неделе с вами @flackus. Петербуржец, разработчик интерфейсов в Яндексе. Делаем рантайм на node.js и бухаем винчик.

Про БЭМ, йогу и аджайл ничего не будет, но могу подсказать хорошие бары в Питере. Ну или про машины спрашивайте.

Буду активно использовать местоимение “мы”. Я-то сам вообще туповат, просто вокруг собрались умные люди.

Сегодня будет немного технических подробностей, про клиентскую часть рассказа не будет (я же обещал без бэма).

Кстати! Пользуясь случаем, хочу передать привет парням и девчонкам из Пытошной, а также барменам Терминала.

Ну ладно, давайте серьезно. Хочу услышать всех, у кого node.js в продакшене в рантайме. Пишите свой опыт и ссылки на сайты.

Довольно иронично, что именно @twilightfeel является главной движущей силой по node.js в Яндексе. <s>И пьёт как конь.</s>

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

Но в целом всё плохо. Купите портвейн и на набережную (любую).

Главное выбрать набережную с нужной стороны от мостов.

Про серверный JS. Вообще, складывается ощущение, что все мечтают не программировать, а получить чудо-DSL, которые всё сделает за вас.

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

Поясняю для непитерцев про набережные. Мосты разведут и будете куковать. Как в песне Кирпичей pleer.com/tracks/1001489… @gxoptg_

Серега, тебе ли не знать, что эти 10% окажутся из говна и палок, причем палки тоже будут из говна. @knopsh

Про серверный JS слабо бомбануло. ЦА пока слишком мала. Такой же наброс в курилке Яндекса уже привел бы к драке и примирительной пьянке.

Я вот и интересовался про такие проекты на территории СНГ чуть раньше, но пока только "мертвые стартапы". @pepelsbey

Про западные понятно. Linkedin, Walmart, кто-то еще наверняка.

Тогда я немного расскажу. Из сервисов нашей команды на node.js (0.10) работают Яндекс.Авто, Работа, Недвижимость и Путешествия.

Наш опыт разработки рантайма на node.js частично перетёк сюда github.com/nodules Напоминаю про 0.10, но к этому мы еще вернемся.

А еще хипстеры подсказывают, что есть видео: events.yandex.ru/lib/talks/937/ events.yandex.ru/lib/talks/936/

Тут говорили про DSL, так вот у нас до ноды был DSL на XML-синтаксисе, а встроенным в него скриптовым языком был lua. Пхп казался прекрасным

Кстати, если работодатель интересуется опытом XSLT, бегите и уходите в запой.

Тут речь о том, что node.js используется не как вспомогательные скрипты, а как живой веб-сервер, обрабатывающий запросы в реальном времени.

Академическая формулировка тут вряд ли нужна.

Раз уж вспомнили XSLT, держите немного ада stackoverflow.com/questions/4651… Больше лайков, чем у Майкла Кея, ахаха.

Ладно, вернемся к нашим баранам.

В продакшене в пределах одной машины у нас двухуровневая балансировка: round-robin в nginx и дефолтная в node.js clck.ru/9aakp

Поднимать группы воркеров на разных портах/сокетах позволяет github.com/nodules/luster На уровне nginx всё просто wiki.nginx.org/LoadBalanceExa…

В 0.12 по-умолчанию уже round-robin, но в 0.10 и раньше cluster неравномерно распределяет нагрузку по воркерам. clck.ru/9aakx

И если не заморачиваться, то получится примерно такая картинка. Я воркер, я не хочу ничего делать, я хочу фыр-фыр-фыр
notion image

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

Но, как говорится, смотря в будущее, не наступите в старое дерьмецо. Помните про балансировку, а то засмеют.

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

А я пока пойду порисую смешные надписи на котиках.

Семантика в HTML? Лолшто? Мы в 2006 год вернулись, а я не в курсе? Ахахаха. @ki_zu

Я как-то глушил ёрш в Цинике и даже там меня спросили, чё за тема с Яндекс.Баром. Парни, я до сих пор не в курсе, честно. @denysdovhan

Профдеформации не ощущаю. После вебдева? Открою бар или пойду воровать нефть. P.S. Урик, ты зайка. @yuritkachenko

Прочитал в ответах слово "микроформаты", нервно закурил. И Макс Россомахин сразу вспомнился.

Если утка пришла, то это не страшно, главное чтоб по взаимному согласию. А вот если селезень, то я бы напрягся. @twilightfeel

Физические последствия алкоголизма ощущаются и еще как. Но надо держаться и идти к поставленной цели! @toivonens

Не сочтите меня превратно, я просто стараюсь отвечать по порядку. Но это явно никуда не годится, будем фильтровать.

Не вполне уверен, что правильно понял вопрос про микросервисы, но самой архитектуре сервисов что-то похожее (по духу) есть.

Возьмем трехступенчатую архитектуру: клиент - фронтенд - бекенд. Присущая микросервисам атомарность есть прежде всего в бекендах.

Фронтенд собирает нужные для шаблонизации данные из нескольких (иногда более десятка) бекендов-источников. Протокол обычно просто HTTP.

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

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

Даже потеря авторизации пользователя (если это не user-specific страница) является допустимой. Идет деградация ответа до опр-й степени.

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

Да, надо пояснить, что в трехуровневой архитектуре фронтенд это nodejs-слой как раз.

Кеша результатов шаблонизации у нас нет, он нам особо ничего не даёт. Очевидно есть версионированный кеш статики (js/css/картинки).

Также мы кешируем (в мемкеш) те данные, которые мы достаем с бекенда. Естественно, далеко не все и не всегда.

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

В дополнение к предыдущим потокам сознания я наконец приложу картинку для наглядности.
notion image

Грань между фронтом и бекендами довольно тонкая. Но вкратце: На фронте нет тяжелых вычислений (eg, сортировок большого массива данных)

Нет прямой записи данных (например, на диск или в БД) То же отчасти и с чтением. Нет прямых финансовых операций (платежи куда-то)

Как пример, данные об украинских ценах на авто живут в бекендах, а перевод интерфейса на украинский -- полностью дело фронта.

Конкретно у нас в основном Java/Scala. Встречаются плюсы, питон, перл. Бекендов прям бекендов на ноде я не встречал @zilm

Нет, обработки таких изменений без выкладок не происходит. Единственно, что я видел -- правила кеширования могут получаться на лету. @zilm

Для этой цели проще использовать memcached (redis, whatever) на локальном порту, там все продумано и проверено до нас @MaximSukharev

@jsunderhood промисы, генераторы или прочий async?
Промисы. Vow github.com/dfilatov/vow Надо бы, конечно, ковырять блидинг эдж уже. twitter.com/dosyara/status…

@jsunderhood только это не трёхуровневая структура, а четырёх — за бекендом ещё БД
Теоретически она там бесконечноуровневая, но зачем пугать всех и самого себя. twitter.com/maxmaximov/sta…

Прежде чем что-то делать на ноде, очень рекомендую нанять человека, который умеет полный стек. Чтоб научил 200 от 400 отличать хотя бы.

@jsunderhood Давай лучше, как руководитель, в студию мануал «Как рулить группой фронтендеров и не сойти с ума». С бухлом все понятно, а еще?
Нанимать людей умнее себя и не мешать им работать. twitter.com/twilightfeel/s…

Нечего там аргументировать. Там проблема в миграции окружения, а не кода. Это не объяснишь на пальцах, к сожалению. twitter.com/h4/status/65…

На сегодня всё, на посошок NSFW-история про добавление “малюсенькой задачки” в стабильную ветку за день до релиза youtube.com/watch?v=2oRwQ5…

Вторник


@jsunderhood посоветуй хороший портвейн, кстати?)
Мне хватает простого Красного Крымского от Массандры. А так еще Сандеман люблю. twitter.com/neonick/status…

@jsunderhood, расскажи завтра про путь к успеху: от первой строчки кода до <del>меня узнают в барах</del> нынешней работы и команды.
Более чем уверен, что это никому не интересно. twitter.com/pepelsbey/stat…

@jsunderhood когда-то @flackus меня собеседовал, и это было круто, меня не взяли, но дали хороший пендаль в нужном направлении, спасибо)
Приятно слышать. Справедливости ради, недовольных тоже оставалось :) twitter.com/kuksikus/statu…

@jsunderhood полный HTTP стек? Или о чем речь?
Не. Чтобы мог объяснять бывшим верстальщикам про линукс, баш, кеширование, греп логов и т.д. Чуточку от админства. twitter.com/blia/status/65…

@jsunderhood @twilightfeel а как со стажерами? Есть рецепт, как за минимальный срок вырастить разработчика которому не страшно «не мешать»?
Для меня это больная тема. Я не умею, терпения не хватает. Мне проще с кандидатами, которые сами тебя собеседуют. twitter.com/tvii/status/65…

@jsunderhood ой, а давно стали пользователей (клиент) в архитектурные схемы вносить? Или у вас клиент что-то иное обозначает?
Это чтобы не путать клиентский js и серверный. Слово "фронтенд" слишком гибко толкуемо. twitter.com/de_gis/status/…

@jsunderhood и если мы проектирует микросервисы, то атомарность должна быть обеспечена как-либо и во фронте
Например? Про это часто говорят, но я так и не придумал ничего путного да с понятной реализацией. twitter.com/de_gis/status/…

@jsunderhood ноду дебажите console.log'ами?
Логи, таймеры, стресс-тесты, мониторинги (включая проц-диск-память). Прям так чтоб console.log только в разработке. twitter.com/bu1ka_/status/…

@jsunderhood Я думал, речь шла о Node-гуру, а тут совсем другое. Тут вообще не про Node)
Сам node для наших целей вполне понятен. Ошибиться вот в деплое куда проще. bash этот с его кавычками, вот это всё. twitter.com/webholt/status…

@jsunderhood нативные аддоны для ноды не приходилось писать?
Ох. Там вот ниже выясняли, почему сидим на 0.10. Как раз поэтому. Есть плюсовые биндинги, переводить тяжело. twitter.com/raxpost/status…

@jsunderhood т.е. локально реп не разворачиваете и какой-нибудь node-inspector не используете? Только логи, только хардкор
Платформа у нас устоялась, так что редко в кишки лезть приходится. А для дебага бизнес-логики это не нужно. twitter.com/bu1ka_/status/…

@jsunderhood это вот зря вот так вот. Интересные истории всегда интересно почитать.
Я бы согласился, будь история интересной ;) twitter.com/kuzvac/status/…

Coffeescript ненавижу, про meteor ничего не скажу. twitter.com/mamyashev/stat…

@jsunderhood ты гонишь. Это крымское дерьмо с портвейном объединяет только… А нет, вообще ничего не объединяет.
Не согласен. Да и все равно ты после четвертого стакана Сандеман от Агдама не отличишь. twitter.com/mostolovista/s…

Ладно, история из жизни, первая и последняя. В Яндекс меня взяли благодаря тому, что человек, собеседоваваший по JS, болел. Шёл дикий 2007г.

@jsunderhood Извини если уже было. Какие проекты в Я на ноде, только кинопоиск?
Первым крупным был Авто. Сейчас уже почитай половина всех живых, если не больше. twitter.com/raxpost/status…

@jsunderhood а почему на Авто в характеристиках тачек не указан вес?
Указан, когда известен. Пруф: auto.yandex.ru/bmw/3er/368932… twitter.com/beshur/status/…

@jsunderhood полагаю что кусков на coffee в Я исчезающе мало?
Я не видел вообще. Увижу в районе себя -- сожгу. (тире ставить не буду) twitter.com/NightPhobos/st…

Удивлен, что никто не спросил, зачем нам nginx перед node.js. Неужели никто из интереса не посмотрел заголовки упомянутых проектов?

Ну у некоторых лайти еще :) twitter.com/RReverser/stat…

Ненавижу, когда @pepelsbey узнают на Думской и прерывают наш алкогольный угар вопросами про работу. Вадик, привет!

Злободневный вопрос. Если вы из Питера и переехали в Москву, что вами двигало? По мне это так же разумно, как мешать водку с шампанским.

@jsunderhood встречный вопрос: москвичи, не переехавшие в Санкт-Петебург, а что двигает вами?
Ой не надо. Пусть сидят себе, а то еще пробки привезут. twitter.com/listochkin/sta…

@jsunderhood Вы используете ImmutableJS?
Нет. Но боль про extend({}, ...) у нас присутствует. Ребята молодцы. twitter.com/MRinat/status/…

Друзья, посоветуйте, про что рассказать. Кажется, что технические подробности про нашу специфику заходят тяжело :) Хотя кое-что я еще покажу

@jsunderhood разумный вопрос: почему не Redis? :)
Админы любят мемкеш, мы любим админов и не хотим, чтобы админы "любили" нас. Опять же зачем менять проверенное? twitter.com/r3nya/status/6…

@jsunderhood Как происходит micro service orchestration? Есть ли какой-то высокоуровневый DSL для описания и сбора финального response'а?
Есть специфичная схема, вкратце описанная в докладе clck.ru/9b6XC Понять сложнее, чем любой DSL, не спорю. twitter.com/a_kovalev/stat…

@jsunderhood Имеется ли какой-то инструментария для отладки и нахождения блокирующих запросов? Что-то вроде Zipkin blog.twitter.com/2012/distribut… ?
Нет. Если общее ответа стало выше SLA, то виновника сразу видно на графиках, там есть тайминги отдельных операций. twitter.com/a_kovalev/stat…

@jsunderhood расскажи про инструменты ... Что используешь повседневно? :)
Использую iTerm, WebStorm, Developer Tools, Photoshop, VirtualBox. Ну и конечно grep и штопор :) twitter.com/r3nya/status/6…

Я бы тоже с удовольствием послушал :) Особенно, есть ли penalty по производительности по сравнению с. twitter.com/Semenov/status…

@jsunderhood а задавались ли вы таким вопросом - правильно считать что 3% некрофилов приносят 3% прибыли?
Так считать, разумеется, неправильно. Но точно можно предположить, что больше 3% они не приносят. Такая логика. twitter.com/as_Crazy/statu…

@jsunderhood Избавление от какой версии IE принесло наибольшее моральное облегчение?

"Дебажим в продакшене". Моя любимая грабля с http.Agent github.com/nodules/asker#… В 0.12 то же самое, но хоть maxSockets уже Infinity, а не 5.

!!! Я, правда, по старой памяти использую ack beyondgrep.com Но голый grep и правда прошлый день. twitter.com/denji_on/statu…

Погодите немного, сейчас наброшу напоследок и по домам.

Лучшие книги по общению с менеджерами: Понедельник начинается в субботу и Сказка о Тройке.

Это единственные книги про работу (помимо технических), которые стоит читать. Учебник английского еще не помешает.

А аджайлы ваши одна хренота, всё лишь бы не работать. Стендапы у них, блин, камедиклаб прямо.

Среда


проект я выкатил в продакшн там палки из говна и мрак методология простая х**к twitter.com/life_maniac/st…

Единственный разумный способ бороться с тайперрорами — нагрузочное тестирование настоящими запросами.

Про нагрузку и стресс-тесты. Первое, что мы делаем -- совместно с эксплуатацией устанавливаем SLA по времени ответа и точке разладки в RPS.

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

Четверг


@jsunderhood Яндекс.Авто написан на Node.js, PayPal тоже его используют, у ВК IM раньше был на ноде, сейчас не знаю.
Не знал, что Яндекс.Авто на ноде. Спасибо! twitter.com/atrolov/status…

@jsunderhood когда собираетесь начать использовать реакт?
Сейчас, только смузи с маффином допью. twitter.com/yuritkachenko/…

@jsunderhood Привет. Расскажи, какой code style используете, как организован code reviw, какие тесты пишите? Git?
Упрощенный github-flow, ревью в Github Enterprise. Юнит-тесты в основном в библиотеках, mocha/chai/istanbul. twitter.com/vvaddim/status…

Хорошая подборка дотфайлов, до сих пор не могу оторваться dotfiles.github.io

28.08 менеджер (такое бывает) делает пулреквест во фронтенд. 9.09 он же ставит таск "Заканчиваем поддержку IE8". Совпадение? Не думаю.

Это не прикол JS как такового. NaN это валидное значение в вычислениях с плавающей запятой en.wikipedia.org/wiki/NaN twitter.com/killthekitten/…

На волне асинхронности для загрузки всего Джейк увлечённо рассказывает про akdubya.github.io/dustjs/ Стоит смотреть туда? +@jsunderhood
Не думаю, что миру мало императивных шаблонизаторов. Бенчмарк на github pages валится с ошибкой :) twitter.com/webstandards_u…

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

@jsunderhood Высыпаешься?
Последнее время да. Хотя покупка нового иксбокса чуть не стала фатальной. twitter.com/webholt/status…

@jsunderhood опиши факап недели? danluu.com/postmortem-les…
Я сразу вспомнил случай, как в названии метода counter кто-то оставил русскую букву "c". Но это давно было. twitter.com/ya_pulser/stat…

Вот про это почти ничего не знаю. На фронтенде мы такой аутентификации самостоятельно не делаем. twitter.com/eekhabarov/sta…

@jsunderhood сколько книг связанных с работой ты прочитал за последние 3-6-12 месяцев? Или только "каттинг едже ака твиттер читаю"
Сейчас понял, что ни одной. Пора делать профессиональное харакири. twitter.com/ya_pulser/stat…

Про жизнь не буду. Можно задавать конкретные вопросы про: работу машины музыку Питер алкоголь

@jsunderhood перевешивает ли удобство гитхаба его стоимость для приватных реп?
Однозначно. Я с ужасом вспоминаю Crucible и иже с ними. twitter.com/marinintim/sta…

@jsunderhood что может быть лучше чем смешать стаут и егерь?
Никогда не мешать стаут и егерь. Я не помню точной причины, но четко помню свои выводы. twitter.com/shuvalov_anton…

@jsunderhood куда и как расти?
У меня нет серебряной пули на этот вопрос. Я сам им задаюсь. twitter.com/marinintim/sta…

@jsunderhood сколько живет js либа? 3-6-12 месяцев? помнишь jquery? Есть ли реюз кода или от старого только строчка copyright остается?
jQuery живее всех. С перехода на Vow (а это было давно) я и не помню, чтобы мы меняли библиотеки. Но писали свои, да twitter.com/ya_pulser/stat…

@jsunderhood а ты пишешь код как тимлид?

@jsunderhood ром, водка или егерь?
Ничего из этого. Вино, портвейн, пиво, джин. Ну ладно, пусть будет водка, наливай! twitter.com/kuzvac/status/…

@jsunderhood уже какую неделю всех вокруг мучаю про i18n без коитуса с кодом. Есть что?
Бэм :) Сама система для переводчиков и ко -- проприетарная и самописная. Говорят, что внутри git, но не проверял. twitter.com/slonoed/status…

@jsunderhood Можно на машину установить другое кресло? Это очень дорого? Мне в моем кресле неудобно.
Думаю, что на крыше сидеть будет неудобно. Внутрь можно, но у разных машин разные варианты и бюджет. twitter.com/toivonens/stat…

@jsunderhood увидел) а сколько человек в команде?
Сейчас 11 разработчиков. Еще пара бы не помешала. twitter.com/shuvalov_anton…

@jsunderhood бывало такое, что надо обновить библиотеку(и), а там уже обратная совместимость сломана, либа по всему проекту? Что делать?
Не обновлять. Забрать нужный дифф руками. twitter.com/kuksikus/statu…

@jsunderhood Приезжай к нам, в Екат, нальём водки Екатеринбург. Наш виншампанкомбинат делает. pic.twitter.com/jz7Grym0Uk
Обязательно. Закусим майонезом ;) twitter.com/kuzvac/status/…

Не знаю. Давайте попросим помощи зала, интересно. twitter.com/int16h/status/…

@jsunderhood твоя машина сейчас, твоя машина в будущем
BMW E90 325i. Дальше пока не знаю, возможно купер или E92. twitter.com/beshur/status/…

Ждём, когда @pepelsbey взашей погонят из Европы. twitter.com/iamale_ru/stat…

@jsunderhood а если надо на мажорную версию? Не обновлять?
Планировать, втыкать рефакторинг между релизами, терпеть как дед терпел, паниковать, снова паниковать, выпить. twitter.com/kuksikus/statu…

@jsunderhood ревью в гитхабе больше чем на 5 строк тот еще ад. Crucible хоть и убог, но хоть что-то может.
Сатану он вызвать может, это да. Гитхаб как швейцарский нож, не надо бурить им скважины. twitter.com/dosyara/status…


@jsunderhood Ну что, когда уже на Марс полетим?
<del>Чо, вдвоём?</del> Думаю, что Илон Маск наша последняя надежда. Марс уже кажется научной фантастикой. twitter.com/psyw/status/65…

Да пофиг, у меня был акцент 1.5 и я был не менее счастлив, чем сейчас. Хотя, блин, как же поёт рядная шестерка... twitter.com/Semenov/status…

Пятница


Пока да. Рано или поздно останется только один браузерный движок, куда засунут всё, что захотят. twitter.com/GoodMilkMan/st…

Худшее, что вы можете делать на собеседовании, — просить нарисовать табличку вроде такой dorey.github.io/JavaScript-Equ…

@jsunderhood я спрашиваю только про сравнение null и undefined с false. Для особо упоротых про NaN. Ответ: юзай === и не люби мне моск ОК.
Последняя фраза очень правильная. Если человек внятно объясняет, почему не надо что-то делать, это всегда подкупает. twitter.com/aod_toxic/stat…

@jsunderhood как тебе новый кинопоиск?
Буду вести @marketingunderhood, с удовольствем отвечу. Давайте в пределах темы. twitter.com/marinintim/sta…

Глава VW, шоб ему здоровья, смело свалил вину по скандалу с выбросами на инженеров arstechnica.com/tech-policy/20… Не работайте на мудаков, друзья.

@jsunderhood – как жить в Питере и не болеть простудой >2 р в год? (отпуск на юг раз в Q?) – йога/бег/плавание как жить при сидячей работе?
Я опытный гайморитчик и веду крайне нездоровый образ жизни. Плачу, колюсь, жру кактус, плавать не умею. twitter.com/alexbaumgertne…

@jsunderhood – Шляпа, Дом 7. Где еще хороший джаз/и подобное играют? Джаггер? – клубы с хорошим звуком (на СПЛИНчика там сходить)? спасибо!
В Шляпу в последнее время тупо не войти, но там хорошо. Пару раз был в Джазофрении, но давно. Про клубы не скажу. twitter.com/alexbaumgertne…

Мы иногда отдаём HTTP 418, чтобы сообщить nginx об ошибке в приложении. Естественно, статус затем заменяется на более корректный.

Вообще там очень забавное чтиво tools.ietf.org/html/rfc2324 Люблю, когда серьезные дядьки шутят, очень изящно получается.

Воскресенье


@jsunderhood Посоветуйте курсы/книги/др. мат. для устр-ния пробелов знаний по ИТ: архитектура ком-па, алгоритмы, БД итд. Для гуманитариев :)
Спроси чего полегче, у меня были тройки по всем точным наукам, а закончил я психфак. Мне б свои пробелы устранить. twitter.com/alexbaumgertne…

@jsunderhood у гуманитариев сильные стороны))) ну насмешил :D
Хаха. Тем не менее, единицы хардкорных технарей способны "попасть" даже в простейший макет. twitter.com/aod_toxic/stat…

На этом, в общем, и всё. С вами был @flackus, надеюсь было неплохо. На следующей неделе вас ждёт йога и зож, а я в логаут. Берегите себя.

Ссылки