четверг, 26 марта 2015 г.

[prog.sobjectizer] Внезапный юзкейс для лимитов сообщений

При реализации run-time мониторинга потребовался тест, в котором агенты бы отсылали друг-другу кучу сообщений. Решил использовать идею "писем счастья": когда агент получает сообщение, он рассылает его по N адресам. Получатели сообщения так же рассылают его по N других адресов и т.д. Адреса рассылки для агентов задаются случайным образом, так что большинство агентов оказывается загруженными более-менее одинаково.

Но т.к. каждый агент отсылает больше сообщений, чем получает (на каждое полученное отсылается N новых, где N > 1), то сценарий "писем счастья" должен приводить к росту очередей сообщений. Что при длительной работе теста вызовет деградацию приложения из-за перерасхода памяти.

Лимиты сообщений оказались простым и эффективным способом борьбы с этим явлением. Просто для каждого агента устанавливается ограничение на количество сообщений. В итоге после некоторого времени на раскачку теста размеры очередей для агентов стабилизируются и больше не растут. Лишние сообщения выбрасываются, что предохраняет приложение от деградации.

Вот так внезапно лимиты сообщений, за реализацию которых я брался с изрядной долей сомнений, оказались полезны на практике гораздо раньше, чем предполагалось.

Сами по себе лимиты уже реализованы и даже более-менее задокументированы (#1, #2). Ждут завершения работ над версией 5.5.4 и релиза где-то в первых числах апреля.

Отправить комментарий