Pull to refresh
0
0
Send message

Real-time мониторинг тормозящих запросов PostgreSQL своими руками за полчаса

Reading time4 min
Views15K

В моей практике не раз были ситуации, когда хотелось посмотреть, какие именно запросы долго тупили в базе в определённый (конкретный) момент времени. А может, запросы не тупили, но каких-то запросов было слишком много.


Ключевое слово — в конкретный момент времени. Например, база непонятно от чего напряглась на 5 минут, потом всё само рассосалось, и очень хочется знать, почему. Отчёты за сутки, присылаемые dba на основе pg_stats_statements, не всегда проясняют ситуацию. Другие графики и логи могут помочь. Но всё же хочется не гадать на кофейной гуще, а конкретно посмотреть, что такому-то запросу в такое-то время было плохо, или его было много.


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


На удивление, сделать такой мониторинг самому занимает всего полчаса времени, буквально с помощью нескольких строк Go-кода и палок.

Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments8

Дебажим PHP-контейнер с помощью Xdebug и PhpStorm

Reading time2 min
Views28K
Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP».





Инструкция Docker #9: xdebug

Я создам очень простую php-страницу и подебажу ее с помощью xdebug и PhpStorm.

Исходные файлы можно найти здесь:
github.com/ikknd/docker-study в папке recipe-09
Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments4

ClickHouse для продвинутых пользователей в вопросах и ответах

Reading time44 min
Views34K

В апреле инженеры Авито собирались на онлайн-посиделки с главным разработчиком ClickHouse Алексеем Миловидовым и Кириллом Шваковым, Golang-разработчиком из компании Integros. Обсуждали, как мы используем систему управления базами данных и какие сложности у нас возникают.


По мотивам встречи мы собрали статью с ответами экспертов на наши и зрительские вопросы про бэкапы, решардинг данных, внешние словари, Golang-драйвер и обновление версий ClickHouse. Она может быть полезна разработчикам, которые уже активно работают с СУБД «Яндекса» и интересуются её настоящим и будущим. По умолчанию ответы Алексея Миловидова, если не написано иное.


Осторожно, под катом много текста. Надеемся, что содержание с вопросами поможет вам сориентироваться.


Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments3

Руководство по CI/CD в GitLab для (почти) абсолютного новичка

Reading time13 min
Views326K

Или как обзавестись красивыми бейджиками для своего проекта за один вечер ненапряжного кодинга


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


результаты


В статье будет рассмотрена базовая настройка непрерывной интеграции и поставки для проекта библиотеки классов на .Net Core в GitLab, с публикацией документации в GitLab Pages и отправкой собранных пакетов в приватный фид в Azure DevOps.


В качестве среды разработки использовалась VS Code c расширением GitLab Workflow (для валидации файла настроек прямо из среды разработки).

Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments9

ClickHouse – визуально быстрый и наглядный анализ данных в Tabix. Игорь Стрыхарь

Reading time12 min
Views15K

Предлагаю ознакомиться с расшифровкой доклада 2017 года Игорь Стрыхарь «ClickHouse – визуально быстрый и наглядный анализ данных в Tabix».


Веб-интерфейс для ClickHouse в проекте Tabix.
Основные возможности:


  • Работает с ClickHouse напрямую из браузера, без необходимости установки дополнительного ПО;
  • Редактор запросов с подсветкой синтаксиса;
  • Автодополнение команд;
  • Инструменты графического анализа выполнения запросов;
  • Цветовые схемы на выбор.
Total votes 17: ↑16 and ↓1+15
Comments2

Что делать с легаси. Материалы с Badoo PHP Meetup #4

Reading time2 min
Views9K
Всем привет!

15 февраля в офисе Badoo прошла очередная встреча PHP-разработчиков, посвященная теме легаси. Целый день мы слушали рассказы об опыте крупных компаний, общались и делились болью.

Получилось рассмотреть проблему с нескольких сторон:

  • организация процессов разработки по избавлению от легаси;
  • тактика распила легаси-монолита на микросервисы;
  • способы организации API, которые позволяют держать под контролем рост устаревшего кода;
  • автоматические способы обнаружения «мёртвого» кода;
  • а еще попробовали поговорить как рефакторить легаси-код с помощью DDD подходов;

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


Total votes 32: ↑32 and ↓0+32
Comments3

Реализация поиска печатей на OpenCV без нейронок, регистрации и смс

Reading time15 min
Views9.4K


Не так давно перед нами стояла задача найти и извлечь печати с документов. Зачем? Например, для проверки наличия печатей в договорах с двух сторон (участников договора). У нас в закромах уже был прототип для их поиска, написанный на OpenCV, но он был сыроват. Решили откопать данный реликт, стряхнуть с него пыль и на его основе сделать рабочее решение.


Большинство приемов, описанных здесь, можно применить и вне задачи поиска печатей. Например:


  • цветовая сегментация;
  • поиск круглых объектов / окружностей;
  • конвертация изображения в полярную систему координат;
  • пересечение объектов, Intersection over Union (IoU, Коэффициент Жаккара).

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

Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments1

Rhasspy — опенсорсный и полностью офлайновый речевой тулкит. Распознавание русского языка. Никаких утечек в облако

Reading time3 min
Views35K

Фото из сравнения микрофонных массивов для DIY-устройств типа самодельной умной колонки

Системы вроде Amazon Echo передают в облако для хранения ваши конфиденциальные разговоры (даже записанные случайно). В некоторых случаях записи прослушиваются живыми операторами. Это не просто потеря конфиденциальности. Это как добровольно впустить в свою квартиру «товарища майора», который стоит рядом 24 часа в сутки, слушает и внимательно записывает, притворяясь услужливым ассистентом.

Вместо покупки коммерческой системы у корпораций типа Google, Amazon или «Яндекс», вы можете собрать аналогичную опенсорсную систему на базе Raspberry Pi 2-3 B/B+, персонального компьютера или ноутбука.

Rhasspy — безопасный голосовой помощник, который работает автономно. Он ничего не передаёт на удалённые сервисы, при этом успешно справлятся с распознаванием речи и голосовых команд.
Читать дальше →
Total votes 48: ↑44 and ↓4+40
Comments51

Настоящее суммирование интернет-каналов — OpenMPTCPRouter

Reading time7 min
Views90K


Можно ли объединить несколько интернет-каналов в один? Вокруг этой темы куча заблуждений и мифов, даже сетевые инженеры с опытом часто не знают о том, что это возможно. В большинстве случаев, объединением каналов ошибочно называют балансировку на уровне NAT или failover. Но настоящее суммирование позволяет пустить одно единственное TCP-подключение одновременно по всем интернет-каналам, например видеотрансляцию так, чтобы при обрыве любого из интернет-каналов вещание не прерывалось.

Существуют дорогие коммерческие решения для видеотрансляций, но такие устройства стоят много килобаксов. В статье описывается настройка бесплатного, открытого пакета OpenMPTCPRouter, разбираются популярные мифы о суммировании каналов.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments24

Badoo Jira API Client: магия в Jira на PHP

Reading time12 min
Views8.7K
Если в строке поиска на Хабре ввести “Jira Badoo”, результаты займут не одну страницу: мы упоминаем её почти везде, потому что она играет важную роль в наших процессах. Причём каждый из нас хочет от нее немножко разного.



Разработчик, которому пришла задача на ревью, ожидает что в задаче указана ветка, есть ссылки на дифф и лог изменений. Разработчик, который писал код, ожидает увидеть в Jira комментарии по итогам ревью. Тестировщик, который получает задачу после них, хочет видеть результаты тестов и иметь возможность запустить необходимые сборки, не переходя в другие интерфейсы. Продакт-менеджеры вообще хотят создавать десять задач по разработке одновременно, нажав на одну кнопку.

И всё это сегодня доступно и происходит автоматически. Большую часть магии мы реализовали на PHP с помощью постоянно развивающегося API Jira и с использованием её webhook’а. И сегодня мы хотим поделиться с сообществом нашей версией клиента для этого API.

Сначала мы хотели просто рассказать об идеях и подходе, который мы используем, а потом решили, что к такой статье решительно не хватает кода для наглядности. Так появилась open-source-версия Badoo Jira PHP Client. Огромное спасибо ShaggyRatte за то, что помог с ее описанием. И добро пожаловать под кат!
Читать дальше →
Total votes 51: ↑49 and ↓2+47
Comments12

Необычные системные вызовы на Linux

Reading time17 min
Views24K

ls /usr/share/man/man2/


Что видит программист, начиная работать с языком C? Он видит fopen, printf, scanf и ещё много других функций. Видит он и всякие open и mmap — казалось бы, зачем их выделять? Но, в отличие от первой группы, эти две функции при выполнении на ядре Linux являются системными вызовами (на самом деле нет, почти никогда системный вызов нельзя просто вызвать как функцию, и поэтому libc содержит обёртки, перепаковывающие аргументы и иногда, как в случае с тем же open, заменяющие старые системные вызовы более общими новыми). Вообще, в отличие от тысяч библиотечных функций, доступных на типичной GNU/Linux системе, интерфейс ядра имеет довольно ограниченное количество точек входа — порядка нескольких сотен, зато то, что для user space — crash (например, обращение к отсутствующей странице), для ядра — default mode of operation.


В этой статье я расскажу некоторые интересные на мой взгляд факты. В ней не будет futex-ов и прочих скучных (наверное) деталей реализации. Будет преимущественно то, что вызывало у меня реакцию «А что, так можно было?!?».

Читать дальше →
Total votes 64: ↑64 and ↓0+64
Comments8

Базы данных на HighLoad++ 2019

Reading time9 min
Views8.1K
Работа с базой данных — это то, что заметно отражается на производительности любого веб-сервиса. Если постараться, то можно устроить хайлоад вообще без всякой нагрузки.

А если все сделать по уму, то получится обрабатывать запросы многих тысяч пользователей. Поэтому в расписании HighLoad++ традиционно много докладов по базам данных. У нас есть треки по PostgreSQL, MySQL и ClickHouse, есть несколько докладов по MongoDB (в лучших традициях спикер —инженер по производительности в MongoDB). Кроме того, есть выступления, посвященные сравнению разных подходов или рассматривающие специализированные решения. И для общности прибавим сюда Tarantool и in-memory. Итого 33 доклада прямо относятся к секции «Базы данных и системы хранения» и как минимум 10 — косвенно. И это не считая митапов, которых уже не меньше десяти, а еще будут добавляться новые по ходу дела.

Попробуем помочь сориентироваться во всем многообразии и не пропустить действительно уникальные доклады. Для надежности спросим мнения у члена Программного комитета, отвечающего за эту секцию, Николая Самохвалова. И не смотрите, что Николай основатель Postgres.ai и вообще postgresmen — он отлично ориентируется в мире БД, знает любопытные закулисные истории и тренды.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments0

SonarQube и IntelliJ IDEA: правильная интеграция

Reading time7 min
Views39K

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


На данный момент этот инструмент плотно вошёл в нашу жизнь, следя за единым стилем кода и уберегая от самых разных видов ошибок. Поиск ошибок происходит при сборке на CI или перед принятием pull request в версионное хранилище. Все найденные ошибки отображаются в Web-интерфейсе, где можно изучать их и управлять ими.


Однако беда в том, что удобный Web-интерфейс не означает удобство по устранению найденных замечаний в коде проекта. Для того, чтобы внести исправление, приходится сначала смотреть, в каком именно файле это замечание обнаружено, потом открывать этот файл и только затем вносить исправление. Также это приводит к тому, что разработчик узнает о проблеме с очень большим отставанием (иногда анализ в SonarQube может занимать десятки минут), что не способствует поддержанию чистоты кода.


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

Осторожно, много скриншотов
Total votes 18: ↑17 and ↓1+16
Comments1

Обзор методов отбора признаков

Reading time7 min
Views37K


Правильный отбор признаков для анализа данных позволяет:

  • повысить качество моделей машинного обучения с учителем и без, 
  • уменьшить время обучения и снизить требуемые вычислительные мощности,
  • а в случае входных данных высокой размерности позволяет ослабить «проклятие размерности».

Оценка важности признаков необходима для интерпретации результатов модели.

Мы рассмотрим существующие методы отбора признаков для задач обучения с учителем и без. Каждый метод проиллюстрирован open source-реализацией на Python, чтобы вы могли быстро протестировать предложенные алгоритмы. Однако это не полная подборка: за последние 20 лет было создано множество алгоритмов, и здесь вы найдёте самые основные из них. Для более глубокого исследования ознакомьтесь с этим обзором.
Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments4

PHP-библиотеки для e-commerce: работа с АТОЛ и Payture, парсинг кодов GS1 и другие задачи

Reading time6 min
Views6.6K
Привет, меня зовут Павел Савельев, я руководитель отдела автоматизации бизнес-процессов в Lamoda. Мы работаем с очень разными задачами, и стараемся подобрать для каждой наиболее удобный инструментарий. Соответственно, мы используем разные языки — в наших системах можно встретить и Java, и Go, и немного Kotlin под андроид. При этом значительная часть разработки ведется на PHP, на нем написаны более двух десятков сервисов, которые автоматизируют не только работу с заказами, но и операционные процессы широкой сети доставки, колл-центров в трёх странах и собственной фотостудии, а также предоставление всего этого в виде услуг нашим B2B-партнерам. Эти сервисы поддерживают и развивают 5 команд разработки нашего отдела.

image

По мере развития как самих сервисов, так и инфраструктуры вокруг них, в этих системах все чаще возникают похожие задачи, такие как логирование в общую CLS (Centralized Logging System), тестирование файлового хранилища, сбор метрик для Prometheus и другие. Мы стараемся стандартизировать способы решения таких задач и использовать для разных систем общие компоненты.
Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments8

Нейронные сети для трекинга рук в режиме реального времени

Reading time4 min
Views25K
Недавно исследователи из GoogleAI показали свой поход к задаче трекинга руки и определения жестов в реальном времени. Я занимался подобной задачей и потому решил разобраться с тем как они подошли к решению, какие технологии они использовали, и как добились хорошей точности при риал тайм работе на мобильном устройстве. Также запустил модель на android и протестировал в реальных условиях.

Читать дальше →
Total votes 34: ↑34 and ↓0+34
Comments11

Определение кодировки текста в PHP вместо mb_detect_encoding

Reading time3 min
Views7.2K
Существует несколько кодировок символов кириллицы.

При создании сайтов в Интернете обычно используют:

  • utf-8
  • windows-1251
  • koi8-r

Еще популярные кодировки:

  • iso-8859-5
  • ibm866
  • mac-cyrillic

Вероятно это не весь список, это те кодировки с которыми я часто сталкиваюсь.

Иногда появляется необходимость определить кодировку текста. И в PHP даже функция для этого есть:

mb_detect_encoding

Но, как писал m00t в статье Определение кодировки текста в PHP — обзор существующих решений плюс еще один велосипед
Если кратко — он не работает.
Прочитав статьи m00t я не вдохновился его методом и нашел вот такое решение: Определение кодировки текста в PHP и Python
Как сказал m00t
опять коды символов
Я протестировал функцию определения кодировки по кодам символов, результат меня удовлетворил и я использовал эту функцию пару лет.

Недавно решил переписать проект где использовал эту функцию, нашел готовый пакет на packagist.org cnpait/detect_encoding, в котором кодировка определяется методом m00t

При этом указанный пакет был установлен более 1200 раз, значит не у меня одного периодически возникает задача определения кодировки текста.

Мне бы установить этот пакет и успокоиться, но я решил «заморочиться».
Читать дальше →
Total votes 26: ↑21 and ↓5+16
Comments16

Как дебажить переменные окружения в Linux

Reading time4 min
Views28K
Часто бывает так, что приходишь на машину и обнаруживаешь какой-то скрипт, запущенный под системным пользователем неделю назад. Кто его запустил? Где искать этот run.php? Или добавляешь запись в /etc/crontab, а скрипт там падает с ошибкой «command not found». Почему? И что делать? 

У меня есть ответы на эти вопросы.

Читать дальше →
Total votes 88: ↑86 and ↓2+84
Comments22

Уроки труда на дому: наборы детских инструментов от Pebaro

Reading time3 min
Views30K
Года три назад ребенок захотел стучать молотком на даче, и тогда вдруг вспомнилось, что в детстве были классные наборы «взрослых» инструментов для маленьких.

Найти года три назад что-то похожее удалось с огромным трудом и с доставкой из другого региона. Все запросы типа «наборы детских инструментов» вели на всяких Кузей Молотковых — откровенно бесполезную пластмассовую продукцию.

После месяца поисков тысяч за 5 нашелся один небольшой набор бренда Pebaro, и он оказался очень хорош с точки зрения качества исполнения и реальной пригодности. Прошло три года и вот наборы Pebaro в ассортименте стали продаваться в России. Вдруг, надо кому…


Читать дальше →
Total votes 34: ↑29 and ↓5+24
Comments28

Как Badoo добился возможности отдавать 200k фото в секунду

Reading time12 min
Views24K


Современный веб практически немыслим без медиаконтента: смартфоны есть практически у каждой нашей бабушки, все сидят в соцсетях, и простои в обслуживании дорого обходятся компаниям. Вашему вниманию расшифровка рассказа компании Badoo о том, как она организовала отдачу фотографий с помощью аппаратного решения, с какими проблемами производительности столкнулась в процессе, чем они были вызваны, ну и как эти проблемы были решены с помощью софтового решения на основе Nginx, обеспечив при этом отказоустойчивость на всех уровнях (видео). Благодарим авторов рассказа Олега Sannis Ефимова и Александра Дымова, которые поделились своим опытом на конференции Uptime day 4.

— Начнем с небольшого введения о том, как мы храним и кэшируем фотографии. У нас есть слой, на котором мы их храним, и слой, где мы фотографии кэшируем. При этом, если мы хотим добиваться большого хитрейта и снижать нагрузку на стораджи, нам важно, чтобы каждая фотография отдельного пользователя лежала на одном кэширующем сервере. Иначе нам пришлось бы ставить во столько раз больше дисков, во сколько у нас больше серверов. Хитрейт у нас в районе 99%, то есть мы в 100 раз снижаем нагрузку на наши storage, и для того, чтобы это сделать, еще 10 лет назад, когда все это строилось, у нас было 50 серверов. Соответственно, для того, чтобы эти фотографии отдавать, нам нужно было по сути 50 внешних доменов, которые эти серверы обслуживают.

Естественно, сразу встал вопрос: а если у нас один сервер упадет, будет недоступен, какую часть трафика мы теряем? Мы посмотрели, что есть на рынке, и решили купить железку, чтобы она решила все наши проблемы. Выбор пал на решение компании F5-network (которая, кстати, не так давно купила NGINX, Inc): BIG-IP Local Traffic Manager.

Читать дальше →
Total votes 70: ↑67 and ↓3+64
Comments17
1
23 ...

Information

Rating
Does not participate
Registered
Activity