Hello prometheus lovers!
В новой версии prometheus/jmx_exporter можно сохранять текстовые поля как labels.
Называется такая функциональность attributesAsLabels.
Например, есть у нас MBean в котором есть текстовые поля Build и Version. Так как у них тип String и так как это Attributes в MBean, а не часть имени, их ранее нельзя было удобно обработать через jmx-exporter
Но в разрабатываемой сейчас версии jmx-exporter появился механизм сохранения полей как меток
Например, можно написать так как описано в issue
🔗 https://github.com/prometheus/jmx_exporter/issues/1147
Текущий релиз jmx-exporter 1.1.0, в нем пока нет этих возможностей
Можно из главной ветки собирать версию и использовать ее в своих контейнерах
Стал это использовать — все работает, есть и некоторые особенности. Если нужна будет помощь, напишите в чате https://www.tgoop.com/qa_load/96303/153200
@qaload
В новой версии prometheus/jmx_exporter можно сохранять текстовые поля как labels.
Называется такая функциональность attributesAsLabels.
Например, есть у нас MBean в котором есть текстовые поля Build и Version. Так как у них тип String и так как это Attributes в MBean, а не часть имени, их ранее нельзя было удобно обработать через jmx-exporter
Но в разрабатываемой сейчас версии jmx-exporter появился механизм сохранения полей как меток
Например, можно написать так как описано в issue
🔗 https://github.com/prometheus/jmx_exporter/issues/1147
includeObjectNames: ["jetbrains.youtrack:type=Maintenance,name=Global"]
metricCustomizers:
- mbeanFilter:
domain: jetbrains.youtrack
properties:
type: Maintenance
name: Global
attributesAsLabels:
- Build
- Version
extraMetrics:
- name: isActive
value: true
Текущий релиз jmx-exporter 1.1.0, в нем пока нет этих возможностей
Можно из главной ветки собирать версию и использовать ее в своих контейнерах
FROM maven:3.9.9-eclipse-temurin-21-jammy
# поставить git
RUN apt-get update && apt-get install -y git
# склонировать репу
RUN git clone https://github.com/prometheus/jmx_exporter.git /tmp/jmx_exporter
# собрать
WORKDIR /tmp/jmx_exporter
RUN mvn -DskipTests=true package
# подготовить каталог
RUN mkdir /opt/app/
# сохранить результат сборки
RUN cp /tmp/jmx_exporter/jmx_prometheus_javaagent/target/jmx_prometheus_javaagent-*-post.jar /opt/app/jmx_prometheus_javaagent.jar
# ——————
FROM jetbrains/youtrack:2025.1.62967
USER root
# подготовить каталог
RUN mkdir /opt/app/
# скопировать файл из стадии № 0
COPY --from=0 /opt/app/jmx_prometheus_javaagent.jar /opt/app/jmx_prometheus_javaagent.jar
RUN chown -R jetbrains:jetbrains /opt/app/
USER jetbrains
Стал это использовать — все работает, есть и некоторые особенности. Если нужна будет помощь, напишите в чате https://www.tgoop.com/qa_load/96303/153200
@qaload
🔥5
Hello performance lovers!
Добавим в CI тесты производительности
⭐️ Запуск тестов на каждую сборку
Про такой опыт можно прочитать в книге Профессиональный бенчмарк, которую написал Андрей Акиньшин.
🔗 https://habr.com/ru/companies/piter/articles/598175/
В этом подходе речь идет о бенчмарках, не об e2e тестах. Бенчмарки быстрее и стабильнее e2e тестов, их можно запускать часто, на каждую сборку
Пример такого фреймворка для JVM - JMH
🔗 https://github.com/openjdk/jmh
Скорость выполнения тестов важна, и чем быстрее тем лучше. Чем меньше в тестах зависимостей, тем меньший объект тестируется, и тем быстрее получаются тесты
⭐️ Тесты на низкоуровневые события
Многие системы используют языки программирования, выполняемые в виртуальной машине, например, JVM. Где есть внутренний механизм записи событий, таких как аллокация нового участка памяти или отправка сетевого пакета или какие-то кастомные. Такой проект как
🔗 https://github.com/moditect/jfrunit
позволяет проверять что во время теста какие-то события были, также можно сделать проверки на количество событий. Например
Это позволяет сделать тесты не на время выполнения. Которое может значительно меняться от разных внешних параметров; и нужна статистическая база, чтобы отделить статистически значимые деградации производительности от мнимых - об этом частично книга Профессиональный бенчмарк. А на события. Тут нужно хорошо знать свое приложение, хорошо знать как оно работает внутри. И тогда можно сделать тест на то, что во время теста сборка мусора не была вызвана ни разу и что потоки не были в состоянии блокировки ни разу.
⭐️ Тесты на прикладные метрики
Иногда сложно сказать сколько низко уровневых событий сделает приложение. Для проекта jfrunit можно сделать привязку к кастомным JFR-событиям, как количество чтений какого-то объекта или количество транзакций. Но тогда эти JFR-события надо будет в коде задать.
⭐️ Тесты на количество SQL-запросов
А есть высокоуровневые метрики популярных фреймворков, которые с высокой вероятностью влияют на производительность. Например, есть ORM-фреймворки, которые генерируют SQL-запросы, и они могут сгенерировать N+1 запрос. Например, если есть объект "команда" а в ней есть список людей, то может получиться так, для для получения одной сущности "команда" будет 1 запрос на команду и еще N запросов для получения участников команды.
Тут могут помочь такие проекты как
🔗 https://github.com/quick-perf/quickperf
🔗 https://youtu.be/xxEr8K4hJYQ?si=u7z0rJzVWvTvy1Hs
где через аннотации подобные такой
можно задать ожидаемое количество SQL-запросов, что их тут будет 1, а не N+1.
⭐️ Умный выбор запускаемых тестов
Если добавить к процессу выбора тестов инструменты code-coverage, то можно автоматизировать запуск тестов только на измененные объекты. Тестов получится меньше, они выполнятся быстрее, чем полный набор тестов. А скорость выпуска сборки важна для более быстрых итераций
Пример такого решения от Gradle
🔗 https://docs.gradle.com/develocity/predictive-test-selection/
также есть решения на базе популярного инструмена JoCoCo
🔗 https://docs.gradle.org/current/userguide/jacoco_plugin.html
но два известных мне решения являются внутренеей разработкой, возможно и в моей компании есть такое решение в том числе и в вашей тоже
И есть варианты реализации, когда для тестов есть pipeline, есть автоматизация, но выполнение теста происходит реже, тогда тесты могут быть более длительными. И быть интеграционным тестами на базе таких инструментов как Apache JMeter, K6, Gatling и так далее
⭐️ Тесты до релиза
Также можно запускать тесты на не каждую сборку, а на каждый релиз, на каждый merge в главную ветку
⭐️ Тесты после релиза
Также можно запускать тесты не перед релизом, а после установки релиза на пред-продуктив. Запускать эти тесты на этом же окружении в ходе автоматических проверок после установки новой версии.
⭐️ Тесты по расписанию
Также можно не блокировать сборки, релизы и деплои, а запускать тесты по своему расписанию
Добавим в CI тесты производительности
Про такой опыт можно прочитать в книге Профессиональный бенчмарк, которую написал Андрей Акиньшин.
🔗 https://habr.com/ru/companies/piter/articles/598175/
В этом подходе речь идет о бенчмарках, не об e2e тестах. Бенчмарки быстрее и стабильнее e2e тестов, их можно запускать часто, на каждую сборку
Пример такого фреймворка для JVM - JMH
🔗 https://github.com/openjdk/jmh
Скорость выполнения тестов важна, и чем быстрее тем лучше. Чем меньше в тестах зависимостей, тем меньший объект тестируется, и тем быстрее получаются тесты
Многие системы используют языки программирования, выполняемые в виртуальной машине, например, JVM. Где есть внутренний механизм записи событий, таких как аллокация нового участка памяти или отправка сетевого пакета или какие-то кастомные. Такой проект как
🔗 https://github.com/moditect/jfrunit
позволяет проверять что во время теста какие-то события были, также можно сделать проверки на количество событий. Например
assertThat(jfrEvents).
contains(JfrEventTypes.GARBAGE_COLLECTION);
Это позволяет сделать тесты не на время выполнения. Которое может значительно меняться от разных внешних параметров; и нужна статистическая база, чтобы отделить статистически значимые деградации производительности от мнимых - об этом частично книга Профессиональный бенчмарк. А на события. Тут нужно хорошо знать свое приложение, хорошо знать как оно работает внутри. И тогда можно сделать тест на то, что во время теста сборка мусора не была вызвана ни разу и что потоки не были в состоянии блокировки ни разу.
Иногда сложно сказать сколько низко уровневых событий сделает приложение. Для проекта jfrunit можно сделать привязку к кастомным JFR-событиям, как количество чтений какого-то объекта или количество транзакций. Но тогда эти JFR-события надо будет в коде задать.
А есть высокоуровневые метрики популярных фреймворков, которые с высокой вероятностью влияют на производительность. Например, есть ORM-фреймворки, которые генерируют SQL-запросы, и они могут сгенерировать N+1 запрос. Например, если есть объект "команда" а в ней есть список людей, то может получиться так, для для получения одной сущности "команда" будет 1 запрос на команду и еще N запросов для получения участников команды.
Тут могут помочь такие проекты как
🔗 https://github.com/quick-perf/quickperf
🔗 https://youtu.be/xxEr8K4hJYQ?si=u7z0rJzVWvTvy1Hs
где через аннотации подобные такой
@ExpectSelect(1)
можно задать ожидаемое количество SQL-запросов, что их тут будет 1, а не N+1.
Если добавить к процессу выбора тестов инструменты code-coverage, то можно автоматизировать запуск тестов только на измененные объекты. Тестов получится меньше, они выполнятся быстрее, чем полный набор тестов. А скорость выпуска сборки важна для более быстрых итераций
Пример такого решения от Gradle
🔗 https://docs.gradle.com/develocity/predictive-test-selection/
также есть решения на базе популярного инструмена JoCoCo
🔗 https://docs.gradle.org/current/userguide/jacoco_plugin.html
но два известных мне решения являются внутренеей разработкой, возможно и в моей компании есть такое решение в том числе и в вашей тоже
И есть варианты реализации, когда для тестов есть pipeline, есть автоматизация, но выполнение теста происходит реже, тогда тесты могут быть более длительными. И быть интеграционным тестами на базе таких инструментов как Apache JMeter, K6, Gatling и так далее
Также можно запускать тесты на не каждую сборку, а на каждый релиз, на каждый merge в главную ветку
Также можно запускать тесты не перед релизом, а после установки релиза на пред-продуктив. Запускать эти тесты на этом же окружении в ходе автоматических проверок после установки новой версии.
Также можно не блокировать сборки, релизы и деплои, а запускать тесты по своему расписанию
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Книга «Профессиональный бенчмарк: искусство измерения производительности»
Привет, Хаброжители! Это исчерпывающее руководство поможет вам правильно разрабатывать бенчмарки, измерять ключевые метрики производительности приложений .NET и анализировать результаты. В книге...
👍2
Одна из популярных стратегий, это выполнение тестов по запросу. Реализация варируется от очень автоматизированной (в рамках ограничений)
🔗 https://youtu.be/lVUGf40RYfk?si=47vQWgUEc5hJam4o
Тут рассказывается про запись трафика с продуктива и его воспроизведении, взгляд со стороны пользователей системы
🔗 https://youtu.be/DKR6o6nEVLY?si=btAv4YPcJz2cbfaX
Тут рассказывается про запись трафика с продуктива и его воспроизведении для микросервисов, взгляд со стороны разработчика системы тестирования производительности
🔗 https://youtu.be/Cn-52dCBm_M?si=Ttp73WWgKMl6P4Gu
🔗 https://youtu.be/Ij7DjFKAfUo?si=sfAh8GziqSSURX4a
Тут рассказывается про генерацию профиля нагрузки на основе трафика продуктив
🔗 https://youtu.be/ADUNuVtX3cs?si=Nm-viDIHDysgspBD
🔗 https://goreplay.org/
🔗 https://github.com/buger/goreplay
Тут рассказывается про запись трафика с продуктива и его воспроизведении в другой реализации
До подходов с большим вовлечением специалистов по тестированию производительности, где специлисты могут реализовать любой сценарий, но автоматизируется запуск, построение отчетов, сравнение результатов, поддержка какого-то протокола или способа корреляции
🔗 https://youtu.be/3u6_FDhKk5s?si=Nk7Z50-VnqY1Hs2z
Тут автоматизирован запуск и хранение результатов
🔗 https://youtu.be/Wu4XKenv0MU?si=t63GKdvHC8y6yJNT
Автоматизирована корреляция при работе с брокерами сообщений
🔗 https://youtu.be/BVfao3wi54k?si=T1NZJ2lpndAgtU2x
Автоматизирована работа с протоколом видео связи
Вариантов реализации много. Сейчас думаю над вариантом реализации для youtrack (сервис управления проектами), где уже есть тесты производительности и есть свои ограничения и возможности. Хочется эффективных и быстрых тестов. Если есть желание обсудить, то удобно это сделать в чате @qa_load в разделе Общий чат про НТ https://www.tgoop.com/qa_load/96294
@qaload
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Книга «Профессиональный бенчмарк: искусство измерения производительности»
Привет, Хаброжители! Это исчерпывающее руководство поможет вам правильно разрабатывать бенчмарки, измерять ключевые метрики производительности приложений .NET и анализировать результаты. В книге...
🔥12👍4
Привет, любители производительности!
В 2024-м году оплатил лицензию Proxyman.io, это была благодарность за проведение одного теста. После оплаты, и после этого теста не пользовался инструментом, но тест был хороший, поэтому отблагодарить разработчиков стоило
Это будет история про miro.com, proxyman.io, artillery.io, Google Chrome, Mozilla Firefox, картинки, кеширование и производительность
В 2024-м году гуляя по Еревану послушал выпуск подкаста PurePerformance: Persona Driven Engineering – The magic of knowing your end users with Barbara Ogris
🔗 https://www.spreaker.com/episode/persona-driven-engineering-the-magic-of-knowing-your-end-users-with-barbara-ogris--50890444
Не смогу пересказать подкаст кратко, но выхватил для себя, что можно попробовать применить это в тестировании производительности, а именно
🟣 поговорить с конкретным пользователем
🟣 понять конкретную проблему производительности
🟣 решить эту проблему и сообщить пользователю, что все готово
И в тоже время был куратором доклада на конференцию heisenbug.ru, готовили с Раисой Липатовой доклад про техники тест-дизайна. И в разговоре с ней узнал, что она проводит курсы обучения, для проведения курсов использует miro.com как основную платформу для слайдов, что она платный пользователь, что слайдов у нее много, на слайдах много картинок, что она открывает их из Израиля, и что все загружается очень медленно. Но дефект она не заводила
Этот доклад Раиса подготовила —Техники тест-дизайна на примере гипотетической системы выдачи Covid QR кодов
🔗 https://www.youtube.com/watch?v=bRGs5ma-8EY
А я взял себе задачу
🟣 исследовать скорость работы пользователей не из Европы
🟣 ускорить скорость открытия досок с большим количеством слайдов
🟣 ускорить скорость открытия досок с большим количеством картинок
✅ а когда все получится, рассказать Раисе, что вот теперь работает быстро
Исследования выявили, что основной браузер клиентов — Google Chrome. И что на досках с большим количеством ресурсов достаточно долго ожидается загрузка ресурсов. В 2024-м году была версия системы, которая подгружала все ресурсы доски сразу, даже если они не были в фокусе, получалось долго. В 2025-м году используется новая версия, где загружаются только ресурсы, видимые сейчас.
Но также, для ресурсов не использовались заголовки кеширования. Таким образом, при перезагрузке страницы, браузер мог посылать запросы на загрузку ресурсов снова, и снова надо было долго ждать.
⚫️ запросы на ресурсы в miro были запросами на адрес https://miro.com/api/v1/user-pictures с параметрами
⚫️ а заголовки ответа о которых пишу это Cache-Control и Expires
Также исследования выявили, что браузер📱 Mozilla Firefox отправляет примерно в 2,5 раза меньше запросов api/v1/user-pictures, чем браузер 📱 Google Chrome. Как оказалось, браузер 📱 Mozilla Firefox игнорирует отсутствие заголовков Cache-Control и Expires для ответов с типом image. 📱 Mozilla всегда кеширует картинки, даже если сервер сказал, что кешировать их не надо, что Expires = времени ответа.
⚫️ интересный момент, что📱 Mozilla всегда кеширует картинки при любых заголовках про кеширование, а 📱 Google Chrome работает согласно заголовкам
И визуальные тесты показали, что действительно — доски с большим количеством картинок загружались в📱 Mozilla Firefox при перезагрузке страницы гораздо быстрее. То есть, можно было написать пользователю — попробуй использовать Mozilla, и сначала открывать доску со слайдами, ждать пока все прогрузится, а потом обновлять страницу. Но этого было мало, надо было сказать разработчикам поменять заголовки
В 2024-м году оплатил лицензию Proxyman.io, это была благодарность за проведение одного теста. После оплаты, и после этого теста не пользовался инструментом, но тест был хороший, поэтому отблагодарить разработчиков стоило
Это будет история про miro.com, proxyman.io, artillery.io, Google Chrome, Mozilla Firefox, картинки, кеширование и производительность
В 2024-м году гуляя по Еревану послушал выпуск подкаста PurePerformance: Persona Driven Engineering – The magic of knowing your end users with Barbara Ogris
🔗 https://www.spreaker.com/episode/persona-driven-engineering-the-magic-of-knowing-your-end-users-with-barbara-ogris--50890444
Не смогу пересказать подкаст кратко, но выхватил для себя, что можно попробовать применить это в тестировании производительности, а именно
🟣 поговорить с конкретным пользователем
🟣 понять конкретную проблему производительности
🟣 решить эту проблему и сообщить пользователю, что все готово
И в тоже время был куратором доклада на конференцию heisenbug.ru, готовили с Раисой Липатовой доклад про техники тест-дизайна. И в разговоре с ней узнал, что она проводит курсы обучения, для проведения курсов использует miro.com как основную платформу для слайдов, что она платный пользователь, что слайдов у нее много, на слайдах много картинок, что она открывает их из Израиля, и что все загружается очень медленно. Но дефект она не заводила
Этот доклад Раиса подготовила —Техники тест-дизайна на примере гипотетической системы выдачи Covid QR кодов
🔗 https://www.youtube.com/watch?v=bRGs5ma-8EY
А я взял себе задачу
🟣 исследовать скорость работы пользователей не из Европы
🟣 ускорить скорость открытия досок с большим количеством слайдов
🟣 ускорить скорость открытия досок с большим количеством картинок
✅ а когда все получится, рассказать Раисе, что вот теперь работает быстро
Исследования выявили, что основной браузер клиентов — Google Chrome. И что на досках с большим количеством ресурсов достаточно долго ожидается загрузка ресурсов. В 2024-м году была версия системы, которая подгружала все ресурсы доски сразу, даже если они не были в фокусе, получалось долго. В 2025-м году используется новая версия, где загружаются только ресурсы, видимые сейчас.
Но также, для ресурсов не использовались заголовки кеширования. Таким образом, при перезагрузке страницы, браузер мог посылать запросы на загрузку ресурсов снова, и снова надо было долго ждать.
⚫️ запросы на ресурсы в miro были запросами на адрес https://miro.com/api/v1/user-pictures с параметрами
⚫️ а заголовки ответа о которых пишу это Cache-Control и Expires
Также исследования выявили, что браузер
⚫️ интересный момент, что
И визуальные тесты показали, что действительно — доски с большим количеством картинок загружались в
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Я нашел место в коде, где заголовки должны ставиться, нашел аннотацию на метод, которая включит кеширование, начал общение. Также узнал, что кеширование было когда-то сознательно отключено из-за возможного security сценария, при котором CDN-сервер кешировал на своей стороне ресурс-картинку, а потом неавторизованный пользователь мог перебором начинать обращаться к картинкам и скачивать их, ведь на CDN-сервере нет авторизации.
⚫️ Тут имею в виду такую архитектуру📱 => CDN без проверки прав доступа => серверы с проверкой прав доступа
И поэтому в каждой картинке добавлен уникальный секретный ключ, одноразовый в рамках сессии, и кеширование выключено
Интересный момент, почему кеширование может быть выключено даже при наличии секретного одноразового ключа в адресе картинки, который злоумышленник уже точно не сможет подобрать? Потому что у CDN есть лимит того, что он будет хранить на своих серверах в кеше, если ему надо хранить 1000 уникальных ресурсов, то это стоит 1000 условных монет, а если при каждом открытии доски добавляется уникальный access token, то надо хранить уже 1 миллион миллионов ресурсов, и это стоит кратно больше
Хорошо, что CDN-сервер может не кешировать на своей стороне ресурсы вообще, если указать заголовок, что кешировать надо только на клиенте, но не на промежуточных серверах. Для этого кеш должен быть private
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control
⚫️ если вы не знали про
Но чтобы продемонстрировать эффект от такой правки, нужен был тест. И для теста использовал связку📱 => Proxyman со скриптом => miro.com, тест наглядно показывал, как включение кеширования ускоряет работу. В proxyman скрипты активириются через меню Scripting, для своего скрипта задал такие параметры
🟣 Name:
🟣 URL:
🟣 Method:
🟣 Use Wildcard
И в функции onResponse написал две строки на JavaScript (дата 01 May 2024 на тот момент была датой в будущем)
Демонстрация была проведена. Совещания были назначены, созвоны созвонены, задачи поставлены, ... код написан, версия выпущена. Не за день, но все получилось. Получилась такая версия, которая при перезагрузке страницы загружала картинки из локального кеша, и это было на столько быстро, что они отображались почти мгновенно
⚫️ Тут надо помнить, что локальный кеш браузера тоже ограничен
📱 https://chromeenterprise.google/policies/#DiskCacheSize можно групповыми политиками увеличить этот параметр вот так
📱 или через ключ
📱 А в FireFox это 1 ГБайт https://support.mozilla.org/en-US/questions/1272857#:%7E:text=Now%20look%20for%20%27%27%27browser,KB%2C%20before%20restarting%20Firefox%20again
📱 Для Edge тоже можно настроить https://www.thewindowsclub.com/change-microsoft-edge-cache-size-in-windows-10
Сообщил пользователю какую версию использовать, и что этот апдейт сделан специально, поблагодарил за обратную связь. Мне это так понравилось, что решил потом и разработчиков proxyman отблагодарить, оплатив лицензию на Pro версию. Фичи этой Pro версии не использовал, это было просто так. Всем рекомендую попробовать сделать customer based тест, это супер приятно и есть сильная мотивация сделать так, чтобы все получилось
⚫️ Тут имею в виду такую архитектуру
И поэтому в каждой картинке добавлен уникальный секретный ключ, одноразовый в рамках сессии, и кеширование выключено
Интересный момент, почему кеширование может быть выключено даже при наличии секретного одноразового ключа в адресе картинки, который злоумышленник уже точно не сможет подобрать? Потому что у CDN есть лимит того, что он будет хранить на своих серверах в кеше, если ему надо хранить 1000 уникальных ресурсов, то это стоит 1000 условных монет, а если при каждом открытии доски добавляется уникальный access token, то надо хранить уже 1 миллион миллионов ресурсов, и это стоит кратно больше
Хорошо, что CDN-сервер может не кешировать на своей стороне ресурсы вообще, если указать заголовок, что кешировать надо только на клиенте, но не на промежуточных серверах. Для этого кеш должен быть private
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control
Private cache
Cache that exists in the client. It is also called local cache or browser cache. It can store and reuse personalized content for a single user.
private
The private response directive indicates that the response can be stored only in a private cache (e.g. local caches in browsers).
Cache-Control: private
⚫️ если вы не знали про
Cache-Control: private
, то эта директива может сэкономить на счетах за CDNНо чтобы продемонстрировать эффект от такой правки, нужен был тест. И для теста использовал связку
🟣 Name:
/api/v1/user-pictures
🟣 URL:
https://miro.com/api/v1/user-pictures?*
🟣 Method:
GET
🟣 Use Wildcard
И в функции onResponse написал две строки на JavaScript (дата 01 May 2024 на тот момент была датой в будущем)
// Update or Add new headers
// response.headers["Content-Type"] = "application/json";
response.headers["Cache-Control"] = "private, max-age=31536000";
response.headers["Expires"] = "Wed, 01 May 2024 16:15:02 GMT";
Демонстрация была проведена. Совещания были назначены, созвоны созвонены, задачи поставлены, ... код написан, версия выпущена. Не за день, но все получилось. Получилась такая версия, которая при перезагрузке страницы загружала картинки из локального кеша, и это было на столько быстро, что они отображались почти мгновенно
⚫️ Тут надо помнить, что локальный кеш браузера тоже ограничен
--disk-cache-size=524000000
(по умолчанию 320 МБайт)Сообщил пользователю какую версию использовать, и что этот апдейт сделан специально, поблагодарил за обратную связь. Мне это так понравилось, что решил потом и разработчиков proxyman отблагодарить, оплатив лицензию на Pro версию. Фичи этой Pro версии не использовал, это было просто так. Всем рекомендую попробовать сделать customer based тест, это супер приятно и есть сильная мотивация сделать так, чтобы все получилось
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Если так случилось, что в текущей версии вашего любимого сайта для презентаций отпало кеширование статики и картинок в частности, то можете попробовать Mozilla, где есть баг игнорирования Expires и Cache-Control для картинок, этот баг становится фичей-ускорителем. Или можете попробовать свой прокси-сервер для активации кеширования. Или можете рассказать историю кому-то из команды разработки системы. Для этого возможно надо будет подать доклад на конференцию 🤗
Про artillery не рассказал еще. Чтобы измерить на сколько отличается скорость работы сайта для пользователей из разных стран можно использовать данные Chrome User Experience report, который удобно визуализировать на карте через treo.sh
🔗 https://treo.sh/sitespeed/miro.com?mapMetric=fcp
но Google собирает данные по домену в целом, не по страницам
И в какой-то момент мы решили собирать данные по конкретным доскам (пустая, не пустая), по тестовым доскам. И инструмент artillery.io тут подошел хорошо. Было с ним тоже не все так просто, опишу потом.
Про artillery не рассказал еще. Чтобы измерить на сколько отличается скорость работы сайта для пользователей из разных стран можно использовать данные Chrome User Experience report, который удобно визуализировать на карте через treo.sh
🔗 https://treo.sh/sitespeed/miro.com?mapMetric=fcp
но Google собирает данные по домену в целом, не по страницам
И в какой-то момент мы решили собирать данные по конкретным доскам (пустая, не пустая), по тестовым доскам. И инструмент artillery.io тут подошел хорошо. Было с ним тоже не все так просто, опишу потом.
👏6
Привет любители производительности!
Подумал что напишу, как банить, отписываться, удалять, закрывать, ... для производительности, конечно. И вы, возможно, отпишитесь от этого канала, а может быть и нет 😄
Я использую youtube, telegram, linkedin и много разных программ и вкладок браузера. И за неделю накапливается много всего лишнего, а потом еще youtube и linkedin начинают рекомендовать много всего лишнего
Поэтому выбираю один вечер и просматриваю всю ленту рекомендаций и если это рекомендовано зря, то прошу не рекомендовать это больше. Но это не срабатывает🤦♂️
Что можно сделать дополнительно
Для YouTube можно
*️⃣ открыть страницу истории и просто удалить оттуда лишние записи, но оставить похожие на интересные. И тогда в рекомендациях будет появляться что-то похожее. Это страница https://www.youtube.com/feed/history
*️⃣ одновременно с этим подписываться или добавлять в playlist то, что понравилось
*️⃣ и просить не рекомендовать видео по какой-то теме или с какого-то канала
Для Linkedin можно
*️⃣ открыть страницу профиля (кликнуть на свой аватар) / ⚙️ Settings (внизу) / 🔔 Notifications (внизу) / там будет 13 разделов по которым приходят подписки - можно отписаться от большинства из них
*️⃣ одновременно с этим подписываться или добавлять в 🚩 Saved то, что понравилось из рекомендаций или оставлять реакции с комментариями
*️⃣ и просить не рекомендовать лишние записи и авторов
В Telegram ленты, как таковой, нет. Тут настроил разные каталоги
*️⃣ Отключил уведомление почти у всего, настраивается в каждом чате/канале/контакте отдельно
*️⃣ А что-то поместил в Архив, чтобы поиском найти можно было, но не было видно
Для MacOS можно настроить две кнопки из раздела Apps / Other / Shortcuts
*️⃣ Stop Distructions и добавить там правила 🌜 Turn : Do not Disturb : On + ❎ Quit : App : Telegram + ❎ Quit : App : Slack + ...
*️⃣ Start Pomodoro - тоже полезная
*️⃣ Закрепить кнопки Stop Distructions и Start Pomodoro в панели задач
Использую их в паре, нажимаю обе, стартует таймер на 25 минут, а через 25 минут можно открыть снова Slack и Telegram и проверить нет ли там каких-то нужных сообщений, прочитать их. Потом снова нажать обе кнопки, снова 25 минут работы
Если коротко, то иногда вдумчиво читаю ленту, что-то с ней делаю, и так лента становится интересной и про нагрузку
Подумал что напишу, как банить, отписываться, удалять, закрывать, ... для производительности, конечно. И вы, возможно, отпишитесь от этого канала, а может быть и нет 😄
Я использую youtube, telegram, linkedin и много разных программ и вкладок браузера. И за неделю накапливается много всего лишнего, а потом еще youtube и linkedin начинают рекомендовать много всего лишнего
Поэтому выбираю один вечер и просматриваю всю ленту рекомендаций и если это рекомендовано зря, то прошу не рекомендовать это больше. Но это не срабатывает
Что можно сделать дополнительно
Для YouTube можно
Для Linkedin можно
В Telegram ленты, как таковой, нет. Тут настроил разные каталоги
Для MacOS можно настроить две кнопки из раздела Apps / Other / Shortcuts
Использую их в паре, нажимаю обе, стартует таймер на 25 минут, а через 25 минут можно открыть снова Slack и Telegram и проверить нет ли там каких-то нужных сообщений, прочитать их. Потом снова нажать обе кнопки, снова 25 минут работы
Если коротко, то иногда вдумчиво читаю ленту, что-то с ней делаю, и так лента становится интересной и про нагрузку
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Привет любители производительности!
Этот канал был задуман, как канал со ссылками на обсуждения в чате qa_load. Это было важно, когда в Telegram не было подчатов, был только один чат General и надо было как-то группировать сообщения из General. Потом в Telegram появились подчаты и текущий канал qaload был отвязан от qa_load
И вот сегодня @qa_load дорос до четырех девяток⭐️ ⭐️ ⭐️ ⭐️ или четырех нулей *️⃣ *️⃣ *️⃣ *️⃣
Случилось это 18 апреля 2025-го года, спустя 2354 дня после старта
qa_load был стартован Сашей, как отдельный раздел про нагрузку, отдельный от @qa_automation
Рос qa_load со средней скоростью ~ 4.25 новых участников в день. И этот график роста линейный, идеально прямая линия. С первого дня до текущего момента (на таком масштабе в 2354 дня) линия прямая.
Долгое время в чате не было статистики и в Telegram ее не было. И появилась традиция дарить машину или мотоцикл или самолет или поезд на круглое число, например, подарить автомобиль у которого двигатель крутится со скоростью 8000 оборотов в минуту 8000-му человеку. А потом эти посты собирались в эту прямую линию, в них была дата и количество. И, конечно же, людям приятно💛
Еженедельно его просматривает 215-230 любителей производительности
Постоянно команда ботов и админов следят за качеством дискуссий. Самый главный бот самописный, его Саша написал и поддерживает
Иногда бывает реклама. Я как-то вел учет, и пока его вел было заработано 1700 рублей (кажется) или $20. И это было каждый раз сложно. А вот делать бартер было несложно, бартер на билеты или еще на что-то, что можно бы было сразу потратить. И в какой-то момент все перешло на бартер
В чате можно найти около 6 розыгрышей билетов на разные конференции (я столько вспомнил, может неточное число)
Затрудняюсь сказать сколько стоит инфраструктура вокруг чата. Думаю около $250 в год и еще время 200+ человек каждую неделю
У меня профессиональная деформация, люблю числа и графики. Спасибо за Ваш вклад в числа и графики описанные выше 🤗
Этот канал был задуман, как канал со ссылками на обсуждения в чате qa_load. Это было важно, когда в Telegram не было подчатов, был только один чат General и надо было как-то группировать сообщения из General. Потом в Telegram появились подчаты и текущий канал qaload был отвязан от qa_load
И вот сегодня @qa_load дорос до четырех девяток
Случилось это 18 апреля 2025-го года, спустя 2354 дня после старта
qa_load был стартован Сашей, как отдельный раздел про нагрузку, отдельный от @qa_automation
Рос qa_load со средней скоростью ~ 4.25 новых участников в день. И этот график роста линейный, идеально прямая линия. С первого дня до текущего момента (на таком масштабе в 2354 дня) линия прямая.
Долгое время в чате не было статистики и в Telegram ее не было. И появилась традиция дарить машину или мотоцикл или самолет или поезд на круглое число, например, подарить автомобиль у которого двигатель крутится со скоростью 8000 оборотов в минуту 8000-му человеку. А потом эти посты собирались в эту прямую линию, в них была дата и количество. И, конечно же, людям приятно
Еженедельно его просматривает 215-230 любителей производительности
Постоянно команда ботов и админов следят за качеством дискуссий. Самый главный бот самописный, его Саша написал и поддерживает
Иногда бывает реклама. Я как-то вел учет, и пока его вел было заработано 1700 рублей (кажется) или $20. И это было каждый раз сложно. А вот делать бартер было несложно, бартер на билеты или еще на что-то, что можно бы было сразу потратить. И в какой-то момент все перешло на бартер
В чате можно найти около 6 розыгрышей билетов на разные конференции (я столько вспомнил, может неточное число)
Затрудняюсь сказать сколько стоит инфраструктура вокруг чата. Думаю около $250 в год и еще время 200+ человек каждую неделю
У меня профессиональная деформация, люблю числа и графики. Спасибо за Ваш вклад в числа и графики описанные выше 🤗
Please open Telegram to view this post
VIEW IN TELEGRAM
❤28
Для удобства разработки тестов производительности настроил локальный тестовый стенд. Который может работать без сети. И в том числе pipeline настроил локально TeamCity Server + Agent, так вся разработка получилась в IDEA и как код
⭐️ Но получил ошибку в Idea с текстом, которая не позволяет работать с git
Как видно, в тексте ошибки говорится про git-объекты из каталога
Причиной такого интереса IntelliJ IDEA к каталогу /opt/buildagent/system оказался файл
Какими-то действиями добавил туда каталог, в который выгружается этот же репозиторий при сборке
⭐️ Способ починить Idea - удалить лишнюю строку 5 из файла .idea/vcs.xml
Репозиторий в каталоге Build Agent сломался потому что для агента он находится по адресу
💬 Иногда коллеги по нагрузке рассказывают про ожидания доступов до начала работы над проектом
💡 Можно практиковать развертывание локального окружения c CI/CD, Grafana и git (тоже можно поднять локально)
⭐️ Могут возникнуть ошибки, но они решаемые
⭐️ А такой проект несложно перенести на другое окружение при получении доступов
Error updating changes: [4804c71824c21b5c] unable to normalize alternate object path: /opt/buildagent/system/git/git-FFDF2529.git/objects
Как видно, в тексте ошибки говорится про git-объекты из каталога
/opt/buildagent/system/
, а текущий проект находится в каталоге разработки, в home (~), но не в opt. Почему Idea смотрит на каталог opt?Причиной такого интереса IntelliJ IDEA к каталогу /opt/buildagent/system оказался файл
.idea/vcs.xml
Какими-то действиями добавил туда каталог, в который выгружается этот же репозиторий при сборке
Репозиторий в каталоге Build Agent сломался потому что для агента он находится по адресу
host.docker.internal
, который недоступен локально, и там работа идет с веткой otel
, которая есть не во всех внешних git-репозиториях, подключенных к проектуPlease open Telegram to view this post
VIEW IN TELEGRAM
🫡5👍3
Привет всем!
Встречался вчера с любителями Grafana на митапе Grafana & Friends Berlin
Рассказывал и показывал разные способы автоматизации анализа досок с метриками
Демонстрация на слайдах не очень отражена, но основные идеи тут изложил
https://polarnik.github.io/grafana-analysis-automation/
Буду рад вопросам
Встречался вчера с любителями Grafana на митапе Grafana & Friends Berlin
Рассказывал и показывал разные способы автоматизации анализа досок с метриками
Демонстрация на слайдах не очень отражена, но основные идеи тут изложил
https://polarnik.github.io/grafana-analysis-automation/
Буду рад вопросам
polarnik.github.io
How to automate Grafana dashboards analysis
🔥13❤🔥3❤1
Привет всем!
Готовлюсь записывать короткие видео и демо, связанные с производительностью. Раньше уже брался, но бросал. Поэтому сейчас нужен public commitment, надо пообещать что сделаю. Это обещания-пост. А начал с того, что пересмотрел набор инструментов для видео
Утилиты которые сейчас выбрал и проверил:
🎚 https://borumi.com/ — тут довольно просто разбить все на части и записать демо по частям, это 99% работы
🎚 https://www.capcut.com/ — чтобы добавить еще 1% в виде пары эффектов и акцентов, как 🔥 ⚡️ 💡 ❗️
Есть план укладываться в 4-5 часов при подготовке видео на 10 минут
Ранее использовал более профессиональные и сложные инструменты и тихонько отказываюсь от них:
🎚 https://obsproject.com/
🎚 https://www.blackmagicdesign.com/products/davinciresolve
Они мощные, но регулярную работу с ними я не освоил, дальше экспериментов не ушел
iMovie не очень мощный, чтобы записать и склеить видео можно
🎚 https://apps.apple.com/de/app/imovie/id377298193
🎚 screenshot + quicktime для видео
но потом внутренний перфекционист не дает покоя
Супер простой и популярный инструмент
🎚 https://screen.studio/
выбирать не стал, так как он очень популярный и узнаваемый, то что видео сделано в нем видно сразу, и это как-то лишало такое видео хардкорности
К ноябрю тут появится что-то новое:
📱 https://www.youtube.com/@qaload
А может не тут, но где-то рядом
Готовлюсь записывать короткие видео и демо, связанные с производительностью. Раньше уже брался, но бросал. Поэтому сейчас нужен public commitment, надо пообещать что сделаю. Это обещания-пост. А начал с того, что пересмотрел набор инструментов для видео
Утилиты которые сейчас выбрал и проверил:
Есть план укладываться в 4-5 часов при подготовке видео на 10 минут
Ранее использовал более профессиональные и сложные инструменты и тихонько отказываюсь от них:
Они мощные, но регулярную работу с ними я не освоил, дальше экспериментов не ушел
iMovie не очень мощный, чтобы записать и склеить видео можно
но потом внутренний перфекционист не дает покоя
Супер простой и популярный инструмент
выбирать не стал, так как он очень популярный и узнаваемый, то что видео сделано в нем видно сразу, и это как-то лишало такое видео хардкорности
К ноябрю тут появится что-то новое:
А может не тут, но где-то рядом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤🔥10❤4
Viacheslav Smirnov
Привет всем! Готовлюсь записывать короткие видео и демо, связанные с производительностью. Раньше уже брался, но бросал. Поэтому сейчас нужен public commitment, надо пообещать что сделаю. Это обещания-пост. А начал с того, что пересмотрел набор инструментов…
А по sitespeed будешь пилить?
❤1
Заметил что у YouTube канала появились подписчики, хотя там нет никаких обновлений. Вот авторы, подходы которых посмотрел, тут есть обновления:
Anton Putra⏺ 106 тыс. подписчиков ⏺ 274 видео
A Life Engineered⏺ 177 тыс. подписчиков ⏺ 126 видео
James Willett⏺ 6,11 тыс. подписчиков ⏺ 46 видео
Alek OS⏺ 279 тыс. подписчиков ⏺ 64 видео
Лёша Корепанов⏺ 224 тыс. подписчиков ⏺ 153 видео
Software Engineering With Scott Moore⏺ 306 тыс. подписчиков⏺ 628 видео
Federico Terzi⏺ 9,04 тыс. подписчиков⏺ 43 видео
Anton Putra
⏺ готовит в каждому видео тестовые стенды в AWS⏺ бенчмарки на Go и Python к каждому видео https://github.com/antonputra/tutorials/tree/main/lessons⏺ демонстрирует графики Grafana⏺ использует анимированные слайды с темным фоном, на слайдах оставляет место в правом нижнем углу, чтобы потом вставить туда круг с видео⏺ если показывает рабочий стол или среду разработки или браузер, то не накладывает кружок с видео на демо
A Life Engineered
⏺ делает много экспериментов⏺ использует профессиональный звук и свет, так как занимался музыкой отдельно, использует профессиональное оборудование⏺ использует полноразмерные слайды или слайды на половину экрана, использует разделение экрана на две равные части⏺ использует сложный монтаж, где включает стоковое видео в ролик, собирает историю из кусочков стокового видео⏺ возможно использует услуги специалиста по монтажу
James Willett
"ретроспективный" канал от создателя лучших курсов по Gatling:⏺ можно видеть как 5 лет назад он использовал простой монтаж и только демонстрацию экрана⏺ как два года назад он использовал маркерную доску и несколько камер с несложным монтажом⏺ как он начал использовать screen.studio год назад
Alek OS
⏺ использует много анимации и демонстрацию экрана⏺ не использует видео с рассказчиком, использует только голос, демонстрацию экрана и анимацию
Лёша Корепанов
⏺ иногда использует видео с собой но с разных локаций, которые склеивает в один рассказ⏺ чаще использует видео из одной локации и позции⏺ снимает на камеру⏺ добавляет небольшие вставки с кодом или сайтами⏺ не использует сложные анимации и эффекты
Software Engineering With Scott Moore
⏺ использует какое-то популярное решение для записи demo, может быть camtasia или prezi для наложения слайдов на видео⏺ использует хромокей и анимированный фон, анимированный фон его фишка⏺ снимает на GoPro и не использует сложное оборудование и свет
Federico Terzi
⏺ использует несложный монтаж с borumi
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4