Tarantool, waxaad isku dari kartaa xog-ururin aad u degdeg badan iyo codsi si aad iyaga ula shaqeyso. Waa kan sida ay u fududahay in la sameeyo

Shan sano ka hor waxaan isku dayay inaan la shaqeeyo Tarantool, laakiin markaa way ii shaqeyn weyday. Laakiin dhawaan waxaan qabtay webinar halkaas oo aan uga hadlay Hadoop, oo ku saabsan sida MapReduce u shaqeyso. Halkaa waxaa laygu waydiiyay su'aasha - "Maxaan Tarantool ugu isticmaalin hawshan?".

Xiisaha awgeed, waxaan go'aansaday inaan ku laabto, tijaabiyo nuqulkii ugu dambeeyay - iyo markan waxaan aad u jeclaa mashruuca. Hadda waxaan ku tusi doonaa sida loo qoro codsi fudud Tarantool, ku shub oo hubi waxqabadka, waxaadna arki doontaa sida ugu fudud oo wax walba u qaboojinayaan.

Tarantool, waxaad isku dari kartaa xog-ururin aad u degdeg badan iyo codsi si aad iyaga ula shaqeyso. Waa kan sida ay u fududahay in la sameeyo

Waa maxay Tarantool

Tarantool waxay isu dhigtaa xog-ururin aad u degdeg badan. Waxaad halkaas gelin kartaa xog kasta oo aad rabto. Intaa waxaa dheer, ku celceli iyaga, shard - taas oo ah, kala qaybinta xog aad u tiro badan dhowr server oo isku dar natiijooyinka iyaga - samee xiriiriyaha-master-ga khalad-dulqaadka.

Marka labaad, waa server-ka codsiga. Waxaad ku qori kartaa codsiyadaada, ku shaqayn kartaa xogta, tusaale ahaan, tirtirto qoraaladii hore ee gadaasha iyadoo la raacayo sharciyo gaar ah. Waxaad si toos ah ugu qori kartaa server-ka Http ee Tarantula kaas oo ku shaqayn doona xogta: bixi nambarkooda, ku qor xog cusub halkaas oo dhammaan u yaree Master.

Waxaan akhriyay maqaal ku saabsan sida ay nimanku u sameeyeen saf fariin ah oo 300 ah, kuwaas oo ilmaynaya oo garaacaya - waxay leeyihiin waxqabadka ugu yar ee 20 farriimaha ilbiriqsi kasta. Halkan waxa aad si dhab ah u rogi kartaa oo ku qori kartaa codsi aad u weyn, kuwaasna lama kaydin doono, sida PostgreS.

Ku dhawaad ​​​​server noocan oo kale ah, kaliya fudud, waxaan isku dayi doonaa inaan ku qeexo maqaalkan.

Ku rakibida

Imtixaanka, waxaan bilaabay saddex mashiinno dalwadeed oo caadi ah - 20 gigabyte hard drive ah, Ubuntu 18.04. 2 Virtual CPU iyo 4 gigabytes oo xusuusta ah.

Waxaan rakibnay Tarantool - waxaan wadnaa qoraal bash ah ama ku darnaa meel kayd ah oo aad ku habboonaato rakib Tarantool. Isku xirka qoraalka - (curl -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash). Waxaan leenahay amarro sida:

tarantoolctl waa taliska ugu weyn ee maaraynta xaaladaha Tarantula.
/etc/tarantool - halkan waxaa yaal qaabeynta oo dhan.
var/log/tarantool - Halkan waa geedo.
var/lib/tarantool - Halkan waxaa ku yaal xogta, ka dibna waxay u qaybsan yihiin tusaaleyaal.

Waxaa jira faylal tusaale ahaan la heli karo iyo tusaale-awood u leh - waxay ka kooban tahay waxa la bilaabi doono - faylka qaabeynta tusaalaha leh lua code, kaas oo qeexaya dekedaha uu dhageysto, xusuusta uu heli karo, Settings engine Vinyl, code ka shaqeeya bilowga. server-yada, shaandheynta, safafka, tirtirka xogta duugowday, iyo wixii la mid ah.

Tusaalooyinka waxay u shaqeeyaan sida PostgreS. Tusaale ahaan, waxaad doonaysaa inaad socodsiiso koobiyo badan oo kayd xogeed ah oo ku dheggan dekedo kala duwan. Waxaa soo baxday in dhowr tusaale oo database ah lagu bilaabay hal server, kuwaas oo ku dheggan dekedo kala duwan. Waxay yeelan karaan goobo gebi ahaanba kala duwan - hal tusaale ayaa hirgeliya hal macquul, ka labaad - mid kale.

Maareynta Tusaale

Waxaan haynaa amarka tarantoolctl kaas oo noo ogolaanaya inaan maamulno tusaalooyinka Tarantula. Tusaale ahaan, tusaale ahaan tarantoolctl jeeg ayaa hubin doona faylka qaabaynta oo odhan doona feylku waa sax haddii aanay jirin khaladaad syntax.

Waxaad arki kartaa heerka tusaale ahaan - tarantoolctl status example. Si la mid ah, waad bilaabi kartaa, joojin kartaa, dib u bilaabi kartaa.

Mar haddii tusaale uu socdo, waxaa jira laba siyaabood oo lagu xidhi karo.

1. Console maamulka

Sida caadiga ah, Tarantool waxay furtaa godad waxayna soo dirtaa qoraal cad oo ASCII ah si ay u maamusho Tarantula. Ku xidhidhiyaha konsole had iyo jeer waxa uu hoos yimaadaa isticmaalaha maamulka, ma jiro wax xaqiijin ah, markaa uma baahnid in aad ka soo saartid dekedda konsole si aad u xakamayso Tarantula dibadda.

Si aad sidan ugu xirto, waxaad u baahan tahay inaad geliso Tarantoolctl geli magaca tusaale. Amarka ayaa bilaabi doona console-ka oo ku xidhi doona isticmaaleha maamulka. Weligaa ha u soo bandhigin dekedda konsole dibadda - waxa fiican inaad uga tagto godad unug ahaan. Markaas kaliya kuwa wax qori kara godka ayaa awoodi doona inay ku xidhmaan Tarantula.

Habkan ayaa looga baahan yahay arrimaha maamulka. Si aad ula shaqeyso xogta, isticmaal habka labaad - nidaamka binary.

2. Isticmaalka borotokoolka binary si aad ugu xirto deked gaar ah

Habaynta waxaa ku jira dardaaran dhegeysi, kaas oo u furaya dekedda isgaarsiinta dibadda. Dekaddan waxa lagu isticmaalay borotokoolka binary oo xaqiijinta halkaas ayaa laga oggolaaday.

Xidhiidhkan, tarantoolctl ku xidh lambarka dekedda ayaa la isticmaalaa. Isticmaalka, waxaad ku xidhi kartaa server-yada fog, isticmaal xaqiijinta oo aad siin kartaa xuquuqo kala duwan oo gelitaan ah.

Duubista Xogta iyo Sanduuqa Module

Maadaama Tarantool ay tahay xog ururin iyo adeeg adeeg, waxay leedahay qaybo kala duwan. Waxaan xiiseyneynaa moduleka sanduuqa - waxay fulisaa shaqada xogta. Markaad wax ku qorto sanduuq, Tarantool waxay ku qortaa xogta diskka, waxay ku kaydisaa xusuusta, ama wax kale ku qabtaa.

Diiwaan geli

Tusaale ahaan, waxaan galeynaa sanduuqa sanduuqa oo wac sanduuqa.one function. Waxay ku qasbi doontaa Tarantool inuu socodsiiyo koodkayaga marka server-ka la bilaabay. Waxaan abuurnaa meel xogtayada lagu kaydin doono.

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

Taas ka dib, waxaan abuurnaa index aasaasiga ah - aasaasiga ah - kaas oo aan ku raadin karno xogta. Sida caadiga ah, haddii aan la cayimin halbeegyada, goobta ugu horreysa ee gelista kasta ee tusmada asaasiga ah ayaa la isticmaali doonaa.

Ka dib waxaan u sameynaa deeq isticmaalayaasha martida, kaas oo aan ku xirno nidaamka binary. Waxaan ogolaneynaa akhrinta, qorista iyo fulinta guud ahaan tusaale ahaan.

Marka la barbardhigo xog-ururinta caadiga ah, wax walba halkan aad ayey ugu fudud yihiin. Waxaan haysanaa boos - aag xogtayada si fudud loo kaydiyo. Geli kasta waxaa loo yaqaan tuple. Waxay ku jirtaa MessagePack. Kani waa qaab aad u fiican - waa binary oo qaadata boos yar - 18 bytes iyo 27.

Tarantool, waxaad isku dari kartaa xog-ururin aad u degdeg badan iyo codsi si aad iyaga ula shaqeyso. Waa kan sida ay u fududahay in la sameeyo

Way ku habboon tahay in lala shaqeeyo. Ku dhawaad ​​khad kasta, xog kasta oo gelisa waxay yeelan kartaa tiirar gebi ahaanba kala duwan.

Waxaan ku eegi karnaa dhammaan meelaha bannaan anagoo adeegsanayna amarka Box.space. Si loo doorto tusaale gaar ah, waxaanu ku qornaa tusaale box.space oo aanu ka helnaa macluumaad buuxa.

Waxaa jira laba nooc oo matoorada ah oo lagu dhisay Tarantool: Xusuusta iyo Vinyl. Xusuustu waxay ku kaydisaa dhammaan xogta xusuusta. Sidaa darteed, wax waliba si fudud oo degdeg ah ayay u shaqeeyaan. Xogta waxaa lagu daadiyaa saxanka, sidoo kale waxaa jira hab qoraal ah oo horay loo qoray, markaa waxba lumin mayno haddii server-ku burburo.

Vinyl wuxuu ku kaydiyaa xogta diskka qaab aad loo yaqaan - taas oo ah, waxaad ku kaydin kartaa xog ka badan inta aan haysanno xusuusta, Tarantulana waxay ka akhrin doontaa diskka.

Hadda waxaan isticmaali doonaa 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>

Tusmada:

Tilmaanta aasaasiga ah waa in loo sameeyaa meel kasta, sababtoo ah waxba ma shaqeyn doono la'aanteed. Sida database kasta, waxaan abuurnaa goobta ugu horeysa - aqoonsiga rikoorka.

Qaybaha:

Tani waa halka aan ku caddeyno waxa tusmadayadu ka kooban tahay. Waxay ka kooban tahay hal qayb - goobta ugu horeysa ee aan isticmaali doono, ku qor aan saxeexin - integer togan. Inta aan ka xasuusto dukumeentiyada, tirada ugu badan ee noqon karta waa 18 quintillion. Wax badan oo cajiib ah.

Waxaan markaas gelin karnaa xogta anagoo adeegsanayna amarka gelista.

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>

Goobta ugu horeysa waxaa loo isticmaalaa furaha aasaasiga ah, markaa waa inay noqotaa mid gaar ah. Ma xaddidno tirada tiirarka, markaa waxaan gelin karnaa xogta inta aan jecelnahay halkaas. Waxay ku qeexan yihiin qaabka MessagePack, oo aan kor ku sharaxay.

Soo saarista xogta

Markaa waxaan ku soo bandhigi karnaa xogta amarka xulashada.

Box.example.select oo wata furaha {1} ayaa muujin doona galitaanka la rabo. Haddii aan ka tagno furaha, waxaan arki doonaa dhammaan diiwaanada aan hayno. Dhammaantood way ku kala duwan yihiin tirada tiirarka, laakiin halkan, mabda'a, ma jiraan fikradda tiirarka - waxaa jira tirooyin goobeed.

Waxaa jiri kara gabi ahaanba xogta aad rabto. Iyo tusaale ahaan, waxaan u baahanahay inaan ka raadinno goobta labaad. Si tan loo sameeyo, waxaanu samaynaa tusaha sare ee cusub.


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

Waxaan isticmaalnaa amarka Create_index.
Waxaan ugu yeernaa Secondary.

Taas ka dib, waxaad u baahan tahay inaad qeexdo xuduudaha. Nooca tusmadu waa GEED. Waxa laga yaabaa inaanay ahayn mid gaar ah, markaa waxaanu galnaa Unique = been.

Kadibna waxaynu tilmaannaa qaybaha tusmadayadu ka kooban tahay. Goobtu waa tirada goobta aan ku xidhno tusmada, oo aynu qeexno nooca xargaha. Oo sidaas ayaa loo abuuray.

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>

Hadda waa sidaan ugu yeeri karno:

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

Ilaalinta

Haddii aan dib u bilowno tusaalaha oo aan isku dayno inaan mar kale wacno xogta, waxaan arki doonaa inaysan halkaas joogin - wax walba waa madhan. Tani waxay dhacdaa sababtoo ah Tarantool waxay samaysaa isbaarooyin waxayna kaydisaa xogta diskka, laakiin haddii aan joojino shaqada ka hor kaydinta soo socota, waxaan lumin doonaa dhammaan hawlgallada - sababtoo ah waxaan ka soo kabsan doonaa isbaarada ugu dambeysa, tusaale ahaan, laba saacadood ka hor.

Badbaadinta ilbiriqsi kasta sidoo kale ma shaqeyn doonto - sababtoo ah si joogto ah ugu daadinta 20 GB diskka waa fikrad sidaas ah.

Taas awgeed, fikradda qorista-hor-qorista waa la allifay oo la hirgeliyay. Caawinteeda, isbeddel kasta oo ku yimaadda xogta, diiwaan ayaa lagu abuurayaa fayl yar oo hore u qoran.

Geli kasta oo ilaa barta kantaroolka ayaa lagu kaydiyaa iyaga. Faylashaas, waxaanu dejinay cabbirka - tusaale ahaan, 64 mb. Marka ay buuxiso, duubitaanku wuxuu bilaabmaa inuu aado faylka labaad. Iyo dib u bilaabashada ka dib, Tarantool waxa ay ka soo kabsanaysaa isbaaradii u dambaysay ka dibna waxa ay rogtay dhammaan wax kala iibsiga dambe ilaa ay joogsato.

Tarantool, waxaad isku dari kartaa xog-ururin aad u degdeg badan iyo codsi si aad iyaga ula shaqeyso. Waa kan sida ay u fududahay in la sameeyo

Si aad u sameyso duubista noocaas ah, waxaad u baahan tahay inaad ku qeexdo ikhtiyaarka sanduuqa.cfg settings (kujira faylka example.lua):

wal_mode = “write”;

isticmaalka xogta

Waxa aan hadda qornay, waxaad isticmaali kartaa Tarantula si aad u kaydiso xogta waxayna u shaqayn doontaa si dhakhso leh xog ururin ahaan. Oo hadda cherry on cake - maxaad ku samayn kartaa oo dhan.

Qorista codsi

Tusaale ahaan, aan u qorno codsiga noocaan ah Tarantula

Fiiri codsiga hoos yimaada qaswadayaasha

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()

Waxaan ku cadeyneynaa xoogaa shax ah Lua oo qeexaya calaamadaha. Jadwalkan ayaa loo baahan yahay si loo soo saaro xadhig random ah.

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

Taas ka dib, waxaan ku dhawaaqnaa shaqo - randomString oo waxaan siinaa qiimaha dhererka ee xirmooyinka.

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

Kadibna waxaan ku xireynaa http router iyo http server-ka Tarantula, JSON, kaas oo aan siin doono macmiilka.

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

Taas ka dib, waxaan ku bilaabeynaa dekedda 8080 dhammaan server-yada http, kaas oo geli doona dhammaan codsiyada iyo khaladaadka.

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

Marka xigta, waxaan ku dhawaaqeynaa dariiqa haddii codsi habka GET uu yimaado dekedda 8080 / count, ka dibna waxaan ka wacnaa shaqada hal xariiq. Waxay soo celisaa heerka - 200, 404, 403 ama wax kasta oo aan cayimno.

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

Jidhka dhexdiisa, waxaanu ku soo celinaa json.encode, waxaanu ku qeexnaa tirinta iyo helida tirinta, kaas oo loo yaqaan oo tusinaya tirada diiwaanada ku jira xogtayada.

Habka labaad

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)

Halkee ku jirtaa router:route ({hab = 'GET', path = '/token'}, function() waxaan ugu yeernaa shaqada oo waxaan abuurnaa calaamad.

String calaamada maxaliga ah = randomString(32) waa xadhig random ah oo ka kooban 32 xaraf.
Safka ku jira local last = box.space.example:len() waxaan soo saarnay cunsurka u dambeeya.
Oo safka ku jira box.space.example:insert{ last + 1, token } waxaan u qornaa xogta xogtayada database, taas oo ah, waxaan si fudud u kordhinay aqoonsiga by 1. Tan waxaa la samayn karaa, jidka, ma aha oo kaliya in sida hab cakiran. Tarantula waxay leedahay taxane kiiskan.

Waxaan ku qornaa calaamadda halkaas.

Markaa, waxaanu ku qornay codsi hal fayl. Waxaad isla markiiba heli kartaa xogta, iyo module sanduuqa ayaa kuu qaban doona dhammaan shaqada wasakhda ah adiga.

Waxay dhageysataa http waxayna ku shaqeysaa xogta, wax walbaa waxay ku jiraan hal tusaale - labadaba codsiga iyo xogta. Sidaa darteed, wax walba si degdeg ah ayey u dhacaan.

Si aan u socodsiino, waxaan rakibnay moduleka http:

Sida aan u samayno, eeg hoostiisa qaswadayaasha

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:/#

Waxaan sidoo kale u baahanahay prometheus si aan u ordo:

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:/#

Waxaan bilownaa oo geli karnaa cutubyada

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:/#

/tirinta waxay ina siinaysaa heerka 200.
/token waxay soo saartaa calaamad waxayna ku qortaa calaamaddan kaydka.

Xawaaraha tijaabada

Aynu samayno bartilmaameedka 50 oo su'aalood. Codsiyada tartanka waxay noqon doonaan 000.

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:/#

Calaamadaha ayaa la soo saaray. Oo waxaan si joogto ah u duubnaa xogta. 99% codsiyada waxa lagu dhameeyay 42 millise seconds. Sidaa darteed, waxaan ku haynaa qiyaastii 3500 codsi ilbiriqsi kasta mashiinka yar, halkaas oo ay jiraan 2 cores iyo 4 gigabytes oo xusuusta ah.

Waxa kale oo aad dooran kartaa qaar ka mid ah 50000 token oo aad aragto qiimaheeda.

Ma isticmaali kartid http oo keliya, waxaad socodsiisaa hawlaha asalka ah ee ka baaraandegaya xogtaada. Intaa waxaa dheer, waxaa jira kiciyeyaasha kala duwan. Tusaale ahaan, waxaad wici kartaa hawlaha ku saabsan cusbooneysiinta, hubi wax - hagaajin khilaafaadka.

Waxaad si toos ah ugu qori kartaa codsiyada qoraalka ee server-ka xogta laftiisa, oo aan lagu xaddidin wax kasta, ku xidh qaybo kasta oo hirgeli wax kasta oo macquul ah.

Adeegaha codsigu waxa uu geli karaa server-yada dibadda, ururin xogta oo ku dari kara xogtiisa. Xogta xogtan waxaa isticmaali doona codsiyo kale.

Tan waxaa samayn doona Tarantula laftiisa, mana jirto baahi loo qabo in la qoro codsi gaar ah.

Gabagabada

Tani waa kaliya qaybta koowaad ee shaqada weyn. Midka labaad ayaa si dhakhso ah loogu daabici doonaa barta kooxda Mail.ru, waxaana hubaal ah inaan ku dari doono isku xirka walxahan.

Haddii aad xiisaynayso inaad ka qaybgasho munaasabadaha aan ku abuurno waxyaalahan onlaynka oo aad su'aalo ku waydiinayso wakhtiga dhabta ah, ku xidhnow DevOps ee kanaalka REBRAIN.

Haddii aad u baahan tahay inaad u guurto daruuraha ama aad wax su'aalo ah ka qabto kaabayaashaaga, Dareen xor ah inaad soo gudbiso codsi.

PS Waxaanu haynaa 2 xisaab xidh oo bilaash ah bishii, laga yaabee in mashruucaagu uu ka mid noqdo.

Source: www.habr.com

Add a comment