Когда мы работали в компании «ПлатёжСервис», у нас было целых 50 микросервисов, и на пике они обрабатывали до 15,000 RPS. Наш тогдашний стек выглядел так: мы использовали Nginx как reverse proxy, а upstream’ы прописывали, что называется, 'руками'. Честно говоря, нас не устраивало многое: никакого тебе dynamic service discovery, health checks были до смешного примитивными, да и с observability 'из коробки' тоже была беда.
На замену рассматривали двоих:
| Критерий | HAProxy | Envoy |
|---|---|---|
| Год создания | 2000 | 2016 (Lyft) |
| Язык | C | C++ |
| Конфигурация | Файл (haproxy.cfg) | YAML + xDS API (динамическая) |
| L4/L7 | Оба | Оба |
| HTTP/2, gRPC | HTTP/2 (с 2.0) | Нативно |
| Service discovery | DNS, Consul (через helper) | xDS API (нативно) |
| Observability | Stats page, Prometheus | Встроенные метрики, трейсы |
| Горячая перезагрузка | Hitless reload (2.4+) | Hot restart + xDS |
| Потребление RAM | ~30 МБ | ~80 МБ |
| Latency (p99) | ~0.1 мс | ~0.3 мс |

Комментарии 0