In Tarantool, database super-celeriter coniungere et applicatio ad operandum cum illis. Ecce quam facile est facere

Quinque annos cum Tarantool laborare conabar, sed tunc mihi non laborabat. Sed nuper webinarem tenebam ubi de Hadoop locutus sum et quomodo opera MapReduce. Ibi quaesiverunt mihi: "Quare Tarantool non utimur ad hoc opus?"

Ex curiositate ad illud reverti decrevi, versionem novissimam experire - quod tempus vere consilium probavi. Nunc ostendam tibi quomodo simplici applicatione in Tarantool scriberes, eam onere et eius perficiendi deprime, et videbis quam omnia facilia et frigida sint.

In Tarantool, database super-celeriter coniungere et applicatio ad operandum cum illis. Ecce quam facile est facere

Quid est Tarantool

Tarantool positiones ipsae databases ut ultra-celeriter. Potes ponere aliquem datam quam voles ibi. Plus, replica, testa, id est, ingentem copiam notitiarum per plures ministros scinde et proventus ex eis coniunge - hospites domini domini culpabiles tolerantes efficiunt.

Secundo hoc est applicatio servo. Applicationes tuas in eo scribere potes, cum data operare, exempli gratia, vetera monumenta in curriculo delere secundum certas regulas. Scribere potes servo Http directe in Tarantula quae cum notitia operabitur: da quantitatem eorum, novas notitias ibi scribe et omnia ad dominum redige.

Articulum legi quomodo guys nuntium queue de 300 lineis fecerunt, quod simpliciter rumpitur et irruit - minimum habent observantiam 20 nuntii per alterum. Hic circumagi vere potes et scribe amplissimum applicationem, et non repone sicut in PostgreS.

Conabor aliquid simile huic servo describere, solum simplex, in hoc articulo.

occasum

Pro experimento, tres vexillum virtualis machinis incepi - a 20 GB ferreus coegi, Ubuntu 18.04. 2 virtual CPUs and 4 gigs of memory.

Tarantool instituimus - scripturae verissimae currite vel repositorium addimus et aptum fac ut Tarantool install instituamus. Link to script - (CURL -L https://tarantool.io/installer.sh | VER=2.4 sudo -E bash). Imperat tibi sicut nos;

tarantoolctl — Praecipuum praeceptum ad instantias administrandas Tarantula.
/etc/tarantool — Tota figura hie est.
var/log/tarantool — Hic sunt tigna.
var/lib/tarantool — Notitia hic jacet, et tunc dividitur in Instantias.

Sunt folder instantiae-praesto et instantiae activae - continet quod deducetur - exemplum configuration lima cum lua codice, qui describit quid portus auscultat, quae memoria praesto est ei, Vinyl machinae occasus, codicem qui currit in startup. servientes, obstrictio, queues, deletio obsoleta data, et sic porro.

Instantiae operantur similia in PostgreS. Exempli gratia, vis plura exemplaria currere database quae in diversis portibus pendent. Evenit ut nonnullae instantiae database in uno servo deductae, quae in diversis portibus pendent. Possunt habere prorsus diversa loca, unum exemplum efficiens unam logicam, alteram aliam.

Instantia procuratio

Habemus mandatum tarantoolctl, quod permittit tibi instantiam Tarantulam administrare. Exempli gratia, exemplum reprehendo tarantoolctl limam configurationem reprehendo et dices - tabella est ok si nullae ibi syntaxin errores sunt.

Status instantiae videre potes — status exempli tarantoolctl. Eodem modo potes incipere, desine, sileo.

Cum instantia currit, duobus modis ei coniungere potes.

1. administrativus consolatorium

Defalta, Tarantool nervum aperit, textus normales ASCII illuc missus est ad imperium Tarantool. Nexus ad consolatorium semper occurrit sub user admin, nulla authenticatio, ut non opus est ad portum consolatorium extra Tarantulam administrare.

Hanc methodo utens coniungere, Tarantoolctl nomen instantia inire debes. Praeceptum consolatorium deducet et pro usuario admin connectet. Numquam extra portum consolatorium exponere - melius est eam relinquere quam nervum unitatis. Tunc soli qui accessum habent ad scribendum nervum, Tarantulam coniungere poterunt.

Haec methodus necessaria est rebus administrativis. Laborare cum notitia, utere methodo secunda - protocollo binarii.

2. Using binarii protocol ad coniungere ad portum specifica

Configuratio directivam continet audientium, quae portum communicationum externarum aperit. Portus hic adhibetur cum protocollo binarii et ibi datur authenticas.

Ad hanc connexionem, tarantoolctl iungo ad numerum portum adhibetur. Utens, coniungere cum servientibus remotis potes, authenticas utere et variis accessibus iura dare.

Data Book and Box OMNIBUS

Cum Tarantool database et applicatio est et server, varios modulos habet. Quaeritur in moduli archa - in instrumentis operandis cum notitia. Cum aliquid scribes in arca, Tarantool scribit notitias orbis, in memoria reponit aut aliquid aliud agit.

record

Exempli gratia, in capsam moduli imus et munus in box.once vocamus. Hoc Tarantool coget ad nostrum codicem currere cum minister initialisatur. Spatium creamus in quo notitia nostra reponenda erit.

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

Post hoc primum indicem - primarium efficimus per quem notitias quaerere possumus. Defalta, si ambitum aliquem non definis, primus campus in singulis tabulis pro indice primario adhibebitur.

Deinde concedimus usori hospitis, sub quo per protocollum binarii coniungimus. Concedimus legentes, scribentes et exequentes per totam instanciam.

Comparari ad databases conventionales, omnia hic satis simplicia sunt. Spatium habemus - spatium in quo notitia nostra simpliciter reponitur. Quisque a tuplum dicitur testimonium. Is packaged in MessagePack. Forma haec frigidissima est - binarius est et minus spatium sumit 18 bytes versus 27 .

In Tarantool, database super-celeriter coniungere et applicatio ad operandum cum illis. Ecce quam facile est facere

Commodum elaboraret eum. Fere omnes lineae, singulae notitiae monumentorum columnas omnino diversas habere possunt.

Omnia spatia potes uti ad Box.space imperium. Instantia specifica eligere, exemplum scribe box.space et integram informationem de eo accipias.

Tarantool duas machinas aedificatas habet: Memoria et Vinyl. Memoria omnes notitias in memoriam reponit. Ergo omnia simpliciter et cito operatur. Notitia discriminis rasurae est, et est etiam mechanismum logatum scribere, ideo nihil amittemus si ingruat server.

Vinyl recondit notitias orbis in forma familiarius nobis - hoc est, plura notitia quam memoriam habere potes, et Tarantula ex orbe leget.

Nunc enim Memoria utemur.

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:

Index primarius loco quovis creandus est, quia sine illo nihil opus erit. Sicut in quolibet database, primum agrum creamus - record ID.

partes:

Hic indicamus quid sit index noster. Constat ex una parte - primo agro utemur est generis unsigned - integer positivus. Quantum ex documentis memini, maximus numerus qui esse potest duodeviginti milionum. Ut id mattis est.

Tunc possumus inserere notitia utendo imperio inserta.

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>

Primus ager tamquam clavis primarius adhibetur, ut singularis sit oportet. Numero columnarum limitata non sumus, ergo tantum notitiae inserere possumus quantum ibi velimus. In forma MessagePack specificata sunt, quam supra descripsimus.

Data output

Tunc possumus ostendere notitias utendo praecepto selecto.

Box.example.select cum {1} clavis ut desideratum ingressum ostendet. Si clavem deprimimus, omnia monumenta quae habemus videbimus. Omnes differunt numero columnarum, sed hic in principio, non est conceptus columnarum, sunt agri numeri.

Omnino data copia esse potest. Et exempli gratia opus est eas quaerere per alterum agrum. Ad hoc novum indicem secun- dum creamus.


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

Crea_index imperio utimur.
Vocemus secundarium.

Post haec ambitum definire debes. INDEX GENUS ARBOR. Unicum non potest esse, sic intrant Unicum = falsum.

Deinde indicamus quibus partibus index sit noster. Ager est numerus agri ad quem index ligamus et genus chordae denotamus. et sic creatus est.

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>

Id autem quomodo possumus appellare;

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

conservatam agnovimus

Si instantiam sileo et iterum notitias vocare conamur, videbimus quod ibi non est - omnia vana sunt. Hoc fit quia Tarantool facit checks et notitias orbis salvat, sed si operari cessamus usque ad proximum salvare, omnes operationes amittemus - quia ex ultimo LAPIS recuperabimus, quod erat, exempli gratia duas horas ante.

Alterum alterum servare non laborabit, quia continue dumping 20 GB in disco utilem non est.

Ad hoc, conceptus praemisit stipes scribendae inventa et perficienda. Auxiliante, ad omnem mutationem datam, introitus creatur in parva tabella praemissorum scribendarum.

Quisque introitus usque ad LAPIS in eis reponitur. Pro his fasciculis magnitudinem ponimus - exempli gratia 64 MB. Cum plenum sit, tabula ad secundam incipit ire. Et post sileo, Tarantool ex ultimo LAPIS restituitur et deinde per omnia posteriora negotia volvitur donec subsistat.

In Tarantool, database super-celeriter coniungere et applicatio ad operandum cum illis. Ecce quam facile est facere

Ad huiusmodi tabulas faciendas, optionem in archa.cfg occasus (in exemplo.lua lima);

wal_mode = “write”;

notitia usus

Cum his quae nunc scripsimus, Tarantula uti potes ad notitias congregendas et celerrime database operabitur. Nunc in vico placenta est quod facere potes cum omnibus.

Applicationem scribo

Exempli gratia, applicationem hanc pro Tarantula scribamus

Vide applicationem in vastator

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

Declaramus aliquam tabulam in lua, quae characteribus definit. Haec lamina temere chorda generandi opus est.

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

Post hoc munus declaramus - randomString et longitudinem valorem in parenthesi notatis.

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

Tunc iter itineris ac http://www.synonymy.de Tarantula servo nostro, JSON coniungimus, quod ad clientem mittemus.

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

Post hoc in portu 8080 incipimus in omnibus instrumentis conservatoriis, quae omnes petitiones et errores aperient.

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

Deinde iter declaramus, ut si petitio cum GET methodo ad portum 8080 comitem perveniat, munus ab una linea vocamus. Status redit - 200, 404, 403 vel quemlibet alium quem nominamus.

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

In corpore json.encode reddimus, in eo comitem et comitem indicamus, qui numerus monumentorum in nostris database appellatur et ostendit.

Secundum modum

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)

Ubi in linea iter: route({ method = 'GET', iter = '/token'}, munus() munus vocamus et signum generamus.

Linea loci signum = randomString(32) est temere filum ex XXXII ingenia.
In linea local last = box.space.example:len() eximitur ultimum elementum.
Et in linea box.space.example: insert{ last + 1, tessera} notitias in datorum nostrorum scribimus, id est, ID simpliciter augemus per 1. Id fieri potest, obiter, non solum hoc incondite. Sequentiae sunt in Tarantula.

Vestigium ibi scribimus.

Ita applicationes in uno fasciculo scripsimus. Illico notitias mutare potes, et capsula moduli omne opus sordidum tibi faciet.

Audit http et operatur cum notitia, omnia in unoquoque - et applicatione et in notitia. Ergo omnia cito fiunt.

Ut satus http modulus install sumus:

Quomodo hoc fecerimus, vide sub praedo

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

Prometheo etiam opus est ad currendum;

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

Lorem ac modulorum potest accedere

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

/Comes statum CC dat nobis.
/Accipe signum exit et hoc signum datorum scribit.

Testis velocitate

Probatio pro 50 petitionibus curremus. D certandi petitiones erunt.

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

Signa edita sunt. Et nos constanter data. 99% petitiones discursum sunt in 42 milliseconds. Itaque petitiones 3500 circiter secundae habemus in parva machina cum 2 coros et 4 gigabytis memoriae.

Potes etiam eligere aliquod signum 50000 et videre eius valorem.

Non solum http, sed etiam functiones background currere potes quae notitias tuas processus. Plus varius felis. Exempli gratia, munera vocare potes in updates, aliquid reprime - certamina recta.

Scribere applicationes scripto potes in ipso servo datorum directe, nec ab aliquo limitatum, quemlibet modulorum et logicam efficiendi rationem coniunge.

Servorum applicatio accedere potest ad servers externos, notitias reciperare et ad eius database addere. Data ex database aliis medicamentis adhibebuntur.

Tarantula hoc faciet, et non debebis scribere applicationem separatim.

Ad summam:

Haec est prima pars magni operis. Secunda propediem in Mail.ru Group blog edetur, et nexum cum eo in hac materia definite addemus.

Si curae es interesse eventibus ubi haec construimus online et quaerimus in tempore reali, tune in channel DevOps ab REBRAIN.

Si opus est movere ad nubem vel habere quaestiones de infrastructura tua, libenter excedere petitionem.

PS 2. Auditores gratis per mensem habemus, fortasse consilium vestrum unum ex illis erit.

Source: www.habr.com

Add a comment