MuTarantool, unogona kusanganisa super-inokurumidza dhatabhesi uye application yekushanda navo. Hezvino kuti zviri nyore sei kuita

Makore mashanu apfuura ndakaedza kushanda neTarantool, asi zvakashaya basa kwandiri. Asi nguva pfupi yadarika ndakabata webinar kwandakataura nezve Hadoop, nezve mashandiro anoita MapReduce. Ikoko ndakabvunzwa mubvunzo - "Sei usingashandisi Tarantool pabasa iri?".

Nekuda kwekuda kuziva, ndakafunga kudzokera kwairi, kuyedza yazvino vhezheni - uye panguva ino ndakanyanya kufarira chirongwa ichi. Iye zvino ini ndicharatidza maitiro ekunyora nyore application muTarantool, itakure uye tarisa kuita, uye iwe uchaona kuti zviri nyore uye zvinotonhorera zvese zviripo.

MuTarantool, unogona kusanganisa super-inokurumidza dhatabhesi uye application yekushanda navo. Hezvino kuti zviri nyore sei kuita

Chii chinonzi Tarantool

Tarantool inozviisa pachayo seyekupedzisira-inokurumidza dhatabhesi. Iwe unogona kuisa chero data yaunoda imomo. Uyezve, vadzokorore, shard - ndiko kuti, patsanura huwandu hukuru hwe data pamasevha akati wandei uye sanganisa mibairo kubva kwavari - ita kukanganisa-kushivirira master-master link.

Chechipiri, iapplication server. Iwe unogona kunyora zvikumbiro zvako pairi, shanda nedata, semuenzaniso, bvisa zvinyorwa zvekare kumashure maererano nemimwe mitemo. Iwe unogona kunyora sevha yeHttp zvakananga muTarantula iyo ichashanda nedata: ipa nhamba yavo, nyora data nyowani ipapo uye udzikise zvese kune tenzi.

Ndakaverenga chinyorwa pamusoro pekuti vakomana vakaita sei mutsara wemutsara we300, unongove misodzi nekurova - vane hushoma hwekuita kwemameseji makumi maviri pasekondi. Pano iwe unogona kunyatso kutendeuka nekunyora yakakura kwazvo application, uye izvi hazvichengetwe, senge muPostgreS.

Inenge sevha yakadaro, iri nyore chete, ini ndichaedza kutsanangura munyaya ino.

Kuiswa

Paye bvunzo, ndakatanga matatu akajairwa chaiwo muchina - 20 gigabyte hard drive, Ubuntu 18.04. 2 virtual CPU uye 4 gigabytes yekuyeuka.

Isu tinoisa Tarantool - mhanyisa bash script kana kuwedzera repository uye ita apt kuwana kuisa Tarantool. Batanidza kune script - (curl -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash). Tine mirairo yakaita se:

tarantoolctl ndiwo murairo mukuru wekutonga Tarantula zviitiko.
/etc/tarantool - pano pane kurongeka kwese.
var/log/tarantool - heino matanda.
var/lib/tarantool - heino nhema iyo data, uye zvino inokamurwa kuita zviitiko.

Kune mienzaniso-inowanikwa uye semuenzaniso-inogonesa maforodha - ine izvo zvichatangwa - iyo yekumisikidza faira ine lua kodhi, iyo inotsanangura kuti ndeapi madoko ainoteerera pairi, ndeipi ndangariro inowanikwa kwairi, Vinyl injini marongero, kodhi inoshanda pakutanga. maseva, sharding, mitsetse, kudzima data isingachashandi, zvichingodaro.

Mamiriro anoshanda senge muPostgreS. Semuenzaniso, iwe unoda kumhanyisa akawanda makopi edhatabhesi inorembera pamadoko akasiyana. Zvinoitika kuti akati wandei dhatabhesi zviitiko zvinotangwa pane imwe sevha, iyo inorembera pamadoko akasiyana. Ivo vanogona kuve neyakasiyana marongero - imwe muenzaniso inoshandisa imwe pfungwa, yechipiri - imwe.

Instance management

Isu tine tarantoolctl yekuraira iyo inotibvumira kubata Tarantula zviitiko. Semuenzaniso, tarantoolctl cheki muenzaniso inotarisa faira yekumisikidza uye iti iyo faira yakanaka kana pasina zvikanganiso zvesyntax.

Iwe unogona kuona chimiro chemuenzaniso - tarantoolctl chimiro muenzaniso. Nenzira imwecheteyo, iwe unogona kuita kutanga, kumisa, kutangazve.

Kana imwe muenzaniso yave kushanda, pane nzira mbiri dzekubatanidza nayo.

1. Administrative console

Nekutadza, Tarantool inovhura socket uye inotumira yakajeka ASCII mameseji kudzora iyo Tarantula. Kubatanidza kune koni kunogara kuchiitika pasi pemushandisi we admin, hapana humbowo, saka haufanire kutora chiteshi chekoni kudzora Tarantula kunze.

Kuti ubatanidze neiyi nzira, unofanirwa kupinda Tarantoolctl pinda zita remuenzaniso. Iwo murairo uchavhura console uye ubatanidze semushandisi we admin. Usambofa wakafumura iyo console port kune kunze - zviri nani kuisiya seyuniti socket. Zvadaro chete avo vane ruzivo rwekunyora kune socket ndivo vachakwanisa kubatana neTarantula.

Iyi nzira inodiwa pazvinhu zvekutonga. Kuti ushande nedata, shandisa nzira yechipiri - iyo binary protocol.

2. Kushandisa binary protocol kuti ubatanidze kune imwe chiteshi

Pane kuraira kwekuteerera mukugadzirisa, iyo inovhura chiteshi chekutaura kwekunze. Chiteshi ichi chinoshandiswa nebhinari protocol uye kutendeseka kunogoneswa ipapo.

Kune iyi yekubatanidza, tarantoolctl yekubatanidza kune nhamba yechiteshi inoshandiswa. Kuishandisa, unogona kubatana kumaseva ari kure, shandisa chokwadi uye upe akasiyana kodzero dzekuwana.

Data Kurekodha uye Bhokisi Module

Sezvo Tarantool iri zvese dhatabhesi uye sevha yekushandisa, ine akasiyana mamodule. Isu tinofarira mubhokisi module - inoshandisa kushanda nedata. Paunonyora chimwe chinhu kubhokisi, Tarantool inonyora iyo data kudhisiki, inoichengeta mundangariro, kana kuita chimwe chinhu nayo.

Rekodhi

Semuenzaniso, tinopinda mubhokisi module uye kudana bhokisi.once basa. Ichamanikidza Tarantool kumhanya kodhi yedu kana sevha yatangwa. Isu tinogadzira nzvimbo iyo data yedu ichachengetwa.

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')
    box.schema.user.grant('guest', 'read,write,execute', 'universe')

    -- Keep things safe by default
    --  box.schema.user.create('example', { password = 'secret' })
    --  box.schema.user.grant('example', 'replication')
    --  box.schema.user.grant('example', 'read,write,execute', 'space', 'example')
end

Mushure meizvozvo, isu tinogadzira yekutanga index - yekutanga - yatinogona kutsvaga data. By default, kana pasina parameters inotsanangurwa, yekutanga ndima mune yega yega yekupinda yeiyo primer index ichashandiswa.

Zvadaro tinoita rubatsiro kune muenzi mushandisi, pasi payo patinobatanidza kuburikidza nebhinari protocol. Isu tinobvumira kuverenga, kunyora uye kuita muchiitiko chese.

Kuenzaniswa neyakajairwa dhatabhesi, zvese zviri nyore pano. Tine nzvimbo - nzvimbo iyo data yedu inongochengetwa. Kupinda kwega kwega kunonzi tuple. Iyo yakarongedzwa muMessagePack. Iyi imhando inotonhorera - ndeye binary uye inotora nzvimbo shoma - 18 bytes maringe ne27.

MuTarantool, unogona kusanganisa super-inokurumidza dhatabhesi uye application yekushanda navo. Hezvino kuti zviri nyore sei kuita

Zviri nyore kushanda naye. Anenge mutsara wega wega, yega yega yekupinda data inogona kuve nemakoramu akasiyana zvachose.

Tinogona kuona nzvimbo dzese tichishandisa Box.space command. Kuti tisarudze muenzaniso chaiwo, tinonyora bhokisi.space muenzaniso uye tinowana ruzivo rwakazara pamusoro payo.

Kune mhando mbiri dzeinjini dzakavakwa muTarantool: Memory uye Vinyl. Memory inochengeta data rese mundangariro. Naizvozvo, zvese zvinoshanda zviri nyore uye nekukurumidza. Iyo data inokandwa kune dhisiki, uye kune zvakare yekunyora pamberi pegi mecha, saka isu hatirasikirwe chero chinhu kana sevha ikaparara.

Vinyl inochengetedza data pane dhisiki mune yakajairika fomu - ndiko kuti, iwe unogona kuchengeta data rakawanda kupfuura isu tine ndangariro, uye Tarantula ichaiverenga kubva kudhisiki.

Iye zvino tichashandisa Memory.

unix/:/var/run/tarantool/example.control> box.space.example
---
- engine: memtx
  before_replace: 'function: 0x41eb02c8'
  on_replace: 'function: 0x41eb0568'
  ck_constraint: []
  field_count: 0
  temporary: false
  index:
    0: &0
      unique: true
      parts:
      - type: unsigned
        is_nullable: false
        fieldno: 1
      id: 0
      space_id: 512
      type: TREE
      name: primary
    primary: *0
  is_local: false
  enabled: true
  name: example
  id: 512
...

unix/:/var/run/tarantool/example.control>

Index:

Indekisi yekutanga inofanirwa kugadzirwa kune chero nzvimbo, nekuti hapana chinozoshanda pasina iyo. Senge mune chero dhatabhesi, isu tinogadzira yekutanga ndima - iyo rekodhi ID.

Zvikamu:

Apa ndipo patinotsanangura kuti index yedu inei. Iyo ine chikamu chimwe - chikamu chekutanga chatichashandisa, nyora isina kusaina - yakanaka nhamba. Sekurangarira kwandinorangarira kubva pane zvinyorwa, iyo nhamba yepamusoro inogona kuve 18 quintillion. Zvakawanda zvinoshamisa.

Isu tinogona ipapo kuisa data tichishandisa iyo yekuisa command.

unix/:/var/run/tarantool/example.control> box.space.example:insert{1, 'test1', 'test2'}
---
- [1, 'test1', 'test2']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{2, 'test2', 'test3', 'test4'}
---
- [2, 'test2', 'test3', 'test4']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{3, 'test3'}
---
- [3, 'test3']
...

unix/:/var/run/tarantool/example.control> box.space.example:insert{4, 'test4'}
---
- [4, 'test4']
...

unix/:/var/run/tarantool/example.control>

Munda wekutanga unoshandiswa sekiyi yekutanga, saka unofanirwa kuve wakasiyana. Hatina kuganhurirwa nenhamba yemakoramu, saka tinokwanisa kuisa data rakawanda sezvatinoda ipapo. Iwo anotsanangurwa muMessagePack fomati, yandakatsanangura pamusoro.

Data kubuda

Zvadaro tinogona kuratidza data nekusarudza murairo.

Bhokisi.example.select nekiyi {1} icharatidza yaunoda kupinda. Kana tikasiya kiyi, tichaona zvese zvinyorwa zvatinazvo. Izvo zvese zvakasiyana muhuwandu hwemakoramu, asi pano, mumusimboti, hapana pfungwa yemakoramu - kune nhamba dzemunda.

Panogona kunge paine data rakawanda sezvaunoda. Uye semuenzaniso, isu tinofanirwa kuvatsvaga mundima yechipiri. Kuti tiite izvi, tinoita itsva yechipiri index.


box.space.example:create_index( ‘secondary’, { type = ‘TREE’, unique = false, parts = {{field = 2, type =’string’} }}) 

Isu tinoshandisa iyo Create_index command.
Tinoti Sekondari.

Pashure paizvozvo, unofanira kutsanangura parameters. Indekisi yemhando ndeye TREE. Inogona kunge isiri yega, saka tinopinda Unique = nhema.

Tinobva taratidza kuti indekisi yedu ine zvikamu zvipi. Munda ndiyo nhamba yemunda watinosungira iyo index, uye inotsanangura rudzi rwetambo. Uye saka yakagadzirwa.

unix/:/var/run/tarantool/example.control> box.space.example:create_index('secondary', { type = 'TREE', unique = false, parts = {{field = 2, type = 'string'}}})
---
- unique: false
  parts:
  - type: string
    is_nullable: false
    fieldno: 2
  id: 1
  space_id: 512
  type: TREE
  name: secondary
...

unix/:/var/run/tarantool/example.control>

Iye zvino ndiyo nzira yatinogona kuitumidza:

unix/:/var/run/tarantool/example.control> box.space.example.index.secondary:select('test1')
---
- - [1, 'test1', 'test2']
...

Kuponesa

Kana tikatangazve chiitiko uye kuyedza kufonera iyo data zvakare, isu tichaona kuti ivo havapo - zvese hazvina chinhu. Izvi zvinoitika nekuti Tarantool inogadzira nzvimbo dzekutarisa uye inochengetedza iyo data kune dhisiki, asi kana tikarega kushanda pamberi peanotevera kuchengetedza, isu ticharasikirwa nemashandiro ese - nekuti isu tichapora kubva kune yekupedzisira cheki, yaive, semuenzaniso, maawa maviri apfuura.

Kuchengetedza sekondi yega yega hakuzoshande - nekuti kugara uchirasa 20 GB kudhisiki ipfungwa-saka.

Nokuda kweizvi, pfungwa yekunyora-mberi log yakagadzirwa uye inoshandiswa. Nekubatsira kwayo, kune imwe neimwe shanduko mune data, rekodhi inogadzirwa mune diki nyora-mberi faira regi.

Kupinda kwega kwega kusvika kunzvimbo yekutarisa kunochengetwa mavari. Kune aya mafaira, tinoisa saizi - semuenzaniso, 64 mb. Kana ichizadza, kurekodha kunotanga kuenda kune yechipiri faira. Uye mushure mekutangazve, Tarantool inopora kubva kune yekupedzisira cheki uye yobva yatenderedza pamusoro pezvese kutengeserana kwekupedzisira kusvika yamira.

MuTarantool, unogona kusanganisa super-inokurumidza dhatabhesi uye application yekushanda navo. Hezvino kuti zviri nyore sei kuita

Kuti uite kurekodha kwakadaro, unofanirwa kutsanangura sarudzo mubhokisi.cfg marongero (mumuenzaniso.lua faira):

wal_mode = “write”;

kushandiswa kwedata

Nezvatakanyora ikozvino, unogona kushandisa Tarantula kuchengetedza data uye ichashanda nekukurumidza se database. Uye zvino cherry pakiki - chii chaungaite nazvo zvose.

Kunyora application

Somuenzaniso, ngatinyorei chikumbiro chakadaro cheTarantula

Ona kushandiswa pasi pe spoiler

box.cfg {
    listen = '0.0.0.0:3301';
    io_collect_interval = nil;
    readahead = 16320;
    memtx_memory = 128 * 1024 * 1024; -- 128Mb
    memtx_min_tuple_size = 16;
    memtx_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_memory = 128 * 1024 * 1024; -- 128Mb
    vinyl_cache = 128 * 1024 * 1024; -- 128Mb
    vinyl_max_tuple_size = 128 * 1024 * 1024; -- 128Mb
    vinyl_write_threads = 2;
    wal_mode = "write";
    wal_max_size = 256 * 1024 * 1024;
    checkpoint_interval = 60 * 60; -- one hour
    checkpoint_count = 6;
    force_recovery = true;
    log_level = 5;
    log_nonblock = false;
    too_long_threshold = 0.5;
    read_only   = false
}

local function bootstrap()
    local space = box.schema.create_space('example')
    space:create_index('primary')

    box.schema.user.create('example', { password = 'secret' })
    box.schema.user.grant('example', 'read,write,execute', 'space', 'example')

    box.schema.user.create('repl', { password = 'replication' })
    box.schema.user.grant('repl', 'replication')
end

-- for first run create a space and add set up grants
box.once('replica', bootstrap)

-- enabling console access
console = require('console')
console.listen('127.0.0.1:3302')

-- http config
local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

local router = http_router.new()

local function get_count()
 local cnt = box.space.example:len()
 return cnt
end

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

router:route({method = 'GET', path = '/token'}, function()
    local token = randomString(32)
    local last = box.space.example:len()
    box.space.example:insert{ last + 1, token }
    return {status = 200, body = json.encode({token = token})}
end)

prometheus = require('prometheus')

fiber = require('fiber')
tokens_count = prometheus.gauge("tarantool_tokens_count",
                              "API Tokens Count")

function monitor_tokens_count()
  while true do
    tokens_count:set(get_count())
    fiber.sleep(5)
  end
end
fiber.create(monitor_tokens_count)

router:route( { method = 'GET', path = '/metrics' }, prometheus.collect_http)

httpd:set_router(router)
httpd:start()

Isu tinozivisa imwe tafura mu lua inotsanangura zviratidzo. Tafura iyi inodiwa kugadzira tambo isina kurongeka.

local charset = {}  do -- [0-9a-zA-Z]
    for c = 48, 57  do table.insert(charset, string.char(c)) end
    for c = 65, 90  do table.insert(charset, string.char(c)) end
    for c = 97, 122 do table.insert(charset, string.char(c)) end
end

Mushure meizvozvo, isu tinozivisa basa - randomString uye kupa hurefu kukosha mumabhuraketi.

local function randomString(length)
    if not length or length <= 0 then return '' end
    math.randomseed(os.clock()^5)
    return randomString(length - 1) .. charset[math.random(1, #charset)]
end

Zvadaro tinobatanidza http router uye http server kune yedu Tarantula server, JSON, iyo yatichapa kune mutengi.

local http_router = require('http.router')
local http_server = require('http.server')
local json = require('json')

Mushure meizvozvo, tinotanga pachiteshi 8080 pane ese http server interfaces, iyo inonyora zvese zvikumbiro uye zvikanganiso.

local httpd = http_server.new('0.0.0.0', 8080, {
    log_requests = true,
    log_errors = true
})

Tevere, isu tinozivisa nzira iyo kana chikumbiro chine GET nzira yasvika pachiteshi 8080 / kuverenga, tobva tadaidza basa kubva mumutsara mumwe. Inodzorera chimiro - 200, 404, 403 kana chero chatinotsanangura.

router:route({method = 'GET', path = '/count'}, function()
    return {status = 200, body = json.encode({count = get_count()})}
end)

Mumuviri, tinodzorera json.encode, tinotsanangura kuverenga uye getcount mairi, iyo inonzi uye inoratidza nhamba yezvinyorwa mu database yedu.

Second method

router:route({method = 'GET', path = '/token'}, function() 
    local token = randomString(32) 
    local last = box.space.example:len() 
    box.space.example:insert{ last + 1, token } 
    return {status = 200, body = json.encode({token = token})}
end)

Muraini papi router: nzira ({nzira = 'GET', nzira = '/ chiratidzo'}, basa () tinodaidza basa uye tinogadzira chiratidzo.

Mutsara chemuno chiratidzo = randomString(32) itambo isina kurongeka ine mabhii makumi matatu nemaviri.
Mumutsara local last = box.space.example:len() tinoburitsa chinhu chekupedzisira.
Uye mumutsetse box.space.example:insert{kupedzisira + 1, chiratidzo } tinonyora data kune database yedu, ndiko kuti, tinongowedzera ID ne 1. Izvi zvinogona kuitwa, nenzira, kwete chete nenzira yakadaro yakaoma. Tarantula ine mitsetse yenyaya iyi.

Tinonyora chiratidzo ipapo.

Saka, takanyora chikumbiro mune imwe faira. Iwe unogona kuwana iyo data ipapo ipapo, uye iyo bhokisi module ichakuitira ese akasviba basa.

Inoteerera http uye inoshanda nedata, zvese zviri muchiitiko chimwe - zvese mashandisirwo uye data. Nokudaro, zvinhu zvose zvinoitika nokukurumidza.

Kuti timhanye, tinoisa iyo http module:

Kuti tinozviita sei, ona pasi pemuparadzi

root@test2:/# tarantoolctl rocks install http
Installing http://rocks.tarantool.org/http-scm-1.src.rock
Missing dependencies for http scm-1:
   checks >= 3.0.1 (not installed)

http scm-1 depends on checks >= 3.0.1 (not installed)
Installing http://rocks.tarantool.org/checks-3.0.1-1.rockspec

Cloning into 'checks'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 28 (delta 1), reused 16 (delta 1), pack-reused 0
Receiving objects: 100% (28/28), 12.69 KiB | 12.69 MiB/s, done.
Resolving deltas: 100% (1/1), done.
Note: checking out '580388773ef11085015b5a06fe52d61acf16b201'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

No existing manifest. Attempting to rebuild...
checks 3.0.1-1 is now installed in /.rocks (license: BSD)

-- The C compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found TARANTOOL: /usr/include (found version "2.4.2-80-g18f2bc82d")
-- Tarantool LUADIR is /.rocks/share/tarantool/rocks/http/scm-1/lua
-- Tarantool LIBDIR is /.rocks/share/tarantool/rocks/http/scm-1/lib
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    version


-- Build files have been written to: /tmp/luarocks_http-scm-1-V4P9SM/http/build.luarocks
Scanning dependencies of target httpd
[ 50%] Building C object http/CMakeFiles/httpd.dir/lib.c.o
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:32:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c: In function ‘tpl_term’:
/usr/include/tarantool/lauxlib.h:144:15: warning: this statement may fall through [-Wimplicit-fallthrough=]
    (*(B)->p++ = (char)(c)))
    ~~~~~~~~~~~^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:62:7: note: in expansion of macro ‘luaL_addchar’
       luaL_addchar(b, '\');
       ^~~~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:63:6: note: here
      default:
      ^~~~~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:39:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h: In function ‘tpe_parse’:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:147:9: warning: this statement may fall through [-Wimplicit-fallthrough=]
    type = TPE_TEXT;
    ~~~~~^~~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/tpleval.h:149:3: note: here
   case TPE_LINECODE:
   ^~~~
In file included from /tmp/luarocks_http-scm-1-V4P9SM/http/http/lib.c:40:0:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h: In function ‘httpfast_parse’:
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:372:22: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 code = 0;
                 ~~~~~^~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:374:13: note: here
             case status:
             ^~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:393:23: warning: this statement may fall through [-Wimplicit-fallthrough=]
                 state = message;
                 ~~~~~~^~~~~~~~~
/tmp/luarocks_http-scm-1-V4P9SM/http/http/httpfast.h:395:13: note: here
             case message:
             ^~~~
[100%] Linking C shared library lib.so
[100%] Built target httpd
[100%] Built target httpd
Install the project...
-- Install configuration: "Debug"
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/VERSION.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lib/http/lib.so
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/server/tsgi_adapter.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/nginx_server/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/init.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/fs.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/matching.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/middleware.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/request.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/router/response.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/tsgi.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/utils.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/mime_types.lua
-- Installing: /.rocks/share/tarantool/rocks/http/scm-1/lua/http/codes.lua
http scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

Isu tinodawo prometheus kumhanya:

root@test2:/# tarantoolctl rocks install prometheus
Installing http://rocks.tarantool.org/prometheus-scm-1.rockspec

Cloning into 'prometheus'...
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 19 (delta 2), reused 5 (delta 0), pack-reused 0
Receiving objects: 100% (19/19), 10.73 KiB | 10.73 MiB/s, done.
Resolving deltas: 100% (2/2), done.
prometheus scm-1 is now installed in /.rocks (license: BSD)

root@test2:/#

Isu tinotanga uye tinokwanisa kuwana mamodule

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"e2tPq9l5Z3QZrewRf6uuoJUl3lJgSLOI"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/token
HTTP/1.1 200 Ok
Content-length: 44
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"token":"fR5aCA84gj9eZI3gJcV0LEDl9XZAG2Iu"}

root@test2:/# curl -D - -s http://127.0.0.1:8080/count
HTTP/1.1 200 Ok
Content-length: 11
Server: Tarantool http (tarantool v2.4.2-80-g18f2bc82d)
Connection: keep-alive

{"count":2}root@test2:/#

/ count inotipa chimiro 200.
/ chiratidzo chinoburitsa chiratidzo uye chinonyora chiratidzo ichi kune dhatabhesi.

Testing speed

Ngatimhanyei bhenji yezvikumbiro zviuru makumi mashanu. Zvikumbiro zvemakwikwi zvichave mazana mashanu.

root@test2:/# ab -c 500 -n 50000 http://127.0.0.1:8080/token
This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Completed 50000 requests
Finished 50000 requests


Server Software:        Tarantool
Server Hostname:        127.0.0.1
Server Port:            8080

Document Path:          /token
Document Length:        44 bytes

Concurrency Level:      500
Time taken for tests:   14.578 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      7950000 bytes
HTML transferred:       2200000 bytes
Requests per second:    3429.87 [#/sec] (mean)
Time per request:       145.778 [ms] (mean)
Time per request:       0.292 [ms] (mean, across all concurrent requests)
Transfer rate:          532.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   10 103.2      0    3048
Processing:    12   69 685.1     15   13538
Waiting:       12   69 685.1     15   13538
Total:         12   78 768.2     15   14573

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     15
  75%     16
  80%     16
  90%     16
  95%     16
  98%     21
  99%     42
 100%  14573 (longest request)
root@test2:/#

Zviratidzo zvinobudiswa. Uye isu tiri kugara tichirekodha data. 99% yezvikumbiro zvakapedzwa mu42 milliseconds. Saizvozvo, isu tine zvikumbiro zve3500 pasekondi pamushini mudiki, uko kune 2 cores uye 4 gigabytes yekuyeuka.

Iwe unogona zvakare kusarudza imwe 50000 tokeni uye uone kukosha kwayo.

Iwe haugone kushandisa kwete chete http, mhanyisa kumashure mabasa anogadzirisa data rako. Uyezve kune zvakasiyana-siyana zvinokonzera. Semuenzaniso, unogona kudana mabasa pane zvigadziriso, tarisa chimwe chinhu - gadzirisa kusawirirana.

Iwe unogona kunyora script zvikumbiro zvakananga mu database server pachayo, uye kwete kuganhurwa nechero chinhu, batanidza chero ma module uye shandisa chero pfungwa.

Sevha yekushandisa inogona kuwana ekunze maseva, kuunganidza data uye kuiwedzera kune yayo dhatabhesi. Data kubva pane ino database ichashandiswa nemamwe maapplication.

Izvi zvichaitwa neTarantula pachayo, uye hapana chikonzero chekunyora chakasiyana application.

Mukupedzisa

Ichi chingori chikamu chekutanga chebasa guru. Yechipiri ichaburitswa munguva pfupi iri kutevera paMail.ru Group blog, uye isu tichanyatso wedzera chinongedzo kwairi mune ino chinyorwa.

Kana iwe uchifarira kuenda kuzviitiko uko isu tinogadzira zvinhu izvi online uye kubvunza mibvunzo munguva chaiyo, batanidza kune DevOps neREBRAIN chiteshi.

Kana iwe uchida kutamira kune gore kana uine mibvunzo pamusoro pezvivakwa zvako, Inzwa wakasununguka kutumira chikumbiro.

PS Tine 2 emahara edhisheni pamwedzi, pamwe chirongwa chako chichava chimwe chazvo.

Source: www.habr.com

Voeg