18

Tarantool_qs

Embed Size (px)

Citation preview

Page 1: Tarantool_qs
Page 2: Tarantool_qs

Tarantool/Qs,

… или об очередях в Tarantoolе

Константин Осипов, [email protected]

Page 3: Tarantool_qs

Quiz: что вы знаете о Tarantool

● Какие есть типы данных?

● Какие есть типы индексов?

● Как делаются бэкапы?

● В чём главное отличие от Redis?

Page 4: Tarantool_qs

Tarantool: главные факты

● In memory, write ahead logged

● Безразмерные пространства кортежей

● HASH, TREE индексы

● Lua процедуры

● Replication & Backup

Page 5: Tarantool_qs

Архитектура сервера

Page 6: Tarantool_qs

Архитектура сервера

Page 7: Tarantool_qs

Очереди: введение

● СУБД — пионер технологии очередей● Транзакции необходимы, но не достаточны● Очереди — основа High Availability и Scalability

Page 8: Tarantool_qs

Очереди: за и против

+ Клиент и сервер полностью «развязаны»

+ Состояние задачи всегда известно

+ Применимо для Load Balancing

+ Поддержка приоритетов

- доп. сущность

- больше операций на задачу

Page 9: Tarantool_qs

Очереди в Web Apps● Рассылка email

● Сжатие картинок

● Наш use case: avatar prefetching:

Page 10: Tarantool_qs

Tarantool: «очередной» тюнинг

● Развитые Lua процедуры:

– box.fiber, box.cfg, box.space● Специализированные средства IPC

– box.ifc.channel● Специализированные структуры данных

– частичные и bitmap индексы

Page 11: Tarantool_qs

Queue API

● За основу взято API beanstalkd

● queue.put(), take(), ack(), delete(), release() 

● Учитывает важные вопросы управления очередью:

– Приоритеты

– Таймауты

– Poisoned tasks

Page 12: Tarantool_qs

«Зависшие» задачи

● box.fiber.id(): идентификатор сессии

● Box.fiber.take() присваивает задаче id сессии

● Background fiber находит и удалаятет «зависшие» задачи

Page 13: Tarantool_qs

Ожидание в очереди

● box.ifc.channel(): обмен сообщениями между процедурами

● channel:put(), channel:get()

● channel:is_full(), channel:has_waiters()

Page 14: Tarantool_qs

Системные каналы

● Оповещают о системных событиях● on_connect, on_disconnect,

on_snapshot● pay per use

Page 15: Tarantool_qs

Частичные индексы

● index.type = HASH|TREE● index.where = lua_function● Содержит лишь данные,

удовлетворяющие предикату

Page 16: Tarantool_qs

Заключение● Tarantool/Box — high-performance data

engine● Tarnatool/Lua — building block для ваших

highload задач● Tarantool — наш взгляд на то, какой должна

быть удобная СУБД

Page 17: Tarantool_qs

Ссылки

[email protected]

http://tarantool.org

http://github.com/mailru/tarantool - исходный кодhttp://github.com/mailru/tntlua - репозиторий хранимых процедурhttp://nosql-databases.org - обзор альтернатив NoSQLhttp://groups.google.com/group/tarantool-ru - список рассылкиhttp://tarantool.org/dist/ - всегда свежие .tar.gz и .rpmhttp://habrahabr.ru/blogs/nosql - NoSQL на хабре

Page 18: Tarantool_qs

Константин ОсиповПрограммист, tarantool.org

[email protected]

СПАСИБО!