Sobes.tech
Senior

Telegramda foydalanuvchilarning murojaatlarini qayta ishlash xizmati Foydalanuvchi hisobot yuborishi mumkin Adminlar hisobotlarni qayta ishlashlari mumkin Admin foydalanuvchiga fikr-mulohaza berishi mumkin DAU = 100 Mavjudlik = 99.95 % RPS = 100 Ticket Xizmat POST /api/v1/tickets // yaratish GET /api/v1/tickets/{id} PATCH tickets/{id}/status PATCH tickets/{id}/assign Diagramma: Foydalanuvchi va admin API Gatewayga boradi API Gateway Ticket Service va Admin Servicega boradi Ticket Service PgSQLga boradi

sobes.tech AI

AIdan javob

Для сервиса обработки обращений в 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 })
}

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