Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

POC: clusterwide-config.save in a worker thread #2137

Closed
wants to merge 7 commits into from

Conversation

palage4a
Copy link
Contributor

@palage4a palage4a commented Aug 17, 2023

Disclaimer: Пока что прохождения CI не гарантируется.
Как указано в название - это только proof-of-concept для проверки идеи.
После обсуждения жизнеспособности данного подхода, в случае его апрува ПР будет "доведен до ума" для мерджа.

Описание

ПР содержит реализацию cartridge.clustedwide-config.save , которая выполняет все операции с файловой системой в отдельном треде с помощью coio_call. Подобная реализация позволяет убрать зависимость времени выполнения функции от количества секций в cw-конфиге.

Таким образом, при увеличении количества секций в конфиге количество йилдов не увеличивается, а значит и не увеличивается время работы функции, что позитивно сказывается на скорости и стабильности применения конфига в целом, вне зависимости от реализации бизнес-логики приложения.

В таблице можно посмотреть замеры для настоящей и предложенной реализаций функции save

with coio # sections event loop (ms) duration (ms) # yields
no 4 (default) 25 1532 59
no 4 (default) 50 3084 59
no 8 25 2966 107
no 8 50 5682 107
no 16 25 5596 203
no 16 50 10822 203
yes 4 (default) 25 30 1
yes 4 (default) 50 59 1
yes 8 25 28 1
yes 8 50 57 1
yes 16 25 31 1
yes 16 50 57 1

Алгоритм тестирования аналогичен указанному в gist

Related to #2141

I didn't forget about

  • Tests
  • Changelog
  • Documentation

@yngvar-antonsson
Copy link
Collaborator

Спасибо за ПР!
Звучит круто, измерения тоже радуют. Каких-то глобальных замечаний пока нет
@filonenko-mikhail есть что дополнить?

@yngvar-antonsson
Copy link
Collaborator

Единственное что - для стабильности я бы предложил добавить флаг, который возвращает старое поведение. Если что-то пойдет не так, можно будет без отката на старую версию просто рестартнуть картридж с другой опцией cartridge.cfg
Но это обсуждаемо

@palage4a
Copy link
Contributor Author

Единственное что - для стабильности я бы предложил добавить флаг, который возвращает старое поведение. Если что-то пойдет не так, можно будет без отката на старую версию просто рестартнуть картридж с другой опцией cartridge.cfg Но это обсуждаемо

Да, я тоже думал о подобном, но сильно не копал. Думал в сторону cartrdige.vars (по аналогии с переменными тайм-аутов 2PC), но как-то коряво получалось. Но вариант с cartridge.cfg уже звучит лучше, спасибо за наводку.

@filonenko-mikhail
Copy link
Collaborator

Gently closing. No plans for it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Slow CW-config apply on instance under load "Two-phase commit is locked" after prepare phase timeout
4 participants