Что за странная многопоточность в tarantool, что он не держит нагрузку?
В целом tarantool считаю чем-то средним между дном и нормальной технологией, видно какой там бардак в репозиториях, с коннекторами, что-то заброшено и не обновляется, что-то обновляется без changelog.
В данный момент меня интересует многопоточность.
В процессе экспериментов мы заметили, что если в хранимых процедурах на Lua делать много всего, и вызывать эти процедуры одновременно несколькими клиентами, то оно начинает очень сильно тормозить. Ну то есть нагрузку вообще не держит.
Можно было бы подумать, что Tarantool вообще однопоточный. Но там все же есть какие-то fiber, и исследование показывает, что каждая хранимка крутится в своем fiber.
И к тому же существуют либы для тарантула, где вообще есть некие "сигналы" (или "локи"), и есть функция, которая ждет в цикле while (со sleep, разумеется!), когда сработает этот сигнал, и эту функцию надо вызывать именно из Lua, то есть хранимок. Но, как я уже сказал, если у вас есть хотя бы 10-20 клиентов, то можете считать эту систему однопоточной, с соответствующими перспективами для этих while.
Если же вынесем эту логику из хранимок тарантула в тот сервис, который их вызывает, а хранимки сделаем мелкими и как можно более атомарными, то система сразу будет держать сотни, а то и тысячи клиентов одновременно. И чем атомарнее хранимки, тем быстрее все работает, и даже при 2-3 (!) клиентах можно заметить разницу. (ЦП у нас имеет 32 ядра, если что.)
Что же это за "однопоточная многопоточность" такая, для кого это сделано, зачем?
Cooperative multitasking means: unless a running fiber deliberately yields control, it is not preempted by some other fiber. But a running fiber will deliberately yield when it encounters a “yield point”: a transaction commit, an operating system call, or an explicit “yield” request.
Transactions in Tarantool occur in fibers on a single thread. That is why Tarantool has a guarantee of execution atomicity.
Слышали когда-нибудь про кооперативную многозадачность? Это как раз про "Но там все же есть какие-то fiber". Предлагаю изучить, наверняка ответ кроется там.
И чем атомарнее хранимки, тем быстрее все работает
Более чем логичный результат, это всё равно что делать yield в нужных местах в одной большой хранимке.
Сложно нормально ответить? Без агрессии и цинизма.
Автор вопроса (и его команда) инвестировали МНОГО времени в Tarantool в чтение документации и практические эксперименты. Это само по себе не заслуживает уважения и нормальный ответ?
Вопрос очень логичный и естественный. Вот смотрю топ ссылку из выдачи гугла на эту тему. "Тарантул подразумевает под скоростью максимальную утилизацию ядер которые ему выдали" (c) Юхин К.
Касательно приведенных вами ссылок. Во-первых, при всем уважении, их все читали несмотря на плохой английский, все равно читали, там мало инфы на тему и нет ответа. Во-вторых, вам прекрасно известна реакция на ответы на stackoverflow содержащие только ссылки.
blahdev
Если б мой ответ не был единственным, я бы подумал что вы мой ответ спутали с чьим-то ещё. Где тут цинизм и тем более агрессия, процитируйте пожалуйста.
Это само по себе не заслуживает уважения и нормальный ответ?
Я привёл ссылки, привёл цитаты оттуда (чтобы показать, почему я вообще их привёл и подчеркнуть самое полезное), предложил куда можно дальше копать. Да, возможно этот ответ не в стиле лучших ответов на SO, где люди в ответ пишут целую статью, но мы ведь на Тостере, не так ли? Впрочем, если вы тут зарегистрировались только ради того, чтобы поддержать автора, врядли вам известно как тут обычно отвечают.