Mu Tarantool, mutha kuphatikiza nkhokwe yachangu kwambiri komanso ntchito kuti mugwire nawo ntchito. Umu ndi momwe zimakhalira zosavuta kuchita

Zaka zisanu zapitazo ndinayesa kugwira ntchito ndi Tarantool, koma sizinandithandize. Koma posachedwa ndidakhala ndi webinar pomwe ndidalankhula za Hadoop ndi momwe MapReduce imagwirira ntchito. Kumeneko adandifunsa funso: "Bwanji osagwiritsa ntchito Tarantool pa ntchitoyi?"

Chifukwa cha chidwi, ndinaganiza zobwereranso, kuyesa mtundu waposachedwa - ndipo nthawi ino ndimakonda kwambiri ntchitoyi. Tsopano ndikuwonetsani momwe mungalembere pulogalamu yosavuta ku Tarantool, kuyiyika ndikuyang'ana momwe imagwirira ntchito, ndipo muwona momwe zonse zilili zosavuta komanso zoziziritsa.

Mu Tarantool, mutha kuphatikiza nkhokwe yachangu kwambiri komanso ntchito kuti mugwire nawo ntchito. Umu ndi momwe zimakhalira zosavuta kuchita

Tarantool ndi chiyani

Tarantool imadziyika yokha ngati nkhokwe yachangu kwambiri. Mutha kuyika deta iliyonse yomwe mukufuna pamenepo. Kuphatikiza apo, bwerezaninso, shard - ndiko kuti, kugawaniza kuchuluka kwa data pamaseva angapo ndikuphatikiza zotsatira kuchokera kwa iwo - pangani kulumikizana kosalekeza kwa master-master.

Kachiwiri, iyi ndi seva yofunsira. Mutha kulemba mapulogalamu anu pamenepo, gwiritsani ntchito ndi data, mwachitsanzo, chotsani zolemba zakale kumbuyo malinga ndi malamulo ena. Mutha kulemba seva ya Http mwachindunji ku Tarantula yomwe ingagwire ntchito ndi data: perekani kuchuluka kwawo, lembani deta yatsopano pamenepo ndikuchepetsa zonse kwa mbuye.

Ndinawerenga nkhani ya momwe anyamatawo adapangira mzere wa uthenga wa mizere ya 300, yomwe ikungophulika ndikuthamanga - ali ndi ntchito yochepa ya mauthenga a 20 pamphindi. Apa mutha kutembenuka ndikulemba pulogalamu yayikulu kwambiri, ndipo sikhala yosungirako, monga mu PostgreS.

Ndiyesera kufotokoza chinachake chonga seva iyi, yosavuta, m'nkhaniyi.

kolowera

Pakuyesa, ndidayambitsa makina atatu okhazikika - 20 GB hard drive, Ubuntu 18.04. 2 ma CPU enieni ndi ma gigs 4 a kukumbukira.

Timayika Tarantool - yendetsani bash script kapena yonjezerani malo osungira ndikukhazikitsa Tarantool. Lumikizani ku script - (curl -L https://tarantool.io/installer.sh | | VER = 2.4 sudo -E bash). Tili ndi malamulo monga:

tarantoolctl - lamulo lalikulu pakuwongolera zochitika za Tarantula.
/etc/tarantool - apa pali kasinthidwe konse.
var/log/tarantool - apa pali mitengo.
var/lib/tarantool - deta ili apa, ndiyeno imagawidwa muzochitika.

Pali zikwatu zomwe zilipo komanso zomwe zimathandizira - zili ndi zomwe zidzayambike - fayilo yosinthira chitsanzo ndi lua code, yomwe imalongosola madoko omwe amamvetsera, kukumbukira komwe kulipo, makina a injini ya Vinyl, code yomwe imayambira poyambira. ma seva, sharding, mizere, kufufutidwa kwa data yosatha, ndi zina zotero.

Zochitika zimagwira ntchito ngati PostgreS. Mwachitsanzo, mukufuna kuyendetsa makope angapo a database yomwe imapachikidwa pamadoko osiyanasiyana. Zikuwonekeratu kuti zochitika zingapo za database zimayambitsidwa pa seva imodzi, yomwe imapachikidwa pamadoko osiyanasiyana. Atha kukhala ndi makonda osiyanasiyana - nthawi imodzi imagwiritsa ntchito malingaliro amodzi, yachiwiri - ina.

Kasamalidwe ka zochitika

Tili ndi lamulo la tarantoolctl, lomwe limakupatsani mwayi wowongolera zochitika za Tarantula. Mwachitsanzo, tarantoolctl cheke chitsanzo chiyang'ana fayilo yosinthira ndikuti - fayilo ili bwino ngati palibe zolakwika za syntax pamenepo.

Mutha kuwona momwe chiwonetserochi chikuyendera - chitsanzo cha tarantoolctl. Momwemonso mutha kuyambitsa, kuyimitsa, kuyambiranso.

Chitsanzo chikayamba, mutha kulumikizana nacho m'njira ziwiri.

1. Administrative console

Mwachikhazikitso, Tarantool imatsegula socket, zolemba za ASCII zokhazikika zimatumizidwa kumeneko kuti ziwongolere Tarantool. Kulumikizana ndi kontrakitala kumachitika nthawi zonse pansi pa wogwiritsa ntchito admin, palibe kutsimikizika, kotero palibe chifukwa chosinthira doko la console kuti muyendetse Tarantula.

Kuti mulumikizane ndi njirayi, muyenera kulowa Tarantoolctl lowetsani dzina lachitsanzo. Lamulo lidzayambitsa console ndikugwirizanitsa ngati wogwiritsa ntchito admin. Osawonetsa doko la console kunja - ndibwino kulisiya ngati socket ya unit. Ndiye okhawo omwe ali ndi mwayi wolembera ku socket adzatha kulumikiza ku Tarantula.

Njirayi ndiyofunikira pazinthu zoyang'anira. Kuti mugwiritse ntchito deta, gwiritsani ntchito njira yachiwiri - protocol binary.

2. Kugwiritsa ntchito ndondomeko ya binary kuti mugwirizane ndi doko linalake

Kukonzekera kuli ndi malangizo omvera, omwe amatsegula doko la mauthenga akunja. Dokoli limagwiritsidwa ntchito ndi protocol ya binary ndipo kutsimikizika kumayatsidwa pamenepo.

Pakulumikiza uku, tarantoolctl yolumikizana ndi nambala ya doko imagwiritsidwa ntchito. Pogwiritsa ntchito, mutha kulumikizana ndi ma seva akutali, gwiritsani ntchito kutsimikizira ndikupereka maufulu osiyanasiyana opezeka.

Kujambula kwa Data ndi Bokosi Module

Popeza Tarantool ndi nkhokwe komanso seva yogwiritsira ntchito, ili ndi ma module osiyanasiyana. Tili ndi chidwi ndi gawo la bokosi - limagwiritsa ntchito data. Mukalemba chinachake ku bokosi, Tarantool imalemba deta ku disk, kuisunga pamtima, kapena kuchita china chake.

Jambulani

Mwachitsanzo, timalowa mu gawo la bokosi ndikuyitana bokosi.once ntchito. Izi zidzakakamiza Tarantool kuyendetsa nambala yathu seva ikakhazikitsidwa. Timapanga malo omwe deta yathu idzasungidwe.

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

Pambuyo pake, timapanga cholozera choyambirira - choyambirira - chomwe tingathe kufufuza deta. Mwachikhazikitso, ngati simutchula magawo aliwonse, gawo loyamba muzolemba zilizonse lidzagwiritsidwa ntchito pa index yoyambirira.

Kenaka timapereka chithandizo kwa wogwiritsa ntchito alendo, pomwe timagwirizanitsa kudzera mu binary protocol. Timalola kuwerenga, kulemba ndi kuchita pazochitika zonse.

Poyerekeza ndi nkhokwe wamba, zonse apa ndi zosavuta. Tili ndi malo - malo omwe deta yathu imasungidwa. Mbiri iliyonse imatchedwa tuple. Imayikidwa mu MessagePack. Uwu ndi mtundu wabwino kwambiri - ndi wachiphamaso ndipo umatenga malo ochepa - 18 byte motsutsana ndi 27.

Mu Tarantool, mutha kuphatikiza nkhokwe yachangu kwambiri komanso ntchito kuti mugwire nawo ntchito. Umu ndi momwe zimakhalira zosavuta kuchita

Ndi bwino ntchito naye. Pafupifupi mzere uliwonse, zolemba zonse za data zimatha kukhala ndi magawo osiyanasiyana.

Titha kuwona mipata yonse pogwiritsa ntchito lamulo la Box.space. Kuti musankhe chochitika china, lembani chitsanzo cha box.space ndikupeza zambiri za izo.

Tarantool ili ndi injini ziwiri zomangidwa: Memory ndi Vinyl. Memory imasunga zonse zokumbukira. Choncho, zonse zimagwira ntchito mosavuta komanso mofulumira. Deta imasiyidwa ku diski, ndipo palinso njira yolembera kutsogolo, kotero sitidzataya chilichonse ngati seva ikugwa.

Vinyl amasunga deta pa disk mu mawonekedwe omwe timawadziwa bwino - ndiko kuti, mukhoza kusunga zambiri kuposa zomwe timakumbukira, ndipo Tarantula adzaiwerenga kuchokera ku disk.

Pakadali pano tigwiritsa ntchito 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>

Mlozera:

Mlozera woyambirira uyenera kupangidwira malo aliwonse, chifukwa popanda iwo palibe chomwe chingagwire ntchito. Monga mu database iliyonse, timapanga gawo loyamba - mbiri ID.

Magawo:

Apa tikuwonetsa zomwe index yathu ili nayo. Lili ndi gawo limodzi - gawo loyamba lomwe tidzagwiritse ntchito ndi la mtundu wosasainidwa - nambala yokwanira. Monga ndikukumbukira kuchokera pazolembedwa, chiwerengero chachikulu chomwe chingakhale 18 quintillion. Ndizo zambiri.

Ndiye tikhoza kuyika deta pogwiritsa ntchito lamulo loyikapo.

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>

Gawo loyamba limagwiritsidwa ntchito ngati kiyi yoyamba, chifukwa chake liyenera kukhala lapadera. Sitikuchepa ndi chiwerengero cha mizati, kotero tikhoza kuyika deta yochuluka momwe tikufunira kumeneko. Zafotokozedwa mumtundu wa MessagePack, womwe ndafotokoza pamwambapa.

Kutulutsa kwa data

Ndiye tikhoza kusonyeza deta pogwiritsa ntchito kusankha lamulo.

Box.example.select ndi batani la {1} liwonetsa zomwe mukufuna. Ngati titsitsa fungulo, tiwona zolemba zonse zomwe tili nazo. Onse amasiyana mu chiwerengero cha mizati, koma apa, kwenikweni, palibe lingaliro la mizati - pali manambala munda.

Pakhoza kukhala mwamtheradi kuchuluka kwa deta. Ndipo mwachitsanzo, tiyenera kuwafufuza ndi gawo lachiwiri. Kuti tichite izi, timapanga index yatsopano yachiwiri.


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

Timagwiritsa ntchito lamulo la Create_index.
Tiyeni tizitcha Sekondale.

Pambuyo pa izi muyenera kufotokoza magawo. Mtundu wa index ndi TREE. Zingakhale zosiyana, choncho lowetsani Unique = zabodza.

Kenako tikuwonetsa zigawo zomwe index yathu ili nayo. Munda ndi chiwerengero cha munda umene timamanga ndondomekoyi, ndipo tchulani mtundu wa chingwe. Ndipo kotero izo zinalengedwa.

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>

Tsopano ndi momwe tingatchulire:

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

Kusungidwa

Ngati tiyambitsanso chitsanzo ndikuyesera kuyimbanso deta, tiwona kuti palibe - zonse zilibe kanthu. Izi zimachitika chifukwa Tarantool imapanga ma checkpoints ndikusunga deta ku disk, koma ngati tisiya kugwira ntchito mpaka kupulumutsa kotsatira, tidzataya ntchito zonse - chifukwa tidzachira kuchokera kumalo otsiriza, omwe anali, mwachitsanzo, maola awiri apitawo.

Sizigwira ntchito kupulumutsa sekondi iliyonse, chifukwa kutaya 20 GB nthawi zonse pa disk si lingaliro labwino.

Pachifukwa ichi, lingaliro la kulemba-patsogolo linapangidwa ndikugwiritsidwa ntchito. Ndi chithandizo chake, pakusintha kulikonse kwa data, cholowera chimapangidwa mu fayilo yaing'ono yolemba patsogolo.

Kulowa kulikonse komwe kuli koyang'ana kumasungidwa mwa iwo. Kwa mafayilowa timayika kukula kwake - mwachitsanzo, 64 MB. Ikadzaza, kujambula kumayamba kupita ku fayilo yachiwiri. Ndipo pambuyo poyambitsanso, Tarantool imabwezeretsedwa kuchokera poyang'ana komaliza kenako ndikugudubuza zonse zomwe zachitika pambuyo pake mpaka itayima.

Mu Tarantool, mutha kuphatikiza nkhokwe yachangu kwambiri komanso ntchito kuti mugwire nawo ntchito. Umu ndi momwe zimakhalira zosavuta kuchita

Kuti mujambule chotere, muyenera kufotokoza zomwe mwasankha mu bokosi.cfg zoikamo (mu fayilo ya example.lua):

wal_mode = “write”;

kugwiritsa ntchito deta

Ndi zomwe talemba tsopano, mungagwiritse ntchito Tarantula kusunga deta ndipo idzagwira ntchito mofulumira kwambiri ngati deta. Ndipo tsopano icing pa keke ndi chimene mungachite ndi izo zonse.

Kulemba ntchito

Mwachitsanzo, tiyeni tilembe zotsatirazi za Tarantula

Onani ntchito pansi pa 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()

Timalengeza tebulo mu lua lomwe limatanthauzira zilembo. Mbale iyi ndiyofunikira kuti ipange chingwe chosasinthika.

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

Pambuyo pake, timalengeza ntchito - randomString ndikupereka mtengo wautali m'makolo.

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

Kenaka timagwirizanitsa http router ndi http seva ku seva yathu ya Tarantula, JSON, yomwe tidzatumiza kwa kasitomala.

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

Pambuyo pa izi, timayamba pa doko 8080 pamitundu yonse ya seva ya http, yomwe idzalowetsa zopempha zonse ndi zolakwika.

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

Kenaka, timalengeza njira, kotero kuti ngati pempho ndi njira ya GET ifika pa doko 8080 / count, ndiye timayitana ntchitoyi kuchokera pamzere umodzi. Imabwezeranso mawonekedwe - 200, 404, 403 kapena china chilichonse chomwe timafotokozera.

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

M'thupi timabwerera json.encode, momwemo timasonyeza count ndi getcount, yomwe imatchedwa ndikuwonetsa chiwerengero cha zolemba mu database yathu.

Njira yachiwiri

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)

Kumene mu mzere rauta:njira({njira = 'GET', njira = '/chizindikiro'}, ntchito () timatcha ntchitoyi ndikupanga chizindikiro.

Mzere chizindikiro chapafupi = randomString(32) ndi chingwe chachisawawa cha zilembo 32.
Motsatana local last = box.space.example:len() timatenga chinthu chomaliza.
Ndipo mu mzere box.space.example:insert{ last + 1, chizindikiro } timalemba deta mu database yathu, ndiko kuti, timangowonjezera ID ndi 1. Izi zikhoza kuchitika, mwa njira, osati mwa njira yovutayi. Pali zotsatizana za izi mu Tarantula.

Timalemba chizindikiro pamenepo.

Chifukwa chake, tidalemba ntchitoyo mufayilo imodzi. Mutha kuwongolera mwachindunji deta pamenepo, ndipo gawo la bokosi lidzakuchitirani zonyansa zonse.

Imamvera http ndikugwira ntchito ndi deta, chirichonse chiri mu nthawi imodzi - zonse ntchito ndi deta. Choncho, zonse zimachitika mofulumira ndithu.

Kuti tiyambe kukhazikitsa gawo la http:

Momwe timachitira izi, yang'anani pansi pa wowononga

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

Timafunikiranso prometheus kuyendetsa:

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

Timatsegula ndipo titha kupeza ma module

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

/kuwerengera kumatipatsa udindo 200.
/token imatulutsa chizindikiro ndikulemba chizindikiro ichi ku database.

Kuthamanga kwa mayeso

Tiyeni tiyendetse chizindikiro pazofunsira 50. Padzakhala zopempha zopikisana 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:/#

Zizindikiro zimaperekedwa. Ndipo timalemba zambiri nthawi zonse. 99% ya zopempha zidakonzedwa mu 42 milliseconds. Chifukwa chake, tili ndi zopempha za 3500 pa sekondi imodzi pamakina ang'onoang'ono okhala ndi ma cores a 2 ndi ma gigabytes 4 a kukumbukira.

Mutha kusankhanso chizindikiro cha 50000 ndikuwona mtengo wake.

Simungagwiritse ntchito http, komanso kuyendetsa ntchito zakumbuyo zomwe zimagwiritsa ntchito deta yanu. Komanso pali zoyambitsa zosiyanasiyana. Mwachitsanzo, mutha kuyimbira ntchito pazosintha, fufuzani china - mikangano yolondola.

Mutha kulemba zolemba za script mwachindunji mu seva ya database yokha, ndipo osakhala ndi malire ndi chilichonse, lumikizani ma module aliwonse ndikukhazikitsa malingaliro aliwonse.

Seva yogwiritsira ntchito imatha kupeza ma seva akunja, kupeza deta ndikuyiwonjezera ku database yake. Deta kuchokera ku databaseyi idzagwiritsidwa ntchito ndi mapulogalamu ena.

Tarantula idzachita izi yokha, ndipo simudzasowa kulemba ntchito yosiyana.

Pomaliza

Ichi ndi gawo loyamba la ntchito yaikulu. Yachiwiri isindikizidwa posachedwa pa blog ya Mail.ru Gulu, ndipo tidzawonjezera ulalo pankhaniyi.

Ngati mukufuna kupita ku zochitika zomwe timapanga zinthu izi pa intaneti ndikufunsa mafunso munthawi yeniyeni, mvetserani Channel DevOps yolembedwa ndi REBRAIN.

Ngati mukufuna kusamukira kumtambo kapena kukhala ndi mafunso okhudza zomangamanga zanu, omasuka kusiya pempho.

PS Tili ndi zowerengera zaulere 2 pamwezi, mwina polojekiti yanu ikhala imodzi mwazo.

Source: www.habr.com

Kuwonjezera ndemanga