Ответ
Микросервисная архитектура решает проблемы монолитных приложений:
- Масштабируемость — можно масштабировать отдельные сервисы, а не всё приложение.
- Гибкость — разные сервисы могут использовать разные технологии (языки, БД и т.д.).
- Устойчивость — падение одного сервиса не приводит к отказу всей системы.
- Независимое развертывание — обновление одного сервиса не требует перезапуска всего приложения.
- Простота поддержки — меньшие кодовые базы легче понимать и тестировать.
Пример:
// Сервис пользователей (отдельный микросервис)
package main
import (
"net/http"
"log"
)
func main() {
http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"id": 1, "name": "John Doe"}`)) // Пример данных пользователя
})
log.Println("User service listening on :8081")
log.Fatal(http.ListenAndServe(":8081", nil))
}
Недостатки: сложность оркестрации, сетевые задержки, согласованность данных, распределённое логирование и мониторинг.