9.8Kпросмотров
5 декабря 2025 г.
Score: 10.7K
🖥 Библиотека для сбора метрик Prometheus для PHP. В пояснительной записке к дипломной работе в колледже, а после и в университете, всегда первыми шли «Анализ существующих аналогов» и «Обоснование выбора языка и сред разработки». В учебное время это были смешные пункты, мол, конечно, есть аналоги лучше моего куска, да и обоснование простое — это надо для учёбы. Но видит бог, на работе я до последнего сопротивлялся тому, чтобы браться писать свой велосипед. Самая популярная 🖥 библиотека имела ряд фатальных недостатков™, форки не спасали, а альтернативы находились ещё дальше от того, что было нужно для нашей инфраструктуры. Таким образом вывод был однозначен: нужно писать своё 💀 За основу я взял 🖥 форк вышеупомянутой библиотеки, т.к. её интерфейс и архитектура были наиболее удачными, а в форке уже была проделана часть необходимой работы. Чем больше я рефакторил, тем больше я начинал понимать, почему в крупных компаниях есть практика аудита зависимостей 🙃 Вот вам несколько примеров (24 миллиона установок, кстати):
❓KEYS для сбора метрик.
❓base64() поверх json_encode().
❓EVAL для записи метрик.
❓SISMEMBER перед SADD.
❓SCAN для очистки хранилища.
❓"Тесты" 😂 // Такс, какие они плохие я написал, теперь нужно рассказать о том, какой я молодец В моём велосипеде:
⭐️ Реализация на двух хешах Redis.
⭐️ Абстрагированная реализация клиента Redis.
⭐️ Сборка метрик в 2 запроса к Redis.
⭐️ Строгая типизация для PHPStan и Psalm.
⭐️ Реальные тесты (пусть их пока и мало).
⭐️ Гораздо более читаемый код (субъективно). Библиотека успешно внедрена на моём рабочем проекте и в перспективе заменит statsd на Аккаунтах Ely.by. Так что прошу любить и жаловать:
🖥 GitHub
🖥 Packagist