Ruby Concurrency – це важко: як я став співавтором Ruby on Rails

Зміст

1 Короткочасна помилка набору тестів 2 Координація зупинки процесу 3 Визначте проблему 4 Розведення 5 Розв’яжи задачу 6 Виправлення світу 6.1 Рейки (ActiveSupport і ActionView) 6.2 i18n 6.3 суха діаграма 6.4 rom-factory 6.5 Інші сховища 7 Підсумок 8 Післямова

Протягом останніх кількох тижнів я намагався виправити помилку в пакеті інтеграції Karafka, що зрештою змусило мене стати мікроучасником Ruby on Rails і подати подібний патч для кількох інших дуже популярних програм. Проекти екосистеми Ruby. Ось моя історія про те, як я намагаюся зрозуміти свої характеристики та паралельність Ruby.

Короткочасна помилка пакету тестів

Karafka — це ефективна багатопотокова платформа обробки Ruby та Rails Kafka. Щоб забезпечити надійну багатопотокову OSS, мені потрібно було одночасно запускати свій набір тестів, щоб симулювати роботу Karafka. Оскільки це був конкретний випадок використання, я створив свій мікрофреймворк.

Коротко: він запускає специфікації наскрізної інтеграції, запускаючи їх в окремих процесах Ruby. Кожен запускає Karafka, виконує весь код у різних конфігураціях, входить у Kafka, перевіряє твердження та після завершення виходить.

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

Сам Карафка також має внутрішнього диспетчера зупинки. У разі запиту на вимкнення від користувача, якщо завершення роботи займає більше часу, ніж встановлений очікуваний час, Karafka вимкнеться, незважаючи на роботу. І ось що сталося з цією єдиною специфікацією:

E, [2022-11-19T16:47:49.602718 #14843] ПОМИЛКА --: примусово зупинити сервер Karafka F, [2022-11-19T16:47:49.602825 #14843] ФАТАЛЬНИЙ --: #Karafka::Server, :error=>#, :type=>"app.stopping.error"}>

Ця проклята специфікація не зупинилася!

Багато речей працює під капотом:

працівники, які займаються роботами, які можуть зависнути та змусити процес зачекати чергу завдань, яка також підключена до потоку опитування (для опитування додаткових даних, коли немає завдань для виконання) аудитори запитують дані Kafka, які можуть вийти з ладу групи споживачів із кількома потоками, які запитують дані Kafka, які можуть застрягти через основну помилку Інші помилки в координації завдань і станів.

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

Координація технологічних зупинок

Гр...

Ruby Concurrency – це важко: як я став співавтором Ruby on Rails

Зміст

1 Короткочасна помилка набору тестів 2 Координація зупинки процесу 3 Визначте проблему 4 Розведення 5 Розв’яжи задачу 6 Виправлення світу 6.1 Рейки (ActiveSupport і ActionView) 6.2 i18n 6.3 суха діаграма 6.4 rom-factory 6.5 Інші сховища 7 Підсумок 8 Післямова

Протягом останніх кількох тижнів я намагався виправити помилку в пакеті інтеграції Karafka, що зрештою змусило мене стати мікроучасником Ruby on Rails і подати подібний патч для кількох інших дуже популярних програм. Проекти екосистеми Ruby. Ось моя історія про те, як я намагаюся зрозуміти свої характеристики та паралельність Ruby.

Короткочасна помилка пакету тестів

Karafka — це ефективна багатопотокова платформа обробки Ruby та Rails Kafka. Щоб забезпечити надійну багатопотокову OSS, мені потрібно було одночасно запускати свій набір тестів, щоб симулювати роботу Karafka. Оскільки це був конкретний випадок використання, я створив свій мікрофреймворк.

Коротко: він запускає специфікації наскрізної інтеграції, запускаючи їх в окремих процесах Ruby. Кожен запускає Karafka, виконує весь код у різних конфігураціях, входить у Kafka, перевіряє твердження та після завершення виходить.

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

Сам Карафка також має внутрішнього диспетчера зупинки. У разі запиту на вимкнення від користувача, якщо завершення роботи займає більше часу, ніж встановлений очікуваний час, Karafka вимкнеться, незважаючи на роботу. І ось що сталося з цією єдиною специфікацією:

E, [2022-11-19T16:47:49.602718 #14843] ПОМИЛКА --: примусово зупинити сервер Karafka F, [2022-11-19T16:47:49.602825 #14843] ФАТАЛЬНИЙ --: #Karafka::Server, :error=>#, :type=>"app.stopping.error"}>

Ця проклята специфікація не зупинилася!

Багато речей працює під капотом:

працівники, які займаються роботами, які можуть зависнути та змусити процес зачекати чергу завдань, яка також підключена до потоку опитування (для опитування додаткових даних, коли немає завдань для виконання) аудитори запитують дані Kafka, які можуть вийти з ладу групи споживачів із кількома потоками, які запитують дані Kafka, які можуть застрягти через основну помилку Інші помилки в координації завдань і станів.

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

Координація технологічних зупинок

Гр...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow