Pull to refresh

Technotext

Что делать, чтобы правильные вёдра правильно протекали: иерархический Token Bucket для XDP-программ в eBPF

Level of difficultyMedium
Reading time29 min
Views3.5K

Всем привет! Это Сергей Качеев, старший разработчик в отделе сетевой инфраструктуры Yandex Infrastructure. Наша команда создаёт технологии, на которых работают сервисы Яндекса. В прошлый раз я рассказал целый сетевой детектив о том, как мы искали баг, который убивал DNS‑сервер Unbound. И сегодня я расскажу не менее интересную историю.

Мне на развитие попала XDP eBPF‑программа, которая защищает DNS‑серверы от выхода из строя под слишком большой нагрузкой (другими словами, от DDoS). На ядре 5.4 алгоритм защиты был основан на EWMA‑статистике с вероятностными дропами, которые постоянно контролировались из Control Plane. Это делало eBPF‑программу неавтономной. К тому же если Control Plane падал, то сервер оставался в состоянии последнего удачного обновления eBPF. Это нужно было исправлять — было решено заменить это всё на Token Bucket. Этот момент и будем считать отправной точкой в нашей истории.

Читать далее

Настольная инструкция лида: читать её, конечно, никто не собирался

Reading time11 min
Views20K

Привет! Наш отдел разработки в Ozon Tech часто сталкивается с проблемой онбординга руководителей команд, ведь в каждой компании работа тимлида имеет свою специфику и не всегда позволяет ощутить остроту всех граней управления группой разработчиков. Статья представляет собой настольную инструкцию для лида, которую можно изучать самому или адаптировать для своей команды тимлидов.

Меня зовут Арманд, я руководитель отдела Ozon Crowd. Наш основной продукт — это краудсорс-система Ozon Profit. Изначально я собирал материал для приватной страницы онбординга руководителя в нашу команду, но получилось выделить общие моменты (убрать всю секретную информацию) и составить цельную картину того, с чем может столкнуться начинающий менеджер. Этим я и хочу поделиться с сообществом.

Материал статьи не претендует на объективность. Все упомянутые истории происходили в моей практике или в практике моих сотрудников, совпадения не случайны. Без лишних предисловий, начнём!

Читать далее

«Java – это язык синих воротничков»

Reading time10 min
Views22K

Поговорили с Сергеем, ведущим Java-разработчиком Нижегородского подразделения «Криптонита». В интервью – о языке программирования Java, «синих воротничках», бесполезности pet-проектов и работе инженера в энтерпрайзе без прикрас.

Сергей, расскажи, как именно ты пришёл к мысли изучать Java?

Это забавная история. Все мальчишки в начале 90-х хотели компьютер для игр. Моим товарищам покупали «Спектрум», на котором игры были цветные. У моих родителей не было таких денег. Поэтому они, скрепя сердце, купили мне старый компьютер без модуля цветной псевдографики. Назывался он «Партнер 01.01», как сейчас помню.

Читать далее

Микроклональная лаборатория своими руками

Level of difficultyEasy
Reading time14 min
Views14K

Мои приключения с растениями продолжаются. Я выращиваю настоящий васаби в Москве и планирую построить для него целую ферму. Сейчас я озабочен поиском посадочного материала для своей фермы, но купить рассаду настоящего васаби в России невозможно, её нет физически. Поэтому я решил производить её самостоятельно. И не абы как, а с помощью микроклонального размножения. Для этого я из подручных средств организовал себе лабораторию, о ней и будет этот пост.

Читать далее

Как мы ускорили ванильную FreeIPA в 20 раз!!! (почти)

Level of difficultyMedium
Reading time16 min
Views7.8K

В статье речь пойдет об ALD Pro (Astra Linux Domain Pro).
Один заказчик попросил предоставить инструмент нагрузки LDAP-запросов, да не простой, а с GUI и графиками.

Наша команда в своей работе активно использует open source инструмент нагрузочного тестирования Locust (англ. Саранча). Сам по себе Locust является ядром нагрузки с минимальным функционалом из коробки, но этот функционал расширяется за счет использования Locustfiles, которые пишутся на чистом Python, что позволяет не ограничиваться набором инструкций, как, например, в Dockerfile/Containerfile/Vagrantfile, а писать отдельные Python-модули.
На создании инструмента нагрузки ничего не закончилось, а все только началось.

Мы нагрузили ALD Pro, получили графики и...обнаружили катастрофу.

Читать далее

Machine learning на ESP32

Level of difficultyMedium
Reading time34 min
Views13K

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

В этом примере используются измерения акселерометра MPU 6050 и машинное обучение (ML) для распознавания трех жестов рукой с помощью ESP32. Данные из сенсора распознаются на микроконтроллере и результат выводится в консоль в виде названия жеста и вероятности результата. Модель ML использует TensorFlow и Keras и обучается на выборке данных, представляющей три различных жеста: "circle" (окружность), "cross" (пересечение) и "pad" (поступательное движение).

Разработка проекта начнется с получения данных из акселерометра для построения набора жестов. Затем мы проектируем полносвязную нейронную сеть для распознавания жестов, и подключим модель в проекте ESP32.

В следующей части рассмотрим как настроить Bluetooth LE (BLE) на ESP32 и Android устройстве. Передадим квантированный набор ускорений сенсора по BLE. Настроим Модель ML для распознания жестов на Android.

Читать далее

Сборка Python проекта с uv и Docker

Level of difficultyMedium
Reading time12 min
Views12K

Привет, Хабр! Меня зовут Денис Савран. Я старший разработчик направления серверной разработки на интерпретируемых языках и работаю в компании «Криптонит». В этой статье я хочу поделиться опытом сборки проектов на Python с использованием самых современных инструментов.

Читать далее

Утечки памяти в мобильных приложениях: руководство для QA-инженеров

Level of difficultyEasy
Reading time8 min
Views8.6K

Меня зовут Ира и я руковожу отделом тестирования мобильной платформы: наш отдел занимается разработкой инструментов для автоматизации тестирования мобильных приложений Ozon и тестированием внутренних библиотек, которые используются в наших приложениях. Около года назад мы пытались понять, почему у одной из команд джоба с автотестами отваливается по тайм-ауту. К слову, это был проект мобильного приложения для продавцов, и на нем у нас для автоматизации тестирования используются нативные фреймворки: Kaspresso + Kotlin для Android и XCTest + Swift для iOS.

Одна из гипотез заключалась в том, что в приложении могут быть утечки памяти и что-то зависает. Спойлер: дело было не в этом. В общем, около года назад я проверяла, что к чему там у нас с памятью приложения, а сейчас поняла, что полученными знаниями можно и поделиться.

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

Читать далее

Поиск потенциальных уязвимостей в коде, часть 1: теория

Level of difficultyMedium
Reading time11 min
Views3.2K

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

Читать далее

Улучшаем безопасность ваших CI/CD через Shared Docker executor и OPA-плагин

Level of difficultyEasy
Reading time7 min
Views4.1K

Привет, Хабр! На связи команда безопасности Платформы в лице её тимлида Букина Владимира. Основная задача нашей команды — защита CI/CD и, в частности, GitLab с K8s. Дальше я расскажу вам о том, как мы внедряли, поддерживаем и улучшаем наш плагин авторизации для Docker socket.

Так сложилось в нашей индустрии, что ИБ всегда догоняет технологии, которые внедрили в IT. При внедрении технологии всплывают всевозможные риски, о которых не успели подумать при разработке. Для мира ИБ Docker и K8s — ещё совсем свежие технологии. Исследований не так много. Всё ещё куча уязвимостей (в том числе и необнаруженных), и поэтому поработать с ними особенно интересно.

В статье хочу рассказать о том, как мы сделали наши CI/CD-процессы более безопасными: в частности, про shared Docker executor и использование Open Policy Agent (OPA). Поделюсь нашими правилами для ОРА-плагина, которые можно переиспользовать в любой компании для того, чтобы обезопасить ваши контейнеры.

Статья будет особенно полезна инженерам ИБ, DevOps-инженерам, архитекторам и СТО, но и разработчики найдут для себя что-то интересное, я уверен.
Погнали!

Читать далее

Как поднять на виртуальном сервере собственную интернет-машину времени с помощью ArchiveBox

Level of difficultyEasy
Reading time4 min
Views9.4K

Всем привет, на связи THE.Hosting! Меня зовут Игорь, начиная с 2024 года я работаю в техподдержке компании. А начиная с этого дня я еще буду писать для нашей нашей странички на Хабре ;)

И знаете, что я заметил за время работы? Многие считают, что виртуальный сервер или даже выделенный — это не очень интересно. Ну что максимум на нем можно сделать? Разместить интернет-магазин или любой другой сайт — так себе развлечение. 

Поэтому я взял на себя задачу добавить немного рок-н-ролла и показать, что сервер — это на самом деле гигабайты свежей информации виртуальная техно-лаборатория интересных проектов, экспериментов и даже профессионального роста. Главное, чтобы под рукой был смартфон или компьютер с установленным openssh. И это все по цене пары кружек кофе в месяц. 

В первом выпуске я расскажу о ArchiveBox — сервисе, который позволяет самостоятельно запустить аналог Wayback Machine. 

Читать далее

Я наконец-то нашел идеальную self hosted замену для Google Keep: установка и обзор Memos

Level of difficultyEasy
Reading time4 min
Views14K

Пробовать новые приложения для заметок — это мое немного странное хобби, о котором я случайным людям не рассказываю. Мне нравится переносить все свои тексты в новый сервис, изучать его пару дней, а потом возвращаться обратно. Но недавно я наткнулся на довольно интересный self-hosted сервис, на котором, возможно, задержусь подольше. Рассказываю все подробности о своей находке!

Читать далее

Как правильно измерить скорость интернета (и не сойти с ума)

Level of difficultyEasy
Reading time5 min
Views11K

Всем привет! На связи Игорь из THE.Hosting!

Скорость интернета — вещь очень капризная. Сегодня все летает, завтра еле ползает, а послезавтра вы вообще сидите и смотрите на вечный экран загрузки. Но как правильно её измерить, чтобы не разочароваться, не мучать техподдержку интернет-провайдера? Давайте разбираться!

Читать далее

Кейс оптимизации запросов для Greenplum

Reading time9 min
Views4.5K

Всем привет! Меня зовут Андрей, я работаю дата аналитиком в Data Team продукта Dialog.X5/Insights в X5 Tech. Мы предоставляем аналитику по продажам и покупательскому поведению на данных X5 Group.  Для обработки больших объёмов данных в продукте используется  СУБД (система управления базами данных) Greenplum.

В статье рассмотрим ресурсоёмкую операцию для распределённых систем COUNT(DISTINCT) и два способа оптимизации. Для предварительного погружения в планы запросов можно прочитать вот эту хорошую статью.

Читать далее

Защита почтовой системы от ботнетов

Level of difficultyMedium
Reading time8 min
Views1.6K

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

Читать далее

Свой S3-server: что делать, если ваши десятки петабайт уже не лезут в коробочные объектные хранилища

Level of difficultyMedium
Reading time24 min
Views33K

В 2024 году уже незачем рассказывать об S3-интерфейсе и сравнивать его с другими вариантами организации объектного хранилища. Вот и мы в Ozon, конечно, предоставляем такое платформенное решение широкому спектру внутренних потребителей. От сервисов, которые хранят картинки товаров для каталога, до бэкапов баз данных. От собственных внутренних разработок, до open-source-решений, таких как Gitlab и Thanos.

Пока у вас десятки терабайт и сотни RPS, вас устраивают такие решения, как MinIO. Но по мере роста объёмов и запросов приходится смотреть в сторону таких решений, как Ceph с RGW (RADOS Gateway / Object Gateway). Ну, а когда у вас 3 дата-центра, десятки петабайт данных, миллиарды объектов и десятки тысяч запросов в секунду — в таких условиях и у RGW начинаются проблемы.

Эта история началась с того, что и мы с проблемами масштабирования столкнулись. Под хабракатом вы узнаете, как мы прошли через отрицание проблемы, гнев на Ceph, торг с CTO и разработку собственного решения. Как выбирали технологии, на какие грабли наступили, и что в итоге получилось.

Читать далее

Развиваем продукт «без проблем»

Level of difficultyEasy
Reading time9 min
Views7.3K

В своей прошлой статье я рассказывал о том, как использовать метрики при разработке продуктов. Статья получилась довольно насыщенная, но теоретическая.

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

Как с помощью Jobs To be Done принимать продуктовые решения, и почему сейчас мы используем этот подход для работы над нашими продуктами.

Читать далее

Игра в имитацию: используем Python для генерации синтетических данных для ML и не только

Level of difficultyMedium
Reading time46 min
Views4.5K

Ручной сбор данных — это всегда боль. Он съедает время, деньги и нервы, особенно в таких областях, как медицина или финансы, где затраты могут быть космическими, а юридические барьеры — непреодолимыми. По прогнозу Gartner, к 2030 году синтетические данные полностью затмят реальные данные в моделях ИИ.Почему? Потому что это работает.

Что такое синтетические данные? Это искусственно созданные наборы данных, которые имитируют реальные данные, но не основаны на реальных событиях или людях. Они генерируются с помощью алгоритмов и математических моделей, которые воспроизводят статистические свойства, паттерны и взаимосвязи, присущие реальным данным. По сути, это цифровые двойники реальности, где мы можем контролировать каждый параметр: от распределений до корреляций и аномалий.

Читать далее

Планировщик Go — самый подробный гайд простым языком

Level of difficultyMedium
Reading time27 min
Views47K

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

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

Приступить к проектированию

Повышение производительности складской комплектации: как без трудоёмкого хронометража найти потенциал ускорения

Reading time6 min
Views1.9K

Текущая экономическая ситуация в мире приводит к сильному давлению роста цен во всех секторах экономики. Ритейлеры не могут перекладывать эти риски на плечи своих покупателей, что приводит их к необходимости поиска новых путей сокращения затрат на экземпляр процесса, т. е. на штуку товара. Усиливающаяся конкуренция с e‑commerce требует перестройки процессов и выхода на повышенные скорости доставки в борьбе за клиента.

И кажется, что все имеющиеся инструменты повышения эффективности уже использованы. Но есть ещё один. В этой статье я расскажу о нашем опыте повышения производительности операций в распределительных центрах торговой сети «Пятёрочка» без больших финансовых вливаний и долгосрочных разработок. Я руковожу Департаментом развития аналитики «Цепочки поставок и поддерживающие функции» в Х5 Tech, и моя команда занимается поиском путей повышения эффективности бизнеса через анализ больших данных.

Читать далее