Tarantool Adapter: sharding a Luae backend in tribus lineis

Tarantool Adapter: sharding a Luae backend in tribus lineis

Apud Mail.ru Group habemus Tarantool - haec est applicatio servo Luae, quae etiam duplicat ut database (vel vice versa?). Ieiunium et frigus est, sed facultates unius ministri adhuc non sunt illimitatae. Scala verticalis etiam panacea non est, itaque Tarantool instrumenta habet ad scalam horizontalem - moduli vshardi [1]. Liceat tibi per plures notas pervalida datas, sed tibi tinkere cum ea repone et logicae negotium appone.

Bonum nuntium: magna aliqua weve 'collecta offa (eg * [2], [3]) et aliud compagem creavit, quae solutionem huius problematis significanter simpliciorem reddet.

Tarantool Cartridge nova compage est ad systemata enucleanda complexu distributa. Te permittit ut in scribendo negotiorum logicam versaris pro solvendis quaestionibus infrastructuris. Infra incisam indicabo tibi quomodo haec compage opera et quomodo officia distributa scribe utantur.

Quidnam rei est?

Tarantulam habemus, vshard habemus - quid amplius vis?

Uno modo est res commodae. Configuratio vshard configuratur per tabulas Luae. Ut systema distributum plurium processuum Tarantool ad recte operandum, figuratio ubique eadem sit oportet. Hoc facere nemo manually vult. Ideo omnia scripta, Ansible, ac systemata instruere.

Cartridge ipsa conformationem vshard administrat, hoc facit secundum suum propria distributa configuratione. Est essentialiter fasciculus simplex YAML, cuius exemplum in utroque exemplo Tarantool repositum est. Simplicitas est ut ipsa compages suam conformationem monitoret et curet ut eadem sit ubique.

Secundo, iterum est commodum. Configuratio vshard nihil pertinet ad logicam negotiationem evolutionem et solum programmatorem ab opere suo distrahit. Cum de architectura incepti disserimus, frequentius de singulis et eorum commercio loquimur. Praepropere cogitare de botro ad 3 centra data.

Has quaestiones iterum atque iterum solvimus, et aliquando accessionem simpliciorem operationem cum applicatione per totam vitam cycli evolvere potuimus: creationem, progressionem, probationem, CI/CD, sustentationem.

Cartridge inducit notionem functionis pro quolibet processu Tarantool. Partes conceptus sunt qui permittit ut elit ut focus in scripto codice. Omnes partes quae in incepto praesto sunt in unam instantiam Tarantool currere possunt, et hoc satis erit ad probationes.

Key lineamenta Tarantool Adapter:

  • automated orchestration;
  • amplificandi functionem applicationis utendi novis muneribus;
  • application templates pro evolutionis et instruere;
  • constructum- in automatic sharing;
  • integratio cum Luatest compage probatio;
  • botri procuratio utens WebUI et API;
  • instrumenta packaging et instruere.

Salve, Orbis Terrarum!

Non possum exspectare compagem ipsam ostendere, sic fabulam de architectura postea relinquemus et aliquo simplici incipiemus. Si ponatur ipsum Tarantool iam institutum esse, omne quod reliquum est facere

$ tarantoolctl rocks install cartridge-cli
$ export PATH=$PWD/.rocks/bin/:$PATH

Haec duo mandata recta mandatum instituent utilitates et permittunt ut primum applicationem ex template,

$ cartridge create --name myapp

Et hoc est quod consequimur;

myapp/
├── .git/
├── .gitignore
├── app/roles/custom.lua
├── deps.sh
├── init.lua
├── myapp-scm-1.rockspec
├── test
│   ├── helper
│   │   ├── integration.lua
│   │   └── unit.lua
│   ├── helper.lua
│   ├── integration/api_test.lua
│   └── unit/sample_test.lua
└── tmp/

Haec repositio cum prompto facta est "Salve, Mundus!" adhibitis. Studeamus ilicet currere, antea clientelis inauguratis (inclusa ipsa compage);

$ tarantoolctl rocks make
$ ./init.lua --http-port 8080

Sic unum nodi currit ad futuram applicationis suggillatis. Laicus inquisitivus statim telam interfaciei aperire potest, botrum unius nodi cum mure configurare et fructu frui, sed immaturum est gaudere. Hactenus applicatio quidquam utile facere non potest, ut postea dicam tibi de instruere, nunc tempus est codicem scribere.

Applicationem Development

Iustus imaginari consilium destinamus quod notitias recipere debet, nisi eam semel in die relationem aedificet.

Tarantool Adapter: sharding a Luae backend in tribus lineis

Incipimus schemate delineare et tria in eo collocare: porta, repositio et schedula. Labore in architecto nobis porro. Cum vshard pro repositione utimur, addimus vshard-iter et vshard-repono ad rationem. Nec porta nec scheduler directe accessum ad repono, id est quod iter est, id est quod creatum est.

Tarantool Adapter: sharding a Luae backend in tribus lineis

Hoc schema adhuc non exacte significat quod aedificabimus in incepto, quia elementa abstracta spectant. Adhuc videre debes quomodo hoc in reale Tarantool projiciatur - coetus nostri componentes per processum let's.

Tarantool Adapter: sharding a Luae backend in tribus lineis

Punctum est parum observare vshard-itinere et portas in instantiis separatis. Cur opus est retiaculis iterum iterum versari, si hoc iam est officium itineris? In eodem processu currere debent. Hoc est, porta et vshard.router.cfg initialized in uno processu, et sint penitus localiter.

In scaena consilio, tribus partibus opportunum erat laborare, sed ego, ut æstiva, dum codicem scribebam, cogitare nolo de tribus instantiis Tarnatool deducendis. Mihi opus est probationes currere et reprehendo quod recte scripsi porta. Vel fortasse pluma collegis meis demonstrare volo. Quid ego per hasslum tria exemplaria disponam? Sic conceptus muneribus natus est. Munus est regularis luash moduli cuius vita cyclus Cartridge administratur. In hoc exemplo quattuor earum sunt porta, iter, repono, schedula. Plura in re alia esse possunt. Omnes partes in uno processu currere possunt, et hoc satis erit.

Tarantool Adapter: sharding a Luae backend in tribus lineis

Et cum fit instruere ad choragium vel productionem, tunc singulas processus Tarantool assignabimus suum ordinem partium secundum facultates ferrarias;

Tarantool Adapter: sharding a Luae backend in tribus lineis

Acta administrationis

Informationes circa ubi quae partes currunt, alicubi condi debent. Haec autem alicubi distributa figura est, de qua iam supra dixi. Maxime circa illud est botrus topology. Hic sunt 3 replicationes circulorum 5 processuum Tarantool:

Tarantool Adapter: sharding a Luae backend in tribus lineis

Notitiam amittere nolumus, ergo informationes de processibus currit cum cura tractamus. Adapter vestigia servat configurationis utendi duos-phasis committi. Cum volumus conformationem renovare, primo inhibet omnia instantiarum praesto esse et paratam novam conformationem suscipere. Post haec secunda periodus config applicat. Ita, etiamsi unum exemplar eueniret ad tempus perpendendum, nihil mali fiet. Configuratio simpliciter applicanda non erit et errorem in antecessum videbis.

Etiam in sectione topologia, tam magni momenti modulus quam dux cuiusque coetus replicationis indicatur. Solet hoc exemplum quod memoratur. Reliqua saepissime leguntur, licet exceptiones sint. Aliquando tincidunt fortes pugnas non timent et notitias ad plures replicas in parallelis scribere possunt, sed nonnullae operationes sunt quae, qualecumque, bis fieri non debent. Hoc enim signum ducis est.

Tarantool Adapter: sharding a Luae backend in tribus lineis

Vita roles

Ut munus abstractum in tali architectura existat, compago eas quodammodo administrare debet. Naturaliter imperium contingit sine processu Tarantool restarting. Sunt 4 callbacks ad partes agendas. Ipsa Cartridge eos appellabit secundum ea quae in sua configuratione distributa scripta sunt, ita conformationem ad proprias functiones applicando.

function init()
function validate_config()
function apply_config()
function stop()

Quisque munus munus habet init. Semel dicitur vel cum munus est datum vel cum Tarantool est restarted. Commodum est ibi, exempli gratia, initialize box.space.creare, vel schedula aliquem fibrarum curriculorum mittere, qui certis temporis intervallis operam dabit.

Munus unum init non satis. Cartridge permittit partes uti configuratione distributa qua utitur ad topologiam reponendam. In eadem configuratione novam sectionem declarare possumus ac fragmentum configurationis negotii in eo reponere. In exemplo meo, hoc schema potest esse seu unctiones schedulae pro munere schedularum.

Botrus vocat validate_config и apply_config omni tempore distributae figurae mutationes. Cum configuratione applicatur per duos tempus commissum, botrus sistit unumquodque munus paratum esse ad hanc novam configurationem accipiendam et, si opus est, errorem utentis refert. Cum omnes consentiunt figuram esse normalem, tunc apply_config.

Etiam partes habent modum stopquae opus est ad explendum munus mundare. Si dixerimus schedulam in hac servo diutius non esse necessariam, fibras illas prohibere potest quas incepit init.

Munera inter se possunt correspondent. Munus scribendo usi sumus in Lua vocat, sed fieri potest ut processus datus non habeat munus quod egeamus. Ad faciliorem retia vocat, moduli auxiliares rpc (recessus remotis) utimur, qui in fundamento netbox in Tarantool aedificatur. Hoc utile esse potest si, exempli gratia, porta tua velit directe petere schedulam ut officium nunc faciendum sit, potius quam diem exspectandum.

Magni momenti est sustinendi culpa tolerantiam. Adnato ad monitor protocol utitur ad salutem [4]. Denique processus "rumores" inter se per UDP commutant-singula processus proximis nuntia nuntiat et respondent. Si subito responsum non venerit, Tarantool incipit aliquid falsum suspicari, et post tempus recitat mortem et incipit narrare omnes circa hoc nuntium.

Tarantool Adapter: sharding a Luae backend in tribus lineis

Ex hoc protocollo, Cartridge automatic defectum processus ordinat. Uniuscuiusque processus monitores ambitus sui, et si dux subito respondere desiit, imago partes suas accipere potest, et Cartridge currentes partes conformat.

Tarantool Adapter: sharding a Luae backend in tribus lineis

Hic cavere debes, quia crebra commutatione ultro citroque ad certamina data per replicationem ducere potest. Utique, ne temere committas automatice defectionem. Plane intelligendum est quid futurum sit et certa replicatio non frangatur postquam dux restituitur et corona reddita est ei.

Ex his omnibus sentiendum est muneribus similes esse microservices. In sensu, justi sunt, ut moduli intra Tarantool processuum. Sed differentiae fundamentales etiam sunt plures. Primum, omnes partes eminentes in eodem codice basis vivere debent. Et omnes processus Tarantool ex eodem codice basis deducendae sunt, ut nullae sint admirationes sicut eae cum initialize schedulae conantur, sed simpliciter non est. Etiam in codice versiones differentias non patitur, quia ratio in tali re difficillimum est dicere et debug mores.

Dissimilis Docker, munus "imaginis" accipere non possumus, eam in aliam machinam ducere et illuc currere. Munera nostra non tam solitaria sunt quam continentia Docker. Etiam in una instantia non possumus currere duo munera idem numero. Partes aut est aut non est, quodammodo est singleton. Et tertio, partes debent esse idem in tota replicatione universitatis, quia alioquin absurdum esset - data est eadem, sed configuratione diversa.

Instrumenta instruere

Pollicitus sum ostendere quomodo Cartridge auxilia ad applicationes explicandas adiuvat. Ad vitam faciliorem aliis, compages fasciculi RPM fasciculi:

$ cartridge pack rpm myapp -- упакует для нас ./myapp-0.1.0-1.rpm
$ sudo yum install ./myapp-0.1.0-1.rpm

Involucrum inauguratum continet fere omnia quae debes: tum applicationes tum clientelas inauguratus. Tarantool etiam adveniet cum servo ut dependentia sarcinarum RPM et servitium nostrum promptum est ad deducendum. Hoc fit per systemd, sed primum parva configuratione scribere debes. Ad minimum, URI cuiusque processus denota. Tria sufficiunt ad exemplum.

$ sudo tee /etc/tarantool/conf.d/demo.yml <<CONFIG
myapp.router: {"advertise_uri": "localhost:3301", "http_port": 8080}
myapp.storage_A: {"advertise_uri": "localhost:3302", "http_enabled": False}
myapp.storage_B: {"advertise_uri": "localhost:3303", "http_enabled": False}
CONFIG

Est amet nuance hic. Loco modo binarii protocolli portum specificando, totam publicam electronicam processus incluso hostname designamus. Hoc necessarium est ut nodi botri inter se coniungere sciant. Mala idea est uti 0.0.0.0 sicut inscriptionem electronicam venditare, debet IP oratio externa, non nervus ligare. Sine ea, nihil laborabit, sic Cartridge simpliciter non dimittet te nodo cum iniuria advertise_uri.

Configuratio nunc parata est, processuum incipere potes. Cum unitas systematis regularis non plus quam unum processum incipere non permittit, applicationes in Cartridge instituuntur sic dictae. instantiated unitates sic laborant:

$ sudo systemctl start myapp@router
$ sudo systemctl start myapp@storage_A
$ sudo systemctl start myapp@storage_B

In configuratione, portum HTTP denotamus in quo Cartridge inservit interfaciei interreti - 8080. Eamus ad eam et vide:

Tarantool Adapter: sharding a Luae backend in tribus lineis

Videmus quod, licet currendi sint processus, nondum sunt configurati. Nondum cartridge scit quis debet replicare cum quo et de se ipso facere sententiam non potest, sic exspectat actiones nostras. Sed non multum optio habemus: vita novi botri incipit a configuratione primi nodi. Deinde alias botro addemus, easque partes assignabimus, et in hac in parte feliciter peractum considerari potest.

Poculum vitreum tui dilectissimi bibamus et relaxemus post longum opus hebdomade. Applicatio adhiberi potest.

Tarantool Adapter: sharding a Luae backend in tribus lineis

results

Quid eventus? Experire, utere, opiniones relinquere, tesseras in Github crea.

References

[1] Tarantool » 2.2 » Reference » Rupes reference » Module vshard

[2] Quomodo nucleum obsidionis Alfa-Bank implevimus negotium secundum Tarantool

[3] Nova generatio exosculatio architecturae: transformatio cum transitu ad Tarantool

[4] NATO - botrus constructione protocol

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

Source: www.habr.com

Add a comment