Sobes.tech
Senior

Servicio de gestión de solicitudes de usuarios en Telegram El usuario puede enviar un informe Los administradores pueden procesar informes El administrador puede dar retroalimentación al usuario DAU = 100 Disponibilidad = 99.95 % RPS = 100 Servicio de tickets POST /api/v1/tickets // creación GET /api/v1/tickets/{id} PATCH tickets/{id}/status PATCH tickets/{id}/assign Diagrama: Usuario y administrador van al API Gateway El API Gateway va al Servicio de Tickets y al Servicio de Administración El Servicio de Tickets va a PgSQL

sobes.tech AI

Respuesta de la IA

Для сервиса обработки обращений в Telegram с DAU=100, Availability=99.95% и RPS=100 архитектура должна обеспечивать надежность, масштабируемость и удобство поддержки.

Ключевые моменты:

  • API Gateway — точка входа для пользователей и админов, маршрутизирует запросы к Ticket Service и Admin Service.
  • Ticket Service — отвечает за создание, получение и обновление статусов тикетов, хранит данные в PostgreSQL.
  • Admin Service — обрабатывает действия админов, например, назначение тикетов и отправку фидбека.

Рекомендации:

  1. База данных: PostgreSQL — хорошее решение для реляционных данных тикетов. Для повышения доступности можно использовать репликацию и автоматическое переключение (failover).

  2. Обработка статусов и назначений: PATCH-запросы должны быть идемпотентными и атомарными, чтобы избежать конфликтов при параллельной обработке.

  3. Масштабируемость: при RPS=100 нагрузка невысокая, но стоит предусмотреть горизонтальное масштабирование сервисов и API Gateway.

  4. Мониторинг и логирование: для обеспечения SLA 99.95% необходимо настроить мониторинг доступности, задержек и ошибок.

  5. Безопасность: аутентификация и авторизация пользователей и админов, валидация входящих данных.

  6. Диаграмма: User и Admin идут в API Gateway, который распределяет запросы к Ticket Service и Admin Service. Ticket Service взаимодействует с PostgreSQL для хранения данных.

Пример упрощённого эндпоинта создания тикета на Go:

func CreateTicketHandler(w http.ResponseWriter, r *http.Request) {
    var ticket Ticket
    if err := json.NewDecoder(r.Body).Decode(&ticket); err != nil {
        http.Error(w, "Invalid input", http.StatusBadRequest)
        return
    }
    // Сохранение в БД
    id, err := ticketService.Create(ticket)
    if err != nil {
        http.Error(w, "Failed to create ticket", http.StatusInternalServerError)
        return
    }
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(map[string]interface{}{ "id": id })
}

Такой подход обеспечит удобную обработку обращений и позволит поддерживать заданные метрики доступности и производительности.