Программирование {BookFlow}
16.4K subscribers
1.57K photos
464 videos
145 files
2.08K links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций, новости технологий.

Группа в https://vk.com/bookflow.

По всем вопросам @evgenycarter

РКН https://clck.ru/3KoAbH
Download Telegram
Как мы ускорили 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
3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Задержка (Latency) vs. Пропускная способность (Throughput)

Задумывались, почему приложение «тормозит», хотя пропускная способность сети вроде бы в порядке?
Дело в том, что задержка и пропускная способность описывают два совершенно разных аспекта производительности.

Задержка (Latency) - это время задержки каждого пакета.
Именно её ощущает пользователь, когда нажимает кнопку. Это - отзывчивость системы.
Задержка показывает, сколько времени требуется, чтобы один запрос прошёл путь от сервера до конечного устройства.

Она включает:
- время обработки запроса на сервере,
- задержку в очередях,
- распространение сигнала по сети,
- задержку передачи,
- и «последнюю милю» - соединение с устройством пользователя.

Пропускная способность (Throughput) - это объём данных, успешно переданных за единицу времени.
Речь не о скорости отдельного пакета, а о количестве данных, проходящих через «трубу».
Пропускная способность - это ёмкость системы.
Высокая пропускная способность означает, что система справляется с нагрузкой без перегрузок.

А теперь вопрос к вам:
Как вы измеряете эти метрики так, чтобы они действительно предсказывали, когда система начнёт давать сбои?

Мы в MAX

👉 @Bookflow
1👍4
Настройка CI/CD для самых маленьких разработчиков

Считается, что построение 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
🖥 7 основных стратегий масштабирования вашей базы данных.

1 - Индексация:
Проверьте шаблоны запросов вашего приложения и создайте подходящие индексы.

2 - Материализованные представления:
Предварительно вычислите результаты сложных запросов и сохраните их для более быстрого доступа.

3 - Денормализация:
Уменьшите количество сложных объединений для повышения производительности запросов.

4 - Вертикальное масштабирование:
Увеличьте мощность вашего сервер базы данных, добавляя больше процессоров, оперативной памяти или хранилища.

5 - Кэширование:
Сохраните часто запрашиваемые данные в более быстром слое хранения для снижения нагрузки на базу данных.

6 - Репликация:
Создайте реплики основной базы данных на разных серверах для масштабирования чтения.

7 - Шардинг:
Разделите таблицы базы данных на более мелкие части и распределите их по серверам. Используется для масштабирования как записи, так и чтения.

А теперь ваш ход: Какие другие стратегии вы используете для масштабирования ваших баз данных?

Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
Nala

Это внешний интерфейс для libapt-pkg. В частности, мы взаимодействуем с python-apt api.
Особенно начинающим пользователям бывает сложно понять, что пытается сделать apt при установке или обновлении.
Мы пытаемся решить эту проблему, отказавшись от отображения лишних сообщений, улучшив форматирование пакетов и используя цвет, чтобы
показать, что именно произойдет с пакетом при установке, удалении или обновлении.

https://gitlab.com/volian/nala

Мы в MAX

👉 @Bookflow
👍31
Пишем «Змейку» для Искры 1080 Тарту

Недавно мы познакомились с ПЭВМ Искра 1080 Тарту. Для данного компьютера написано мало программ. Достоверно известно о существовании менее тридцати, включая порты с других компьютеров. Я попытался слегка улучшить ситуацию, написав еще одну программу. Ею стала игра «Змейка».

Подготовка окружения для разработки
Программы для Искры можно писать и на самой Искре, но по нынешним меркам это не очень-то удобно. Было решено писать код на современном железе, а Искру использовать для тестирования.

Первым делом предстояло выбрать ассемблер 8080. Многие рекомендуют zasm. Но мне показалось, что это какой-то слишком сложный ассемблер. Ассемблер всего-то переводит мнемоники в машинный код и заменяет именованные метки на адреса в памяти. Притом, первое несложно делается и вручную, по табличкам. А вот пересчитывать все метки при добавлении новых инструкций — занятие действительно не самое захватывающее. Его и хотелось бы автоматизировать в первую очередь.

https://eax.me/iskra1080-zmejka/

Мы в MAX

👉 @Bookflow
👍41
Программирование на С++

https://bdpx.github.io/cpp/

Мы в MAX

👉 @Bookflow
👍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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
ImHex

🔍 Hex-редактор для реверс-инженеров, программистов и людей, которые ценят свое зрение, когда работают ночью.

https://github.com/WerWolv/ImHex

📲 Мы в MAX

👉 @Bookflow
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤷‍♂1