# Понедельник 39 твитов
Вкратце о себе: начал как Perl-программист, но вовремя сбежал с тонущего корабля на Python. Понемного подтянулись node, Go и кресты
6:07Сейчас работаю в компании @EzyInsights и развиваю свой бизнес Short.cm. Он приносит уже больше, чем работа, но мне… twitter.com/i/web/status/9…
6:08План на неделю у меня примерно такой:
Пн: Социальные вопросы (хотел в конце, но вижу, что наболело)
Вт: Оптимизация… twitter.com/i/web/status/9…
В субботу расскажу о мониторинге работоспособности продукта, а в воскресенье буду травить байки о стартапах и о то… 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 всё, что связано с порно (в т.ч. вебкамы и сайты с фото и видео) и обманом: казино, ставки .15:44
Но, х… twitter.com/i/web/status/9…
@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 в @backendsecret17: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:171) как правило такие оптимизации наносят ущерб простоте и читаемости кода
2) как правило, даже самые опытные разраб… twitter.com/i/web/status/9…
Если таки проблема в 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:48Apache использует модель воркеров - создается куча процессов ОС, каждый из которых ждет данных от клиента и в это в… twitter.com/i/web/status/9…
12:39Плюсы:
1) вам не нужно заботиться, кому давать работать с процессором. Этим занимается операционная система.
2) пол… twitter.com/i/web/status/9…
Минусы:
1) каждый процесс жрет память
2) операционная система не знает, кому нужен процесс, поэтому дает всем по о… twitter.com/i/web/status/9…
@backendsecret эмм, но сейчас как бы 2017 уже и принято на фронт ставить ngnix, который будет прокстровать запросы… twitter.com/i/web/status/9…
Ставить nginx перед apache и ожидать серьезного ускорения работы - это как надеть на коня костюм спорткара и ожидат… twitter.com/i/web/status/9…
12:56nginx использует асинхронную модель, в которой сервер не ждет данных от клиента, а занимается обработкой других зап… 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…
В ОС асинхронностью занимаются системные вызовы 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:18Eсли вам потеря данных не критична и размер данных небольшой, то стоит задуматься о переходе на UDP
16:49Последний твит о сети и перехожу к базам данным: не стоит забывать еще и о скорости света. Packet roundtrip time ме… twitter.com/i/web/status/9…
16:58Я вам обманул о базе данных. Давайте об алгоритмах. Что такое O-нотация? Что значит O(n^2) для алгоритма?
17:15@backendsecret Есть смысл иметь всегда под рукой что-то вроде такого17:19
gist.github.com/andriisoldaten…
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:44O-нотация показывает, насколько будет замедляться алгоритм при росте 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:17merge 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…
Замена python на pypy на одном проекте помогла мне не копаться в чужом коде, который медленно работал. Код стал ра… twitter.com/i/web/status/9…
21:01JIT-компиляторы отличаются от обычных компиляторов тем, что начинают работать когда вы запускаете программу. И комп… 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.ua8:46
не уверен, что ради программирования стоит терпет… twitter.com/i/web/status/9…
Первый вопрос по 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:46UPDATE 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:56Nginx + openresty - делает геолокацию и автогенерацию ssl-сертификатов на доменах клиентов
20:58На сегодня все, завтра о качестве кода
20:58# Четверг 28 твитов
Самая большая проблема разработки – сложность кода как правило превышает способности человеческого мозга. Поэтому г… twitter.com/i/web/status/9…
8:50Простота - это значит, что кода должно быть как можно меньше. Понятность - это значит не писать такое:
sorted(set(… twitter.com/i/web/status/9…
Шаблоны проектирования – можно пролистать просто для того, чтобы узнать, что так тоже можно писать код. Зубрить их… 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:42PostgreSQL (в отличие от 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:092) Как правило наличие не технического 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…
И если вы решили взять QA – постарайтесь хорошо настроить процесс тестирование и будьте готовы к замедлению скорости разработки
19:47@alexanius @backendsecret Больше багов, перестают нормально тестировать сами20:49
Часто разработчики забывают, что QA эт… twitter.com/i/web/status/9…
# Пятница 22 твита
Как у вас попадает код в production?
8:49Большинство используют git pull. И это вполне хороший способ – деплой происходит мгновенно, что важно при нахождени… twitter.com/i/web/status/9…
9:31Docker немного замедляет процесс деплоймента (но из-за инкрементальной структуры – совсем немного), но решает пробл… 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…
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:55Sentry решает проблему исключений, но не тормозов. Для сбора базовой статистики о сервере (CPU, памяти, соединения… twitter.com/i/web/status/9…
11:11Для отображения метрик - graphite + grafana: grafana.com вот так выглядят метрики в @EzyInsights: pic.twitter.com/APb0wsI2JP
Помимо отображения метрик графана имеет модуль алертов, который может оповестить вас, если метрика выходит за преде… 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:32PagerDuty для США стоит $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:262. Взять компилируемое стороннее приложение на 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 на дворе. Добавлять в название нужно «блокчейн».13:48
bloomberg.com/news/articles/…
По поводу процесса разработки. Я видел два эффективных процесса:
1) "прозрачная мотивация, точные инструкции, одно… twitter.com/i/web/status/9…
Проблемы две:
1) если не платить программистам выше рынка, то они просто встанут и уйдут
2) через полгода такой раб… twitter.com/i/web/status/9…
Второй – взять людей, которым интересно (даже с меньшим опытом), не убивать им мотивацию и спокойно, без дедлайнов… 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…
Так, ну все. Эту неделю с вами был @kostenko. Я надеюсь, что нанес за эту неделю больше пользы чем вреда и вы узнал… twitter.com/i/web/status/9…
18:26# Ссылки
other
- https://gist.github.com/andriisoldatenko/0be0ee61aec10f31d4ddcc1f2318922e
- http://cython.org/
- http://adroll.com/
- https://csds.ucu.edu.ua/
- https://www.quora.com/What-is-Alan-Kays-definition-of-Object-Oriented
- http://initd.org/psycopg/docs/usage.html#using-copy-to-and-copy-from
- http://malisper.me/postgres-heap-only-tuples/
- https://aws.amazon.com/eks/
- https://grafana.com/
- http://opentracing.io/
- https://redash.io/
- https://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html
- https://www.bloomberg.com/news/articles/2017-10-27/what-s-in-a-name-u-k-stock-surges-394-on-blockchain-rebrand