У нас есть приложение Spring Boot 2.0.4.Мы используем распределенный кеш Hazelcast 3.11.В нашем приложении мы настроили HazelcastClient, который подключается к серверу Hazelcast в контейнере Docker.
В кеше мы храним разных «персон» на одной карте и одинаковых «персон», но в виде списка на другой (~ 900 человек в одном списке по одному ключу; эти люди на обеих картах не одинаковы для100%, они оба описывают человека в реальной жизни, но у последнего в списке меньше свойств.).Все карты имеют тип BINARY.
Когда мы проводили стресс-тесты, чтобы получить человека по случайному идентификатору из кэша (1-я карта), все прошло отлично.5000 одновременных запросов не повлияли на HEAP нашего приложения, 10000 - незначительно.В формате JSON данные одного человека имеют размер 10 КБ.
Когда мы проводили стресс-тесты, чтобы получить список людей из кэша (2-я карта), мы столкнулись с проблемами в HEAP нашего приложения, где настроен клиент,Мы сделали только 500 одновременных запросов, а размер HEAP вырос до 4 Гб!В формате JSON список имеет размер 800 КБ.Он хранится на 2-й карте и запрашивается одним и тем же ключом 500 раз.
Кто-нибудь знает, что происходит?
DTO
Контроллер
Метод фасада, который извлекается из контроллера и где требуется кэшированиеразместить с помощью аннотации @Cacheable
Конфигурация HazelcastInstance
Hazelcast.xml конфигурация для серверной стороны
500 одновременных запросов (3 раза подряд)
Куча, классы
ОБНОВЛЕНО:
Я сделал 500 одновременных запросов 23раз.Ниже мы видим последние минуты теста.
Обзор телеметрии