Всем привет! Я Станислав Бушуев, Software Engineer в Semrush. В этой статье я расскажу о том, как мы столкнулись с проблемой периодического обновления Python-зависимостей, тестировали решение с полной их фиксацией, ошибались, и в итоге перешли на Poetry.
Компания Semrush временно не ведёт блог на Хабре
Синхронизация различных хранилищ данных
Всем привет! Я Станислав Бушуев, Software Engineer в Semrush. Сегодня хочу поделиться идеями, как можно реализовать синхронизацию данных между различными хранилищами. Такие задачи иногда возникают в работе, например, при удалении пользовательских данных в рамках General Data Protection Regulation (GDPR) и California Consumer Privacy Act (CCPA).
Как мы провели Hack and Learn Initiative CTF
В декабре 2020 года, за неделю до нового года, компании Semrush и Mail.ru Group решили провести совместное обучающее мероприятие по информационной безопасности в формате CTF.
Причём тут разработчики, тестировщики и devops, зачем и почему – расскажем в этой статье.
Что такое Immutable Infrastructure
Меня зовут Никита, я системный инженер в компании SEMrush. И в этой статье я расскажу вам, что такое Immutable Infrastructure, какие у этого подхода есть преимущества и недостатки и как мы его используем в компании.
Если вы ни разу не слышали такое словосочетание, то усаживайтесь поудобнее, будет интересно.
Что это такое
Immutable Infrastructure — подход к созданию неизменяемой инфраструктуры. Идея его не нова в мире, хоть и не слишком распространена. Мы начали его использовать, когда поняли, что не все можно запустить в Kubernetes, и нам нужны виртуальные машины.
Это подход о виртуалках, к которым надо относиться как к "пакетам" или контейнерам. Образ виртуальной машины, приложение и его окружение — неделимое целое. Деплой новой версии приложения подразумевает создание нового образа виртуальной машины, развертывание из него виртуалки и введение машины в строй на замену "старых" виртуалок. В общем, это практически попытка сделать контейнер из виртуалки.
Ниже мы рассмотрим преимущества и недостатки этого подхода, но прежде я хотел бы вставить небольшую оговорку.
Как пройти финальный уровень JS QA Game от SEMrush
В этой статье я разберу седьмой (финальный и самый сложный) уровень и поделюсь решением победителя игры*.
Истории
Ускоряем деплой на продакшен канарейками и самописным мониторингом
Я расскажу, как мы улучшали релизный пайплайн с помощью канареечного деплоя. Так, за пару лет мы прошли путь от «надо бы попробовать» до самописного тулинга.
Занимательный JavaScript: Почти линейное уравнение
И да, это снова рубрика Занимательного JavaScript'а: прошу под кат всех неравнодушных.
Как мы пробивали Великий Китайский Фаервол (ч.3)
Привет!
Любые хорошие истории заканчиваются. И наша история про то, как мы придумывали решение быстрого прохода Китайского Фаервола, не исключение. Поэтому спешу поделиться с вами последней, завершающей частью на эту тему.
В предыдущей части было рассказано про множество тестовых стендов, придуманных нами, и какие результаты они дали. И мы остановились на том, что неплохо было бы добавить CDN! для вязкости в нашу схему.
Я расскажу вам, как мы тестировали Alibaba Cloud CDN, Tencent Cloud CDN и Akamai, и на чем в итоге остановились. Ну и конечно, подведем итог.
Как мы пробивали Великий Китайский Фаервол (ч.2)
Привет!
С вами снова Никита — системный инженер из компании SЕMrush. И этой статьей я продолжаю историю про то, как мы придумывали решение обхода Китайского Фаервола для нашего сервиса semrush.com.
В предыдущей части я рассказал:
- какие появляются проблемы после того, как принимается решение «Нам нужно сделать так, чтобы наш сервис работал в Китае»
- какие проблемы есть у китайского интернета
- зачем нужна ICP-лицензия
- как и почему мы решили тестировать наши тестовые стенды с помощью Catchpoint
- какой результат дал наш первый вариант решения, базирующийся на Cloudflare China Network
- как мы нашли баг в DNS Cloudflare
Эта часть — самая итересная, на мой взгляд, потому что сосредоточена на конкретных технических реализациях стейджингов. И начнем мы, а точнее продолжим, с Alibaba Cloud.
Как мы пробивали Великий Китайский Фаервол (ч.1)
Всем привет!
На связи Никита — системный инженер из компании SЕMrush. Сегодня я расскажу вам о том, как перед нами встала задача обеспечить стабильность работы нашего сервиса semrush.com в Китае, и с какими проблемами мы столкнулись в ходе ее выполнения (учитывая местонахождение нашего дата-центра на восточном побережье США).
Это будет большая история, разбитая на несколько статей. Расскажу, как все это было у нас: от полностью неработающего сервиса из Китая, до показателей работы сервиса на уровне его американской версии для американцев. Обещаю, будет интересно и полезно. Итак, поехали.
Проблемы китайского интернета
Даже самый далекий человек от специфики сетевого администрирования хотя бы раз, да слышал о Великом Китайском Фаерволе. Ууу, звучит круто, да? Но что это такое, как оно работает на самом деле — вопрос довольно сложный. В интернете можно найти много статей, посвященных этому, но с технической точки зрения устройство этого фаервола нигде не описано. Что, впрочем, неудивительно. Признаюсь сразу, по итогам года работы я не смогу сказать точно, как он работает, но смогу рассказать о своих замечаниях и практических выводах. И начнем мы со слухов об этом фаерволе.
HolyJS 2019: Разбор задач от компании SEMrush (Часть 2)
Это вторая часть разбора задач от нашего стенда на конференции HolyJS, прошедшей в Санкт-Петербурге 24-25 мая. Для большего контекста рекомендуется сначала ознакомиться с первой частью настоящего материала. А если Countdown Expression уже пройден, то добро пожаловать на следующий этап.
HolyJS 2019: Разбор задач от компании SEMrush (Часть 1)
На прошедшей 24-25 мая в Санкт-Петербурге очередной конференции для JavaScript-разработчиков HolyJS стенд нашей компании предлагал всем желающим новые задачки. В этот раз их было 3 штуки! Задачи выдавались по очереди, а за решение каждой последующей полагался знак отличия (JS Brave > JS Adept > JS Master), что послужило хорошей мотивацией не останавливаться. Суммарно мы собрали порядка 900 ответов и спешим поделиться разбором наиболее популярных и уникальных решений.
Пишем краулер на раз-два 1.0
Этой статьей мы начнем итеративно создавать свой
Web Security Testing Starter Kit
Меня зовут Андрей. Уже 10 лет я занимаюсь поиском уязвимостей в различных веб-сервисах. и готов поделиться своими знаниями с вами. В мае прошлого года я выступал с докладом про это на конференции Heisenbug, а теперь готов поделиться своими знаниями еще и здесь, на просторах Хабра. Итак, начнем.
Однажды я нашел уязвимость на серверах небезызвестной компании Facebook. Ребята забыли обновить ImageMagick (библиотеку по обработке изображений) и поплатились за это:) Этим примером я хотел показать, что все мы люди, и все можем допускать ошибки, неважно, в каких компаниях и на каких должностях мы работаем. Проблема только в том, что эти ошибки могут приводить к разного рода рискам.
Чем сложнее у вас приложение/сайт/инструмент, тем больше вероятность того, что что-то может пойти не так.
Проверять на уязвимости нужно. Глупо не делать этого совсем.
Ближайшие события
Хакатон как лекарство от творческой скуки
10 лет назад SEMrush начинался как стартап двух SEO-шников. Сегодня продукт предлагает около 40 инструментов для digital-маркетолога, и произошло это благодаря тому, что в команде всегда поощрялись новые идеи. Поддержание такой среды, в которой идеи драйвят процесс развития – одна из главных задач компании.
Творчество вне рабочей недели
Чтобы творчество не ограничивалось рамками рабочего распорядка, мы проводим небольшие «встряски»: мероприятия, которые помогают взбодрить людей, пробуждают в них стартаперский дух и мотивируют мыслить нестандартно.
В 2016 и 2017 мы провели Неделю Инноваций. Участники делились на команды и создавали инструменты для решения внутренних задач. Каждый выбирал сам, над чем ему интереснее работать: над ботом, подсказывающим, сколько дней отпуска осталось, или над сервисом для создания визиток. Но такой формат получался несколько затянутым, и мы решили попробовать что-то новое.
В этом году мы сократили сроки до выходных и подняли ставки: новенький iPhone X получал каждый участник победившей команды. Но что важнее – на этот раз целевой аудиторией проектов мы сделали наших клиентов. Это добавило командам ответственности и мотивации создать по-настоящему крутой продукт, который сделает профессиональную жизнь маркетологов проще.
Наш хакатон
Разработчики, UX-дизайнеры, аналитики и маркетологи объединились, чтобы воплотить в жизнь свои задумки. Итого у нас было 60 часов работы и 30 участников в 7 командах. Помня о Неделях Инноваций, мы знали, что у команд может не все пойти гладко. Однако в этот раз все дошли до конца и успели зарелизиться к понедельнику. Итак, вот результаты рабочих выходных наших ребят.
История одной задачи: Кратчайший мемоизатор на JavaScript
Дело было вечером, накануне ежегодной конференции HolyJS в Санкт-Петербурге. Наша компания уже не первый год является спонсором: соответственно, имеет и свой стенд с интересностями для пытливого ума неравнодушных разработчиков. Когда основное блюдо было готово и все задания были отревьювены и законфирмены, я решил подкинуть на ночь глядя еще интеллектуальной пищи коллегам:
Напишите мемоизатор — функцию-декоратор, сохраняющую результаты выполнения оборачиваемой функции для предотвращения повторных вычислений. У вас есть всего 50 символов.
Язык — разумеется, JavaScript. Сама задача — классика, но ограничение в 50 символов обернулось настоящим челенджем.
В перерывах первого дня конференции мы обсуждали варианты достижения цели, постепенно сокращая ответ. Весь ажиотаж увенчался идеей поделиться задачей со всеми участниками конференции, и на второй день мы визуализировали задачу (см. приложение) и стали раздавать бланки желающим. В итоге получили около 40 решений и в очередной раз убедились в незаурядности сообщества js-разработчиков, но рекорд Дмитрия Катаева (SEMrush) в 53 символа остался. Давайте разбираться!
Puppet+Hiera. Выжимаем максимум
В этой статье я хотел бы рассказать про то, как мы используем Puppet и Hiera для конфигурирования железных и виртуальных серверов. В основном, в ней будет идти речь об архитектуре и придуманной нами иерархии, облегчающей и систематизирующей конфигурацию серверов.
Написать эту статью меня побудило то, что в интернете я особо не находил хороших, реально рабочих примеров того, как можно работать с hiera и для чего она нужна. В основном, это туториалы с примерами для того, чтобы въехать в тему. Но реальное практическое применение hiera там не написано. Возможно, я плохо искал, но вот вам реальный пример, который, возможно, вам поможет расставить все точки над i, как и мне когда-то.
Для кого была бы полезна данная статья
Если:
- Вы знаете, что такое Puppet и Hiera, но особо не использует их в связке, потому что непонятно, как это делать и зачем
- У вас в компании есть множество команд и вам надо как-то разграничивать конфигурацию серверов на уровне команд
- Вы используете паппет, и нодные файлы у вас разрослись до неимоверных размеров
- Вам нравится читать конфигурацию серверов в божественном yaml формате :)
- Вы в принципе интересуетесь темой Configuration Management и системным администрированием
Эта статья для вас.
Как у нас сломался Ceph
Детектив в 1 части.
Эта история произошла в октябре.
Есть Ceph версии 0.94 (Hammer). 6 стораджей, 8 мониторов, по 6-8 osd на каждом сторадже, SSD диски объемом от 1 ТБ до 4 ТБ. Реплика — 2, минимум 1.
Как-то раз случилось такое: вечером прошел некий шторм по всему кластеру и самопроизвольно перезапустилось множество osd. В логах osd были видны стандартные для ceph ошибки вида
no reply from osd.X
. Немного slow requests и самопроизвольные рестарты, что для ceph не критическое событие и довольно частое. В общем, такое бывает. Но, к сожалению, не все перезапустившиеся osd смогли подняться. А именно пала героем osd.45 на storage6.Визуализация разработки SEMrush.com 2017
Спонсор показа Gource
Под катом пара слов о том, как это сделано.
«Рок это жёстко» или я.музыка как граф
Я очень давно пользуюсь яндекс музыкой для поиска «что послушать». Чаще всего, я просто хожу по похожим исполнителям приятных мне групп, однако, этот метод уже давно не даёт результатов. Какое-то время мои потребности закрывало я.радио с фильтром по жанру, но и его репертуар на удивление скуп. Настало время решать проблему глобально, и вот что из этого получилось =)