Назад к вопросам
X5 tech
Senior
3
Сервис обработки обращений от пользователей Пользователь может отправить репорт Админы могут обрабатывать репорты Админ может дать фидбек пользователю DAU = 100 Availabilty = 99.95 % RPS = 100
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для сервиса обработки обращений от пользователей с такими требованиями (DAU=100, Availability=99.95%, RPS=100) можно предложить следующую архитектуру и подходы на Go:
- API для пользователей:
- Эндпоинт для создания репорта (POST /reports).
- Валидация и сохранение репорта в базу данных.
- API для админов:
- Получение списка репортов с фильтрами и пагинацией.
- Обработка репортов (изменение статуса, добавление комментариев).
- Отправка фидбека пользователю (например, через email или push-уведомления).
- Технологии:
- Go для backend с использованием фреймворка типа Gin или Echo.
- База данных: PostgreSQL или MongoDB для хранения репортов.
- Кэширование (Redis) для ускорения чтения часто запрашиваемых данных.
- Обеспечение доступности (99.95%):
- Горизонтальное масштабирование сервиса.
- Использование health checks и автоматического рестарта.
- Репликация базы данных.
- Обработка нагрузки (RPS=100):
- Go отлично справляется с высокой нагрузкой благодаря горутинам.
- Использовать пул соединений к базе.
Пример простого обработчика создания репорта на Go с Gin:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type Report struct {
UserID string `json:"user_id" binding:"required"`
Message string `json:"message" binding:"required"`
}
func createReport(c *gin.Context) {
var report Report
if err := c.ShouldBindJSON(&report); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// TODO: сохранить report в БД
c.JSON(http.StatusCreated, gin.H{"status": "report created"})
}
func main() {
r := gin.Default()
r.POST("/reports", createReport)
r.Run(":8080")
}
Такой сервис можно расширять, добавляя аутентификацию, авторизацию, уведомления и аналитику.