В этой статье про методику борьбы со всплесками нагрузки на кластер Elasticsearch, которую реализовал у себя сервис по продаже авто TrueCar.
В TrueCar мы стараемся максимально упростить процесс покупки автомобиля. Важно иметь актуальный список транспортных средств, чтобы покупатели автомобилей могли видеть, что доступно, а что нет, поэтому мы постоянно обновляем данные в хранилище. Массовое обновление списка мы запускаем несколько раз в день: обновляем цену, рейтинг и доступность авто для покупки.
Обновление происходит либо путем прямых обновлений через веб-приложение, либо с помощью задания Hadoop, которое обрабатывает данные на предмет изменений в цене и доступности. Наш кластер Elasticsearch работал очень хорошо для поиска, но мы заметили, что нагрузка на инфру резко возросла во время выполнения задания по обновлению каталога в момент, когда сайт находился на пике ежедневного трафика. Чтобы поддерживать кластер в пригодном для использования состоянии, нам пришлось снизить скорость индексации кластера. Без снижения скорости индексации загрузка CPU узлов кластера увеличилась с 15 до 80 процентов, а показатели GC увеличились в пять раз, что привело к ошибкам 503 Service Unreachable для любых служб TrueCar, которые отправляли запросы к кластеру Elasticsearch.