Ao amin'ny Tarantool, azonao atao ny manambatra angon-drakitra haingana sy fampiharana iray hiara-hiasa amin'izy ireo. Toy izao ny fomba mora atao

Dimy taona lasa izay dia nanandrana niara-niasa tamin'i Tarantool aho, saingy tsy nahomby tamiko izany. Saingy vao haingana aho dia nanao webinar izay niresaka momba ny Hadoop sy ny fomba fiasan'ny MapReduce. Tao izy ireo dia nametraka fanontaniana tamiko: "Nahoana no tsy mampiasa Tarantool amin'ity asa ity?"

Noho ny fahalianana dia nanapa-kevitra ny hiverina any aho, hizaha ny dikan-teny farany - ary tamin'ity indray mitoraka ity dia tena tiako ilay tetikasa. Ankehitriny dia hasehoko anao ny fomba fanoratana fampiharana tsotra ao amin'ny Tarantool, ampidiro izany ary jereo ny fahombiazany, ary ho hitanao fa mora sy mangatsiaka ny zava-drehetra.

Ao amin'ny Tarantool, azonao atao ny manambatra angon-drakitra haingana sy fampiharana iray hiara-hiasa amin'izy ireo. Toy izao ny fomba mora atao

Inona no Tarantool

Tarantool dia mametraka ny tenany ho tahiry faran'izay haingana. Azonao atao ny mametraka izay angona tianao ao. Fanampin'izay, avereno indray izy ireo, shard - izany hoe, mizara angon-drakitra be dia be amin'ny mpizara maromaro ary manambatra ny valiny avy amin'izy ireo - manaova fifandraisana master-master mahazaka fahadisoana.

Faharoa, mpizara fampiharana ity. Azonao atao ny manoratra ny rindranasao eo aminy, miasa miaraka amin'ny angon-drakitra, ohatra, mamafa ny rakitra taloha ao ambadika araka ny fitsipika sasany. Azonao atao ny manoratra mpizara Http mivantana amin'ny Tarantula izay hiasa miaraka amin'ny angona: omeo ny habetsaky azy, manorata data vaovao ao ary ahena ho an'ny tompony izany rehetra izany.

Namaky lahatsoratra iray momba ny fomba nanaovan'izy ireo filaharana hafatra 300 andalana aho, izay mipoaka sy mirohotra fotsiny - manana hafatra 20 isan-tsegondra farafahakeliny izy ireo. Eto ianao dia afaka manodina sy manoratra fampiharana tena lehibe, ary tsy ho fitehirizana izany, toy ny ao amin'ny PostgreS.

Hiezaka aho hamaritra zavatra toy ity mpizara ity, tsotra fotsiny, ato amin'ity lahatsoratra ity.

fametrahana

Ho an'ny fitsapana dia nanomboka milina virtoaly mahazatra telo aho - kapila mafy 20 GB, Ubuntu 18.04. CPU virtoaly 2 ary fahatsiarovana 4 gigs.

Mametraka Tarantool izahay - mitantana ny script bash na manampy tahiry ary ataovy azo atao ny mametraka Tarantool. Rohy mankany amin'ny script - (curl -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash). Manana baiko toy ny:

tarantoolctl - ny baiko lehibe amin'ny fitantanana ny tranga Tarantula.
/etc/tarantool - eto ny configuration manontolo.
var/log/tarantool - ireto ny logs.
var/lib/tarantool - eto ny angon-drakitra, ary avy eo dia zaraina ho ohatra.

Misy laha-tahiry ohatra-misy sy ohatra-azo atao - mirakitra izay hatomboka - fisie fanamafisana ohatra misy kaody lua, izay mamaritra ny seranan-tsambo henoiny, inona ny fahatsiarovana misy azy, ny fikandrana motera vinyl, ny code izay mandeha amin'ny fanombohana. servers, sharding, filaharana, famafana ny angona lany andro, sy ny sisa.

Miasa toy ny ao amin'ny PostgreS ny tranga. Ohatra, te-hanao dika maromaro amin'ny angon-drakitra mihantona amin'ny seranana samihafa ianao. Hita fa misy ohatra maromaro amin'ny angon-drakitra natomboka amin'ny mpizara iray, izay mihantona amin'ny seranana samihafa. Mety manana toe-javatra hafa tanteraka izy ireo - ny ohatra iray dia mampihatra lojika iray, ny faharoa - iray hafa.

Fitantanana ohatra

Manana ny baiko tarantoolctl izahay, izay ahafahanao mitantana ireo tranga Tarantula. Ohatra, ny ohatra tarantoolctl check dia hanamarina ny rakitra fikirakirana ary hilaza - mety ny rakitra raha tsy misy hadisoana syntax ao.

Azonao atao ny mahita ny satan'ny ohatra - ohatra status tarantoolctl. Toy izany koa, azonao atao ny manomboka, mijanona, manomboka.

Rehefa mandeha ny ohatra dia azonao atao ny mampifandray azy amin'ny fomba roa.

1. Console administratif

Amin'ny alàlan'ny default, Tarantool dia manokatra socket, ny lahatsoratra ASCII mahazatra dia alefa any mba hifehy ny Tarantool. Ny fifandraisana amin'ny console dia mitranga foana eo ambanin'ny mpampiasa admin, tsy misy fanamarinana, noho izany dia tsy ilaina ny manokatra ny seranan-tsambon'ny console hitantana ny Tarantula.

Raha te hifandray amin'ity fomba ity ianao dia mila miditra Tarantoolctl ampidiro anarana ohatra. Ny baiko dia handefa ny console ary hifandray amin'ny mpampiasa admin. Aza avela hivoaka ety ivelany mihitsy ny seranan-tsambon'ny console - aleo avela ho toy ny socket unit. Dia ireo izay afaka manoratra amin'ny socket ihany no afaka mifandray amin'ny Tarantula.

Ity fomba ity dia ilaina amin'ny zavatra administratif. Mba hiasa amin'ny data, ampiasao ny fomba faharoa - ny protocol binary.

2. Mampiasa protocole binary hifandraisana amin'ny seranana manokana

Ny fanitsiana dia misy torolalana mihaino, izay manokatra seranan-tsambo ho an'ny fifandraisana ivelany. Ity seranana ity dia ampiasaina miaraka amin'ny protocol binary ary alefa any ny fanamarinana.

Ho an'ity fifandraisana ity dia ampiasaina ny tarantoolctl connect to port number. Amin'ny fampiasana azy dia afaka mifandray amin'ny mpizara lavitra ianao, mampiasa ny fanamarinana ary manome zo fidirana isan-karazany.

Fandraketana angona sy Module Box

Koa satria Tarantool dia angon-drakitra sy mpizara fampiharana, manana modules isan-karazany izy io. Izahay dia liana amin'ny maodely boaty - manatanteraka miasa miaraka amin'ny data. Rehefa manoratra zavatra ao anaty boaty ianao, Tarantool dia manoratra ny angona ao anaty kapila, mitahiry izany ao anaty fitadidiana, na manao zavatra hafa miaraka aminy.

firaketana an-tsoratra

Ohatra, miditra ao amin'ny module box isika ary miantso ny box.once function. Izany dia hanery an'i Tarantool handefa ny code rehefa manomboka ny server. Mamorona toerana iray hitehirizana ny angonay izahay.

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

Aorian'izany, mamorona tondro fototra - voalohany - izay ahafahantsika mikaroka angona. Amin'ny alàlan'ny default, raha tsy mamaritra masontsivana ianao, ny saha voalohany amin'ny rakitra tsirairay dia hampiasaina ho an'ny tondro voalohany.

Avy eo dia manome fanomezana ho an'ny mpampiasa vahiny izahay, izay mifandray amin'ny protocol binary. Avelanay mamaky, manoratra ary manatanteraka ny ohatra rehetra.

Raha oharina amin'ny angon-drakitra mahazatra, ny zava-drehetra eto dia tsotra. Manana habaka isika - faritra iray itahirizana tsotra izao ny angonay. Ny rakitsoratra tsirairay dia antsoina hoe tuple. Izy io dia fonosina ao amin'ny MessagePack. Ity dia endrika tena mahafinaritra - mimari-droa ary maka toerana kely kokoa - 18 bytes versus 27.

Ao amin'ny Tarantool, azonao atao ny manambatra angon-drakitra haingana sy fampiharana iray hiara-hiasa amin'izy ireo. Toy izao ny fomba mora atao

Tena mety ny miara-miasa aminy. Saika isaky ny andalana, isaky ny rakitra angona dia mety manana tsanganana hafa tanteraka.

Afaka mijery ny habaka rehetra isika amin'ny fampiasana ny baiko Box.space. Raha hifidy ohatra iray manokana dia manorata ohatra box.space ary makà fampahalalana feno momba izany.

Tarantool dia manana motera roa naorina: Memory sy Vinyl. Ny fitadidiana dia mitahiry ny angona rehetra ao anaty fitadidiana. Noho izany, miasa tsotra sy haingana ny zava-drehetra. Ny angon-drakitra dia ariana amin'ny kapila, ary misy ihany koa ny rafitra fanoratana alohan'ny log, ka tsy ho very na inona na inona isika raha midona amin'ny server.

Vinyl dia mitahiry angona amin'ny kapila amin'ny endrika mahazatra antsika - izany hoe afaka mitahiry angona bebe kokoa noho izay ananantsika ianao, ary i Tarantula dia hamaky izany avy amin'ny kapila.

Amin'izao fotoana izao dia hampiasa Memory isika.

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:

Ny fanondro voalohany dia tsy maintsy noforonina ho an'ny habaka rehetra, satria raha tsy misy izany dia tsy hisy na inona na inona hiasa. Toy ny amin'ny angon-drakitra rehetra, mamorona ny saha voalohany izahay - firaketana ID.

Parts:

Eto isika dia manondro hoe inona no misy ny index. Ahitana ampahany iray izy io - ny saha voalohany hampiasaintsika dia karazana tsy misy sonia - integer tsara. Raha ny fitadidiako ny antontan-taratasy, ny isa ambony indrindra azo atao dia 18 quintillion. Be dia be izany.

Avy eo dia afaka mampiditra data isika amin'ny fampiasana ny baiko insert.

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>

Ny saha voalohany dia ampiasaina ho fanalahidy fototra, noho izany dia tsy maintsy miavaka. Tsy voafetran'ny isan'ny tsanganana izahay, ka afaka mampiditra data betsaka araka izay irinay ao. Izy ireo dia voafaritra amin'ny endrika MessagePack, izay nolazaiko tetsy ambony.

Output data

Avy eo dia afaka mampiseho ny angona isika amin'ny alàlan'ny baiko mifantina.

Box.example.select miaraka amin'ny famaha {1} dia hampiseho ny fidirana tiana. Raha ampidinintsika ny fanalahidy dia ho hitantsika ny rakitra rehetra ananantsika. Izy rehetra dia samy hafa amin'ny isan'ny tsanganana, fa eto, amin'ny ankapobeny, tsy misy hevitra momba ny tsanganana - misy isa an-tsaha.

Mety misy ny habetsaky ny angona rehetra. Ary ohatra, mila mikaroka azy ireo amin'ny saha faharoa isika. Mba hanaovana izany, mamorona index faharoa vaovao isika.


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

Mampiasa ny baiko Create_index izahay.
Aleo atao hoe Secondary.

Aorian'izany dia mila mamaritra ny masontsivana ianao. Ny karazana fanondroana dia TREE. Mety tsy miavaka izany, ka midira Unique = diso.

Avy eo dia asehontsika hoe inona ny ampahany misy ny indeksantsika. Ny saha dia ny isan'ny saha izay hamatotra ny index, ary mamaritra ny karazana tady. Dia toy izany no namoronana azy.

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>

Toy izao no iantsoana azy:

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

fiarovana

Raha averinay indray ilay ohatra ary manandrana miantso indray ny angon-drakitra dia ho hitantsika fa tsy ao izany - foana ny zava-drehetra. Mitranga izany satria ny Tarantool dia manao fisavana ary mitahiry ny angon-drakitra amin'ny kapila, fa raha mijanona miasa isika mandra-pahatongan'ny famonjena manaraka, dia ho very ny asa rehetra - satria ho sitrana amin'ny toeram-pisavana farany isika, izay, ohatra, adiny roa lasa izay.

Tsy mety koa ny mitahiry isaky ny segondra, satria tsy hevitra tsara ny fanariana 20 GB amin'ny kapila.

Ho an'ity tanjona ity dia noforonina sy nampiharina ny foto-kevitry ny fanoratana mialoha. Miaraka amin'ny fanampiany, ho an'ny fiovana rehetra amin'ny angon-drakitra, dia misy fidirana ao anaty rakitra fanoratana kely mialoha.

Ny fidirana tsirairay mankany amin'ny toeram-pisavana dia voatahiry ao anatiny. Ho an'ireo rakitra ireo dia napetrakay ny habeny - ohatra, 64 MB. Rehefa feno dia manomboka mankany amin'ny rakitra faharoa ny firaketana. Ary aorian'ny fanombohana dia averina amin'ny toeram-pisavana farany i Tarantool ary avy eo dia mihodina ny fifampiraharahana rehetra any aoriana mandra-pijanonany.

Ao amin'ny Tarantool, azonao atao ny manambatra angon-drakitra haingana sy fampiharana iray hiara-hiasa amin'izy ireo. Toy izao ny fomba mora atao

Mba hanatanterahana izany firaketana izany dia mila mamaritra ny safidy ao amin'ny fikandrana box.cfg ianao (ao amin'ny rakitra example.lua):

wal_mode = “write”;

fampiasana data

Miaraka amin'izay nosoratanay izao, azonao atao ny mampiasa Tarantula hitahiry angona ary hiasa haingana be toy ny angon-drakitra. Ary ankehitriny ny gilasy amin'ny mofomamy no azonao atao amin'izany rehetra izany.

Manoratra fampiharana

Ohatra, andao hanoratra ity fampiharana manaraka ity ho an'ny Tarantula

Jereo ny fampiharana eo ambanin'ny 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()

Manambara latabatra izahay ao amin'ny lua izay mamaritra ny endri-tsoratra. Ity takelaka ity dia ilaina mba hamoronana tady kisendrasendra.

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

Aorian'izany dia manambara ny asa - randomString ary manome ny sanda lava amin'ny fononteny.

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

Avy eo dia mampifandray ny router http sy ny mpizara http amin'ny mpizara Tarantula, JSON, izay halefantsika amin'ny mpanjifa.

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

Aorian'izany dia manomboka amin'ny port 8080 amin'ny interface server http rehetra isika, izay hampiditra ny fangatahana sy ny lesoka rehetra.

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

Manaraka, manambara ny lalana izahay, ka raha misy fangatahana amin'ny fomba GET tonga amin'ny seranan-tsambo 8080 / isa, dia miantso ny fiasa amin'ny andalana iray izahay. Izy io dia mamerina ny sata - 200, 404, 403 na hafa izay faritanay.

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

Ao amin'ny vatana dia miverina json.encode isika, ao anatin'izany dia manondro isa sy getcount, izay antsoina ary mampiseho ny isan'ny rakitra ao amin'ny tahiry.

Ny fomba faharoa

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)

Aiza amin'ny andalana router:route({fomba = 'GET', lalana = '/token'}, function() antsoinay ny asa ary mamorona famantarana.

-dalana, famantarana eo an-toerana = randomString(32) dia tady kisendrasendra misy tarehintsoratra 32.
Milahatra farany eo an-toerana = box.space.example:len() esorinay ny singa farany.
Ary amin'ny andalana box.space.example:insert{ farany + 1, token } manoratra ny angon-drakitra ao amin'ny tranokalanay izahay, izany hoe mampitombo ny ID amin'ny 1 fotsiny. Azo atao izany, raha ny marina, fa tsy amin'ny fomba tsy misy dikany ihany. Misy filaharana amin'izany ao Tarantula.

Manorata ny famantarana eo izahay.

Noho izany, nosoratanay tao anaty rakitra iray ny fampiharana. Azonao atao ny manodinkodina mivantana ny angon-drakitra ao, ary ny maody boaty dia hanao ny asa maloto rehetra ho anao.

Mihaino http izy ary miasa miaraka amin'ny angona, ny zava-drehetra dia ao anatin'ny tranga tokana - na ny fampiharana na ny angona. Noho izany, ny zava-drehetra dia tena haingana.

Hanombohana dia mametraka ny module http izahay:

Ahoana no hanaovana izany, jereo eo ambanin'ny 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:/#

Mila prometheus ihany koa isika mba hihazakazaka:

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

Manomboka izahay ary afaka miditra amin'ny modules

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 dia manome antsika ny sata 200.
/token dia mamoaka marika ary manoratra ity marika ity amin'ny angon-drakitra.

Fitsapana ny hafainganam-pandeha

Andao hanao benchmark ho an'ny fangatahana 50. 000 ny fangatahana hifaninana.

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

Avoaka ny famantarana. Ary mirakitra angona tsy tapaka izahay. 99% n'ny fangatahana no nokarakaraina tao anatin'ny 42 milisegondra. Noho izany, manana fangatahana 3500 isan-tsegondra eo amin'ny milina kely misy cores 2 sy fahatsiarovana 4 gigabytes izahay.

Azonao atao ihany koa ny misafidy marika 50000 eo ho eo ary jereo ny vidiny.

Tsy ny http ihany no azonao ampiasaina, fa ny fiasan'ny background ihany koa izay manodina ny angonao. Ankoatra izany, misy trigger isan-karazany. Ohatra, azonao atao ny miantso ny fiasa amin'ny fanavaozana, manamarina zavatra - fifanoherana marina.

Azonao atao ny manoratra fampiharana script mivantana ao amin'ny mpizara database, ary tsy voafetran'ny na inona na inona, mampifandray ny modules ary mampihatra izay lojika.

Ny mpizara fampiharana dia afaka miditra amin'ny lohamilina ivelany, maka angon-drakitra ary manampy izany amin'ny tahiry. Ny angona avy amin'ity tahiry ity dia hampiasain'ny fampiharana hafa.

Tarantula dia hanao izany mihitsy, ary tsy mila manoratra fampiharana manokana ianao.

Ho famaranana

Ity no ampahany voalohany amin'ny asa lehibe iray. Ny faharoa dia havoaka tsy ho ela ao amin'ny bilaogin'ny Vondrona Mail.ru, ary azo antoka fa hampiditra rohy amin'izany ao anatin'ity fitaovana ity izahay.

Raha liana amin'ny fanatrehana hetsika izay hanangananay ireo zavatra ireo amin'ny Internet ianao ary hametraka fanontaniana amin'ny fotoana tena izy dia midira fantsona DevOps avy amin'i REBRAIN.

Raha mila mifindra any amin'ny rahona ianao na manana fanontaniana momba ny fotodrafitrasao, aza misalasala mametraka fangatahana.

PS Manana audit maimaim-poana 2 isam-bolana izahay, angamba ny tetikasanao dia iray amin'izy ireo.

Source: www.habr.com

Add a comment