Как мы ускорили Golang-тесты на CI
В этой статье я расскажу о том, как желание улучшить свой рабочий процесс CI помогло ускорить все golang-пайплайны в PaaS СберМаркета.
В СберМаркете микросервисная архитектура. В качестве CI/CD используется GitLab. На CI гоняются вполне типовые задачи по тестированию, различным проверкам, сборкам образов и т. д. Часть job предоставляется самим сервисом, часть — внедряется в пайплайн сервиса нашей платформой.
Во всех golang-сервисах пишут тесты на свой код. В разных сервисах подход к тестированию немного различается, но сейчас я не буду углубляться в виды тестирования. Общее между всеми сервисами — «в среднем по больнице» тесты гоняются на CI более 5 минут.
Я пришел в СберМаркет в конце августа 2023 года. Глядя на набор Unit-тестов в одном из наших сервисов Odin, я немного расстроился. Каждый раз нужно было ждать на CI больше 6 минут, чтобы узнать, все ли хорошо с тестами. Их в наборе было около 400.
Я подумал, что неплохо было бы разобраться со скоростью. Предположил, что проблема может быть связана с базой данных, неоптимальным сидированием, что можно улучшить очистку и добавить параллелизма. И даже начал накидывать в голове план ускорения...
https://habr.com/ru/companies/kuper/articles/806725/
Мы в MAX
👉 @Bookflow
В этой статье я расскажу о том, как желание улучшить свой рабочий процесс CI помогло ускорить все golang-пайплайны в PaaS СберМаркета.
В СберМаркете микросервисная архитектура. В качестве CI/CD используется GitLab. На CI гоняются вполне типовые задачи по тестированию, различным проверкам, сборкам образов и т. д. Часть job предоставляется самим сервисом, часть — внедряется в пайплайн сервиса нашей платформой.
Во всех golang-сервисах пишут тесты на свой код. В разных сервисах подход к тестированию немного различается, но сейчас я не буду углубляться в виды тестирования. Общее между всеми сервисами — «в среднем по больнице» тесты гоняются на CI более 5 минут.
Я пришел в СберМаркет в конце августа 2023 года. Глядя на набор Unit-тестов в одном из наших сервисов Odin, я немного расстроился. Каждый раз нужно было ждать на CI больше 6 минут, чтобы узнать, все ли хорошо с тестами. Их в наборе было около 400.
Я подумал, что неплохо было бы разобраться со скоростью. Предположил, что проблема может быть связана с базой данных, неоптимальным сидированием, что можно улучшить очистку и добавить параллелизма. И даже начал накидывать в голове план ускорения...
https://habr.com/ru/companies/kuper/articles/806725/
Мы в MAX
👉 @Bookflow
❤3👍1
  This media is not supported in your browser
    VIEW IN TELEGRAM
  Задержка (Latency) vs. Пропускная способность (Throughput)
Задумывались, почему приложение «тормозит», хотя пропускная способность сети вроде бы в порядке?
Дело в том, что задержка и пропускная способность описывают два совершенно разных аспекта производительности.
Задержка (Latency) - это время задержки каждого пакета.
Именно её ощущает пользователь, когда нажимает кнопку. Это - отзывчивость системы.
Задержка показывает, сколько времени требуется, чтобы один запрос прошёл путь от сервера до конечного устройства.
Она включает:
- время обработки запроса на сервере,
- задержку в очередях,
- распространение сигнала по сети,
- задержку передачи,
- и «последнюю милю» - соединение с устройством пользователя.
Пропускная способность (Throughput) - это объём данных, успешно переданных за единицу времени.
Речь не о скорости отдельного пакета, а о количестве данных, проходящих через «трубу».
Пропускная способность - это ёмкость системы.
Высокая пропускная способность означает, что система справляется с нагрузкой без перегрузок.
А теперь вопрос к вам:
Как вы измеряете эти метрики так, чтобы они действительно предсказывали, когда система начнёт давать сбои?
Мы в MAX
👉 @Bookflow
Задумывались, почему приложение «тормозит», хотя пропускная способность сети вроде бы в порядке?
Дело в том, что задержка и пропускная способность описывают два совершенно разных аспекта производительности.
Задержка (Latency) - это время задержки каждого пакета.
Именно её ощущает пользователь, когда нажимает кнопку. Это - отзывчивость системы.
Задержка показывает, сколько времени требуется, чтобы один запрос прошёл путь от сервера до конечного устройства.
Она включает:
- время обработки запроса на сервере,
- задержку в очередях,
- распространение сигнала по сети,
- задержку передачи,
- и «последнюю милю» - соединение с устройством пользователя.
Пропускная способность (Throughput) - это объём данных, успешно переданных за единицу времени.
Речь не о скорости отдельного пакета, а о количестве данных, проходящих через «трубу».
Пропускная способность - это ёмкость системы.
Высокая пропускная способность означает, что система справляется с нагрузкой без перегрузок.
А теперь вопрос к вам:
Как вы измеряете эти метрики так, чтобы они действительно предсказывали, когда система начнёт давать сбои?
Мы в MAX
👉 @Bookflow
1👍4
  Настройка CI/CD для самых маленьких разработчиков
Считается, что построение CI/CD - задача для DevOps. Глобально это действительно так, особенно если речь идет о первоначальной настройке. Но часто с докручиванием отдельных этапов процесса сталкиваются и разработчики. Умение поправить что-то незначительное своими силами позволяет не тратить время на поход к коллегам (и ожидание их реакции), т.е. в целом повышает комфорт работы и дает понимание, почему все происходит именно так.
Настроек для пайплайна Gitlab очень много. В этой статье, не вдаваясь в недра тюнинга, поговорим о том, как выглядит скрипт пайплайна, из каких блоков он состоит и что может содержать.
https://habr.com/ru/companies/maxilect/articles/799177/
Мы в MAX
👉 @Bookflow
Считается, что построение CI/CD - задача для DevOps. Глобально это действительно так, особенно если речь идет о первоначальной настройке. Но часто с докручиванием отдельных этапов процесса сталкиваются и разработчики. Умение поправить что-то незначительное своими силами позволяет не тратить время на поход к коллегам (и ожидание их реакции), т.е. в целом повышает комфорт работы и дает понимание, почему все происходит именно так.
Настроек для пайплайна Gitlab очень много. В этой статье, не вдаваясь в недра тюнинга, поговорим о том, как выглядит скрипт пайплайна, из каких блоков он состоит и что может содержать.
https://habr.com/ru/companies/maxilect/articles/799177/
Мы в MAX
👉 @Bookflow
👍5
  This media is not supported in your browser
    VIEW IN TELEGRAM
  1 - Индексация:
Проверьте шаблоны запросов вашего приложения и создайте подходящие индексы.
2 - Материализованные представления:
Предварительно вычислите результаты сложных запросов и сохраните их для более быстрого доступа.
3 - Денормализация:
Уменьшите количество сложных объединений для повышения производительности запросов.
4 - Вертикальное масштабирование:
Увеличьте мощность вашего сервер базы данных, добавляя больше процессоров, оперативной памяти или хранилища.
5 - Кэширование:
Сохраните часто запрашиваемые данные в более быстром слое хранения для снижения нагрузки на базу данных.
6 - Репликация:
Создайте реплики основной базы данных на разных серверах для масштабирования чтения.
7 - Шардинг:
Разделите таблицы базы данных на более мелкие части и распределите их по серверам. Используется для масштабирования как записи, так и чтения.
А теперь ваш ход: Какие другие стратегии вы используете для масштабирования ваших баз данных?
Мы в MAX
👉 @Bookflow
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍3❤1
  Nala
Это внешний интерфейс для libapt-pkg. В частности, мы взаимодействуем с python-apt api.
Особенно начинающим пользователям бывает сложно понять, что пытается сделать apt при установке или обновлении.
Мы пытаемся решить эту проблему, отказавшись от отображения лишних сообщений, улучшив форматирование пакетов и используя цвет, чтобы
показать, что именно произойдет с пакетом при установке, удалении или обновлении.
https://gitlab.com/volian/nala
Мы в MAX
👉 @Bookflow
Это внешний интерфейс для libapt-pkg. В частности, мы взаимодействуем с python-apt api.
Особенно начинающим пользователям бывает сложно понять, что пытается сделать apt при установке или обновлении.
Мы пытаемся решить эту проблему, отказавшись от отображения лишних сообщений, улучшив форматирование пакетов и используя цвет, чтобы
показать, что именно произойдет с пакетом при установке, удалении или обновлении.
https://gitlab.com/volian/nala
Мы в MAX
👉 @Bookflow
👍3❤1
  Пишем «Змейку» для Искры 1080 Тарту
Недавно мы познакомились с ПЭВМ Искра 1080 Тарту. Для данного компьютера написано мало программ. Достоверно известно о существовании менее тридцати, включая порты с других компьютеров. Я попытался слегка улучшить ситуацию, написав еще одну программу. Ею стала игра «Змейка».
Подготовка окружения для разработки
Программы для Искры можно писать и на самой Искре, но по нынешним меркам это не очень-то удобно. Было решено писать код на современном железе, а Искру использовать для тестирования.
Первым делом предстояло выбрать ассемблер 8080. Многие рекомендуют zasm. Но мне показалось, что это какой-то слишком сложный ассемблер. Ассемблер всего-то переводит мнемоники в машинный код и заменяет именованные метки на адреса в памяти. Притом, первое несложно делается и вручную, по табличкам. А вот пересчитывать все метки при добавлении новых инструкций — занятие действительно не самое захватывающее. Его и хотелось бы автоматизировать в первую очередь.
https://eax.me/iskra1080-zmejka/
Мы в MAX
👉 @Bookflow
Недавно мы познакомились с ПЭВМ Искра 1080 Тарту. Для данного компьютера написано мало программ. Достоверно известно о существовании менее тридцати, включая порты с других компьютеров. Я попытался слегка улучшить ситуацию, написав еще одну программу. Ею стала игра «Змейка».
Подготовка окружения для разработки
Программы для Искры можно писать и на самой Искре, но по нынешним меркам это не очень-то удобно. Было решено писать код на современном железе, а Искру использовать для тестирования.
Первым делом предстояло выбрать ассемблер 8080. Многие рекомендуют zasm. Но мне показалось, что это какой-то слишком сложный ассемблер. Ассемблер всего-то переводит мнемоники в машинный код и заменяет именованные метки на адреса в памяти. Притом, первое несложно делается и вручную, по табличкам. А вот пересчитывать все метки при добавлении новых инструкций — занятие действительно не самое захватывающее. Его и хотелось бы автоматизировать в первую очередь.
https://eax.me/iskra1080-zmejka/
Мы в MAX
👉 @Bookflow
👍4❤1
  👍4🔥1
  This media is not supported in your browser
    VIEW IN TELEGRAM
  ⚡Основные алгоритмы на графах
В статье рассмотрены основные алгоритмы на графах и их реализацию на C++.
Рассматриваемые алгоритмы:
▪ Обход графа в ширину (Поиск в ширину) aka BFS | Breadth First Search
▪ Обход графа в глубину (Поиск в глубину) aka DFS | Depth First Search
▪ Алгоритм Дейкстры
▪ Алгоритм Флойда-Уоршелла
▪ Алгоритм Прима
https://habr.com/ru/companies/timeweb/articles/751762/
📲  Мы в MAX
👉 @Bookflow
В статье рассмотрены основные алгоритмы на графах и их реализацию на C++.
Рассматриваемые алгоритмы:
▪ Обход графа в ширину (Поиск в ширину) aka BFS | Breadth First Search
▪ Обход графа в глубину (Поиск в глубину) aka DFS | Depth First Search
▪ Алгоритм Дейкстры
▪ Алгоритм Флойда-Уоршелла
▪ Алгоритм Прима
https://habr.com/ru/companies/timeweb/articles/751762/
👉 @Bookflow
Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍3
  ImHex
🔍 Hex-редактор для реверс-инженеров, программистов и людей, которые ценят свое зрение, когда работают ночью.
https://github.com/WerWolv/ImHex
📲  Мы в MAX
👉 @Bookflow
🔍 Hex-редактор для реверс-инженеров, программистов и людей, которые ценят свое зрение, когда работают ночью.
https://github.com/WerWolv/ImHex
👉 @Bookflow
Please open Telegram to view this post
    VIEW IN TELEGRAM
  Please open Telegram to view this post
    VIEW IN TELEGRAM
  👍3🤷♂1