In Tarantool, is féidir leat bunachar sonraí sár-ghasta agus feidhmchlár a chur le chéile chun oibriú leo. Seo cé chomh héasca atá sé a dhéanamh

Cúig bliana ó shin rinne mé iarracht a bheith ag obair le Tarantool, ach ansin níor oibrigh sé dom. Ach le déanaí reáchtáil mé webinar inar labhair mé faoi Hadoop, faoi conas a oibríonn MapReduce. Cuireadh an cheist orm ansin - “Cén fáth nach mbainfeá úsáid as Tarantool don tasc seo?”.

Ar mhaithe le fiosracht, chinn mé filleadh air, an leagan is déanaí a thástáil - agus an uair seo thaitin an tionscadal go mór liom. Anois taispeánfaidh mé conas iarratas simplí a scríobh i Tarantool, é a luchtú agus an fheidhmíocht a sheiceáil, agus feicfidh tú cé chomh héasca agus is fionnuar atá gach rud ann.

In Tarantool, is féidir leat bunachar sonraí sár-ghasta agus feidhmchlár a chur le chéile chun oibriú leo. Seo cé chomh héasca atá sé a dhéanamh

Cad é Tarantool

Seasann Tarantool é féin mar bhunachar sonraí ultra-tapa. Is féidir leat aon sonraí atá uait a chur isteach ann. Ina theannta sin, déan iad a mhacasamhlú, shard - is é sin, scoilt méid ollmhór sonraí ar fud roinnt freastalaithe agus cuir na torthaí le chéile uathu - déan naisc mháistir-mháistir a bhfuil locht orthu.

Ar an dara dul síos, is freastalaí iarratais é. Is féidir leat d’iarratais a scríobh air, oibriú le sonraí, mar shampla, sean-iontrálacha sa chúlra a scriosadh de réir rialacha áirithe. Is féidir leat freastalaí Http a scríobh go díreach i Tarantula a oibreoidh le sonraí: tabhair amach a n-uimhir, scríobh sonraí nua ann agus laghdaigh sé go léir go máistir.

Léigh mé alt ar conas a rinne na guys scuaine teachtaireachtaí 300-líne, a bhfuil ach deora agus thrashes - tá siad feidhmíocht íosta de 20 teachtaireacht in aghaidh an tsoicind. Anseo is féidir leat feidhmchlár an-mhór a chasadh agus a scríobh, agus ní stórálfar iad seo, mar atá i PostgreS.

Thart ar fhreastalaí den sórt sin, ach simplí, déanfaidh mé iarracht cur síos a dhéanamh san Airteagal seo.

Suiteáil

Le haghaidh na tástála, thosaigh mé trí mheaisín fíorúil caighdeánach - tiomáint crua 20 gigabyte, Ubuntu 18.04. 2 LAP fíorúil agus 4 ghigibheart de chuimhne.

Suiteáilimid Tarantool - reáchtáilimid script bash nó cuirimid stór leis agus is féidir Tarantool a shuiteáil. Nasc leis an script - (curl -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash). Tá orduithe againn mar:

tarantoolctl Is é an príomh-ordú chun cásanna Tarantula a bhainistiú.
/etc/tarantool - anseo luíonn an chumraíocht iomlán.
var/log/tarantool - seo iad na logs.
var/lib/tarantool - anseo luíonn na sonraí, agus ansin roinntear iad i gcásanna.

Tá fillteáin shampla-ar fáil agus ásc-chumasaithe - tá an méid a sheolfar ann - an comhad cumraíochta ásc le cód lua, a chuireann síos ar na poirt a n-éisteann sé orthu, cén chuimhne atá ar fáil dó, socruithe inneall Vinyl, cód a oibríonn ag am tosaithe freastalaithe, sharding, scuainí, scriosadh sonraí as feidhm, agus mar sin de.

Oibríonn cásanna cosúil le PostgreS. Mar shampla, ba mhaith leat cóipeanna iolracha de bhunachar sonraí a chrochadh ar chalafoirt éagsúla a rith. Tharlaíonn sé go raibh roinnt cásanna bunachar sonraí a sheoladh ar fhreastalaí amháin, a chrochadh ar calafoirt éagsúla. Is féidir leo socruithe go hiomlán difriúil a bheith acu - cuireann cás amháin loighic amháin i bhfeidhm, an dara cás - ceann eile.

Bainistíocht Cáis

Tá an t-ordú tarantoolctl againn a ligeann dúinn cásanna Tarantula a bhainistiú. Mar shampla, seiceálfaidh tarantoolctl shampla an comhad cumraíochta agus a rá go bhfuil an comhad ceart go leor mura bhfuil aon earráidí comhréire.

Is féidir leat stádas an ásc a fheiceáil - tarantoolctl status example. Ar an mbealach céanna, is féidir leat tosú, stop, atosú.

Nuair a bhíonn sampla ar siúl, tá dhá bhealach ann chun ceangal leis.

1. Consól riaracháin

De réir réamhshocraithe, osclaíonn Tarantool soicéad agus seolann sé gnáth-théacs ASCII chun an Tarantula a rialú. Tarlaíonn nascadh leis an gconsól i gcónaí faoin úsáideoir admin, níl aon fhíordheimhniú ann, mar sin ní gá duit an port consól a thógáil amach chun an Tarantula taobh amuigh a rialú.

Chun nascadh ar an mbealach seo, ní mór duit Tarantoolctl cuir isteach ainm shampla. Seolfaidh an t-ordú an consól agus nascfaidh sé mar an t-úsáideoir riaracháin. Ná nocht an port consól ar an taobh amuigh - is fearr é a fhágáil mar aonad soicéad. Ansin ní bheidh ach iad siúd a bhfuil rochtain scríofa acu ar an soicéad in ann ceangal leis an Tarantula.

Tá gá leis an modh seo le haghaidh rudaí riaracháin. Chun oibriú le sonraí, bain úsáid as an dara modh - an prótacal dénártha.

2. Ag baint úsáide as prótacal dénártha chun ceangal le calafort ar leith

Tá treoir éisteachta sa chumraíocht, a osclaíonn an port do chumarsáid sheachtrach. Úsáidtear an port seo le prótacal dénártha agus tá fíordheimhniú cumasaithe ann.

Chun an nasc seo, úsáidtear tarantoolctl ceangal le uimhir an phoirt. Agus é á úsáid, is féidir leat ceangal le cianfhreastalaithe, fíordheimhniú a úsáid agus cearta rochtana éagsúla a thabhairt.

Taifeadadh Sonraí agus Modúl Bosca

Ós rud é gur bunachar sonraí agus freastalaí feidhmchláir é Tarantool, tá modúil éagsúla aige. Tá suim againn sa mhodúl bosca - cuireann sé obair le sonraí i bhfeidhm. Nuair a scríobhann tú rud éigin chuig bosca, scríobhann Tarantool na sonraí ar diosca, stórálann sé sa chuimhne é, nó déanann sé rud éigin eile leis.

Taifeadadh

Mar shampla, téann muid isteach sa mhodúl bosca agus glaoimid an fheidhm box.once. Cuirfidh sé iallach ar Tarantool ár gcód a rith nuair a bheidh an freastalaí tosaithe. Cruthaímid spás ina stórálfar ár sonraí.

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

Tar éis sin, cruthaímid innéacs príomhúil - bunscoile - trína bhféadfaimid cuardach a dhéanamh ar shonraí. De réir réamhshocraithe, mura sonraítear paraiméadair ar bith, úsáidfear an chéad réimse i ngach iontráil don innéacs primer.

Ansin tugaimid deontas don aoi-úsáideoir, faoina nascaimid trí phrótacal dénártha. Ligeann muid léamh, scríobh agus feidhmiú sa chás iomlán.

I gcomparáid le bunachair shonraí traidisiúnta, tá gach rud simplí go leor anseo. Tá spás againn - limistéar ina stóráiltear ár sonraí go simplí. Tugtar tuple ar gach iontráil. Tá sé pacáistithe i MessagePack. Is formáid an-fhionnuar é seo - tá sé dénártha agus tógann sé níos lú spáis - 18 bytes in aghaidh 27.

In Tarantool, is féidir leat bunachar sonraí sár-ghasta agus feidhmchlár a chur le chéile chun oibriú leo. Seo cé chomh héasca atá sé a dhéanamh

Tá sé áisiúil go leor oibriú leis. Is féidir le colúin go hiomlán difriúil a bheith ag beagnach gach líne, gach iontráil sonraí.

Is féidir linn gach spás a fheiceáil ag baint úsáide as an ordú Box.space. Chun sampla ar leith a roghnú, scríobhaimid box.space mar shampla agus faighimid eolas iomlán air.

Tá dhá chineál inneall ionsuite i Tarantool: Cuimhne agus Vinyl. Stórálann cuimhne na sonraí go léir i gcuimhne. Dá bhrí sin, oibríonn gach rud go simplí agus go tapa. Déantar na sonraí a dhumpáil ar diosca, agus tá meicníocht logála ar aghaidh ann freisin, mar sin ní chaillfimid tada má thiteann an freastalaí.

Stórálann vinile sonraí ar dhiosca i bhfoirm níos eolach - is é sin, is féidir leat níos mó sonraí a stóráil ná mar atá cuimhne againn, agus léifidh Tarantula é ón diosca.

Anois úsáidfimid Cuimhne.

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>

Innéacs:

Ní mór innéacs bunscoile a chruthú d'aon spás, mar ní oibreoidh aon rud gan é. Mar atá in aon bhunachar sonraí, cruthaímid an chéad réimse - an ID taifead.

Páirteanna:

Seo an áit a sonraímid cad atá inár n-innéacs. Tá sé comhdhéanta de chuid amháin - an chéad réimse a úsáidfimid, clóscríobh gan síniú - slánuimhir dhearfach. Chomh fada agus is cuimhin liom ó na doiciméid, is é an t-uaslíon is féidir a bheith ná 18 quintilliún. Go leor uamhnach.

Is féidir linn sonraí a chur isteach ansin leis an ordú cuir isteach.

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>

Úsáidtear an chéad réimse mar phríomheochair, mar sin caithfidh sé a bheith uathúil. Nílimid teoranta ag líon na gcolún, mar sin is féidir linn an oiread sonraí agus is mian linn a chur isteach ann. Tá siad sonraithe san fhormáid MessagePack, a ndearna mé cur síos air thuas.

Aschur sonraí

Ansin is féidir linn na sonraí a thaispeáint leis an ordú roghnaithe.

Taispeánfaidh Box.example.select leis an eochair {1} an iontráil atá uait. Má fhágaimid an eochair ar lár, feicfimid na taifid go léir atá againn. Tá siad go léir difriúil i líon na gcolún, ach anseo, i bprionsabal, níl aon choincheap ann maidir le colúin - tá uimhreacha réimse ann.

Is féidir an oiread sonraí agus is mian leat a bheith ann. Agus mar shampla, ní mór dúinn cuardach a dhéanamh orthu sa dara réimse. Chun seo a dhéanamh, déanaimid innéacs tánaisteach nua.


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

Úsáidimid an t-ordú Create_index.
Tugaimid Meánscoil air.

Tar éis sin, ní mór duit na paraiméadair a shonrú. Is é an cineál innéacs TREE. B'fhéidir nach bhfuil sé uathúil, mar sin cuirimid isteach Uathúil = bréagach.

Ansin léirímid cad iad na codanna atá inár n-innéacs. Réimse is ea uimhir an réimse lena gceangaimid an t-innéacs, agus sonraíonn sé an cineál teaghrán. Agus mar sin cruthaíodh é.

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>

Anois seo mar is féidir linn glaoch air:

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

Caomhnú

Má atosaíonn muid an cás agus iarracht a dhéanamh glaoch ar na sonraí arís, feicfimid nach bhfuil siad ann - tá gach rud folamh. Tarlaíonn sé seo toisc go ndéanann Tarantool seicphointí agus sábhálann sé na sonraí ar dhiosca, ach má stopaimid ag obair roimh an gcéad shábháil eile, caillfimid na hoibríochtaí go léir - toisc go n-athshlánóidh muid ón seicphointe deireanach, a bhí, mar shampla, dhá uair an chloig ó shin.

Ní oibreoidh sé ach gach soicind a shábháil freisin - mar is smaoineamh amhlaidh a bhíonn i gcónaí ag dumpáil 20 GB ar diosca.

Chuige seo, ceapadh agus cuireadh i bhfeidhm an coincheap maidir le logáil roimh ré. Lena chabhair, cruthaítear taifead i logchomhad beag réamhscríofa do gach athrú ar na sonraí.

Stóráiltear gach iontráil suas go dtí an seicphointe iontu. Maidir leis na comhaid seo, leagamar an méid - mar shampla, 64 mb. Nuair a líonann sé suas, tosaíonn an taifeadadh ag dul go dtí an dara comhad. Agus tar éis an atosú, aisghabhann Tarantool ón seicphointe deireanach agus ansin rollaíonn sé thar gach idirbheart níos déanaí go dtí go stopann sé.

In Tarantool, is féidir leat bunachar sonraí sár-ghasta agus feidhmchlár a chur le chéile chun oibriú leo. Seo cé chomh héasca atá sé a dhéanamh

Chun a leithéid de thaifeadadh a dhéanamh, ní mór duit rogha a shonrú sna socruithe box.cfg (sa chomhad example.lua):

wal_mode = “write”;

úsáid sonraí

Leis an méid atá scríofa againn anois, is féidir leat an Tarantula a úsáid chun sonraí a stóráil agus oibreoidh sé go han-tapa mar bhunachar sonraí. Agus anois an silín ar an císte - cad is féidir leat a dhéanamh leis go léir.

Iarratas a scríobh

Mar shampla, scríobhaimis iarratas den sórt sin ar an Tarantula

Féach an t-iarratas faoin 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()

Dearbhaímid tábla éigin i lua a shainíonn siombailí. Tá an tábla seo ag teastáil chun teaghrán randamach a ghiniúint.

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

Tar éis sin, dearbhaímid feidhm - randomString agus tabhair an luach fad idir lúibíní.

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

Ansin nascann muid an ródaire http agus an freastalaí http lenár bhfreastalaí Tarantula, JSON, a thabharfaimid don chliant.

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

Tar éis sin, cuirimid tús le calafort 8080 ar gach comhéadan freastalaí http, a logálfaidh gach iarratas agus earráid.

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

Ansin, dearbhaímid bealach, má thagann iarratas leis an modh GET chuig port 8080 /count, glaoimid an fheidhm ó líne amháin. Tugann sé stádas ar ais - 200, 404, 403 nó cibé rud a shonraímid.

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

Sa chorp, cuirimid ar ais json.encode, sonraimid comhaireamh agus faighcount ann, ar a dtugtar agus a thaispeánann líon na dtaifead inár mbunachar sonraí.

An dara modh

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)

Cá háit sa líne ródaire: route({method = 'GET', cosán = '/ comhartha'}, feidhm() tugaimid an fheidhm agus ginimid comhartha.

Líne comhartha áitiúil = randomString(32) is teaghrán randamach de 32 carachtar é.
I líne áitiúil deireanach = box.space.example:len() tarraingimid amach an eilimint dheireanach.
Agus sa líne box.space.example: cuir isteach{ last + 1, comhartha } scríobhaimid na sonraí chuig ár mbunachar sonraí, is é sin, ní dhéanaimid ach an ID a mhéadú faoi 1. Is féidir é seo a dhéanamh, dála an scéil, ní hamháin ar bhealach clumsy. Tá seicheamháin ag Tarantula don chás seo.

Scríobhaimid an comhartha ansin.

Mar sin, scríobhamar iarratas i gcomhad amháin. Is féidir leat rochtain a fháil ar na sonraí láithreach, agus déanfaidh an modúl bosca an obair salach ar fad duit.

Éisteann sé le http agus oibríonn sé le sonraí, bíonn gach rud i gcás amháin - an feidhmchlár agus na sonraí araon. Dá bhrí sin, tarlaíonn gach rud go tapa go leor.

Chun é a rith, déanaimid an modúl http a shuiteáil:

Conas a dhéanaimid é, féach faoin spoiler

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

Ní mór dúinn freisin prometheus a reáchtáil:

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

Tosaímid agus is féidir linn teacht ar mhodúil

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

Tugann /count stádas 200 dúinn.
Eisíonn /token comhartha agus scríobhann sé an comhartha seo chuig an mbunachar sonraí.

Luas a thástáil

Déanaimis tagarmharc a rith le haghaidh 50 ceist. 000 iarratas iomaíoch a bheidh i gceist.

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

Eisítear comharthaí. Agus táimid ag taifeadadh sonraí i gcónaí. Críochnaíodh 99% de na hiarratais i 42 milleasoicind. Dá réir sin, tá thart ar 3500 iarratas againn in aghaidh an tsoicind ar mheaisín beag, áit a bhfuil 2 chroí agus 4 ghigibheart de chuimhne.

Is féidir leat roinnt comharthaí 50000 a roghnú freisin agus a luach a fheiceáil.

Is féidir leat úsáid a bhaint ní hamháin http, a reáchtáil feidhmeanna cúlra a phróiseáil do shonraí. Plus tá triggers éagsúla. Mar shampla, is féidir leat feidhmeanna a ghlaoch ar nuashonruithe, seiceáil rud éigin - coinbhleachtaí a shocrú.

Is féidir leat feidhmchláir scripte a scríobh go díreach sa fhreastalaí bunachar sonraí féin, agus gan a bheith teoranta ag rud ar bith, aon mhodúil a nascadh agus aon loighic a chur i bhfeidhm.

Is féidir leis an bhfreastalaí feidhmchláir rochtain a fháil ar fhreastalaithe seachtracha, sonraí a bhailiú agus é a chur lena bhunachar sonraí. Bainfidh feidhmchláir eile úsáid as sonraí ón mbunachar sonraí seo.

Déanfaidh an Tarantula féin é seo, agus ní gá iarratas ar leith a scríobh.

Mar fhocal scoir

Níl anseo ach an chéad chuid de jab mór. Foilseofar an dara ceann go han-luath ar bhlag Mail.ru Group, agus is cinnte go gcuirfimid nasc leis san Airteagal seo.

Más spéis leat freastal ar imeachtaí ina gcruthaímid na rudaí seo ar líne agus ceisteanna a chur i bhfíor-am, déan teagmháil le DevOps de réir cainéal REBRAIN.

Más gá duit bogadh go dtí an scamall nó má tá ceisteanna agat faoi do bhonneagar, Thig leat iarratas a chur isteach.

PS Tá 2 iniúchadh saor in aisce againn in aghaidh na míosa, b'fhéidir go mbeidh do thionscadal ar cheann acu.

Foinse: will.com

Add a comment