Осваиваем tarantool 1.6 / Евгений Шадрин (sberbank digital ventures)

30
Осваиваем Tarantool Шадрин Евгений

Upload: ontico

Post on 06-Jan-2017

7.241 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Осваиваем Tarantool

Шадрин Евгений

Page 2: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Что такое NoSQL?• Не только SQL• Простота масштабирования• Производительность в конкретных задачах

• Удобство и простота использования

Page 3: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Мир NoSQL

Page 4: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Выбор решения• Не стоит изобретать велосипед

• Исходите из задачи• Опирайтесь на опыт других• Выбирайте, что знаете

Page 5: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Использование NoSQL

• «Кэширование» данныхmemcached

● Большие объемы данныхHbase

• Сервисы очередейredis

• Платформы для статистики и обработки данных

redis• Удобный бекенд для хранения

mongoDB

Page 6: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

TarantoolA NoSQL database running in

a Lua application server

try.tarantool.org

Page 7: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Особенности Tarantool

• Все данные в памяти• Документно-ориентированная модель данных

• Вторичные индексы• Транзакции• Легковесные потоки• Работа с сетью и файлами

Page 8: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

script.lua#!/usr/bin/tarantool-- This is lua script

function hw(a, b) print (a.hello..b.world)end

b = {}a = { hello = 'Hello ' }

b['world'] = 'world!'

hw(a, b)`

Page 9: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

#!/usr/bin/tarantool-- Tarantool init script

local log = require('log')local console = require('console')local server = require('http.server')

local HOST = 'localhost'local PORT = 8008

box.cfg { log_level = 5, slab_alloc_arena = 1, }console.listen('127.0.0.1:33013')

if not box.space.users thens = box.schema.space.create('users')

s:create_index('primary', {type = 'tree', parts = {1, 'NUM'}})end

init.lua

Page 10: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

function handler(self) local id = self:cookie('tarantool_id') local ip = self.peer.host local data = '' log.info('Users id = %s', id) if not id then data = 'Welcome to tarantool server!' box.space.users:auto_increment({ip}) id = box.space.users:len() return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' }) else local count = box.space.users:len() data = 'You id is ' .. id .. '. We have ' .. count .. ' users' return self:render({ text = data }) endend

httpd = server.new(HOST, PORT)httpd:route({ path = '/' }, handler)httpd:start()

Page 11: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Page 12: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Lua• Простой• Структуры данных – таблицы• Быстрый luajit (luafun)• Удобная интеграция с С• tarantool – Lua интерпретатор

Page 13: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

tarantool>

• /usr/bin/tarantool• tarantool> print(‘Ola lua’)

Стартовый скрипт init.lua

• /usr/bin/tarantool init.lua

Запуск

Page 14: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

box.cfg

box.cfg { log_level = 5, slab_alloc_arena = 1, }

Пакет boxbox.cfg, box.info, box.slab,

box.stat

Page 15: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

box.cfgtarantool> box.cfg---- snapshot_count: 6 slab_alloc_arena: 1 background: false snapshot_period: 3600 log_level: 5 snap_dir: . wal_dir: ....

Page 16: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

box.infotarantool> box.info.pid---- 17922...tarantool> box.info.version---- 1.6.5-98-ge279a5f...tarantool> box.info.uptime---- 143...tarantool> box.info.status--- - running...

Page 17: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Модель данных

Page 18: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

База данных

if not box.space.users thens = box.schema.space.create('users')

s:create_index('primary', {type = 'tree', parts = {1, 'NUM'}})end

box.space.users:auto_increment({ip})

local count = box.space.users:len()

Page 19: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Lua application server

● https://github.com/tarantool ● tarantool http● tarantool queue● try.tarantool.org● Rocks репозиторий

Page 20: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Пакетыconsole = require('console')log = require('log')console.listen('127.0.0.1:33013')log.info('Tarantool start')

Консоль администратора---------------------------$ rlwrap telnet 0 33013Trying 0.0.0.0...Connected to 0.Escape character is '^]'.Tarantool 1.6.5-98-ge279a5f (Lua console) type 'help' for interactive help

Page 21: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Tarantool http

local server = require('http.server')

httpd = server.new(HOST, PORT)httpd:route({ path = '/' }, handler)httpd:start()

return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' })

Page 22: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Tarantool http

● Сервер ● Клиент● Куки● Lua внутри Template

Page 23: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

#!/usr/bin/tarantool-- Tarantool init script

local log = require('log')local console = require('console')local server = require('http.server')

local HOST = 'localhost'local PORT = 8008

box.cfg { log_level = 5, slab_alloc_arena = 1, }console.listen('127.0.0.1:33013')

if not box.space.users thens = box.schema.space.create('users')

s:create_index('primary', {type = 'tree', parts = {1, 'NUM'}})end

init.lua

Page 24: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

function handler(self) local id = self:cookie('tarantool_id') local ip = self.peer.host local data = '' log.info('Users id = %s', id) if not id then data = 'Welcome to tarantool server!' box.space.users:auto_increment({ip}) id = box.space.users:len() return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' }) else local count = box.space.users:len() data = 'You id is ' .. id .. '. We have ' .. count .. ' users' return self:render({ text = data }) endend

httpd = server.new(HOST, PORT)httpd:route({ path = '/' }, handler)httpd:start()

Page 25: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Пакеты• json• fiber• yaml• digest• socket• msgpack• fio• net.box

Page 26: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Fibers• Модель green threads• Быстро создаются• Хорошая производительность переключения

fiber.create()fiber.sleep()

fiber_object:cancel()fiber.time()

Page 27: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Документация• tarantool.org (documentation, downloads)

• Поддержка большинства unix подобных систем (buildbot), сопровождение пакетов

• Связь с разработчиками

Page 28: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Opensource

Page 29: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Итоги● Своя сфера применения● Инструмент разработки – это важно● Идея и цель – важнее● tarantool – совсем не сложный

Page 30: Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)

Спасибо за внимание[email protected]