Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Базовые вопросы · часть 2

Все темы Go Developer

Что такое CI/CD?

CI/CD (Continuous Integration / Continuous Deployment) — это методики и набор практик для автоматизации разработки, тестирования и развертывания программного обеспечения. В контексте Go (Golang) это включает следующие ключевые моменты:

  1. Continuous Integration (CI):

    • Автоматическое тестирование и сборка кода при каждом изменении.

    • Использование инструментов, таких как Jenkins, GitHub Actions, GitLab CI/CD или Travis CI.

    • Проверка, что новый код совместим с существующим и не ломает функциональность.

  2. Continuous Deployment (CD):

    • Автоматическое развертывание нового кода на рабочие серверы после успешного прохождения всех тестов.

    • Обеспечение минимального времени простоя и быстрой доставки новых функций пользователям.

    • Использование оркестрационных инструментов, таких как Kubernetes, Docker, Ansible, Terraform.

Для проектов на Go это может включать:

  • Написание юнит-тестов с использованием пакета testing.

  • Настройку CI/CD пайплайнов для автоматической сборки Go приложений.

  • Автоматический запуск go vet и выбранного линтера, например Staticcheck.

  • Сборку и упаковку приложений в Docker-контейнеры.

  • Развертывание приложений в облачные среды или на серверы.


Что такое линтеры (linters) зачем они нужны и как их использовать?

Линтеры (linters) — это инструменты для анализа исходного кода, которые автоматически проверяют его на наличие ошибок, нарушение стиля и других потенциальных проблем.

Зачем нужны линтеры:

  1. Повышение качества кода: Линтеры помогают обнаружить ошибки и проблемные места еще на этапе написания кода.

  2. Соблюдение стиля: Линтеры проверяют, что код соответствует установленным стандартам кодирования, делая его более читаемым и поддерживаемым.

  3. Уменьшение количества багов: Раннее выявление ошибок помогает снизить количество багов в будущем.

Как использовать линтеры:

  1. Установка: выберите поддерживаемый анализатор. golint архивирован; Staticcheck устанавливается командой go install honnef.co/go/tools/cmd/staticcheck@latest. go vet входит в инструментарий Go.

  2. Запуск: выполните go vet ./… и, если установлен Staticcheck, staticcheck ./… в каталоге модуля.

  3. Интеграция в 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:

  1. Импорт пакета:

    import _ "net/http/pprof"
  2. Добавление в код:

    import (
        "net/http"
        _ "net/http/pprof"
    )
    
    func main() {
        go func() {
            log.Println(http.ListenAndServe("localhost:6060", nil))
        }()
        // Ваше приложение
    }
  3. Запуск и доступ:

    • Запустите приложение.

    • Откройте браузер и перейдите по адресу http://localhost:6060/debug/pprof/.

  4. Анализ данных:

    • Снимите профили памяти и CPU.

    • Проанализируйте их с помощью команды go tool pprof.

Пример команды для анализа профиля CPU:

go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=30"

Что такое Prometheus и Grafana? Зачем они нужны?

Prometheus — это система мониторинга и сбора метрик с открытым исходным кодом, предназначенная для мониторинга и оповещения.

Основные функции:

  • Сбор метрик: Сбор данных с различных источников в реальном времени.

  • Хранение данных: Эффективное хранение временных рядов данных.

  • Запросы и анализ: Использование языка запросов PromQL для анализа данных.

  • Оповещения: Настройка правил оповещений на основе собранных данных.

Grafana — это платформа для визуализации данных с открытым исходным кодом.

Основные функции:

  • Визуализация: Создание интерактивных и настраиваемых дашбордов.

  • Интеграция: Поддержка множества источников данных, включая Prometheus.

  • Мониторинг в реальном времени: Отображение данных и метрик в реальном времени.

  • Оповещения: Настройка уведомлений на основе метрик и данных.

Пример использования:

  1. Prometheus собирает метрики из приложения.

  2. Grafana визуализирует эти метрики в виде графиков и дашбордов.

  3. Настраиваются оповещения в Grafana на основе данных из Prometheus для своевременного уведомления о проблемах.

Вместе, Prometjeus и Grafana образуют мощный инструмент для мониторинга и управления инфраструктурой.

Эта страница была полезной?