🏥Финальный проект: GoHospital (микросервисная система для клиники)
Описание
GoHospital — это проект высокой сложности, демонстрирующий реализацию микросервисной архитектуры на Go. Система предназначена для автоматизации записей к врачу в современной клинике.
Цель проекта — научиться строить распределённые системы, использовать gRPC, обмен сообщениями (NATS) и применять Docker-композицию.
Архитектура и компоненты
🧩Сервисы
1. API Gateway (Gin)
POST /appointments — создать запись
GET /patients/:id — получить данные пациента (gRPC)
2. Patient Service (gRPC + PostgreSQL)
CreatePatient(name, birthdate)
GetPatient(id)
3. Appointment Service (NATS + PostgreSQL)
- Подписка на
appointment.created
- Отмена записей (HTTP)
Сущности (в каждом сервисе — своя БД)
patients
| Поле |
Тип |
Описание |
| id |
UUID |
Идентификатор |
| name |
string |
Имя пациента |
| birthdate |
date |
Дата рождения |
appointments
| Поле |
Тип |
Описание |
| id |
UUID |
Идентификатор |
| patient_id |
UUID |
Ссылка на пациента |
| doctor |
string |
Имя врача |
| time |
time |
Время приёма |
| status |
string |
created, canceled, … |
Технологии
Go (1.21+)
gRPC + Protobuf
NATS
Gin
PostgreSQL
Docker
Этапы разработки (17 дней)
1. Инфраструктура и шаблоны (3 дня)
- Настройка Docker-окружения
- Базовые структуры проектов
- Конфигурация Protobuf
2. Patient Service (gRPC) (4 дня)
- Реализация gRPC-методов
- Подключение к PostgreSQL
- Базовые тесты
3. Appointment Service (NATS) (4 дня)
- Обработка событий
- Логика работы с записями
- Интеграция с Patient Service
4. API Gateway и маршруты (3 дня)
- Настройка Gin-роутера
- gRPC-клиент
- Валидация запросов
5. Интеграция и тесты (3 дня)
- Полная сборка системы
- Нагрузочное тестирование
- Документирование API
Особенности реализации
- Валидация данных (например, возраст пациента)
- Изоляция БД по сервисам
- События:
appointment.created, appointment.canceled
- Простой заглушечный обработчик уведомлений
Критерии приемки
- Все сервисы связаны через gRPC/NATS
- Уведомления работают
- Docker-композиция запускается одной командой
- Успешная нагрузка на
/appointments
Дополнительно (по желанию)
- Уведомления на Email (SMTP)
🚀 Совет: Выполнение этого проекта докажет вашу готовность к работе с микросервисами и распределёнными системами в продакшене.