# Понедельник 39 твитов
Вкратце о себе: начал как Perl-программист, но вовремя сбежал с тонущего корабля на Python. Понемного подтянулись node, Go и кресты
9:07Сейчас работаю в компании @EzyInsights и развиваю свой бизнес Short.cm. Он приносит уже больше, чем работа, но мне… twitter.com/i/web/status/9…
9:08План на неделю у меня примерно такой:
Пн: Социальные вопросы (хотел в конце, но вижу, что наболело)
Вт: Оптимизация… twitter.com/i/web/status/9…
В субботу расскажу о мониторинге работоспособности продукта, а в воскресенье буду травить байки о стартапах и о то… twitter.com/i/web/status/9…
10:00Подготовка к первому набросу. В каких компаниях вам больше нравится работать? Больших/маленьких, аутсорсинговых/продуктовых?
11:59Работники больших аутсорсингов часто считают, что небольшие компании пишут говнокод, редактируют его в production и… twitter.com/i/web/status/9…
12:10Работники небольших продуктовых компаний - наоборот, что весь отдел аутсорсинга из 50 человек можно заменить одним… twitter.com/i/web/status/9…
12:11По итогам 142 голосов явно побеждают (69%) маленькие продуктовые компании. А это значит, что у этих программистов е… twitter.com/i/web/status/9…
12:35Вообще шучу. Я стараюсь работать в небольших продуктовых компаниях и избегать больших. Чем меньше компания - тем бл… twitter.com/i/web/status/9…
12:40В небольших компаниях часто нет процесса, четких задач и приоритеты могут меняться каждый день. Но при всем этом ба… twitter.com/i/web/status/9…
12:43А если вам на вход приходят разжеванные требования, а на выходе от вас получается неоттерстированный код, то начать… twitter.com/i/web/status/9…
13:02Так вот, к чему это я это веду. О женщинах в IT. В бизнесе есть один критерий найма людей – брать самого полезного… twitter.com/i/web/status/9…
13:04Других критериев нет. И если кто-то не хочет брать женщин/геев/Иванов/стрельцов - отлично! их возьмут более умные р… twitter.com/i/web/status/9…
13:05А теперь я прервусь на некоторое время, так как на работе я еще и работаю
14:12Кстати о больших компаниях. Кто знает, в чем заключается Принцип Питера?
15:38Согласно принципу Питера, человек, работающий в любой иерархической системе, повышается в должности до тех пор, по… twitter.com/i/web/status/9…
16:31Этот уровень и называется уровнем некомпетентности данного сотрудника. На этом месте сотрудник «застрянет» и будет… twitter.com/i/web/status/9…
16:31Я не утверждаю правильность этого принципа или что он везде работает. Просто рассказал о его существовании
16:32Теперь можно поговорить о другом - моральных принципах. За какие проекты вы бы не взялись, даже если бы вам предлож… twitter.com/i/web/status/9…
18:30@backendsecret всё, что связано с порно (в т.ч. вебкамы и сайты с фото и видео) и обманом: казино, ставки .18:44
Но, х… twitter.com/i/web/status/9…
@backendsecret За проект без внятливого техзадания, и в случаях, когда заказчик не испоняет своих обязанностей по о… twitter.com/i/web/status/9…
Логично, если платят в два раза больше, но по факту не платят: twitter.com/brain_adm/stat…
18:47@backendsecret У меня коллега одна съебала из итальянского отделения по-моему pwс (или кого-то из big4), когда на н… twitter.com/i/web/status/9…
Риск уехать на пару лет на зону тоже вполне себе аргумент twitter.com/medvedi/status…
19:15@backendsecret Я сейчас наркошоп пишу, о каких принципах может быть речь?19:18
@backendsecret За проекты на пхп
Как ни странно, за проекты на PHP мне предлагали лучшие условия. Потому что сначала экономят и набирают дешевых PH… twitter.com/i/web/status/9…
19:20Но это не входит в мой черный список – на PHP можно писать более-менее хороший код, так как дело обычно не в языке… twitter.com/i/web/status/9…
19:21У меня был один проект, от которого я отказался по моральным принципам – elitsy.ru. Я не смог там работать потому ч… twitter.com/i/web/status/9…
19:24Сначала неприятно было лицемерить, потом они увидели мой пост в блоге и начали советовать бороться с демонами
19:25Когда я сказал, что отказываюсь от работы, меня поставили перед выбором - или я доделываю кусок функционала или они… twitter.com/i/web/status/9…
19:31@backendsecret Слабак. Тобой сманипулировали, сыграв на чувстве вины. Я бы сразу же свалил. И тому человеку, которы… twitter.com/i/web/status/9…
Да, все так. Но если бы я еще раз попал в такую же ситуацию - повкалывать неделю или серьезно подставить хорошего ч… twitter.com/i/web/status/9…
19:40@backendsecret Реклама/продажа БАД, гомеопатии (особенно если от рака)
Вот кстати да, не только бы не взялся, а еще бы и ударил чем-то тяжелым. Хотя люди сами в своей глупости виноваты,… twitter.com/i/web/status/9…
19:48хотя зависит от БАД, об этом позже
19:50А потом @mikashkin сказал мне правильную вещь. Eсли секта предлагает вам работу – бегите. Бегите быстро и сразу. Се… twitter.com/i/web/status/9…
19:53@backendsecret Делал сайт для православного храма будучи атеистом. Для меня это просто предметная область. Хотя, ес… twitter.com/i/web/status/9…20:08
Но не все БАДы одинаково плохие. Работа на спамера, впаривающего фейковую виагру и средства для похудения, для моей… twitter.com/i/web/status/9…
20:10Не встал – похихикали и баиньки
20:11Сразу скажу - там была трава с газона, ничего другого там FDA бы не пропустило
20:21Верните @yegor256 в @backendsecret20:45
Это было всяко лучше рассказов про БАДы
На сегодня все, а завтра буду писать о полезных вещах - оптимизация производительности приложений
22:19# Вторник 46 твитов
Начнем с простого, как искать проблему в веб-приложении. Допустим, к вам приходит человек и говорит “сайт тормозит”… twitter.com/i/web/status/9…
9:38Открываем консоль браузера и сравниваем время похода к бекенду со временем полной загрузки страницы/реакции на дейс… twitter.com/i/web/status/9…
9:38А сейчас будет важное обобщение предыдущего твита. "Преждевременная оптимизация - корень всех зол" (Д. Кнут). Не тр… twitter.com/i/web/status/9…
10:171) как правило такие оптимизации наносят ущерб простоте и читаемости кода
2) как правило, даже самые опытные разраб… twitter.com/i/web/status/9…
Если таки проблема в backend, первое, что обычно тормозит - походы в базу. Сделайте себе возможность включить логир… twitter.com/i/web/status/9…
11:28@way2bariton @backendsecret Обычно ORM умеют это из коробки. По крайней мере в Entity Framework точно с этим проблем нет.11:48
И только если база ок и вы не видите очевидных источников тормозов, то нужно писать на это тест и гонять в профайле… twitter.com/i/web/status/9…
11:54Если вам не удалось скопировать входящие данные так, чтобы они тормозили и в тестах, то профайлер в продакшене подн… twitter.com/i/web/status/9…
13:35Теперь чуть более детально. Начну с полезной задачи от Google: "отсортируйте по скорости работы: чтение данные с ди… twitter.com/i/web/status/9…
13:39Начну с первой части – оптимизацию работы с сетью. В связи с этим вопрос: чем nginx архитектурно отличается от apac… twitter.com/i/web/status/9…
14:48Apache использует модель воркеров - создается куча процессов ОС, каждый из которых ждет данных от клиента и в это в… twitter.com/i/web/status/9…
15: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…
15:56nginx использует асинхронную модель, в которой сервер не ждет данных от клиента, а занимается обработкой других зап… twitter.com/i/web/status/9…
16:25Эта же модель у tornado, node.js, python asyncio. Она хорошо работает, если большую часть времени ваш процесс ждет.… twitter.com/i/web/status/9…
16:25Диалог в asyncio происходит такой:
Процесс: а что произошло?
Система: подключилось 10 клиентов
(происходит обработк… twitter.com/i/web/status/9…
В ОС асинхронностью занимаются системные вызовы epoll (Linux) и kqueue (BSD + OS X), в windows тоже что-то придумал… twitter.com/i/web/status/9…
17:03В nginx быстро работает: проксирование, отдача статики (в том числе и кэша). Если вдруг в nginx появится сложная ло… twitter.com/i/web/status/9…
17:59Если по этим же причинам процесс nginx рухнет, то все его соединения оборвутся (это все касается также tornado/asyncio/node.js)
18:01Еще про оптимизацию сети: установка соединения в TCP - дело дорогое. По возможности делайте bulk-запросы. То есть е… twitter.com/i/web/status/9…
19:18Eсли вам потеря данных не критична и размер данных небольшой, то стоит задуматься о переходе на UDP
19:49Последний твит о сети и перехожу к базам данным: не стоит забывать еще и о скорости света. Packet roundtrip time ме… twitter.com/i/web/status/9…
19:58Я вам обманул о базе данных. Давайте об алгоритмах. Что такое O-нотация? Что значит O(n^2) для алгоритма?
20:15@backendsecret Есть смысл иметь всегда под рукой что-то вроде такого20:19
gist.github.com/andriisoldaten…
O-нотация показывает, насколько будет замедляться алгоритм при росте N. То есть O(1) – скорость не меняется. O(N) –… twitter.com/i/web/status/9…
20:33Например, если вы в функции ходите в цикле по элементам массива – O(N). Если вложенный цикл, который тоже ходит по… twitter.com/i/web/status/9…
20:33Примеры сложностей: поиск элемента в dict/set – O(1). Поиск элемента в списке – O(n), в отсортированном списке – O(… twitter.com/i/web/status/9…
20:41Внимание вопрос: Какие алгоритмы сортировки имеют сложность O(N) и O(N^N)?
20:42@backendsecret в дополнение к большой о, также есть маленькая о, маленькая омега, большая омега и большая тета, а вот маленькой теты нет.
Это уже для интересующихся, в хорошей книге по алгоритмам об этом обычно напишут twitter.com/ilyakharlamov/…
20:44O-нотация показывает, насколько будет замедляться алгоритм при росте N. То есть O(1) – скорость не меняется. O(N) –… twitter.com/i/web/status/9…
Конечно же скорость падает, а не растет. И технически более верно, что падает не скорость, а растет сложность вычис… twitter.com/i/web/status/9…
20:53А пока все гуглят ответ об алгоритмах сортировки O(n) и O(n^2), раскажу о популярных. Популярных 2: merge sort и qu… twitter.com/i/web/status/9…
21:17merge sort не модифицирует исходный массив, а возвращает новый, но требует больше памяти, сложность всегда O(n*log… twitter.com/i/web/status/9…
21:17@backendsecret Стоит добавить что на практике чаще всего используются гибридные варианты (qsort+вставки с определен… twitter.com/i/web/status/9…
Да, как раз искал их описание, чтобы глупость не написать. Timsort как раз используется в python twitter.com/MurcielagoCat/…
21:30Сложность O(N) дает bucket sort и radix sort. Но они работают хорошо только в ограниченных случаях
21:35С O(N^N) я затупил. Но при этом есть bogosort, O(N*N!). Вы случайно перемешиваете все элементы и проверяете, полу… twitter.com/i/web/status/9…
21:41Сорри, что я косячу с этим алгоритмом, не так часто приходится использовать
21:42@backendsecret а подсчетом разве не O(N)? мы же говорим о временной сложности
Да, тоже O(N) если элементы в массива ограничены находятся во вменяемом диапазоне twitter.com/VanuaShimko/st…
21:44Много ответов спрашивают куда направлять людей за более глубокими знаниями. У меня четыре совета - Бауманка, Матмех… twitter.com/i/web/status/9…
22:00@backendsecret Есть бесплатные онлайн-курсы ведущих универов - МИТ, Стенфорд и т.п. можно курс Computer Science про… twitter.com/i/web/status/9…
Да, на курсере среди тонн гуманитарного позорища можно найти клевые курсы по алгоритмам, криптографии, теории игр и… twitter.com/i/web/status/9…
23:05@backendsecret Господи, верните сексиста. В ит на образовании математика далеко не уедешь. Про о большие малые тетт… twitter.com/i/web/status/9…
Простите, что опять за жизнь. Есть программисты, есть low-bidders формошлепы. На умении сделать магазин ни карьеру,… twitter.com/i/web/status/9…
23:11Хорошо, погорячился, перефразирую. Основы алгоритмов позволят вам писать более качественный код. Особенно если у ва… twitter.com/i/web/status/9…
23:28Одна из самых частых проблем производительности кода, которую я встречал: многократные вложенные циклы, которые ход… twitter.com/i/web/status/9…
23:36Проблема выглядит глупо, встречается часто
23:38@backendsecret Совершенно верно.
Я не агитирую не учить алгоритмы. Я лишь пытаюсь сказать, что на знании одних лиш… twitter.com/i/web/status/9…
Задрачивать алгоритмы совершенно не нужно, полностью согласен. Но если вы сталкиваетесь с индексами в базах - нужно… twitter.com/i/web/status/9…
23:44Если алгоритмически ваш код оптимизировать нельзя, то есть два варианта:
1) попробовать включить JIT. В python это… twitter.com/i/web/status/9…
# Среда 35 твитов
Замена python на pypy на одном проекте помогла мне не копаться в чужом коде, который медленно работал. Код стал ра… twitter.com/i/web/status/9…
0:01JIT-компиляторы отличаются от обычных компиляторов тем, что начинают работать когда вы запускаете программу. И комп… twitter.com/i/web/status/9…
0:15Но JIT помогает не всегда и не сильно. Если его недостаточно, то для питона есть Cython: cython.org Он… twitter.com/i/web/status/9…
0:38Чистый python будет работать немного быстрее, но на каждую вашу строчку будет страница кода на C/C++. Но если натре… twitter.com/i/web/status/9…
0:38К примеру, в @EzyInsights стояла задача: сделать пересчет всех исторических семплов за вменяемое время (10-20 милли… twitter.com/i/web/status/9…
0:44А программисты на Go читают последние твиты и ощущают собственное превосходство. На сегодня все, завтра начну с оптимизации SQL
0:45@backendsecret @EzyInsights adroll.com у себя, кстати тоже для данных cython использует, миллиарды молотит0:57
@backendsecret я просто оставлю это здесь csds.ucu.edu.ua11:46
не уверен, что ради программирования стоит терпет… twitter.com/i/web/status/9…
Первый вопрос по SQL: у вас есть таблица Users, 500M строк. Какие индексы нужно на нее добавить, чтобы запросы вида… twitter.com/i/web/status/9…
12:15Хорошо, что случится, если я добавлю индекс по last_name, age, first_name? Или три индекса: по last_name, по first_name и по age?
12:24Начну с наименее оптимальных вариантов: три отдельных индекса. Postgres пытается идти по двум индексам, процом пыта… twitter.com/i/web/status/9…
13:27Плюс MySQL вроде бы не поддерживает bitmap index scan, поэтому будет тоже использовать один индекс (но тут я могу ошибаться)
13:27Еще неправильные варианты: создать индекс по age, first_name, last_name или first_name, age, last_name. В первом сл… twitter.com/i/web/status/9…
13:30Индексы по first_name, last_name и last_name, first_name будут работать примерно одинаково, но first_name, last_nam… twitter.com/i/web/status/9…
13:32Совершенно верно, что порядок в предикате не важен. Также минимально влияние на скорость порядка полей в индексе, е… twitter.com/i/web/status/9…
15:24Так как особенность индекса в том, что данные в нем отсортированы, то его можно использовать для быстрого получения… twitter.com/i/web/status/9…
15:24Задам еще один вопрос и прервусь до вечера. Как быстро выбрать 1000 случайных записей из таблицы в 500 000 000 строк?
15:25@backendsecret select * from some_table tablesample system(1000);
Да. Для postgres лучший вариант. SELECT * FROM table ORDER BY RANDOM() LIMIT 1000 выполнится примерно никогда, так… twitter.com/i/web/status/9…
15:55Это были примеры – в общем случае, если запрос медленный, то нужно выполнить сначала EXPLAIN SELECT * FROM somethin… twitter.com/i/web/status/9…
15:58Об UPDATE.В общем случае в PostgreSQL UPDATE означает DELETE + INSERT, а местами и обновление индексов. Поэтому ста… twitter.com/i/web/status/9…
17:46UPDATE Users SET some_field = true будет существенно быстрей работать, если его переписать как UPDATE Users SET som… twitter.com/i/web/status/9…
17:46Отвлечемся от скучной оптимизации. Какая архитектура вам больше нравится – микросервисы или монолит?
18:39Микросервисы vs монолит - это не новомодный холивар. В далеком 1992 году товарищ Торвальдс пытался доказать товарищ… twitter.com/i/web/status/9…
19:11Плюс монолита – его довольно быстро разрабатывать, одна версия уходит в тестирование и production. И если она хорош… twitter.com/i/web/status/9…
20:10Да, именно поэтому я написал, что монолит хороший «если хорошо протестирован», что для проекта больше домашней стра… twitter.com/i/web/status/9…
21:25Монолит также удобен, что его можно покрыть интеграционными тестами и не нужно возиться с совместимостью версий
21:30Проблемы монолита - сложность растет, следить за ним становится сложнее, человеческий мозг перестает понимать все о… twitter.com/i/web/status/9…
22:20Микросервисы - долго делать, имеют много копипасты, нужно возиться с слвместимостью версий, сложно деплоить
22:21Плюсы - они простые и их можно держать в голове. Вместо сеньоров можно брать июней и отдавать им некритичные сервисы
22:21Если у вас нагруженная система - можно масштабировать один микросервис, а остальную часть проекта не трогать. Это ж… twitter.com/i/web/status/9…
22:23Возьмем к примеру short.cm - если упадет сервис редиректа и API создания ссылок - серьезный ущерб проекту. Если все… twitter.com/i/web/status/9…
22:25Как я разбил short.cm на микросервисы: API - это не микросервис. Redirector - просто смотрит куда ходить и возвраща… twitter.com/i/web/status/9…
23:56Планирую разделить API на CRUD для ссылок и все остальное
23:56Nginx + openresty - делает геолокацию и автогенерацию ssl-сертификатов на доменах клиентов
23:58На сегодня все, завтра о качестве кода
23:58# Четверг 28 твитов
Самая большая проблема разработки – сложность кода как правило превышает способности человеческого мозга. Поэтому г… twitter.com/i/web/status/9…
11:50Простота - это значит, что кода должно быть как можно меньше. Понятность - это значит не писать такое:
sorted(set(… twitter.com/i/web/status/9…
Шаблоны проектирования – можно пролистать просто для того, чтобы узнать, что так тоже можно писать код. Зубрить их… twitter.com/i/web/status/9…
12:08Еще у нас в python есть такое понятие: Java головного мозга. Это когда для написания минимального ToDo листа, делаю… twitter.com/i/web/status/9…
12:32Я ни в коем случае не хочу обидеть ни Java, ни Java-программистов. И язык хороший, и разработчиков там много крутых
12:32@backendsecret Это называется «энтерпрайз головного мозга».
Нет, энтерпрайз головного мозга – это проведение совещания о подготовке совещания по согласованию поправки к технич… twitter.com/i/web/status/9…
12:43Вот, кстати, мнение Алана Кея, который придумал термин ООП, о текущем состоянии дел: quora.com/What-is-Alan-K…
12:56Отложу остальные набросы на вечер и вернусь к SQL. Видел много проектов, которые загибались на INSERT-ах. Правила д… twitter.com/i/web/status/9…
13:30Если этого недостаточно – переходите на COPY TABLE/LOAD DATA INFILE. Все клиенты БД имеют програмный интерфейс к ни… twitter.com/i/web/status/9…
13:30@backendsecret при действительно большом количестве записей имеет смысл обновлять несколькими командами по рейнджам… twitter.com/i/web/status/9…
Верно, это будет немного медленней, но не положит читающие запросы. То же самое стоит делать если нужно добавить в… twitter.com/i/web/status/9…
13: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…
13:42PostgreSQL (в отличие от MySQL) форкается на каждое соединение. Если у вас много подключенных соединений или много… twitter.com/i/web/status/9…
15:12Как вы относитесь к ORM?
16:44Без ORM вам приходится вставлять один ЯП в другой. Кучу логики нужно дублировать (сериализацию/десериализацию, напр… twitter.com/i/web/status/9…
17:34Если хоть одно правило не выполняется - проекту наступит хана. Проблемы с производительностью ORM (а это, к примеру… twitter.com/i/web/status/9…
17:34Ну, кроме случаев с микросервисами. Если там делается три запроса, то никакого ORM, конечно. У меня же нет Java головного мозга
17:36Давайте дальше. Есть ли у вас в проекте жесткая проверка линтами (pyflakes, eslint), запрещающая коммитить неправильный код?
18:15Как правило, документ, описывающий стандарты кодирования, используется только для того, чтобы подпереть ножку стола… twitter.com/i/web/status/9…
18:43Мне обычно совершенно не важны детали соглашений - табы или пробелы, 80 символов или 120, ставить запятую после пос… twitter.com/i/web/status/9…
18:43Так, все вернулись с работы и мы начинаем КВН. Как показывает практика, прием в небольшую компанию выделенного QA у… twitter.com/i/web/status/9…
19:49Пойдем дальше. О необходимости писать тесты даже я, кэп, говорить не буду. Считаете ли вы покрытие кода тестами и ч… twitter.com/i/web/status/9…
21:092) Как правило наличие не технического product менеджера сильно увеличивает сложность проекта, так как он совершенн… twitter.com/i/web/status/9…
21:45При выборе продакта я бы посоветовал брать человека с опытом программирования – они понимают масштаб работ и не буд… twitter.com/i/web/status/9…
21:45@backendsecret покрытие не показывает вообще ничего, смысла считать его нет. а тесты писать надо, но вот товарищ вы… twitter.com/i/web/status/9…
Покрытие мне интересно только в том смысле, что можно его посмотреть и увидеть, какие важные части проекта не покры… twitter.com/i/web/status/9…
22:04На сегодня все, завтра буду писать о деплойменте кода
22:43@backendsecret @vvn33 да этож отсюда pic.twitter.com/NLBmuiGt1Y
Когда всех, кого мог, разозлил, уточню:
Я не утверждал, что QA не нужен. Я не утверждал, что в production начинает… twitter.com/i/web/status/9…
И если вы решили взять QA – постарайтесь хорошо настроить процесс тестирование и будьте готовы к замедлению скорости разработки
22:47@alexanius @backendsecret Больше багов, перестают нормально тестировать сами23:49
Часто разработчики забывают, что QA эт… twitter.com/i/web/status/9…
# Пятница 19 твитов
Как у вас попадает код в production?
11:49Большинство используют git pull. И это вполне хороший способ – деплой происходит мгновенно, что важно при нахождени… twitter.com/i/web/status/9…
12:31Docker немного замедляет процесс деплоймента (но из-за инкрементальной структуры – совсем немного), но решает пробл… twitter.com/i/web/status/9…
12:31А какое ПО вы используете для автоматизации процесса деплоймента?
12:41И опять большинство выбрали правильный ответ. Безагентные программы деплоя проще в установке, настройке и ломаются… twitter.com/i/web/status/9…
13:47В short.cm я использую ansible и он очень крутой, но есть проблема – он деплоит медленно.
В ezyinsights мы использ… twitter.com/i/web/status/9…
13:53Теперь о том, куда деплоить. Пожалуйста, не используйте местечковые хостинги/облака/collocation. Они быстро умирают… twitter.com/i/web/status/9…
15:11И это не стоит двадцати сэкономленных долларов
15:13@backendsecret 1. Heroku
Проблема heroku в том, что он бесплатный сначала и становится жутко дорогим по мере роста проекта twitter.com/otakahuynyaa/s…
15:17Из мест аренды VDS хочется отдельно отметить hetzner.de, который использует десктопное железо для серверов поэтому… twitter.com/i/web/status/9…
15:43По поводу hetzner (и всего остального): если у вас есть единая точка отказа – то вы плохо продумали архитектуру про… twitter.com/i/web/status/9…
16:22@backendsecret с поддержкой проблем не было, напр. оперативно меняли диски... painless )16:33
@steverovsky @backendsecret Около 50 нод, загрузка ~65%, ни одной выпавшей. Иногда проблемы с роутингом бывают, и п… twitter.com/i/web/status/9…16:41
AWS действительно стоит дороже, но дает много технологий из коробки. Так что вы можете уволить своего DevOps и даже выйти в плюс
17:16@backendsecret Скажу еще более крамольную мысль. Для многих проектов даунтайм в ~4 часа не является концом света, и… twitter.com/i/web/status/9…17:34
Какие сервисы AWS я могу рекомендовать: очевидно, EC2
1) Стоит помнить о разных availability zones и не держать все… twitter.com/i/web/status/9…
RDS - вам автоматически дается backup, можно настроить failover и репликацию в два клика. Но нужно помнить, что pro… twitter.com/i/web/status/9…
20:26В общем не успею я твитами рассказать я свой опыт с AWS, поэтому дам ссылку на свой старый пост в FB:… twitter.com/i/web/status/9…
21:53@backendsecret анонсировали с месяц назад, на превью можно подать заявку
Говорят, AWS таки решил родить поддержку Kubernetes. А вот их ECS не пользуйтесь, у меня от этого брат умер twitter.com/mfilippovich/s…
23:56# Суббота 14 твитов
@backendsecret да, я очень рад что решились, у них еще новый сервис анонсировался - надстройка ecs, но все что амаз… twitter.com/i/web/status/9…0:10
@backendsecret consul, nomad, vault, packer, terraform - прекрасные инструменты, очень продуманы, амазон уже посути… twitter.com/i/web/status/9…0:10
На сегодня все. Завтра мониторинг
0:11В большинстве компаний о необработанных ошибках узнают из жалоб клиентов. Это совершенно неправильно. В проекте нуж… twitter.com/i/web/status/9…
11:31Не путайте с сервисами хранения логов. Никто в здравом уме не будет смотреть все логи в поисках ошибок. Sentry сооб… twitter.com/i/web/status/9…
11:59По поводу хранения логов. Я использую cloudwatch logs для short.cm, для своих серверов лучшим вариантом считаю sysl… twitter.com/i/web/status/9…
13:55Sentry решает проблему исключений, но не тормозов. Для сбора базовой статистики о сервере (CPU, памяти, соединения… twitter.com/i/web/status/9…
14:11Для отображения метрик - graphite + grafana: grafana.com вот так выглядят метрики в @EzyInsights: pic.twitter.com/APb0wsI2JP
15:41Помимо отображения метрик графана имеет модуль алертов, который может оповестить вас, если метрика выходит за преде… twitter.com/i/web/status/9…
18:53Помимо системных метрик, отправляемых collectd, вы можете отправлять свои метрики в grafana. Например, время выполн… twitter.com/i/web/status/9…
19:02Лучший способ оповещения о серьезных проблемах – PagerDuty. Он звонит по телефону по очереди каждому ответственному… twitter.com/i/web/status/9…
20:32PagerDuty для США стоит $10/user, для остальных $50/user. Но @dnikolayev нашел способ сэкомить – регистрируете номе… twitter.com/i/web/status/9…
20:32Так как sentry - не анализатор логов, то в репорте он содержит такие полезные данные как локальные переменные функц… twitter.com/i/web/status/9…
23:15@backendsecret Post body с паролями? No security (
У sentry есть автоматическая вычищалка паролей, которая неплохо работает, но можно дописать свою twitter.com/funivan/status…
23:54# Воскресенье 22 твита
Если вам нужно следить за тем, как конкретный запрос путешествовал между микросервисами, то можно попробовать opentracing.io
0:00Завтра буду писать всякую чушь о стартапах
0:00Для отображения графиков из БД и оповещениях о некорректных данных можно использовать redash.io (а то… twitter.com/i/web/status/9…
11:47С ней вы можете сделать проверку на бизнес-метрики: отсутствие регистраций, отсутствие продаж
11:55А теперь как сделать модный стартап (все совпадения с реальными компаниями случайны, а некоторые идеи успешных стар… twitter.com/i/web/status/9…
12:262. Взять компилируемое стороннее приложение на IF-ах, назвать его AI. В случае чего можно сказать «а оно скомпилиро… twitter.com/i/web/status/9…
14:01Все, на кого я набрасывал за неделю, уже три раза забыли, а java-программисты все еще оправдываются/обижаются
14:07@backendsecret Есть ещё решение telegraf, influxdb, grafana. Почти все работает из коробки.14:25
3. BigData. Если у вас меньше 10Tb данных – вы не bigdata. Но если купить redshift и положить в денормализованном в… twitter.com/i/web/status/9…
14:52Вообще все мое отношение к Hadoop на обработке “bigdata” отлично выражает вот эта статья: aadrake.com/command-line-t…
14:56@backendsecret Статья методологически некорректна, и, более того, вредна. Иными словами, альтернативный ее заголово… twitter.com/i/web/status/9…
Вот большинство его так и используют. И статья о том, что технологии надо использовать с умом и по назначению, а не… twitter.com/i/web/status/9…
15:59Ну и последний способ – программисты из долины повышают стоимость стартапа. Поэтому нужно взять самых дешевых и бес… twitter.com/i/web/status/9…
16:44Бессмысленный репозиторий можно назвать "принципиально новая версия"
16:48@backendsecret Ну же, 2к17 на дворе. Добавлять в название нужно «блокчейн».16: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…
18:41@backendsecret Вот только разработка продукта без дедлайна как такового невозможна
Дело в детализации. Если человек застрял на задаче больше, чем нужно – значит нужно уточнить статус/попросить кого-… twitter.com/i/web/status/9…
19:03По поводу мотивации программиста. IMHO главный враг мотивации программиста – это скучная работа. Поэтому нужно стар… twitter.com/i/web/status/9…
19:21Это же касается новых технологий – если новая технология стабильна, решает проблему и не сильно замедляет разработк… twitter.com/i/web/status/9…
19:35@backendsecret А что ты думаешь про переключение программиста на другой проект чтобы не закисал?
Да, периодически менять зоны ответственности полезно (если в компании не все запущено):
1) увеличивается автобусное… twitter.com/i/web/status/9…
Так, ну все. Эту неделю с вами был @kostenko. Я надеюсь, что нанес за эту неделю больше пользы чем вреда и вы узнал… twitter.com/i/web/status/9…
21: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