
by St-Pete
Hi omnes! Im Mons Anderson, suggestus architectus Dicam tibi quomodo S3 tabularium nostrum aedificavimus, quomodo opera, quae solutiones prospere evenerunt, et quae immutatio valeret, si idem consilium nunc a scabere incepimus.
Articulus paratus est secundum relationem by Mail.ru Cloud Solutions & Tarantool. In articulo loquemur:
- quomodo repositio Mail.ru designata est, super quam tabularium S3 aedificavimus;
- quod addimus ad faciendum Mail.ru Cloud Storage;
- quomodo objectum exemplar opera reposita et quot gradus ad productionem ingrediendam ducti sunt;
- de melioramentis ad systema pugnae: deficiendi et scandendi;
- quomodo nos adimplendo sharding et resharding;
- ac etiam de operando cum testimonialibus SSL.
Si non vis legere, potes .
Quomodo repositio Mail.ru designata est, super quam S3 tabularium aedificavimus
Progressio nostrae S3 super repositionis Mail.ru Cloud incepit, ideo initio digna est narrare quomodo operatur et quid facere potest.
Mail.ru nubes reposita est cum ministris orbis. In mediocris, servo repono modernus 36 orbes 12-14 terabytes singulas habet. Antea disci minores erant, sed in tribus annis volumina orbis creverunt et hodie est fere dimidia petabyta rudis notitiae.
Orbis e diversis ministris reponendiis coniunguntur in "paria" sic dicta. Par unum fasciculus repositionis unitas est. Essentialiter, orbis est in certa partitione ad certam viam insidens, ubi fasciculi hashes notati collocari possunt.
Par nomen historicum est, usque ad hunc diem, quamvis nunc par non necessario habeat duos tantum orbes. Tres orbis esse possunt, ac variae etiam schedulae hybridae esse possunt, exempli gratia 3/2.

Pairs unitates objectum repono
Omnia paria in PairDB condita sunt - applicatione Tarantool-substructio. Omnes database in nostro promptuario, ab ipsis primis incipientes, Tarantool sunt, aliis databases non utimur.
PairDB omnia paria, civitates, spatium liberum, facultates defectus, errores ultimos reponit. Ipsa potest etiam ire ad classes ipsas, statum suum renovare, utrum laborent necne, inspicias. Id est, PairDB est generalis snapshot status omnium orbis in nostro systemate.

Par DB: Patr database
Tabularia in binis condita sunt, et ut scias quae par continet quae fasciculi, alio debes datorum - FileDB. Ponit mapping, adaptans definitionem: fasciculus talis et talis in par tali et tali reponitur, sicut numerus attributorum necessariorum.
Tabularium DB: locus ubi tabella reponitur
Alia nexus magni momenti est officium Nylon, iter ad operandum cum databases. Unius punctus est et per unum interfaciem cum PairDB et FileDB operari sinit. Hoc est inaestimabile obsequium, petitiones librat, FileDB shard adire intelligit, quae paria sint activa et quae non sunt.

Nylon: iter itineris ad opus databases
Etiam necesse est ut aliqua re contentus in repositione reponas. Est huic servitus - Streamer. Duos modos HTTP praebet: pone modum contentum in repositione impellendi, et methodum GET eam inde capiendi. HTTP est satis populare et opportunum protocollum notitiae translationis.
Cum Streamer contactum habemus, ad PairDB per Nylon accedit, ex quo par tabellam ad fasciculum mittere potest, et notitia per WebDAV ad hoc par transfert.
Essentialiter, cuiusvis servo repono est nginx plus orbis qui per vias datas ascendunt. Fasciculum ad tabulam repositionis ex Streamer immittere possumus, eam delere, eam nominare, vel pro integritate prehendere. Id est, commodum est commercium humili gradu cum repono.

Streamer: viscus punctum repono
Quod nos addidit facere S 3 repono
Itaque consilium generale fundamentale reponendi inspeximus tempore cum S3 repositione deducendae essemus. Methodo PUT utendo, contentum arbitrarium ibi ponere potuimus et pro hac notitia Nullam identifier. Cum hoc ID postea veni et fasciculum originalem collige. Sed hoc non sufficit ad efficiendum S3. S3 protocollum, praeter actarum rerum, habet;
- repositio metadata - additional possessiones obiecti;
- aditus ad res per HTTP ordinandis;
- grouping objects into collections - situlas;
- HTTP-S3 Endpoint. S3 notitias ordinat in structuras specificas quae situlae dicuntur, quarum unaquaeque cuspis ad tabulas recondendas praebet.
Ad hanc logicam efficiendam opus separatum opus fuit. Volebam etiam statim architecturam praebere ad ulteriorem progressionem ministerii scalabilitatis linearis.
Primum components
API S3 DAEMONES INSTRUMENTUM. Hoc est signum Amazonum S3 API, quod XML metadata pro metadata sustinet et contenta directe influere sinit. Non habuimus aliquid fingere, omnia descripta et documenta facta.
Nos etiam Nginx inauguratus est ante servitium. Usi sumus pro SSL terminatione, libratione, onere, et etiam pro logica in Lua (metrica, loging et pertractatione).
Etiam Tarantool elegimus ut metadata S3 congregem. In prima versione, daemon S3 ad metadata haec datorum perrexit, ipsum contentum in magna repositione per Streamer repositum erat.

Nginx + S3 API + metadata
Object exemplum repono
Quomodo opera S 3 videamus. Usor potest creare situlam - collectionem rerum. Situla ab hospite nomine appellata est et subdomain servitii est. Intra situlam, user res creare potest. Objectum identifier domicilium erit. Obiectum contentum blob est, copia notitiarum binariorum quas in repositione condimus. Objectum etiam attribuit: nomen - eiusdem URL, ACL (indicem accessum imperium), alia addita vel arbitraria attributa - haec omnia in metadata reposita sunt.
Figura huius notitiae normalised fortasse hoc spectare potest: sunt incepta propria situla, quae propria obiecta et obiecta composita esse possunt. Cum una via partium onerari possit, duae tabulae auxiliares onerandae sunt: onerariae et chunks. Incepta etiam documentorum aditus habent et exosculatio.

Data Schema
Cum nos b2b operam daremus cum accessu soluto, hoc schema exosculatio requirebat.
Etiam munus exosculatio in Tarantool effectum est.

Emendationes ad S 3 repono: gradus ad productionem
Exemplar opus iam fecimus quod uti potest: res et metadata erant reposita, sed plura puncta ad productionem ingredi defuerunt.
Uno modo, ratio quantitatis limitum. Si officium sine eo coepimus, tum in summo onere quamlibet partem systematis onerare possemus. Finis rate sic debet operari: quaevis petitio S3 ad certum exercitum venit, hospes est situla identifier, et situla alicuius clientis est. Opus est munus aliquod e situla definire, quod nos permitteret ad limes computare.
Adde, quod ratio limes rate valida esse debet ad tractandum onus S3 quod advenit.
Hic Tarantool iterum usi sumus. Limites rate est botrus 21 instantiarum, instantiae in partes divisae, in tres nodos physicae divisae et in magnum botrum topologicum componuntur. Configurationis mutationes automatice per eam propagantur: limites, defaltae et configurationes ponuntur. Quaelibet situla uno instantia stricte ministratur. Cum petitio ad certum situlam pervenerit, instantia responsalis huius situlae computatur. Intra hoc nodi, postulationum rate currenti computatur algorithmo similis Thochen Situla. Deinde, ratio limitis rate, in indicibus et proprietatibus currentis oneris pro certo situla appositis, dicit num petitio impleri possit necne. Terminus recognitionis in primo stadio petitionis S3 peragitur, omnia alia systematis elementa ab nimio onere defendens.

Item, sub onere satis difficile est sine thesauro facere. S3 crebris ad eadem obiectis accessum significat, id est calidam repositam. In casu consueto, accessus ad singulas fasciculi catena completa ministratur: Streamer, FileDB, PairDB, Repono. Sed cum pluries fasciculus accessus, accessum optimize ad hoc contentum locale cella utendo.
Latibulum multi-strauit et in usu ngingis, localibus, SSD et RAM orbis disci est. Hic Tarantool non utebantur, quia commodius est ad res e lima rationi inservire, ita cache tiering facere possumus. Praeterea magnas res habemus cum gigabytarum 32 maximarum magnitudine, et Tarantool parva obiecta tantum cache possunt.

Haec prima ratio, quam cum aliquo calculi capacitate emissam habuimus, satis fuit ad investigationes intelligendas, quod opus esset.
Emendationes ad systema pugnae: failover et scalae
Systema iam in agendo erat, sed in initio aliquid omisit - necesse est nos defectus et scalas addere.
Noster S3 daemon invenit metadata utens protocollo Tarantool. Loco datorum originalium Tarantool constituimus, quod procuratorem iter egit ad petitiones metadata. Ex parte applicationis API fovendo nihil mutavit - continuavit ad accessum datorum protocollo Tarantool utens, sed iter itineris defectivum activam praebere potuit. Hoc est, disponibilitate nodi, mora in mutationibus et defectibus potuimus reprimere, et sic porro. Sed applicationem ipsum non mitigare.

Disce magis quomodo nos implevimus sharding
Proximum est quod solliciti essemus de Sharing. Ratio crescebat, numerus rerum crescebat, et occasiones ulterioris incrementi praebere oportebat.
Redeamus ad schema data: sunt incepta, sunt situlae, mutui sunt et exosculatio. Obiecta sunt haec quae, magna probabilitate, in praevisa futura non crescent unius instantiae limites, sive in volumine, sive in petitionibus. Hoc significat nullum punctum in illis stimulis esse, et nos movisse ad instantiam separatam, quae remanebit illibata. Hoc permittit ut incepta et situla constantius administratio cum sit unum, punctum indissolubile.

Etiam in schemate res sunt quae lineariter crescunt - primo centena milia eorum erant, nunc numerus eorum pluribus billions mensuratur. Talia cum suis partibus in botrum testaceum accipienda erant.

Disposuimus rationem, sed obiecta opus cum situlis opus est: obiectum semper ad certam situlam pertinet, plus ACL opera in situla. Ergo in unaquaque re pervalida, cujusque situlae exemplum umbram tenemus. Praeterea, dum res modificando et quaerendo exsequendo, volumen computare debes ad exosculandum faciendum, ita quodlibet testae calculis exosculationem habet.
Addimus etiam plures tabulas et partes nonnullas;
- redivivus bin ad incepta antiqua delenda quae deleta vel congelata sunt;
- queue in curriculis curriculis, id est, repositionis praecipua opera praestare potest quae in botro agenda sunt;
- lifecycli subsidium - mechanismum quod sinit te laborare cum obiectis et curriculum vitae administrare.

Cum nonnulla notitia shards transtulimus, procuratorem sharding opus erat. Fieri potest ut iter itineris ad hoc munus renuntiem, sed procuratorem sharsium separatum, responsalis tantum pro sharding notitia, permittit te totum iter perduci sine cogitatione de sharding.

Singulatim dicam cur non solutionem paratam sumpserimus, sed functionem consue- tudinem participem facere voluimus.
Videamus quomodo operatur. Praesto habemus 256 shards. Pro unaquaque situla, eligimus range utentes quadam constantia functionis. Simplex est - sicut constantiam functionis uteris ad determinandum an ad unam testae pertineas, initium pervalidum determinas et amplitudinem elige;
f(bucket, shards) = subset
Hoc est, si situlam accipias, dicere potes eam et eius datam semper in certa parte omnium shardorum iacere. Hoc permittit ut influentiam aliquarum sitularum in alios reducere et opus tabulae-reducere queries cum opus est, exempli gratia, obiectis situla enumerare sinit. Ad hoc faciendum, necesse est ut omnia shards ubi res illae conditae sint. Si res in omnibus shards positae essent, quaelibet enumeratio totum systema afficeret, hic autem solum subsecta specifica afficit.
Deinde objectum unumquodque ad certam situlam pertinet, ergo cum ad objectum accessimus, objectum nominatim in certa situla accessimus. Hoc est, functionem rei obiecto definire possumus non ex omnibus syllabis in promptu, sed solum ex parte situlae eius;
f(object, subset) = shard
Obiectum specificum accipimus, non omnes shards illic ut argumenta exercent, sed pars situlae eius - et certam peramplum accipimus.

Ita, sharding effectum est, procurator est sharding. Deinde omne quod reliquum est ex itinere proficisci et datorum metadata ad schedula procuratorem. Exempli gratia, umbram rerum exemplum creare - cum situlam creare, repositionis principalis repraesentativum huius situlae in omnibus lithargyris ubi praesens esset creare debet.

Quomodo effectum resharding
Maximus forsit cum sharding est resharding. Praecipuum erat nobis id sine downtime facere, cum ratio iam in productione esset. Ostendam tibi quomodo problema solverimus utentes exemplo similium problematis cum migratione viva data ab uno in aliud incepto.
Infra schematis nostri botri est, qui euenit post inductam shardingem. Habemus nginx, S3 API, iter, primarium datorum cum inceptis, ineundo ineundo et ipsae shards.

Superius punctum omisi quod in quodam incepto stadio opus elaboratum erat: "Modo aliam facilitatem repono, Icebox, sicut Hotbox, tantum pro notitia frigida". Per se eadem reposita, sed in diversis delata et sine gazophylacio.

Icebox minus quam Hotbox adhibita est, quare satis diu sine ulla schedula processit. Ad extremum eam relinquere decrevimus et Hotbox et Icebox in unum servitium coniungentes, classes repono simpliciter separantes.
Situlas in stormatibus non incidant, facile mergi et moveri poterant, sed clientes facultates tam repositas adhibebant, quae significabant quaestionem cum defectu temporis solvendam esse. Vertere solum et imitari non potuisti. Migrationem pluribus gradibus fecimus.
In primis cum schedulis primariae synchronised. Habuimus Tarantool et cum rem creando hoc facere possemus;
- petitio venit ad situlam datorum ad creandum, exempli gratia in Hotbox;
- Tarantool in alio datorum compescit (hoc casu, Icebox) ut nulla situla talis sit;
- si situla est, datorum dicit creari non posse, et ut existere synchroniszatur.

Situla synchronisation
In facultate reposita, quae omnia notitias recipere putabatur, signum incepta et situla inducta est, ubi hoc obiectum conditum esse dicebat. Reponi potest localiter, id est, in Hotbox, Icebox - tunc nulla notitia ex eo est in repositione nova vel in statu migrationis.
Si consilium vel situla vexillum Migrantium habuit, tum in migratione petitio peracta est primum ad novam tabulam in qua notitia collocaretur, et si ibi non esset, petitiones ad aliud tabularium retractatae sunt.
Deinde commercium switched. Cum API servire possent tam Icebox et Hotbox petitionibus, nos negotiationem sine down tempore commutare potuimus modo exercitus movendo et congruentia viscus in Nginx addendo.
Postquam traffic redirecta est, Nginx et Icebox API removeri potuerunt.
Inde Icebum nginx et S3 API removimus - et omnia operata sunt;

Deinceps processum migrationis globum qui intra datorum operatur - percurrit omnia incepta eorumque situla elemento elemento, Vexillum Migrans eis ponit, notitias transfert et, expleta translatione, vexillum Local ponit.

Post migrationem datam non amplius desideramus veterem tabulam, et reliquas partes systematis veteris removemus, et subsidium migrationis e codice removemus.

Eadem ratione ex veteri repositione ad testas peractae, iisdem principiis adhibitis;
- Notata omnia vasa sicut
Non-sharded. Omnes petitiones earum ad pristinum pervenerunt, reposita insalutato. - Nova situla statim in statum creata sunt
Sharded. - Accipientes singulatim hydrias statuerunt
Migratingdata transtulerunt.
Petitiones ad hoc principium:
- Legitur in novo, in veteri.
- Creamus solum in novis.
- Duobus temporibus renovamus: si in novo non est, illud ex veteri in novum transferimus, id renovamus.
Operantes cum SSL libellorum
In frontend utimur Nginx. In nobis, hoc non est vulgare Nginx, sed OpenResty, Nginx cum LuaJIT auxilio.
Alia pars systematis laborat cum libellorum SSL. In S3 reposita, dominium tuum imponere potes ut ad certam situlam accedas, simpliciter utendo CNAME. Hodie autem sine HTTPS facere non potes: domain tuum proprium testimonium SSL significat.
Ut iam dixi, Nginx est ad libram et terminandum SSL. In nobis, hoc non est vulgare Nginx, sed OpenResty, Nginx cum LuaJIT auxilio.
Hoc nobis satis facillime docebimus nostrum Nginx testimonium edendi arbitrarium. Praeterea opus est ut testimonia dynamice edant (sine necessitate eos in tabella configurationis subcriptio). Utendum est extensio ssl_certificate_by_lua, quod permittit ut libellum de fonte arbitrario directe per TLS handshake legere. Tarantool quoque usi sumus ut certificatorium thesaurum: hoc sinit te exterius libellos administrare et eventus maxime celeres praebet.
A daemone separato etiam effectum est, cuius opus est testimonium reddere regulariter evulgandas quae editae sunt utendo Encrypt.

Quid custodirem, et quid facerem aliter si repositio de integro elaborarem?
Quid ab initio debuerit?
Sharding statim. Resharding satis multam quaestionem effecit. Facile est facere, sed tamen, si incipias incepta quae scalis necessaria sunt, melius est ut botrum lamminis, etiam minimum nodis, statim accipias. Exsequens sharding in initio fere gratis comparatur ad sharificationem inducendam in systematis productionis.
Opus Tarantool per balancers. Nunc statim omnes novas databases ad operandum per librarios coniungimus. Hoc tibi permittit ut munus functionis amplifices et superiorem culpae tolerantiam consequaris.
Autofailover. Omnia instrumenta quae ad autofailover requiruntur instituere velim, cum prima delicta post launch in absentia eius consociata sint. Post experientiam cum S3, omnes fructus sequentes hoc in animo sunt deductae.
Pluma S 3 "Versioning". Initio videbatur id non admodum popularis functionis fuisse. Difficillimum est hanc facultatem in architecturae systematis currentis integrare.
Singula exosculatio. Via exosculatio in systemate nostro bene in principio aedificavimus, sed postea impedire coepit, melius erat eam habere in servitio omnino separato.
Quid est bonum consilium?
Exemplar data. Historia ostendit quod sicut evolvitur servitium, exemplar notitiae Amazonicae satis arcte coniungi, sic lineamenta quae ibi sunt efficere possumus.
Sharding ratio. Eundem ordinem per situlas sustinebimus, quod postulationes ex diversis situlis permittit ut per magnum botrum bene distribuatur.
Using Tarantool. Tarantool multum adiuvit cum incremento ministerii eiusque modificationis: facile nos cum notitia, transmutatione ac repositione laboravimus, sine necessitate ad schedulam emissam ascendere.
Haec fama primum est by Mail.ru Cloud Solutions & Tarantool. Vide alias res gestas subscribunt et denuntiationes in Telegram .
Etiam veterem famam meam de S3 spectare potes aut collegae mei articulum de repositione obstructionum legere.
- .
- .
Source: www.habr.com

