1. Общие сведения.
2. Увеличиваем потребление памяти вдвое.
3. Увеличиваем потребление памяти втрое.
4. Ещё раз увеличиваем потребление памяти на ровном месте.
5. Заключение.
РукНапр
Постановка задачи (Job) в очередь Laravel из хранимой процедуры или триггера PostgreSQL
Можно ли заставить приложение на Laravel реагировать на события, происходящие в функциях и триггерах СУБД PostgeSQL? Если повезёт с конфигурацией приложения, то можно. Используя задания и очереди Laravel.
Увлекательный туториал на примере простейшего приложения.
Doctrine ResultSetMapping на примерах
Управление высокодоступными PostgreSQL кластерами с помощью Patroni. А.Клюкин, А.Кукушкин
Расшифровка доклада/tutorial "Управление высокодоступными PostgreSQL кластерами с помощью Patroni". А.Клюкин, А.Кукушкин
Patroni — это Python-приложение для создания высокодоступных PostgreSQL кластеров на основе потоковой репликации. Оно используется такими компаниями как Red Hat, IBM Compose, Zalando и многими другими. С его помощью можно преобразовать систему из ведущего и ведомых узлов (primary — replica) в высокодоступный кластер с поддержкой автоматического контролируемого (switchover) и аварийного (failover) переключения. Patroni позволяет легко добавлять новые реплики в существующий кластер, поддерживает динамическое изменение конфигурации PostgreSQL одновременно на всех узлах кластера и множество других возможностей, таких как синхронная репликация, настраиваемые действия при переключении узлов, REST API, возможность запуска пользовательских команд для создания реплики вместо pg_basebackup, взаимодействие с Kubernetes и т.д.
Слушатели мастер-класса подробно узнают, как работает Patroni, получат практические навыки настройки высокодоступных кластеров на его основе, познакомятся с различными дополнительными возможностями и поучаствуют в диагностике проблем. Будут рассмотрены следующие темы:
- область применения: какие задачи HA успешно решаются Patroni
- обзор архитектуры
- создание тестового кластера
- утилита patronictl
- изменение конфигурации PostgreSQL для кластера, управляемого Patroni
- мониторинг с помощью API
- подходы к переключению клиентов
- дополнительные возможности: ручное переключение, перезагрузка по расписанию, режим паузы
- настройка синхронной репликации
- расширяемость и универсальность
- частые ошибки и их диагностика
Ретроспектива: быть или не быть?
Привет! Я Василий, руководитель отдела тестирования в финансовом маркетплейсе Сравни. Хочу поделиться опытом организации ретроспективных встреч, рассказать, как мы выстраивали процесс, что из этого вышло и какие выводы мы сделали. Этот материал будет полезен для тех, кто еще только планирует организацию ретро и хочет узнать чужой опыт.
Начнем с того, что вся продуктовая часть Сравни делится на кроссфункциональные команды. В каждой продуктовой команде есть свой разработчик, аналитик, тестировщик и тд. Сейчас в разных продуктовых командах работает 21 тестировщик. Вместе с развитием продуктов у нас появилась проблема, которая заключалась в рассинхронизации команды тестировщиков: коллеги не знали, кто чем занимается внутри маленьких команд, каждый тестировщик находился в своем “мире” внутри команды. Мы поняли, что начинать работу по улучшению нам надо с командообразующего инструмента.
Общение между сотрудниками моего отдела в основном строилось за счет личных коммуникаций, при этом так завелось, что у нас не было групповых встреч, где мы могли бы поговорить о своих проблемах, поделится новостями и что-то обсудить. У меня родилась идея, как организовать процесс работы и запустить встречи команды. При этом я принял решение, что эти встречи будут иметь не просто ознакомительную и коммуникационную цель, но и практическую.
Организация PHP-тестов с большими массивами данных
При написании тестов мы сравниваем данные, возвращаемые тестируемой функцией, с их ожидаемыми значениями. Действительные значения мы получаем из результата вызова функции, а ожидаемые значение традиционно указываем в коде теста. Зачастую ожидаемое значение является массивом, а иногда очень большим массивом. Кроме того, тестируемая функция может требовать большой массив данных в качестве входного параметра. И все эти большие массивы должны так или иначе присутствовать в коде теста.
Так, при разработке API нашей команде довелось сверять в тестах многомерные массивы, которые занимают несколько экранов. Наличие этих массивов в коде теста сделало бы разработку и чтение тестов крайне неудобными, поэтому появилась необходимость вынести тестовые данные из кода теста. При этом вынести их надо недалеко от самого теста, чтобы разработчику было удобно просматривать и редактировать эти данные.
В результате был написан скрипт, который позволяет извлекать массивы данных из php-файлов, а также из обычных текстовых файлов, и подставлять эти данные в код теста. Позже этот скрипт был оформлен в php-пакет test-data-provider.
Атаки на сеть. Часть 2
Основной темой данной части будет сканирование и сбор данных о хостах в сети. Рассмотрим основные методы определения наличия рабочих хостов и сервисов в сети. Первую часть можно прочитать здесь.
Laravel: разработка пакетов
Каждый разработчик рано или поздно сталкивается с необходимостью повторного использования собственного кода. В проектах PHP для этих целей создаются пакеты, устанавливаемые с помощью Composer. При этом пакеты могут быть абстрагированы от каких-либо фреймворков, либо могут быть предназначены для использования в конкретном PHP-фреймворке. В данной статье рассказывается о том, как создать PHP-пакеты для фреймворка Laravel, но материал будет полезен и тем, кто собирается разрабатывать любые другие PHP-пакеты (как публичные, так и приватные).
Для лучшего понимания данного материала рекомендуется ознакомиться с разделом о разработке пакетов в официальной документации Laravel. А для более детального изучения темы будет полезен данный ресурс.
Данная статья в большей мере ориентирована на начинающих разработчиков.
Сравнение php-fpm, nginx-unit и laravel-octane
Сравнение производительности php-fpm, nginx-unit и laravel-octane - что выбрать для разработки микросервисов.
Мониторинг и управление потоком задач в рамках взаимодействия микросервисов
Ключевые тезисы:
- Взаимодействие между компонентами напрямую друг с другом может привести к неожиданному поведению, в котором сложно будет разобраться разработчикам, операторам и бизнес-аналитикам.
- Чтобы обеспечить устойчивость бизнеса, вам нужно видеть все возникающие в системе взаимодействия.
- Добиться этого позволяют разные подходы: распределённая трассировка, обычно не учитывающая бизнес-аспекты; озёра данных, требующие заметных усилий по настройке получаемых срезов данных; отслеживание процессов, когда вам приходится моделировать интересующий поток задач; контроль и анализ процессов (process mining), позволяющие исследовать поток задач; и вплоть до оркестрации, в которой прозрачность процессов уже имеется.
- Мы поговорим о том, что вам нужно балансировать между оркестрацией и хореографией микросервисной архитектуры, чтобы понимать, управлять и менять свою систему.
PHP: изменение стуктуры БД в командной разработке
В мире PHP хорошо известны инструменты миграций структуры БД — Doctrine, Phinx от CakePHP, от Laravel, от Yii — это то первое, что пришло в голову. Наверняка, есть еще с десяток. И большинство из них работают с миграциями — командами для внесения инкрементных изменений в схему базы данных.
Я не буду описывать зачем это, на хабре много постов на эту тему. Например:
- Версионная миграция структуры базы данных: основные подходы — хоть и старая статья, но принципы не стареют
- Эволюционный дизайн баз данных — перевод статьи Мартина Фаулера, хорошее описание [инкрементного подхода]
- Опыт 1440 миграций баз данных — практичный пост по работе с PostgesSQL
Далее, развитие моего опыта работы в команде с постоянным изменением структуры БД в разных ветках.
PgGraph — утилита для архивации и поиска зависимостей таблиц в PostgreSQL
Сегодня я хочу представить читателям Хабра утилиту, написанную на Python, для работы с зависимостями таблиц в СУБД PostgreSQL.
API утилиты простое и состоит из трех методов:
- archive_table — рекурсивная архивация/удаление строк с указанными Primary Keys
- get_table_references — поиск зависимостей для таблицы (покажет таблицы, на которые ссылается указанная и ссылающиеся на нее)
- get_rows_references — поиск строк в других таблицах, которые ссылаются на указанные строки в нужной таблице
Что накапать в глаз, чтобы не чесался
Аллергопробы. Ищем тот самый мятлик, на который аллергия
Коты начинают репетировать радостные вопли под окном, ненормальный скворец снова решил, что кондиционер отличное место для гнезда, а солнце упорно намекает, что зима почти закончилась.
Все радуются. А я страдаю в предвкушении всех радостей аллергии на пыльцу, когда хочется выходить на улицу исключительно в скафандре. Мне почему-то кажется, что на Хабре найдётся немало собратьев по несчастью, и им будет интересно разобраться, что это за гадость и как с ней жить. А ещё я расскажу, зачем в моей дамской сумочке лежит коробка Преднизолона и Блефарогель.
«Коллеги, дышите потише»: почему офисный шум сводит нас с ума — обсуждаем исследования
Памятка евангелиста PostgreSQL: репликанты против репликации
В продолжение серии публикаций «Памятка евангелиста PostgreSQL...» (1, 2) дорогая редакция снова выходит на связь, на этот раз с обещанным обзором механизмов репликации в PostgreSQL и MySQL. Главным поводом для написания послужила частая критика репликации MySQL. Как это часто бывает, типичная критика представляет из себя забористую смесь из правды, полуправды и евангелизма. Всё это многократно реплицируется разными людьми без особых попыток разобраться в услышанном. А поскольку это довольно обширная тема, я решил вынести разбор в отдельную публикацию.
Apache vs Nginx: практический взгляд
Введение
Apache и Nginx — 2 самых широко распространенных веб-сервера с открытым исходным кодом в мире. Вместе они обслуживают более 50% трафика во всем интернете. Оба решения способны работать с разнообразными рабочими нагрузками и взаимодействовать с другими приложениями для реализации полного веб-стека.
Несмотря на то, что у Apache и Nginx много схожих качеств, их нельзя рассматривать как полностью взаимозаменямые решения. Каждый из них имеет собственные преимущества и важно понимать какой веб-сервер выбрать в какой ситуации. В этой статье описано то, как каждый из этих веб-серверов ведет себя при различных условиях.
Badoo PHP Code Formatter. Теперь в open source!
Для решения этой задачи мы решили внедрить инструмент для форматирования кода, который умел бы следующее:
- выводить сообщения о несоответствии стандарту форматирования в виде списка, не трогая сам файл;
- автоматически исправлять все найденные проблемы с форматированием;
- уметь форматировать только часть файла (нам не нужно переформатировать репозиторий сразу целиком, чтобы не потерять историю).
Мы рассматривали два проекта, которые можно было бы взять за основу для написания такого инструмента — PHP Beautifier и PHP Code Sniffer. Первый умел форматировать код, но не умел печатать диагностику, а второй — наоборот, умел печатать диагностику, но не умел форматировать файлы. К сожалению, оба этих проекта, по нашей оценке, были не слишком пригодны для того, чтобы добавить в них недостающую нам функциональность, поэтому была написана новая утилита — phpcf (PHP Code Formatter). Уже в течение двух лет она работает как git pre-receive hook, настроенный на отклонение (!) изменений, которые не оформлены по нашему стандарту кодирования.
Наконец настало время открыть исходные тексты нашей утилиты для широкой публики: github.com/badoo/phpcf
MySQL On air. Мониторим SQL запросы
Разбираясь как работает та или иная CMS приходится использовать различные инструменты, облегчающие работу.
Наиболее интересная тема — это работа с баз(ой|ами) данных. Естественно для изучения запросов и результатов запросов нужно использовать что-то универсальное. Что-то, что будет работать стабильно как с известным движком, так и с самописной системой.
Предположим у вас оказалась система управления контентом и вам необходимо посмотреть как реализовано добавление новых пользователей или смена паролей.
Большинство инструментов позволяющих мониторить работу с БД являются платными [раз, два]. Я хотел что-то более легкое и удобное, поэтому выбрал mysql-proxy. Хотя возможности утилиты гораздо шире чем мне требуется, я опишу лишь основное. Работает как под Windows, так и под Unix системами.
Набор Yii2 Behavior для хранения деревьев в БД и их совместного использования
Привет, Хабр!
В одном своём проекте на Yii2 мне захотелось совместить Adjacency List и Nested Sets. Причём так, чтобы в случае отключения поведения Nested Sets, функционал оставался полностью работоспособен. Затем я понял, что Nested Sets мне не нужен, т. к. в базе всё равно приходилось хранить полный путь, поэтому на замену я решил применить Materialized Path. Имеющийся на GitHub Behavior (matperez/yii2-materialized-path) был недостаточно функционален, поэтому пришлось написать свой, а так как я недавно уже писал свои поведения для Adjacency List и Nested Intervals, я решил, почему бы не сделать набор таких поведений с единым API, и возможностью произвольно подключать их к модели одновременно, используя преимущество каждого.
Информация
- В рейтинге
- Не участвует
- Дата рождения
- Зарегистрирован
- Активность