AI та машинне навчанняE-commerce та Бізнес

Що станеться з чат-ботом, якщо вбити його процеси посеред діалогу

17 серпня 2026 ми навантажили LEO Chat трьомастами запитами за секунду і примусово вбивали движок, чергу повідомлень і кеш просто під час тесту. Розбираємо, що саме перевіряли, чому це не те саме, що прод-навантаження, і що показав результат.

9 вересня 2026 р.
4 хв читання

17 серпня 2026 року ми зробили з LEO Chat те, що зазвичай роблять із продакшн-системою лише випадково: навантажили його 300 запитами за секунду й посеред тесту почали вбивати процеси примусово — движок, чергу NATS, кеш Redis. Не по черзі й акуратно, а сигналом SIGKILL, який не дає програмі шансу коректно завершитися.

Ця стаття про те, навіщо ми так зробили із власним продуктом і що саме показав результат — включно з тим, чого цей результат не доводить.

Питання, яке рідко перевіряють до релізу

Більшість тестів чат-ботів перевіряють, чи бот відповідає правильно. Рідше перевіряють, що станеться, коли частина системи впаде посеред роботи — а саме це трапляється в проді: рестарт контейнера при деплої, збій мережі, вичерпання пам'яті. Питання не «чи впаде компонент», а «що станеться з повідомленням покупця, яке саме в цей момент оброблялося».

Для LEO Chat це питання особливо чутливе, тому що частина сценаріїв — оформлення замовлення й підтвердження оплати. Втрачене повідомлення тут — не незручність, а замовлення, яке ніхто не побачив, або, гірше, оплата, підтвердження якої не дійшло до покупця.

Що саме перевіряли

Інструмент — k6, навантажувальний тест, який генерує потік запитів за заданим профілем. Ціль — 300 запитів за секунду, що для чат-бота означає імітацію кількох сотень одночасних діалогів із повідомленнями, що йдуть одне за одним.

Паралельно з навантаженням тест примусово вбивав ключові компоненти стека: сам движок обробки повідомлень, чергу NATS (через яку повідомлення передаються між сервісами) і Redis (кеш і частина стану сесій). Вбивання — не graceful shutdown, а SIGKILL: процес зникає миттєво, без можливості дописати те, що недописано.

Метрика, яку рахували: скільки повідомлень загубилося (надіслано, але підтвердження не прийшло) і скільки задвоїлося (те саме повідомлення оброблено двічі — наприклад, замовлення підтверджено два рази замість одного).

Результат

0 втрачених і 0 задвоєних підтверджених повідомлень.

Це означає: попри примусове вбивання движка, черги й кешу під навантаженням 300 запитів за секунду, жодне підтверджене повідомлення не зникло і жодне не обробилося вдруге. Технічно це тримається на тому, що черга NATS зберігає повідомлення персистентно (не лише в оперативній пам'яті) і має механізм підтвердження обробки (acknowledgment) — сервіс, що впав до підтвердження, не забирає повідомлення з черги назавжди, воно чекає на повторну спробу.

Чого цей результат не доводить

Це навантажувальний тест на локальному повному стеку — тобто на тій самій конфігурації сервісів, що й прод, але не на самому проді, не з реальним трафіком покупців і не в умовах реальної мережевої латентності між дата-центрами. Прод-навантаження може виявити те, чого немає в локальному тесті: специфічні мережеві затримки, конкуренцію за ресурси з іншими сервісами на тому самому сервері, поведінку під тривалим (а не одноразовим) навантаженням.

Це також не тест на 100% доступність: під час примусового вбивання компонента частина запитів отримувала затримку відповіді, поки система відновлювалася — черга не втрачала повідомлення, але й не обробляла їх миттєво в момент збою. Для покупця це означає повільнішу відповідь на кілька секунд, не втрачений діалог.

Чому це взагалі важливо знати про чат-бота

Більшість продуктових сторінок чат-ботів говорять про точність відповідей і швидкість. Про поведінку під час збою — рідко, тому що це незручна тема: показати, що система впала (навіть у контрольованому тесті), означає визнати, що вона може впасти. Ми вважаємо чеснішим показати цю межу з датою й цифрою, ніж мовчати про неї або обіцяти «100% uptime», які нічим не підкріплені.

Цей самий підхід — вимірювати власні межі, а не лише сильні сторони — ми вже застосовували до точності відповідей LEO Chat: 89,7% на еталонному наборі питань, і прямо сказано, що решта — за оператором. Хаос-тест — та сама логіка, застосована до інфраструктури, а не до якості відповідей.

Що з цього перевірити у свого постачальника чат-бота

Якщо ви обираєте чат-бота для магазину, надійність черги повідомлень рідко потрапляє в список питань — але саме вона визначає, чи загубиться підтвердження оплати під час звичайного рестарту сервера постачальника. Три конкретні питання, які варто поставити: чи зберігаються повідомлення персистентно, поки не підтверджено обробку, чи є механізм повторної спроби після збою компонента, і чи проводили тест на реальному навантаженні з датою й цифрою — не «ми тестували», а скільки саме запитів і який результат.

Ми публікуємо власні заміри саме тому, що відповідь «довіртеся нам» тут не аргумент: перевірна цифра з датою — аргумент, обіцянка — ні.

Теги

AIE-commerce

🤔Вам сподобалась стаття?

Ваша думка допомагає нам створювати кращий контент

Поділіться з друзями

Знайшли щось корисне? 🚀

Допоможіть іншим дізнатись про це — поділіться статтею в соціальних мережах

https://lionex.com.ua/blog/haos-test-chat-bota-300-zapytiv-na-sekundu

💚 Дякуємо, що допомагаєте нам рости

Владислав Чистяков

Пише про те, що робить руками: інтернет-магазини на OpenCart, застосунки на Next.js, інтеграції та швидкість сайтів. У статтях — заміри й перевірки, які читач може повторити на своєму проєкті, а не загальні поради. Комерційна розробка з 2015 року.

Часті запитання

Відповіді на популярні питання по темі

Звичайний навантажувальний тест перевіряє, чи система витримує потік запитів. Хаос-тест додає до цього примусове вбивання компонентів посеред роботи — не м'яке завершення, а SIGKILL, який не дає процесу шансу коректно закритися. Мета — перевірити не швидкість, а поведінку під час реального збою.

Для чат-бота, у якого діалог складається з кількох повідомлень поспіль, 300 запитів за секунду означає одночасну активність кількох сотень діалогів. Це не показник максимальної пропускної здатності системи — тест не шукав межу, а перевіряв поведінку під конкретним фіксованим навантаженням.

Ні. Результат означає, що в цьому конкретному тесті 17.08.2026, під цим конкретним навантаженням і цими конкретними збоями, втрат не було. Це не гарантія на всі можливі умови — прод-навантаження, мережеві затримки між дата-центрами чи тривалий, а не одноразовий, збій можуть показати інший результат.

Тому що примусове вбивання процесів на проді означало б реальний збій для реальних покупців. Локальний стек — та сама конфігурація сервісів, що й прод, але без ризику для живого трафіку. Це чесне обмеження методу, і стаття прямо про нього каже, а не замовчує.

Черга NATS зберігає повідомлення персистентно, а не лише в оперативній пам'яті процесу, і чекає на підтвердження (acknowledgment) обробки. Якщо сервіс, який мав обробити повідомлення, впав до підтвердження, повідомлення лишається в черзі й обробляється повторно, коли сервіс відновиться.

Отримуйте найкращі статті на пошту

Підпишіться на нашу розсилку та отримуйте корисні поради, інсайти та новини про веб-розробку, маркетинг та бізнес.

Ми поважаємо вашу приватність. Відписатись можна в будь-який момент.

Схожі статті

Всі статті
Сертифікати продовжуються самі: TLS на 116 сайтах і один, що не продовжився
Веб-розробка

Сертифікати продовжуються самі: TLS на 116 сайтах і один, що не продовжився

22 вересня 2026 року ми перевірили HTTPS-сертифікати на 116 сайтах, які вже міряли для ринкових вимірів, і для 104 з них порівняли стан із серпневим. Усі 116 пройшли перевірку, 108 стоять на 89- і 90-денних безкоштовних сертифікатах, і лише в одного сайту сертифікат досі не продовжився, хоча за типових налаштувань уже мав би. Розбираємо заміри, межі методу й показуємо, як перевірити свій сайт однією командою.

9 хв
22 вер.
Читати далі
154 помилки типів, які викидала збірка: що в них знайшлось
Веб-розробка

154 помилки типів, які викидала збірка: що в них знайшлось

21 вересня 2026 року перевірка типів на нашому сайті показала 154 помилки, хоча збірка щоразу була зеленою: результат перевірки просто викидався. Усередині знайшлись нулі в статистиці посилань і в експорті аналітики, сортування, що не сортувало, і тести, які не запускались. Розповідаємо, як розбирали, що змінили і як перевірити свій проєкт.

9 хв
22 вер.
Читати далі
Healthcheck дав 60 % запитів застосунку: що побачили в першу добу метрик
Веб-розробка

Healthcheck дав 60 % запитів застосунку: що побачили в першу добу метрик

21 вересня 2026 року, у першу добу обліку запитів за маршрутами, службовий /api/health отримав 13 666 запитів — 60 % трафіку застосунку, і кожен ішов у спільну базу. Розповідаємо, які два налаштування це прибрали, яку ціну маємо за них і як перевірити свій healthcheck.

9 хв
22 вер.
Читати далі