Разработка и инженерия

страница 18 из 46
пост №1135Разработка и инженерия

Пентест — это «испытание на проникновение», когда вы платите хакерам деньги и они пытаются вас взломать.

Технически вы можете быть бронебойны, но «социалка» —социальная инженерия, то, через что взломали твиттер, почти всегда срабатывает.

Эта оплошность твиттера — отличный повод заказать внешний аудит информационной безопасности, если вы этого давно не делали.

Я заказываю такие аудиты у Омара Ганиева. Кстати, один из первых эпизодов нашего подкаста был как раз про безопасность, с Омаром и с Каримом Валиевым, руководителем безопасности mail.ru; — хороший повод послушать классных русских хакеров.

пост №1134Разработка и инженерия

Вчера ночью кто-то провел крупнейшую успешную хакерскую атаку против твиттера.

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

Втереться в доверие, выдать себя не за того, кем являешься — всё это атаки методами социальной инженерии. Про этот тип атак есть хорошая книжка «Искусство обмана» от отца всех хакеров Кевина Митника; рекомендую, отличное чтиво.

Интересно, что получив доступ к твиттерам Илона Маска, Барака Обамы и Apple, взломщики не устроили ничего по-настоящему крутого вроде обвала акций компаний и даже не попытались начать третью мировую из твиттера Трампа.

Все ограничилось привычным разводом публики на биткоины. Взломщики твитили «переводите мне биткоины вот на этот адрес, вернем вдвое, но поторопитесь, раздача слонов 30 минут» от имени всех знаменитостей. Хочется верить, что этот публичный сбор биткоинов — мета-шутка над нами всеми от хакеров-добрых самаритян, а не реальная цель атаки. Иначе как-то совсем грустно.

пост №1124Разработка и инженерия

Через 15 минут, мой партнёр по бизнесу Федя будет поднимать docker swarm кластер для замечательного стартапа w1d1 в прямом эфире.

Вы можете посмотреть сами на Ютубе! Это лайв, заранее мы ничего не готовили, все будет как в жизни.

W1d1 - сервис для развития творчества. Отчасти игра, отчасти - соцсеть. Каждый день, в 10 утра, она присылает одно творческое задание всем участникам. Результат выполнения - фото или видео. Можно посмотреть, какие ответы присылают другие участники. Если у вас айфон - попробуйте сами, затягивает. Для Android запустят чуть позже.

Приложения кроссплатформенные, написаны на react native. Бэкенд тоже на жаваскрипте, nodejs. Там несколько сервисов, которые сейчас запускаются руками через docker start. Федя постарается 12-факторизовать бэкенд и настроить docker swarm, чтобы можно было меньше беспокоиться о падениях и упростить деплой. Для хранения конфигурации он применит ansible.

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

P. S. Мы недавно писали подкаст с основателем w1d1 Лешей Ивановским. Рекомендую, если вдруг пропустили.

пост №1120Разработка и инженерия

Давно не писал, две недели решительно не хотел ничего делать. Хочется свалить всё на пневмонию (не коронавирусную), на самом деле просто устал. Продолбал несколько лидов-клиентов. Раньше бы стыдился, но это тема для отдельного поста.

Между тем, происходит куча всего интересного. В мире пандемия (вот классная визуализация и хорошее видео про неё), а у нас в iGooods рекорд за рекордом. Если раньше в пике было по 70 запросов в секунду, то теперь — больше 400. Каждое выступление Путина — +20% посещаемости.

Чтобы выдерживать такие нагрузки, нужно оптимизировать код и увеличивать объем железа. Серверы масштабируются горизонтально и вертикально. Горизонтально — это когда ставишь рядом со старым сервером ещё один, такой же новый, и они делят нагрузку. Это идеальная схема, так мы сейчас регулярно добавляем серверы приложений. К сожалению, базу данных мы горизонтально масштабировать не умеем — для того, чтобы поставить в параллель два сервера БД, нужна специальная магия, запрогать которую мы не успели.

После последнего выступления Путина мы поняли, что скоро уткнемся в гигабитную сетевую карту на сервере БД (раньше я такого не видел и да, нам нужно переписать эти долбаные запросы). Спасибо огромное селектелу — пошли навстречу и мгновенно собрали кастомный сервер с 10гигабитным интерфейсом. Вот теперь сижу жду, когда ребята потушат на пару минут сайт и переключат базу данных на новую машину. Это — вертикальное масштабирование.

Спокойной ночи! 🌛

пост №1119Разработка и инженерия

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

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

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

Для этого мы пользуемся сервисом datadog. Он дорогой, но стоит своих денег. Главная его сила — не в графиках, а в том, что кроме численных показателей он практически автоматически собирает внутреннее состояние приложения (APM, запросы к базе и вот это всё) и логи (бортовой журнал приложения). Благодаря этому, можно выделить время на графике и увидеть всю отладочную информацию из приложений только за указанный период. Или наоборот, заметить странные логи и одним нажатием посмотреть, как вели себя графики в это время. Это звучит как небольшая и очевидная функция, но во первых, это редкость, а во вторых — очень помогает. Меньше думаешь о том, как найти информацию и больше — о том, что она значит.

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

пост №1118Разработка и инженерия

Мы в iGooods лежали почти полдня. Стыдно! Зря я угорал вчера над утконосом, что они упали. Поделюсь честно, от чего мы лежали. Это подробный постмортем аварии с техническими подробностями, мама, извини.

Из-за коронавируса к нам начали приходить в 2-3 раза больше клиентов, чем обычно. Плюс у нас на днях запускается два новых партнерства — с Joom и с магазинами Лента. Серверы работали на 40-60 процентах емкости и мы решили «добавить железа». В 6 вечера мы налили пару новых машин в кластер приложений, в час ночи по Москве — перетащили базу на новую, ультра мощную тачку. Обе операции — необычные для iGooods, множество вещей делалось руками. Ошибка №0 — мы сделали 2 крупных изменения близко друг с другом

В 7 утра по Москве, сервер базы данных начал плавиться от нагрузки в процессор. Это компьютер с 70 ядрами, но базе нужно было минимум 300. Запросов было вроде бы не сильно больше, чем обычно, но занимали они всё больше времени. Люди просыпались у себя дома и начинали делать заказы — сервера умирали, сайт не открывался, приложения выдавали ошибки. Самое опасное — курьеры и сборщики заказов выходили на работу и не могли работать.

Мы, конечно, думали, что сможем быстро починить проблему. Через час стало понятно, что нужно хотя бы временное решение. Мы выключили все пользовательские интерфейсы iGooods, оставив рабочей только админку и внутренние приложения курьеров и пикеров (сборщиков заказов). Ошибка №1 — в случае аварии не нужно пытаться «сделать хорошо», нужно определить критичные сервисы и восстановить их первым делом.

Мы решили, что проблема в новой базе данных. Мало ли, конфигурация, железо, да хоть драйверы. Попытались вернуться на старый сервер. Мы не сохранили WAL логи между переездами, так что вместо 3 минут эта операция заняла 40 минут — пришлось перегнать всю базу данных между серверами. Мы планировали откат для приложений, но не для переноса базы — он нам казался довольно безопасной операцией. Ошибка №2 — мы решили, что «уж тут-то не взорвется», на самом деле вместе с любым изменением нужно продумывать пути отката.

Возвращение на старый сервер базы данных не помогло. Каждый раз, когда мы включали пользовательские приложения — база данных мгновенно уходила в несознанку и работа бэкофиса парализовалась. Сайт и мобильные приложения к тому моменту лежали уже больше нескольких часов. Самое страшное — мы всё ещё не были уверены, что проблема не в базе данных.

В конце концов, Женя случайно заметили ошибку, что наше rails приложение не может записать в redis-кеш. BINGO! Вот тут всё наконец-то встало на свои места. В нашем приложении есть много страниц, которые собираются очень долго. Все они кешируются rails'ами в redis. И вот этот редис кеш у нас отвалился на запись на части серверов приложений из-за кривых настроек окружения (душераздирающие подробности приложены картинкой). Кеш протухал постепенно и с каждой потерянной записью все больше тяжелых запросов грузили Postgres. Ошибки №3, 4 и 5: настройка тачек производится руками, не кодом; логи переполнены, так что сложно заметить новую ошибку; не все важные сервисы (redis, rails cache) включены в мониторинг.

Как вы можете видеть, всё довольно банально. Будь у нас настроена нормальная рабочая среда — не было бы такой аварии.

Итак, чего нам не хватило и что мы приведем в порядок:
- инфраструктура в коде (полный ansible вместо хождения руками на серверы);
- хороший, чистый мониторинг всех ключевых метрик приложения, APM — за день до аварии мы включили Datadog, но ещё не было нормальных дэшбордов и исторических данных;
- сообщения об ошибках (у нас bugsnag) засраны нерелевантными сообщеними — их нужно почистить.

Мы с Федей обозначили проблемы в первые же дни, но не успели решить их — были вещи поважнее. Знал бы прикуп — жил бы в Сочи.

Если у вас похожая ситуация — рекомендую навести порядок заранее, не ждать форс-мажора.

Ну и делать много сложных правок вместе — чревато. Стоило разнести перенос базы и деплой новых машин на день — тогда бы мы не потратили так много времени на ложный след тормозной базы.

Fin.

пост №1115Разработка и инженерия

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

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

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

Интереснее сейчас, наверное, только у эпидемиологов, в медиа и в школах, которые пытаются перейти на удаленку. 🚀

пост №1107Разработка и инженерия

Я узнал про компанию AnyLogic случайно: мой приятель Ярослав Астафьев пошел туда работать. Я спросил, как дела, он написал, что отлично и прислал ссылку на имитационную модель больницы, где можно, как в Sims, менять помещения, количество докторов, регулировать поток пациентов и другие процессы, которые там происходят. Только это не игра, все моделируется по-настоящему 🤯

Я пошел дальше по сайту и обнаружил среди клиентов компании, о которой раньше никогда не слышал, Facebook, Google, НАТО, NASA и еще десятки самых крупных мировых компаний и организаций. Они все используют продукт AnyLogic, потому что с его помощью, кажется, можно смоделировать вообще какой угодно процесс. То есть если вам нужно представить, как работает склад, торговый центр, вокзал или аэропорт, как улучшить движение самолетов в воздухе или предсказать развитие коронавируса или вирусного ролика, вы это можете сделать, построив из готовых блоков модель и настроив необходимые параметры.

Я позвал Ярика и его коллегу Пашу Лебедева, а потом еще поговорил с человеком, который их разработки применяет на практике, Алексеем Пашкевичем из Института развития транспортных систем. Он, например, проектировал вокзалы перед чемпионатом мира по футболу 2018 года.

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

Слушайте везде: Apple, Google, Castbox, Spotify, Яндекс, Overcast, веб-версия.

пост №1104Разработка и инженерия

Тестирование пуш-уведомлений в iOS всегда было болью. Сколько раз я сам чуть не отправлял пуш «тест» в продакшен (после одного такого раза я перестал тестировать заголовок «Путин умер»), сколько раз видел «тест» от именитых брендов.
А всё потому что пуши работали только на физических телефонах, не на симуляторах.

Наконец-то, в XCode 11.4 можно просто перетащить файл с содержимым пуша в симулятор и он придет как пуш в приложение. Наконец-то! via

пост №1071Разработка и инженерия

Первый эпизод по новостному поводу, про nginx! 90% эпизода — про технологии: что такое Nginx, почему и где он используется, что в нем нравится, а что — бесит. 10% — эмоции, получилось жарко и даже немного стыдно.

А ещё это первый эпизод, в котором два гостя, с которыми до записи я не был знаком даже шапочно.

Гости: Данила Штань, технический директор Яндекс.Вертикалей (Авто.ру, Яндекс.Недвижимость и Яндекс.Работа) и Дима Столяров — технический директор крупного русского devops аутсорсера Фланта.

Го слушать, мы создали: Apple, Google, Castbox, Spotify, Яндекс, Overcast, веб-версия.