Базовые вопросы · часть 2
Что такое CI/CD?
CI/CD (Continuous Integration / Continuous Deployment) — это
методики и набор практик для автоматизации разработки, тестирования и
развертывания программного обеспечения. В контексте Go (Golang) это включает
следующие ключевые моменты:
-
Continuous Integration (
CI):-
Автоматическое тестирование и сборка кода при каждом изменении.
-
Использование инструментов, таких как Jenkins, GitHub Actions, GitLab CI/CD или Travis CI.
-
Проверка, что новый код совместим с существующим и не ломает функциональность.
-
-
Continuous Deployment (
CD):-
Автоматическое развертывание нового кода на рабочие серверы после успешного прохождения всех тестов.
-
Обеспечение минимального времени простоя и быстрой доставки новых функций пользователям.
-
Использование оркестрационных инструментов, таких как Kubernetes, Docker, Ansible, Terraform.
-
Для проектов на Go это может включать:
-
Написание юнит-тестов с использованием пакета
testing. -
Настройку CI/CD пайплайнов для автоматической сборки Go приложений.
-
Автоматический запуск go vet и выбранного линтера, например Staticcheck.
-
Сборку и упаковку приложений в Docker-контейнеры.
-
Развертывание приложений в облачные среды или на серверы.
Что такое линтеры (linters) зачем они нужны и как их использовать?
Линтеры (linters) — это инструменты для анализа исходного кода, которые автоматически проверяют его на наличие ошибок, нарушение стиля и других потенциальных проблем.
Зачем нужны линтеры:
-
Повышение качества кода: Линтеры помогают обнаружить ошибки и проблемные места еще на этапе написания кода.
-
Соблюдение стиля: Линтеры проверяют, что код соответствует установленным стандартам кодирования, делая его более читаемым и поддерживаемым.
-
Уменьшение количества багов: Раннее выявление ошибок помогает снизить количество багов в будущем.
Как использовать линтеры:
-
Установка: выберите поддерживаемый анализатор. golint архивирован; Staticcheck устанавливается командой go install honnef.co/go/tools/cmd/staticcheck@latest. go vet входит в инструментарий Go.
-
Запуск: выполните go vet ./… и, если установлен Staticcheck, staticcheck ./… в каталоге модуля.
-
Интеграция в CI/CD: Линтеры часто интегрируются в CI/CD пайплайны, чтобы автоматизировать проверку качества кода при каждом коммите.
Примеры линтеров для разных языков:
-
Go: go vet и Staticcheck.
-
Python:
pylint,flake8 -
JavaScript:
eslint
Как можно измерить использование памяти в Go? Что такое pprof?
Для измерения использования памяти в Go можно использовать пакет runtime:
package main
import (
"fmt"
"runtime"
)
func main() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Printf("Allocated: %v KB\\n", m.Alloc/1024)
fmt.Printf("Total Allocated: %v KB\\n", m.TotalAlloc/1024)
fmt.Printf("Heap Allocated: %v KB\\n", m.HeapAlloc/1024)
fmt.Printf("Heap Objects: %v\\n", m.HeapObjects)
}
pprof — это инструмент для профилирования производительности и
памяти приложений Go. Он позволяет собирать и анализировать данные о CPU,
памяти, горутинах и блокировках.
Как использовать pprof:
-
Импорт пакета:
import _ "net/http/pprof" -
Добавление в код:
import ( "net/http" _ "net/http/pprof" ) func main() { go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }() // Ваше приложение } -
Запуск и доступ:
-
Запустите приложение.
-
Откройте браузер и перейдите по адресу
http://localhost:6060/debug/pprof/.
-
-
Анализ данных:
-
Снимите профили памяти и CPU.
-
Проанализируйте их с помощью команды
go tool pprof.
-
Пример команды для анализа профиля CPU:
go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=30"
Что такое Prometheus и Grafana? Зачем они нужны?
Prometheus — это система мониторинга и сбора метрик с открытым
исходным кодом, предназначенная для мониторинга и оповещения.
Основные функции:
-
Сбор метрик: Сбор данных с различных источников в реальном времени.
-
Хранение данных: Эффективное хранение временных рядов данных.
-
Запросы и анализ: Использование языка запросов PromQL для анализа данных.
-
Оповещения: Настройка правил оповещений на основе собранных данных.
Grafana — это платформа для визуализации данных с открытым исходным
кодом.
Основные функции:
-
Визуализация: Создание интерактивных и настраиваемых дашбордов.
-
Интеграция: Поддержка множества источников данных, включая Prometheus.
-
Мониторинг в реальном времени: Отображение данных и метрик в реальном времени.
-
Оповещения: Настройка уведомлений на основе метрик и данных.
Пример использования:
-
Prometheus собирает метрики из приложения.
-
Grafana визуализирует эти метрики в виде графиков и дашбордов.
-
Настраиваются оповещения в Grafana на основе данных из Prometheus для своевременного уведомления о проблемах.
Вместе, Prometjeus и Grafana образуют мощный инструмент для мониторинга и управления инфраструктурой.