Sobes.tech
Senior

Service de gestion des demandes des utilisateurs sur Telegram L'utilisateur peut envoyer un rapport Les administrateurs peuvent traiter les rapports L'administrateur peut donner un retour à l'utilisateur DAU = 100 Disponibilité = 99,95 % RPS = 100 Service de tickets POST /api/v1/tickets // création GET /api/v1/tickets/{id} PATCH tickets/{id}/status PATCH tickets/{id}/assign Diagramme: L'utilisateur et l'administrateur vont vers l'API Gateway L'API Gateway va vers le Service de Tickets et le Service d'Administration Le Service de Tickets va vers PgSQL

sobes.tech IA

Réponse de l'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 })
}

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