company_banner

День рождения Tarantool. Принимаем поздравления


    Собственной базе данных Mail.ru Group уже 12 лет! В этом посте я поделюсь успехами команды. За последний год мы выросли до 70 человек, сделали синхронную репликацию, управление кластером и получили новых крутых заказчиков. Нас много, потому что к Tarantool большой интерес в России. Если вы что-то в нашей стране оплачиваете, велика вероятность, что ваши данные проходят через нашу базу.

    Tarantool хранит и обрабатывает данные для крупных проектов:


    Tarantool — уникальный на рынке баз данных продукт. Мы развиваем его вместе с сообществом и клиентами. В этом году у нас заказали разработку синхронной репликации. Но самое приятное, что результат нам разрешили выложить в открытый доступ! Синхронная репликация поможет увеличить долю Tarantool на рынке, теперь его можно использовать как основную базу данных там, где раньше были MySQL или Postgres.

    Еще одна вещь, над которой мы работаем, и от которой выиграют все — это работа над шардированием. Мы ускорили модуль vshard, поддержали и протестировали в бою решардинг, и делаем стандартное API для выборки данных из кластера.

    Также теперь мы активно продаем лицензии и техподдержку. Вместе с выходом в энтерпрайз у нас появилась лицензионная политика. Ещё мы научились работать с партнерами-интеграторами. При этом опенсорс для нас остается такой же важной частью работы. Чтобы держать фокус, появилась команда менеджеров продукта. Как итог, мы выпустили 2 продукта:

    • Cartridge — опенсорс-средство для управления кластерами Tarantool с шардированием, GUI и админскими инструментами;
    • Data Grid — энтерпрайз-продукт для упрощенной работы с Tarantool, в котором есть средства управления схемой базы данных, готовый GraphQL API для доступа к данным и горячий деплой кода.

    Помимо всего, наша команда пресейла повысила навык выжимания из Tarantool производительности до последних капель. Например, запилотировали аналог Kafka от LinkedIn с вторичными индексами и пропускной способностью 400 тысяч запросов в секунду и задержкой менее 5 миллисекунд.

    Еще мы запустили курсы по всем аспектам Tarantool от разработки до эксплуатации. Читаем их клиентам и учим их более эффективно использовать сервисы и свои ресурсы. Не забываем также рассказывать окружающим, что делаем: много пишем на Хабр и упрощаем свой сайт tarantool.io.

    Для нас самое сложное — это объяснить заказчикам, зачем им Tarantool. Это мы тоже научились делать лучше с помощью понятных материалов и готовых презентаций.

    Перед Tarantool стоят амбициозные задачи, поэтому следите за нашими новостями, мы непременно их выполним и поделимся опытом.
    Mail.ru Group
    Строим Интернет

    Похожие публикации

    Комментарии 19

      +2
      Для нас самое сложное — это объяснить заказчикам, зачем им Tarantool. Это мы тоже научились делать лучше с помощью понятных материалов и готовых презентаций.

      А можно пару слов об этом?
        0
        Через пару недель на tarantool.io появится раздел, который объясняет для рядового пользователя что такое tarantool, с картинками.

        Плюс мы идем от кейсов использования: берем то что сделали для клиентов и их истории и делаем под каждую отдельную страницу. Так можно посмотреть на свою ситуацию и понять, похоже это на то что мы уже делали, или нет. Кейсы тоже очень скоро появятся на сайте.
          –1
          Иными словами, как впарить продукт заказчику.
            0
            Большинство наших клиентов нам не платят, а просто берут код с github. Но им тоже нужно понять что у нас за продукт. Так что это касается коммерции только частично.
          0
          Подскажите если ли в тарантул «взять все измененные данные по частичному ключу с какого то отрезка времени»?
          например:

          update videocollection:videoId_1:viewCount +5
          update videocollection:videoId_1:likeCount +3

          var lastChangesValues = GetAllChangesDataFrom('2020-08-12 18:00', "videocollection:*");
            0
            Можно создать TREE индекс по времени изменения, пройтись по этому отрезку с помощью небольшого Lua-скрипта и обновить то, что интересует.

            Условно вот так:
            for _, tuple in box.space.videocollection.index.timestamp:pairs({'2020-08-12 18:00'}, {iterator = 'GE'}) do
                box.space.videocollection:update({tuple['videoId_1']}, {
                    {'+', 'viewCount', 5},
                    {'+', 'likeCount', 3},
                })
            end
            
              0
              Вопрос был про другое по-моему, как выбрать записи, в которых было update… set viewCount = viewCount + 5 и likeCount = likeCount +3 недавно. Ну как бы обычный select по индексу по полю timestamp изменения, собственно, ничего необычного
              0
              Можно сделать поле с таймштампом вторичным индексом. Тогда можно будет сделать запрос типа «SELECT * FROM videocollection WHERE timestamp > ...». Как выполнять SQL запросы, можно посмотреть тут www.tarantool.io/en/doc/2.2/tutorials/sql_tutorial.

              В целом запросы по частичному ключу у нас поддерживаются и составные индексы тоже.
              +2
              Поздравляю) Торт в красный чатик!

              PS: Давно используем тарантул в продакшене, в том числе движок vinyl. И до сих пор понимаем, что для некоторых моментов, действительно, не знаем аналогов.
                0

                Про синхронную репликацию — хотелось бы уточнить, как происходит процесс. Вставка на мастере — репликация — фиксирование? Или же параллельная вставка во все реплики — фиксирование?

                  +1
                  Сейчас синхронная репликация [упрощенно] работает так:

                  — клиент делает вставку в мастер
                  — мастер коммитит локально, но ответ не возвращает
                  — операция едет на реплику и применяется там
                  — мастер получает уведомление что реплика применила операцию
                  — мастер возвращает клиенту «ОК»

                  Там есть много нюансов еще с транзакционным движком чтобы соседние транзакции не видели неподтвержденные еще операции.

                  В конечном итоге мы будем делать полноценный RAFT (ближе к концу года).
                    0
                    Благодарю, это именно то, что хотелось узнать. А каким образом, если не секрет, при таком механизме latency увеличивается на 5% всего?

                    Тут же добавляется сеть и операция на втором узле, как минимум в два раза медленнее должно быть.
                      0
                      На 5% уменьшается пропускная способность. Latency увеличивается сильнее (возможно 2x, потому что есть дополнительный сетевой поход). Из-за увеличения latency соответственно увеличивается входная очередь запросов (по закону Литтла). Поэтому нужно больше файловых дескрипторов и памяти на буферы.
                        0
                        Да, тут я попутал. Скопирую свой вопрос по ссылке: «Вроде как поток обработки (а каждый сервер Tarantool работает в один поток?) должен на каждой транзакции останавливаться и ждать окончания репликации, что не может не сказаться на RPS».

                        Иначе говоря, если требуемое время на транзакцию увеличилось в два раза, каким образом «пропускная способность» уменьшилась всего на 5%?
                          +1
                          Благодаря интерактивным транзакциям. Раньше мы были serializable, а теперь read committed. То есть мы не прерываем входящие запросы пока транзакция ждет подтверждения.
                            0
                            С этим понятно. А с выполнением скриптов LUA как обстоят дела? Они параллельно выполняются или таки последовательно?
                              0
                              Они выполняются по модели легковесных потоков. На блокирующих операциях выполняются другие потоки. То есть если вы делаете транзакции из Lua, в которых будет синхронная репликация, то другие Lua операции будут выполняться пока их соседи ожидают подтверждения с реплик.
                        +1
                        Не поверил глазам, открыл тот ответ — там написано что througoutput проседает на 5%, а латенси то сильнее, конечно.
                    0
                    Мои поздравления, замечательный продукт,
                    хочу его использовать в своих новых проектах

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

                    Самое читаемое