Требуется реализовать микросервис мониторинга HTTP-приложений.
Микросервис предполагает следующую схему действия: клиент передает адрес приложения, работоспособность которого требуется проверить (хост/ip-адрес, порт, путь), микросервис генерирует ответ об успешном принятии запроса, затем асинхронно пытается осуществить GET-запрос по указанному адресу и записывает результат в базу данных. Впоследствие клиент может запросить статус того или иного приложения, и микросервис должен вернуть ему результат последней проверки приложения (или 404, если таковой отсутствует).
Пример обмена данными:
POST /api/v1/application-check HTTP/1.1
{
"host": "192.168.0.1",
"port": 80,
"path": "/ping"
}
->
HTTP/1.1 201 Accepted
GET /api/v1/application-status/192.168.0.1/80/%2Fping HTTP/1.1
->
HTTP/1.1 200 OK
{
"status": 200,
"reason": "OK",
"response": "{\"ping\":\"pong\"}",
"date": "2015-10-15 12:00:00"
}
Требования к системе:
- Система должна беспроблемно выдерживать большие нагрузки: корректно отрабатывать большее количество запросов в секунду, нежели способна проверить приложений. В любом случае, когда есть подозрение на то, что система может упасть в результате принятия операции, лучше возвращать 503, нежели принимать запрос в обработку.
- В случае, если система корректно приняла запрос, она должна осуществить переданную проверку в любых условиях, даже если машина была перезагружена сразу после принятия запроса.
- От системы не требуется выполнять проверку мгновенно или синхронно. Клиент, запросивший проверку, должен быть готов к тому, что результаты проверки появятся не сразу.