kostenko

18 декабря 2017, Москва, Россия

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

Доброе утро. На этой неделе с вами @kostenko из солнечного Хельсинки

5:52

Вкратце о себе: начал как Perl-программист, но вовремя сбежал с тонущего корабля на Python. Понемного подтянулись node, Go и кресты

6:07

Сейчас работаю в компании @EzyInsights и развиваю свой бизнес Short.cm. Он приносит уже больше, чем работа, но мне… twitter.com/i/web/status/9…

6:08

План на неделю у меня примерно такой:
Пн: Социальные вопросы (хотел в конце, но вижу, что наболело)
Вт: Оптимизация… twitter.com/i/web/status/9…

6:57

В субботу расскажу о мониторинге работоспособности продукта, а в воскресенье буду травить байки о стартапах и о то… twitter.com/i/web/status/9…

7:00

Подготовка к первому набросу. В каких компаниях вам больше нравится работать? Больших/маленьких, аутсорсинговых/продуктовых?

8:59

Работники больших аутсорсингов часто считают, что небольшие компании пишут говнокод, редактируют его в production и… twitter.com/i/web/status/9…

9:10

Работники небольших продуктовых компаний - наоборот, что весь отдел аутсорсинга из 50 человек можно заменить одним… twitter.com/i/web/status/9…

9:11

По итогам 142 голосов явно побеждают (69%) маленькие продуктовые компании. А это значит, что у этих программистов е… twitter.com/i/web/status/9…

9:35

Вообще шучу. Я стараюсь работать в небольших продуктовых компаниях и избегать больших. Чем меньше компания - тем бл… twitter.com/i/web/status/9…

9:40

В небольших компаниях часто нет процесса, четких задач и приоритеты могут меняться каждый день. Но при всем этом ба… twitter.com/i/web/status/9…

9:43

А если вам на вход приходят разжеванные требования, а на выходе от вас получается неоттерстированный код, то начать… twitter.com/i/web/status/9…

10:02

Так вот, к чему это я это веду. О женщинах в IT. В бизнесе есть один критерий найма людей – брать самого полезного… twitter.com/i/web/status/9…

10:04

Других критериев нет. И если кто-то не хочет брать женщин/геев/Иванов/стрельцов - отлично! их возьмут более умные р… twitter.com/i/web/status/9…

10:05

А теперь я прервусь на некоторое время, так как на работе я еще и работаю

11:12

Кстати о больших компаниях. Кто знает, в чем заключается Принцип Питера?

12:38

Согласно принципу Питера, человек, работающий в любой иерархической системе, повышается в должности до тех пор, по… twitter.com/i/web/status/9…

13:31

Этот уровень и называется уровнем некомпетентности данного сотрудника. На этом месте сотрудник «застрянет» и будет… twitter.com/i/web/status/9…

13:31

Я не утверждаю правильность этого принципа или что он везде работает. Просто рассказал о его существовании

13:32

Теперь можно поговорить о другом - моральных принципах. За какие проекты вы бы не взялись, даже если бы вам предлож… twitter.com/i/web/status/9…

15:30
@backendsecret всё, что связано с порно (в т.ч. вебкамы и сайты с фото и видео) и обманом: казино, ставки .
Но, х… twitter.com/i/web/status/9…
15:44
@backendsecret За проект без внятливого техзадания, и в случаях, когда заказчик не испоняет своих обязанностей по о… twitter.com/i/web/status/9…

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

15:47
@backendsecret У меня коллега одна съебала из итальянского отделения по-моему pwс (или кого-то из big4), когда на н… twitter.com/i/web/status/9…

Риск уехать на пару лет на зону тоже вполне себе аргумент twitter.com/medvedi/status…

16:15
@backendsecret Я сейчас наркошоп пишу, о каких принципах может быть речь?
16:18
@backendsecret За проекты на пхп

Как ни странно, за проекты на PHP мне предлагали лучшие условия. Потому что сначала экономят и набирают дешевых PH… twitter.com/i/web/status/9…

16:20

Но это не входит в мой черный список – на PHP можно писать более-менее хороший код, так как дело обычно не в языке… twitter.com/i/web/status/9…

16:21

У меня был один проект, от которого я отказался по моральным принципам – elitsy.ru. Я не смог там работать потому ч… twitter.com/i/web/status/9…

16:24

Сначала неприятно было лицемерить, потом они увидели мой пост в блоге и начали советовать бороться с демонами

16:25

Когда я сказал, что отказываюсь от работы, меня поставили перед выбором - или я доделываю кусок функционала или они… twitter.com/i/web/status/9…

16:31
@backendsecret Слабак. Тобой сманипулировали, сыграв на чувстве вины. Я бы сразу же свалил. И тому человеку, которы… twitter.com/i/web/status/9…

Да, все так. Но если бы я еще раз попал в такую же ситуацию - повкалывать неделю или серьезно подставить хорошего ч… twitter.com/i/web/status/9…

16:40
@backendsecret Реклама/продажа БАД, гомеопатии (особенно если от рака)

Вот кстати да, не только бы не взялся, а еще бы и ударил чем-то тяжелым. Хотя люди сами в своей глупости виноваты,… twitter.com/i/web/status/9…

16:48

хотя зависит от БАД, об этом позже

16:50

А потом @mikashkin сказал мне правильную вещь. Eсли секта предлагает вам работу – бегите. Бегите быстро и сразу. Се… twitter.com/i/web/status/9…

16:53
@backendsecret Делал сайт для православного храма будучи атеистом. Для меня это просто предметная область. Хотя, ес… twitter.com/i/web/status/9…
17:08

Но не все БАДы одинаково плохие. Работа на спамера, впаривающего фейковую виагру и средства для похудения, для моей… twitter.com/i/web/status/9…

17:10

Не встал – похихикали и баиньки

17:11

Сразу скажу - там была трава с газона, ничего другого там FDA бы не пропустило

17:21
Верните @yegor256 в @backendsecret
Это было всяко лучше рассказов про БАДы
17:45

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

19:19

# Вторник 53 твита

Начнем с простого, как искать проблему в веб-приложении. Допустим, к вам приходит человек и говорит “сайт тормозит”… twitter.com/i/web/status/9…

6:38

Открываем консоль браузера и сравниваем время похода к бекенду со временем полной загрузки страницы/реакции на дейс… twitter.com/i/web/status/9…

6:38

А сейчас будет важное обобщение предыдущего твита. "Преждевременная оптимизация - корень всех зол" (Д. Кнут). Не тр… twitter.com/i/web/status/9…

7:17

1) как правило такие оптимизации наносят ущерб простоте и читаемости кода
2) как правило, даже самые опытные разраб… twitter.com/i/web/status/9…

7:17

Если таки проблема в backend, первое, что обычно тормозит - походы в базу. Сделайте себе возможность включить логир… twitter.com/i/web/status/9…

8:28
@way2bariton @backendsecret Обычно ORM умеют это из коробки. По крайней мере в Entity Framework точно с этим проблем нет.
8:48

И только если база ок и вы не видите очевидных источников тормозов, то нужно писать на это тест и гонять в профайле… twitter.com/i/web/status/9…

8:54

Если вам не удалось скопировать входящие данные так, чтобы они тормозили и в тестах, то профайлер в продакшене подн… twitter.com/i/web/status/9…

10:35

Теперь чуть более детально. Начну с полезной задачи от Google: "отсортируйте по скорости работы: чтение данные с ди… twitter.com/i/web/status/9…

10:39

Начну с первой части – оптимизацию работы с сетью. В связи с этим вопрос: чем nginx архитектурно отличается от apac… twitter.com/i/web/status/9…

11:48

Apache использует модель воркеров - создается куча процессов ОС, каждый из которых ждет данных от клиента и в это в… twitter.com/i/web/status/9…

12:39

Плюсы:
1) вам не нужно заботиться, кому давать работать с процессором. Этим занимается операционная система.
2) пол… twitter.com/i/web/status/9…

12:43

Минусы:
1) каждый процесс жрет память
2) операционная система не знает, кому нужен процесс, поэтому дает всем по о… twitter.com/i/web/status/9…

12:43
@backendsecret эмм, но сейчас как бы 2017 уже и принято на фронт ставить ngnix, который будет прокстровать запросы… twitter.com/i/web/status/9…

Ставить nginx перед apache и ожидать серьезного ускорения работы - это как надеть на коня костюм спорткара и ожидат… twitter.com/i/web/status/9…

12:56

nginx использует асинхронную модель, в которой сервер не ждет данных от клиента, а занимается обработкой других зап… twitter.com/i/web/status/9…

13:25

Эта же модель у tornado, node.js, python asyncio. Она хорошо работает, если большую часть времени ваш процесс ждет.… twitter.com/i/web/status/9…

13:25

Диалог в asyncio происходит такой:
Процесс: а что произошло?
Система: подключилось 10 клиентов
(происходит обработк… twitter.com/i/web/status/9…

14:03

В ОС асинхронностью занимаются системные вызовы epoll (Linux) и kqueue (BSD + OS X), в windows тоже что-то придумал… twitter.com/i/web/status/9…

14:03

В nginx быстро работает: проксирование, отдача статики (в том числе и кэша). Если вдруг в nginx появится сложная ло… twitter.com/i/web/status/9…

14:59

Если по этим же причинам процесс nginx рухнет, то все его соединения оборвутся (это все касается также tornado/asyncio/node.js)

15:01

Еще про оптимизацию сети: установка соединения в TCP - дело дорогое. По возможности делайте bulk-запросы. То есть е… twitter.com/i/web/status/9…

16:18

Eсли вам потеря данных не критична и размер данных небольшой, то стоит задуматься о переходе на UDP

16:49

Последний твит о сети и перехожу к базам данным: не стоит забывать еще и о скорости света. Packet roundtrip time ме… twitter.com/i/web/status/9…

16:58

Я вам обманул о базе данных. Давайте об алгоритмах. Что такое O-нотация? Что значит O(n^2) для алгоритма?

17:15
@backendsecret Есть смысл иметь всегда под рукой что-то вроде такого
gist.github.com/andriisoldaten…
17:19

O-нотация показывает, насколько будет замедляться алгоритм при росте N. То есть O(1) – скорость не меняется. O(N) –… twitter.com/i/web/status/9…

17:33

Например, если вы в функции ходите в цикле по элементам массива – O(N). Если вложенный цикл, который тоже ходит по… twitter.com/i/web/status/9…

17:33

Примеры сложностей: поиск элемента в dict/set – O(1). Поиск элемента в списке – O(n), в отсортированном списке – O(… twitter.com/i/web/status/9…

17:41

Внимание вопрос: Какие алгоритмы сортировки имеют сложность O(N) и O(N^N)?

17:42
@backendsecret в дополнение к большой о, также есть маленькая о, маленькая омега, большая омега и большая тета, а вот маленькой теты нет.

Это уже для интересующихся, в хорошей книге по алгоритмам об этом обычно напишут twitter.com/ilyakharlamov/…

17:44
O-нотация показывает, насколько будет замедляться алгоритм при росте N. То есть O(1) – скорость не меняется. O(N) –… twitter.com/i/web/status/9…

Конечно же скорость падает, а не растет. И технически более верно, что падает не скорость, а растет сложность вычис… twitter.com/i/web/status/9…

17:53

А пока все гуглят ответ об алгоритмах сортировки O(n) и O(n^2), раскажу о популярных. Популярных 2: merge sort и qu… twitter.com/i/web/status/9…

18:17

merge sort не модифицирует исходный массив, а возвращает новый, но требует больше памяти, сложность всегда O(n*log… twitter.com/i/web/status/9…

18:17
@backendsecret Стоит добавить что на практике чаще всего используются гибридные варианты (qsort+вставки с определен… twitter.com/i/web/status/9…

Да, как раз искал их описание, чтобы глупость не написать. Timsort как раз используется в python twitter.com/MurcielagoCat/…

18:30

Сложность O(N) дает bucket sort и radix sort. Но они работают хорошо только в ограниченных случаях

18:35

С O(N^N) я затупил. Но при этом есть bogosort, O(N*N!). Вы случайно перемешиваете все элементы и проверяете, полу… twitter.com/i/web/status/9…

18:41

Сорри, что я косячу с этим алгоритмом, не так часто приходится использовать

18:42
@backendsecret а подсчетом разве не O(N)? мы же говорим о временной сложности

Да, тоже O(N) если элементы в массива ограничены находятся во вменяемом диапазоне twitter.com/VanuaShimko/st…

18:44

Много ответов спрашивают куда направлять людей за более глубокими знаниями. У меня четыре совета - Бауманка, Матмех… twitter.com/i/web/status/9…

19:00
@backendsecret Есть бесплатные онлайн-курсы ведущих универов - МИТ, Стенфорд и т.п. можно курс Computer Science про… twitter.com/i/web/status/9…

Да, на курсере среди тонн гуманитарного позорища можно найти клевые курсы по алгоритмам, криптографии, теории игр и… twitter.com/i/web/status/9…

20:05
@backendsecret Господи, верните сексиста. В ит на образовании математика далеко не уедешь. Про о большие малые тетт… twitter.com/i/web/status/9…

Простите, что опять за жизнь. Есть программисты, есть low-bidders формошлепы. На умении сделать магазин ни карьеру,… twitter.com/i/web/status/9…

20:11

Хорошо, погорячился, перефразирую. Основы алгоритмов позволят вам писать более качественный код. Особенно если у ва… twitter.com/i/web/status/9…

20:28

Одна из самых частых проблем производительности кода, которую я встречал: многократные вложенные циклы, которые ход… twitter.com/i/web/status/9…

20:36

Проблема выглядит глупо, встречается часто

20:38
@backendsecret Совершенно верно.
Я не агитирую не учить алгоритмы. Я лишь пытаюсь сказать, что на знании одних лиш… twitter.com/i/web/status/9…

Задрачивать алгоритмы совершенно не нужно, полностью согласен. Но если вы сталкиваетесь с индексами в базах - нужно… twitter.com/i/web/status/9…

20:44

Если алгоритмически ваш код оптимизировать нельзя, то есть два варианта:
1) попробовать включить JIT. В python это… twitter.com/i/web/status/9…

20:58

Замена python на pypy на одном проекте помогла мне не копаться в чужом коде, который медленно работал. Код стал ра… twitter.com/i/web/status/9…

21:01

JIT-компиляторы отличаются от обычных компиляторов тем, что начинают работать когда вы запускаете программу. И комп… twitter.com/i/web/status/9…

21:15

Но JIT помогает не всегда и не сильно. Если его недостаточно, то для питона есть Cython: cython.org Он… twitter.com/i/web/status/9…

21:38

Чистый python будет работать немного быстрее, но на каждую вашу строчку будет страница кода на C/C++. Но если натре… twitter.com/i/web/status/9…

21:38

К примеру, в @EzyInsights стояла задача: сделать пересчет всех исторических семплов за вменяемое время (10-20 милли… twitter.com/i/web/status/9…

21:44

А программисты на Go читают последние твиты и ощущают собственное превосходство. На сегодня все, завтра начну с оптимизации SQL

21:45
@backendsecret @EzyInsights adroll.com у себя, кстати тоже для данных cython использует, миллиарды молотит
21:57

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

@backendsecret я просто оставлю это здесь csds.ucu.edu.ua
не уверен, что ради программирования стоит терпет… twitter.com/i/web/status/9…
8:46

Первый вопрос по SQL: у вас есть таблица Users, 500M строк. Какие индексы нужно на нее добавить, чтобы запросы вида… twitter.com/i/web/status/9…

9:15

Хорошо, что случится, если я добавлю индекс по last_name, age, first_name? Или три индекса: по last_name, по first_name и по age?

9:24

Начну с наименее оптимальных вариантов: три отдельных индекса. Postgres пытается идти по двум индексам, процом пыта… twitter.com/i/web/status/9…

10:27

Плюс MySQL вроде бы не поддерживает bitmap index scan, поэтому будет тоже использовать один индекс (но тут я могу ошибаться)

10:27

Еще неправильные варианты: создать индекс по age, first_name, last_name или first_name, age, last_name. В первом сл… twitter.com/i/web/status/9…

10:30

Индексы по first_name, last_name и last_name, first_name будут работать примерно одинаково, но first_name, last_nam… twitter.com/i/web/status/9…

10:32

Совершенно верно, что порядок в предикате не важен. Также минимально влияние на скорость порядка полей в индексе, е… twitter.com/i/web/status/9…

12:24

Так как особенность индекса в том, что данные в нем отсортированы, то его можно использовать для быстрого получения… twitter.com/i/web/status/9…

12:24

Задам еще один вопрос и прервусь до вечера. Как быстро выбрать 1000 случайных записей из таблицы в 500 000 000 строк?

12:25
@backendsecret select * from some_table tablesample system(1000);

Да. Для postgres лучший вариант. SELECT * FROM table ORDER BY RANDOM() LIMIT 1000 выполнится примерно никогда, так… twitter.com/i/web/status/9…

12:55

Это были примеры – в общем случае, если запрос медленный, то нужно выполнить сначала EXPLAIN SELECT * FROM somethin… twitter.com/i/web/status/9…

12:58

Об UPDATE.В общем случае в PostgreSQL UPDATE означает DELETE + INSERT, а местами и обновление индексов. Поэтому ста… twitter.com/i/web/status/9…

14:46

UPDATE Users SET some_field = true будет существенно быстрей работать, если его переписать как UPDATE Users SET som… twitter.com/i/web/status/9…

14:46

Отвлечемся от скучной оптимизации. Какая архитектура вам больше нравится – микросервисы или монолит?

15:39

Микросервисы vs монолит - это не новомодный холивар. В далеком 1992 году товарищ Торвальдс пытался доказать товарищ… twitter.com/i/web/status/9…

16:11

Плюс монолита – его довольно быстро разрабатывать, одна версия уходит в тестирование и production. И если она хорош… twitter.com/i/web/status/9…

17:10

Да, именно поэтому я написал, что монолит хороший «если хорошо протестирован», что для проекта больше домашней стра… twitter.com/i/web/status/9…

18:25

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

18:30

Проблемы монолита - сложность растет, следить за ним становится сложнее, человеческий мозг перестает понимать все о… twitter.com/i/web/status/9…

19:20

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

19:21

Плюсы - они простые и их можно держать в голове. Вместо сеньоров можно брать июней и отдавать им некритичные сервисы

19:21

Если у вас нагруженная система - можно масштабировать один микросервис, а остальную часть проекта не трогать. Это ж… twitter.com/i/web/status/9…

19:23

Возьмем к примеру short.cm - если упадет сервис редиректа и API создания ссылок - серьезный ущерб проекту. Если все… twitter.com/i/web/status/9…

19:25

Как я разбил short.cm на микросервисы: API - это не микросервис. Redirector - просто смотрит куда ходить и возвраща… twitter.com/i/web/status/9…

20:56

Планирую разделить API на CRUD для ссылок и все остальное

20:56

Nginx + openresty - делает геолокацию и автогенерацию ssl-сертификатов на доменах клиентов

20:58

На сегодня все, завтра о качестве кода

20:58

# Четверг 28 твитов

Самая большая проблема разработки – сложность кода как правило превышает способности человеческого мозга. Поэтому г… twitter.com/i/web/status/9…

8:50

Простота - это значит, что кода должно быть как можно меньше. Понятность - это значит не писать такое:
sorted(set(… twitter.com/i/web/status/9…

8:55

Шаблоны проектирования – можно пролистать просто для того, чтобы узнать, что так тоже можно писать код. Зубрить их… twitter.com/i/web/status/9…

9:08

Еще у нас в python есть такое понятие: Java головного мозга. Это когда для написания минимального ToDo листа, делаю… twitter.com/i/web/status/9…

9:32

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

9:32
@backendsecret Это называется «энтерпрайз головного мозга».

Нет, энтерпрайз головного мозга – это проведение совещания о подготовке совещания по согласованию поправки к технич… twitter.com/i/web/status/9…

9:43

Вот, кстати, мнение Алана Кея, который придумал термин ООП, о текущем состоянии дел: quora.com/What-is-Alan-K…

9:56

Отложу остальные набросы на вечер и вернусь к SQL. Видел много проектов, которые загибались на INSERT-ах. Правила д… twitter.com/i/web/status/9…

10:30

Если этого недостаточно – переходите на COPY TABLE/LOAD DATA INFILE. Все клиенты БД имеют програмный интерфейс к ни… twitter.com/i/web/status/9…

10:30
@backendsecret при действительно большом количестве записей имеет смысл обновлять несколькими командами по рейнджам… twitter.com/i/web/status/9…

Верно, это будет немного медленней, но не положит читающие запросы. То же самое стоит делать если нужно добавить в… twitter.com/i/web/status/9…

10:37
@backendsecret А если нужен INSERT ON DUPLICATE KEY UPDATE? Сейчас выполняю через batch 1000 строк и очень долго и… twitter.com/i/web/status/9…

CREATE TEMPORARY TABLE t1; LOAD DATA INFILE ... INTO t1; INSERT INTO destination SELECT * FROM t1 ON DUPLICATE KEY… twitter.com/i/web/status/9…

10:42

PostgreSQL (в отличие от MySQL) форкается на каждое соединение. Если у вас много подключенных соединений или много… twitter.com/i/web/status/9…

12:12

Как вы относитесь к ORM?

13:44

Без ORM вам приходится вставлять один ЯП в другой. Кучу логики нужно дублировать (сериализацию/десериализацию, напр… twitter.com/i/web/status/9…

14:34

Если хоть одно правило не выполняется - проекту наступит хана. Проблемы с производительностью ORM (а это, к примеру… twitter.com/i/web/status/9…

14:34

Ну, кроме случаев с микросервисами. Если там делается три запроса, то никакого ORM, конечно. У меня же нет Java головного мозга

14:36

Давайте дальше. Есть ли у вас в проекте жесткая проверка линтами (pyflakes, eslint), запрещающая коммитить неправильный код?

15:15

Как правило, документ, описывающий стандарты кодирования, используется только для того, чтобы подпереть ножку стола… twitter.com/i/web/status/9…

15:43

Мне обычно совершенно не важны детали соглашений - табы или пробелы, 80 символов или 120, ставить запятую после пос… twitter.com/i/web/status/9…

15:43

Так, все вернулись с работы и мы начинаем КВН. Как показывает практика, прием в небольшую компанию выделенного QA у… twitter.com/i/web/status/9…

16:49

Пойдем дальше. О необходимости писать тесты даже я, кэп, говорить не буду. Считаете ли вы покрытие кода тестами и ч… twitter.com/i/web/status/9…

18:09

2) Как правило наличие не технического product менеджера сильно увеличивает сложность проекта, так как он совершенн… twitter.com/i/web/status/9…

18:45

При выборе продакта я бы посоветовал брать человека с опытом программирования – они понимают масштаб работ и не буд… twitter.com/i/web/status/9…

18:45
@backendsecret покрытие не показывает вообще ничего, смысла считать его нет. а тесты писать надо, но вот товарищ вы… twitter.com/i/web/status/9…

Покрытие мне интересно только в том смысле, что можно его посмотреть и увидеть, какие важные части проекта не покры… twitter.com/i/web/status/9…

19:04

На сегодня все, завтра буду писать о деплойменте кода

19:43
@backendsecret @vvn33 да этож отсюда pic.twitter.com/NLBmuiGt1Y

Когда всех, кого мог, разозлил, уточню:
Я не утверждал, что QA не нужен. Я не утверждал, что в production начинает… twitter.com/i/web/status/9…

19:47

И если вы решили взять QA – постарайтесь хорошо настроить процесс тестирование и будьте готовы к замедлению скорости разработки

19:47
@alexanius @backendsecret Больше багов, перестают нормально тестировать сами
Часто разработчики забывают, что QA эт… twitter.com/i/web/status/9…
20:49

# Пятница 22 твита

Как у вас попадает код в production?

8:49

Большинство используют git pull. И это вполне хороший способ – деплой происходит мгновенно, что важно при нахождени… twitter.com/i/web/status/9…

9:31

Docker немного замедляет процесс деплоймента (но из-за инкрементальной структуры – совсем немного), но решает пробл… twitter.com/i/web/status/9…

9:31

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

9:41

И опять большинство выбрали правильный ответ. Безагентные программы деплоя проще в установке, настройке и ломаются… twitter.com/i/web/status/9…

10:47

В short.cm я использую ansible и он очень крутой, но есть проблема – он деплоит медленно.

В ezyinsights мы использ… twitter.com/i/web/status/9…

10:53

Теперь о том, куда деплоить. Пожалуйста, не используйте местечковые хостинги/облака/collocation. Они быстро умирают… twitter.com/i/web/status/9…

12:11

И это не стоит двадцати сэкономленных долларов

12:13
@backendsecret 1. Heroku

Проблема heroku в том, что он бесплатный сначала и становится жутко дорогим по мере роста проекта twitter.com/otakahuynyaa/s…

12:17

Из мест аренды VDS хочется отдельно отметить hetzner.de, который использует десктопное железо для серверов поэтому… twitter.com/i/web/status/9…

12:43

По поводу hetzner (и всего остального): если у вас есть единая точка отказа – то вы плохо продумали архитектуру про… twitter.com/i/web/status/9…

13:22
@backendsecret с поддержкой проблем не было, напр. оперативно меняли диски... painless )
13:33
@steverovsky @backendsecret Около 50 нод, загрузка ~65%, ни одной выпавшей. Иногда проблемы с роутингом бывают, и п… twitter.com/i/web/status/9…
13:41

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

14:16
@backendsecret Скажу еще более крамольную мысль. Для многих проектов даунтайм в ~4 часа не является концом света, и… twitter.com/i/web/status/9…
14:34

Какие сервисы AWS я могу рекомендовать: очевидно, EC2
1) Стоит помнить о разных availability zones и не держать все… twitter.com/i/web/status/9…

15:25

RDS - вам автоматически дается backup, можно настроить failover и репликацию в два клика. Но нужно помнить, что pro… twitter.com/i/web/status/9…

17:26

В общем не успею я твитами рассказать я свой опыт с AWS, поэтому дам ссылку на свой старый пост в FB:… twitter.com/i/web/status/9…

18:53
@backendsecret анонсировали с месяц назад, на превью можно подать заявку

Говорят, AWS таки решил родить поддержку Kubernetes. А вот их ECS не пользуйтесь, у меня от этого брат умер twitter.com/mfilippovich/s…

20:56
@backendsecret да, я очень рад что решились, у них еще новый сервис анонсировался - надстройка ecs, но все что амаз… twitter.com/i/web/status/9…
21:10
@backendsecret consul, nomad, vault, packer, terraform - прекрасные инструменты, очень продуманы, амазон уже посути… twitter.com/i/web/status/9…
21:10

На сегодня все. Завтра мониторинг

21:11

# Суббота 13 твитов

В большинстве компаний о необработанных ошибках узнают из жалоб клиентов. Это совершенно неправильно. В проекте нуж… twitter.com/i/web/status/9…

8:31

Не путайте с сервисами хранения логов. Никто в здравом уме не будет смотреть все логи в поисках ошибок. Sentry сооб… twitter.com/i/web/status/9…

8:59

По поводу хранения логов. Я использую cloudwatch logs для short.cm, для своих серверов лучшим вариантом считаю sysl… twitter.com/i/web/status/9…

10:55

Sentry решает проблему исключений, но не тормозов. Для сбора базовой статистики о сервере (CPU, памяти, соединения… twitter.com/i/web/status/9…

11:11

Для отображения метрик - graphite + grafana: grafana.com вот так выглядят метрики в @EzyInsights: pic.twitter.com/APb0wsI2JP

12:41

Помимо отображения метрик графана имеет модуль алертов, который может оповестить вас, если метрика выходит за преде… twitter.com/i/web/status/9…

15:53

Помимо системных метрик, отправляемых collectd, вы можете отправлять свои метрики в grafana. Например, время выполн… twitter.com/i/web/status/9…

16:02

Лучший способ оповещения о серьезных проблемах – PagerDuty. Он звонит по телефону по очереди каждому ответственному… twitter.com/i/web/status/9…

17:32

PagerDuty для США стоит $10/user, для остальных $50/user. Но @dnikolayev нашел способ сэкомить – регистрируете номе… twitter.com/i/web/status/9…

17:32

Так как sentry - не анализатор логов, то в репорте он содержит такие полезные данные как локальные переменные функц… twitter.com/i/web/status/9…

20:15
@backendsecret Post body с паролями? No security (

У sentry есть автоматическая вычищалка паролей, которая неплохо работает, но можно дописать свою twitter.com/funivan/status…

20:54

Если вам нужно следить за тем, как конкретный запрос путешествовал между микросервисами, то можно попробовать opentracing.io

21:00

Завтра буду писать всякую чушь о стартапах

21:00

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

Для отображения графиков из БД и оповещениях о некорректных данных можно использовать redash.io (а то… twitter.com/i/web/status/9…

8:47

С ней вы можете сделать проверку на бизнес-метрики: отсутствие регистраций, отсутствие продаж

8:55

А теперь как сделать модный стартап (все совпадения с реальными компаниями случайны, а некоторые идеи успешных стар… twitter.com/i/web/status/9…

9:26

2. Взять компилируемое стороннее приложение на IF-ах, назвать его AI. В случае чего можно сказать «а оно скомпилиро… twitter.com/i/web/status/9…

11:01

Все, на кого я набрасывал за неделю, уже три раза забыли, а java-программисты все еще оправдываются/обижаются

11:07
@backendsecret Есть ещё решение telegraf, influxdb, grafana. Почти все работает из коробки.
11:25

3. BigData. Если у вас меньше 10Tb данных – вы не bigdata. Но если купить redshift и положить в денормализованном в… twitter.com/i/web/status/9…

11:52

Вообще все мое отношение к Hadoop на обработке “bigdata” отлично выражает вот эта статья: aadrake.com/command-line-t…

11:56
@backendsecret Статья методологически некорректна, и, более того, вредна. Иными словами, альтернативный ее заголово… twitter.com/i/web/status/9…

Вот большинство его так и используют. И статья о том, что технологии надо использовать с умом и по назначению, а не… twitter.com/i/web/status/9…

12:59

Ну и последний способ – программисты из долины повышают стоимость стартапа. Поэтому нужно взять самых дешевых и бес… twitter.com/i/web/status/9…

13:44

Бессмысленный репозиторий можно назвать "принципиально новая версия"

13:48
@backendsecret Ну же, 2к17 на дворе. Добавлять в название нужно «блокчейн».
bloomberg.com/news/articles/…
13:48

По поводу процесса разработки. Я видел два эффективных процесса:
1) "прозрачная мотивация, точные инструкции, одно… twitter.com/i/web/status/9…

15:38

Проблемы две:
1) если не платить программистам выше рынка, то они просто встанут и уйдут
2) через полгода такой раб… twitter.com/i/web/status/9…

15:38

Второй – взять людей, которым интересно (даже с меньшим опытом), не убивать им мотивацию и спокойно, без дедлайнов… twitter.com/i/web/status/9…

15:41
@backendsecret Вот только разработка продукта без дедлайна как такового невозможна

Дело в детализации. Если человек застрял на задаче больше, чем нужно – значит нужно уточнить статус/попросить кого-… twitter.com/i/web/status/9…

16:03

По поводу мотивации программиста. IMHO главный враг мотивации программиста – это скучная работа. Поэтому нужно стар… twitter.com/i/web/status/9…

16:21

Это же касается новых технологий – если новая технология стабильна, решает проблему и не сильно замедляет разработк… twitter.com/i/web/status/9…

16:35
@backendsecret А что ты думаешь про переключение программиста на другой проект чтобы не закисал?

Да, периодически менять зоны ответственности полезно (если в компании не все запущено):
1) увеличивается автобусное… twitter.com/i/web/status/9…

17:00

Так, ну все. Эту неделю с вами был @kostenko. Я надеюсь, что нанес за эту неделю больше пользы чем вреда и вы узнал… twitter.com/i/web/status/9…

18:26

other