О фреймворке GoFr

GoFr — это фреймворк, написанный на языке Go и предназначенный для ускоренной разработки микросервисов. Согласно официальному сайту GoFr, ключевыми особенностями его являются: 

  • тестирование кода в реальных производственных средах; 
  • встроенные инструменты наблюдаемости, такие как URL-адреса проверки состояния и контрольного сигнала, позволяющие определять жизнеспособность и готовность к работе Kubernetes; 
  • трассировка, метрики и структурированные логи различного уровня для мониторинга приложения;
  • поддержка множества различных источников данных, таких как mysql, postgres, kafka, google, mqtt и т. д.

Все это позволяет разработчику сосредоточиться на основной бизнес-логике, а приложению — быть готовым к производству с момента POC (proof-of-concept — подтверждения правильности концепции).

Возможности GoFr 

Почему я выбрал GoFr вместо того, чтобы реализовать http-сервер самостоятельно или использовать другой фреймворк?

GoFr избавил от беспокойства по поводу согласованности приложения и позволил наблюдать за его работой, сосредоточившись на бизнес-логике. Оцените возможности этого фреймворка:

  • REST-подход к архитектуре. GoFr обеспечивает соблюдение принципов REST (representational state transfer — передача репрезентативного состояния) благодаря хорошо организованной структуре, упрощающей проектирование API.
  • Логирование. Встроенные функции логирования позволяют легко отслеживать входящие запросы.
  • Метрики и трассировка. GoFr поддерживает беспрепятственную интеграцию метрик и трассировки, помогая контролировать производительность и отслеживать запросы.
  • Конфигурация CORS. С помощью встроенных опций GoFr можно легко настраивать CORS (cross-origin resource sharing — совместное использование ресурсов между различными источниками).  
  • Динамический уровень регистрации данных. Удаленное изменение уровня регистрации данных без перезапуска приложения способствует повышению гибкости работы.
  • Совместимость с Kubernetes. Встроенные конечные точки проверки состояния и контрольного сигнала поддерживают развертывание в Kubernetes.
  • Интеграция баз данных. Встроенная поддержка популярных баз данных упрощает управление соединениями с необходимыми базами данных.
  • Интеграция IoT. Встроенная поддержка сетевого протокола MQTT (message queuing telemetry transport — обмен сообщениями по шаблону “издатель-подписчик”) и подключение к HiveMQ (MQTT-брокеру) по умолчанию обеспечивают бесшовную интеграцию IoT (Internet of Things — интернет вещей).

А самым ценным в GoFr является то, что для регистрации маршрута требуется очень мало строк кода, хотя он выполняет множество других действий.

Таких возможностей нет ни в одном из популярных фреймворков, включая Gin, Echo, Beego, Fiber.

Пример регистрации маршрута

package main

import "gofr.dev/pkg/gofr"

func main() {
 // Создание нового приложения
 a := gofr.New()

 // Добавление маршрутов
 a.GET("/hello", func (c *gofr.Context) (interface{}, error) {
 return “Hello World”, nil
})

 // Запуск приложения
 a.Run()
}

Всего три строки и одна первичная зависимость — и приложение Hello World готово к производству.

Записи в логе при запуске приложения с указанием порта приложения и метрик

При обращении к конечной точке /hello получаем следующий хорошо отформатированный ответ.

Ответ от GoFr-сервера

Проверка работоспособности и готовности Kubernetes

GoFr по умолчанию создает маршруты для проверки работоспособности и готовности, где в конечной точке /.well-known/health проверяется статус всех источников данных и сервисов, подключенных к текущему сервису.

Ответ на проверку состояния

В конечной точке /.well-known/alive проверяется, доступен ли текущий сервис.

Ответ на проверку активности

Трассировка с помощью GoFr

Добавление конфигурации `TRACE_EXPORTER=gofr` в конфигурационный файл .env позволяет включить трассировку и экспортировать трассы на tracer.gofr.dev.

Трассировка при обращении к конечной точке /hello 

Ниже представлен более сложный пример трассировки, где можно увидеть, как в рамках одного запроса обрабатывается несколько разных конечных точек.

Трассировка с использованием Redis

Визуализация метрик

В каждом GoFr-приложении метрики, экспортируемые на порт 2121 через конечную точку /metrics, можно визуализировать на Grafana с помощью дэшборда Grafana от GoFr.

Дэшборд с имитацией производственной системы.

Информация о системе с указанием количества корутин Go и использования памяти приложением
Время ответа на запрос и график распределения задержек
Количество запросов с течением времени и различные возвращаемые коды статуса

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

Время отклика и задержка для исходящих запросов
Количество Redis-запросов, а также количество запросов, основанных на различных командах

Аналогичные графики доступны для различных систем PubSub, баз данных SQL и т. д.

Ошибки в GoFr

Вам просто нужно вернуть полученную ошибку, и GoFr по умолчанию форматирует ее в нижеуказанном формате.

Ошибка, возвращенная из MySQL, показана в следующем примере:

{
    "error": {
        "message": "Error 1146 (42S02): Table 'test_db.EMPLOYEE' doesn't exist"
    }
}

Заключение

При написании кода с использованием GoFr можно не беспокоиться о второстепенных вещах и сосредоточиться на основной бизнес-логике. GoFr не только обеспечивает повышенную производительность, но и позволяет контролировать работу приложения. Таких возможностей нет ни у одного другого фреймворка или Golang-пакета, используемого по умолчанию.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Aryan Mehrotra: Why use GoFr for Golang Backend?

Предыдущая статьяКак перейти от монолитной системы к событийной