FAQ in architectura et opere VKontakte

Historia creationis VKontakte in Vicipaedia est ab ipso Pavel. Videtur quod omnes eam iam cognoscant. De internis, architectura et structura situs in HighLoad ++ Pavel dixit ad me in MMX. Multi servientes ex tunc emanarunt, sic informationes renovabimus: eam dissecare, interiora eximire, ponderare et artificium VK ex parte technica intueri.

FAQ in architectura et opere VKontakte

Alexey Akulovich (AterCattus) in VKontakte team backend elit. Transumptum huius relationis est collectivum responsum ad interrogationes frequenter interrogandas de operatione suggesti, infrastructure, servientium et commercii inter eos, non autem de evolutione, scilicet. de ferro. Separatim, de databases et quid VK loco habet, de lignis colligendis et de tota inceptis vigilantia. Singula sub incisa.



Plus quam quattuor annos in omnibus officiis ad backend pertinentibus egi.

  • Disci, recondere, processus, distribuere media: video, vivere effusis, audio, imaginibus, documentis.
  • Infrastructura, suggestum, elit adipiscing, tigna, cachulae regionales, CDN, protocollum proprietatis RPC.
  • Integration with external services: dis notificationes, external link parsing, RSS feed.
  • Collegis adiuvandis variis quaestionibus, responsa ad quae in ignotum codicem tribuendum requirunt.

Hoc tempore multa manus habui situs. Hanc experientiam communicare cupio.

General architectura

Omnia, ut mos est, incipit a ministro vel coetu ministrantium qui petitiones accipiunt.

Ante server

A fronte server petitiones acceptat per HTTPS, RTMP et WSS.

HTTPS - Hae petitiones sunt pro versionibus interretialibus principalibus et mobilibus situs: vk.com et m.vk.com, et alii clientes officiales et privati ​​nostri API: clientes mobiles, nuntii. Habemus receptionem RTMP-traffic enim Live transmissionum participantes cum separatis ante servers et WSS— hospites pro Gratis API.

Nam HTTPS et WSS in servers valet nginx. Pro evulgationibus RTMP, nuper ad solutionem nostram mutavimus kivefama autem est extra ambitum. Propter culpam tolerantiae, servientes commonent communes IP inscriptiones et in coetus agunt ut, si quaestio est de servientibus, petitiones usoris non amittant. Pro HTTPS et WSS, iidem servientes negotiatores encrypt ut partem CPU sibi oneris capiant.

Non amplius de WSS et RTMP loquemur, sed tantum de petitionibus vexillum HTTPS, quae cum incepto interreti solent coniungi.

backend

Post frontem solent servientes redire. Procedunt petitiones ut frons servi ab clientibus recipiat.

haec kPHP serversin quo HTTP daemon currit, quia HTTPS iam decrypta est. kPHP est server qui decurrit in prefork exempla: processus domini incipit, fasciculus processus puerilis, transit audientes bases ad eos et processus petitiones eorum. In hoc casu, processus inter singulas petitiones utentis non reprimuntur, sed simpliciter statum suum ad pristinum statum zerum-valorem restituunt - postulatio post petitionem, pro restarting.

onus distribution

Omnes nostri tergum ingentem machinarum piscinam non sunt quae petitionem ullam procedere potest. nos eos in distinctosGenerale, mobile, api, video, choragium... Problema in separato grege machinarum omnes alios non afficit. In quaestionibus cum video, user qui musicam auscultat ne de quaestionibus quidem cognoscet. Quod ad petitionem ut tergum mitteret in fronte secundum config decernitur nginx.

Metrica collectio et rebalancing

Intellegere quot cars debemus habere in singulis coetibus, nos non confidunt QPS. The backends are different, they have different petition, each request has diversitatem complexionem calculandi QPS. Ut wisi enim ad notionem oneris in servo exercemus in CPU et pert ..

Tales habemus servos milia. Uniuscuiusque corporis cultor decurrit globus kPHP ad omnes nucleos redivivus (quia kPHP est una lina).

Contentus Servo

CS or Content Servo est repono. CS ministrator est qui thesauros imaginum facit ac etiam processus imaginum fasciculorum et omnium generum synchronorum curriculorum, quae principale frontispicium ei attribuit.

Decem milia servientium corporis habentium habemus tabulas promptuarias. Users fasciculos fasciculos amant, eos condere et communicare amamus. Aliqui ex his ministris a specialibus pu/pp servientibus clauduntur.

pu/pp

Si tab retiaculum aperuisti in VK, vidisti pu/pp.

FAQ in architectura et opere VKontakte

Quid est pu/pp? Si unum servo post alium claudamus, duae optiones sunt pro discendi et detrahendi fasciculum servo clauso: protinus per http://cs100500.userapi.com/path aut per medium server - http://pu.vk.com/c100500/path.

Pu nomen historicum est pro fascia photographica, et pp est proxy photo. Id est, unus servo est imagines imposuistis, et aliud ad uploading. Nunc non solum imagines onustae, sed nomen servatum est.

Haec servers terminare HTTPS sessionesprocessus ad removendum a repono onus. Etiam, cum fasciculi usoris in his ministris discursum sint, eo melius informatio minus sensitiva de his machinis recondita est. Pro exemplo, HTTPS encryption claves.

Cum machinae ab aliis nostris machinis claudantur, non possumus eis dare "album" externum IPS, et da "griseo". Hanc viam in IP piscina servavimus et machinis ab accessu extrinsecus tutandis praestiti sumus - nihil aliud est IP quam ingredi.

Invicta in communi IPS. Secundum culpam tolerantiae, schema idem operatur - plures servientes physicae communes IP habent, et ferramenta coram illis eligit ubi petitionem mittat. De aliis optionibus postea loquar.

Controversiae punctum est quod in hoc casu hunc pauciores nexus. Si idem IP pluribus machinis - cum eodem exercitu: pu.vk.com vel pp.vk.com, client navigatoris modum habet in numero petitionum simultanearum ad unum exercitum. Sed temporibus ubiquitous HTTP/2, hoc non amplius ita pertinere credo.

Incommodum manifestum est quod ad rationem pertinet sentinam omnes negotiationisque vadit ad repositio, per alium ministratorem. Cum negotiatio per machinis sentinam, non tamen possumus graviora negotiatio sentinare, exempli gratia, video, eodem consilio utentes. Nos eam directe transmittimus - nexum directum separatum pro schedulis separatis nominatim ad videndum. leviora contenta per procuratorem transmittimus.

Emendatam versionem procuratoris haud ita pridem cepimus. Nunc tibi dicam quomodo a communibus differant et cur id sit necessarium.

solis

Mense Septembri 2017, Oraculum, quod ante Solem emerat, ignem ingens numerus sol employees. Affirmari possumus societatem in hoc momento esse desitam. Cum nomen novum de systemate eligendo, administratores nostri memoriam huius societatis tributum pendere decreverunt et novum systema Sat. Apud nos simpliciter eius "soles" appellamus.

FAQ in architectura et opere VKontakte

pp paucas difficultates habebat. Unus IP per group - inefficax cache. Complures servientes corporis commune IP locum habent, nec modus est moderandi quem servo rogatio ibit. Si ergo diversi utentes ad idem fasciculum veniunt, tunc si cella in his servientibus est, tabella in cuiusvis servo cella desinit. Ista ratio valde inefficax est, sed fieri nihil potuit.

Quocirca - contritione pervalida non possumus content, quia non possumus eligere proprium servitorem huius coetus - commune IP habent. Etiam pro quibusdam causis internis habemus non potuit talem institutionem ministrare in regionibus. Stabat solum Petropoli.

Soles mutavimus ratio electionis. Nunc habemus anycast profectus: dynamica fugat, anycast, auto-reprehendo daemonem. Unusquisque server suum IP proprium, sed subnet commune habet. Omnia ita configurantur ut, si unus ministrator deficit, negotiatio per alios eiusdem coetus ipso facto dispergatur. Nunc possibile est certum servo deligere; non vacet cachingcommendatio non patitur.

Pondus firmamentum. Nunc praebere possumus machinas diversarum potentiarum prout opus fuerit instituere, ac etiam, in casu temporariorum problematum, pondera laboris "soli" mutare, ut onus illis minuatur, ut "quiescant" et iterum iterum laborant.

Contentus a Sharding id. Res ridicula de sharding: argumento testa dici solere ut diversi utentes ad eundem fasciculum per eundem "solem" accedant ut cella communis habeant.

Applicationem "Clover" nuper deduximus. Hoc est online quiz in e vivis emissis, ubi hospes interrogat quaestiones et usores respondeat in tempore reali, optiones eligens. In app chat ubi users potest chat. Potest simul coniungere ad passim plus quam C milia hominum. Omnes epistulas scribunt quae ad omnes participes mittuntur, et avatar cum nuntio venit. Si 100 milia hominum pro uno avatar in uno "sol" veniunt, interdum post nubem volvunt.

Ut inrumpationes petitionum eiusdem fasciculi sustineant, certum est genus contenti nos converti in stultum schema, quod lima per omnia quae in regione "soles" patent.

Sol ab intus

Reverse procuratorem in nginx, cache vel in RAM vel in celeriter Optane/NVMe orbis. Exemplum: http://sun4-2.userapi.com/c100500/path - nexum cum "sol", qui in quarta regione, secundae catervae servientis collocatur. Viam tabella claudit, quae corporaliter in servo 100500 iacet.

Cover

Unam nodi adiungimus ad schema architecturae - ambitus cahendi.

FAQ in architectura et opere VKontakte

Infra est tabula layout regional cachessunt circiter XX eorum. Haec loca sunt ubi cella et "soles" sita sunt, quae mercaturam per se capere possunt.

FAQ in architectura et opere VKontakte

Hoc est multimedia contenti caping, nulla usoris notitia hic reponitur - musica, video, imagines.

Determinare regionem usoris, nos colligimus BGP retis praefixis in regionibus nuntiata. In casu defectionis, nos quoque habemus datorum geoiporum parsi si IP praefixis invenire non potuimus. Constituimus regionem per IP usoris. In codice inspicere possumus unam vel plures regiones utentis - ea puncta ad quae proxima est geographica.

Quid opus est?

Nos popularis lima in regione computamus. Numerus est cache regionalis ubi usor sita est, et fasciculus identifier - hoc par et incrementum cum singulis downloadibus accipimus.

Simul daemones - officia in regiones - subinde ad API veniunt et dicunt: “Talis sum et talis cella, da mihi summam tabularum popularium in regione mea quae nondum in me sunt. " API fasciculum imaginum per estimationem digestum liberat, daemon eos inducit, eas in regiones accipit et lima inde tradit. Haec est fundamentalis differentia inter pu/pp et Solem a cacherionibus: per se statim dant tabellam, etsi haec fasciculus non est in cella, et primum fasciculum in se ipsum downloads, deinde illud rursus incipit dare.

In hoc casu dabimus contentus propius ad users et extendit rete onus. Exempli gratia, solum ex Cache Moscuae plus quam 1 Tbit/s per horas apicem distribuimus.

Sed sunt problemata - cache servers non rubber. Super contento populari, interdum non satis est retiacula pro servo separato. Cache nostri servientes 40-50 Gbit/s sunt, sed contentum omnino tale canalem impedit. Movemur ad exsequendum plus quam unum exemplar imaginum popularium in regione. Spero nos finem anni efficiemus.

Architectura generalis inspeximus.

  • Servientes ante id quod petitiones accipiunt.
  • Revocat processus petitiones.
  • Tabulae clusae sunt duobus generibus procuratorum.
  • Tellus purus.

Quid ex hoc schemate deest? Nempe databases in quibus condimus notitia.

Databases seu machinas

Eos non databases, sed machinas - Engines appellamus, quod fere in sensu communi databases non habemus.

FAQ in architectura et opere VKontakte

Haec mensura necessaria est. Hoc factum est quia in 2008-2009, cum VK incrementum popularis explosivum habebat, consilium in MySQL et Memcache omnino laboravit et difficultates fuerunt. MySQL dilectum est ad fragorem et limam corrumpendam, post quam non convalesceret, et Memcache paulatim degradatus est in effectu et silendus erat.

Evenit ut consilium populare magis magisque in promptu haberetur, quod notitias corrumpit, et cella, quae retardatur. His conditionibus difficile est augere consilium. Placuit temptare res criticas rescribere quas in birotas nostras intentus est.

Solutio felix. Hoc faciendi fuit occasio, tum extrema necessitas, quia aliae viae eo tempore non exstiterunt. Fasciculus databases non erant, NoSQL nondum exsistebant, tantum MySQL, Memcache, PostrgreSQL erant - et hoc est.

Universalis operatio. Progressio a turma nostra C tincidunt et omnia constanti modo facta sunt. Nihilominus machinae omnes fere eandem formam in disco scriptam habuere, parametros launch isdem, significationibus eodem modo procedentes, ac fere eadem in extremis condicionibus et quaestionibus egerunt. Cum incremento machinarum opportunum est administratoribus systematis operandi - nullum saepimentum est quod conservari debet, et discere habent quomodo operantur singula datorum tertiae-partium, quae fieri potest ut cito et commode augeatur. numerus eorum.

Genera tormentorum

Manipulus tormentis satis paucis scripsit. Hic sunt quaedam eorum: amicus, innuit, imago, ipdb, epistolae, tabulae, tigna, memcached, meowdb, nuntium, nostradamus, foto, ludi scaenici, pmemcached, sandbox, quaero, repono, amo, opera, ...

Ad unumquodque opus, quod certas notitias structuras seu processuum petitiones atypicas requirit, C turma novum machinam scribit. Cur non.

We have a separate engine memcachedquod est simile regulari, sed cum Nullam suscipit lacus, et non retardet. Non ClickHouse, sed etiam operatur. Praesto seorsum pmemcached - eam pertinax memcachedquae etiam notitias in orbe condere possunt, praeterea quam aptae in RAM, ut notitias cum restarting non amittant. Singulorum operum varia sunt machinamenta: queues, tabulae, copiae - omnia quae instituti nostri requirit.

Botri

Ex codice perspectiva nihil opus est machinas vel databases sicut processus, entia, vel instantia cogitare. Codex speciei cum racemis, machinarum globis operatur. unum genus per botrum portassent. Dicamus botrum esse memcached - machinarum globus iustus est.

Codex notarum non corporis situm, magnitudinem aut numerum ministrantium omnino cognoscere debet. accedit ad botrum utens identificatorio quodam.

Ad hoc laborandum, unum addere debes plura entitatem quae inter codicem et machinas sita est. ineundo.

RPC procuratorio

Proxy connectens busin quo fere totus locus decurrit. Simul habemus nullum servitium inventionis — sed config pro procuratorio isto, qui scit locum omnium botri et omnium stropharum huius botri. Hoc est quod admins faciunt.

Programmatores minime curant quantum, ubi et quid constat - mox ad botrum eunt. Hoc nobis multum concedit. Recepta petitione, procurator requisitionem remittit, sciens unde - hoc ipsum determinet.

FAQ in architectura et opere VKontakte

In hoc casu procurator est punctum tutelae contra servitutis defectum. Si machina aliqua retardat vel inruerit, procurator intellegat et respondeat huic parti clienti. Hoc permittit ut timeout removere - signum machinae respondere non expectat, sed intellegit non operari et aliquo modo aliter se gerere oportere. Codex praeparandus est ad hoc quod databases non semper operantur.

Imprimis implementations

Aliquando adhuc vere volumus habere solutionem qualemcumque inexplicabilis machinae. Eodem tempore placuit non uti procuratorem nostrum praeparatum ad machinamenta specialiter creatum, sed separatum procuratorem ad negotium conficiendum.

Pro MySQL, quod hic et illic adhuc habemus, db-procuratore utimur et pro ClickHouse - Kittenhouse.

Hoc fere sic operatur. Est quidam cultor, currit kPHP, Ite, Python — in universum codicem qui nostro RPC protocollo uti potest. Codex localiter in RPC procuratorem decurrit - singulis ministris ubi signum sita decurrit procuratorem suum localem. Postulanti procurator intelligit quo eundum.

FAQ in architectura et opere VKontakte

Si quis machinam ad aliam ire velit, etiam si vicinus sit, per procuratorem vadit, quia proximus potest esse in alio Mauris interdum. Machinam scire non debet locum aliud quam se ipsum - haec est solutio mensurae nostrae. Sed sane exceptiones sunt :)

Exemplum cuiusdam machinae secundum quam omnes machinis agunt.

memcache.not_found                                = memcache.Value;
memcache.strvalue	value:string flags:int = memcache.Value;
memcache.addOrIncr key:string flags:int delay:int value:long = memcache.Value;

tasks.task
    fields_mask:#
    flags:int
    tag:%(Vector int)
    data:string
    id:fields_mask.0?long
    retries:fields_mask.1?int
    scheduled_time:fields_mask.2?int
    deadline:fields_mask.3?int
    = tasks.Task;
 
tasks.addTask type_name:string queue_id:%(Vector int) task:%tasks.Task = Long;

Hoc est binarium protocollum, cuius artissimum analogum est protobuf. Schema optiones agrorum optionales, typos implicatos - extensiones in scalaribus constructis et inquirit. Omnia secundum hoc protocollo operatur.

RPC super TL super TCP/UDP… UDP?

RPC protocollum habemus ad petitiones perficiendas machinas quae in capite TL schematis decurrit. Haec omnia opera per nexum TCP/UDP. TCP intellegi potest, sed cur saepe UDP opus est?

UDP adjuvat ne quaestio de nexus inter servers ingens numerus. Si quisque server procuratorem RPC habet et generatim ad quamlibet machinam ire potest, tunc decem milia TCP nexus per servo sunt. Est onus, sed frustra. In casu UDP quaestio haec non est.

Non redundans TCP handshake. Haec quaestio typica est: cum novum machinamentum vel novum servo emittitur, plures TCP nexus statim constituuntur. Ad petitiones leves parvas, exempli gratia, UDP payload, omnis communicatio inter codicem et machinam est duos UDP facis: una volat in hac, altera in altera; Unum iter rotundum - et signum responsionem accepit ab machina sine handshake.

Ita, omnia iusta operatur minimo recipis fasciculum iacturam. Protocollum subsidium retransmittentibus et timeoutibus habet, sed si multum amittimus, fere TCP obtinebimus, quod utile non est. Non UDP trans maria abigimus.

Millia talium ministrantium habemus, et ratio eadem est: machinarum fasciculus in singulis corporis ministris constituitur. Plerumque singulae filatae sunt ut quam celerrime sine impedimento currant et solutiones simplicium filorum discribantur. Eodem tempore, nihil certius his tormentis habemus, et multum attenditur assidua notitia repono.

Pertinax notitia repono

Engines scribere binlogs. A binlog fasciculus in fine cuius eventus ob mutationis status vel notitiae additur. Diversis solutionibus aliter dicitur: tigillum binarium; MURUS, AOFsed principium idem est.

Ne machinam totam binlogam per multos annos re-legere, cum restarting, machinas scribant snapshots - current status. Si opus est, primo legent, et deinde ex binlogo lectionem finiunt. Omnes binlogi in eadem forma binarii — secundum TL schema, ita ut admins eas aeque cum suis instrumentis administrare possit. Nulla eget aliquet nisl. Capitis generalis est qui indicat cuius snapshot int, magicae machinae, et quod corpus nulli refert. Difficultas haec est cum machinae quae snapshot notavit.

Principium operationis cito describemus. Est cultor in quo machina currit. Novum binlogum vacuum aperit pro scribendo et eventum scribens ad mutandum.

FAQ in architectura et opere VKontakte

In quovis loco aut ipse scapham accipere statuit aut signum accipit. Servo novum fasciculum creat, totam rem suam in eam scribit, hodiernam binlogam - offset - ad finem tabellae apponit et ulterius scribens pergit. Novus binlog non creatus est.

FAQ in architectura et opere VKontakte

In aliquo puncto, cum machinam silexerit, utrumque binlogum et snapshot in disco erit. Machinam totam snapshot legit et statum in quodam puncto levat.

FAQ in architectura et opere VKontakte

Locum qui tunc erat creatus legit snapshot et magnitudinem binlog.

FAQ in architectura et opere VKontakte

Finem binlog legit ut praesentem statum obtineat et ulteriora eventus scribens pergit. Simplex ratio haec est: omnia secundum hoc operantur machinationes.

Data replicatio

Quam ob rem data replicatio in nostro dicitur-fundatur — in binlog scribimus non pagina aliqua mutationes, sed nimirum mutationem petitiones. Quod retiaculis simillimum venit, leviter immutatum est.

Eadem ratio non solum replicationis, sed etiam creare tergum. Machinam habemus - dominum scribentem scribens ad binlogum. In alio quovis loco ubi admins eam posuit, hic binlog exscriptus est, et illud est - tergum habemus.

FAQ in architectura et opere VKontakte

Si opus fuerit legendi imaginemAd onus legendi reducere CPU, lectio tormenti simpliciter est immissa, quae finem binlogorum legit et haec mandata localiter exequitur.

Hic pigritia est valde parva, et invenire potest quantum ad imaginem pigri post dominum.

Data sharding in RPC procuratorem

Quomodo facit sharding opus? Quomodo intelligit procurator qui botrum testae mitteret? Codex non dicit: "Mitte pro 15 shards!" - Non est hoc factum per procuratorem.

Simplicissimus ordo est firstint - Primus numerus in petitione.

get(photo100_500) => 100 % N.

Hoc exemplum est protocollo texti memcached simplici, at, utique, queries possunt esse implicatae et structae. Exemplum primum numerum sumit in interrogatione et residuo divisae ab botri magnitudine.

Hoc utile est, cum notitias locales unius rei habere volumus. Dicamus 100 esse user vel coetus ID, et volumus omnes notitias unius entis in una testa pro quaestionibus complexis esse.

Si non curamus quomodo petitiones per botrum panduntur, alia optio est - hashing tota testa.

hash(photo100_500) => 3539886280 % N

Nullam etiam obtinemus, reliquam partem divisionis et numeri testae.

Utraque harum optionum tantum opus est, si ad id quod parati sumus, cum magnitudinem botri augemus, eam scindemus vel multiplicato tempore augebimus. Exempli gratia, XVI shards habuimus, satis non habemus, plus cupimus - 16 sine downtime possumus tuto obtinere. Si multiplicationes non multiplicare volumus, tempus erit, quia accurate omnia sine detrimentis non valemus. Haec optiones sunt utiles, sed non semper.

Si opus est addere vel removere aliquem numerum ministrorum, utimur Congruunt hashing in anulo la Ketama. Sed simul, locorum notitiarum penitus amittimus, rogationem in botrum iungi debemus ut unaquaeque pars suam responsionem parvam reddat, et responsa procuratori confundatur.

Sunt super- specialia petitiones. Hoc spectat sicut hoc: RPC procurator petitionem accipit, quae botrus ad ire et testa schedula decernit. Deinde vel scribentes dominos sunt, vel, si botrus replicam habet sustentationem, ad replicam emittit postulatum. Procurator hoc totum facit.

FAQ in architectura et opere VKontakte

Acta publica omnia

Tigna pluribus modis scribimus. Manifestissimum et simplex est scribe omnia ad memcache.

ring-buffer: prefix.idx = line

Clavis est praepositionis - nomen tigillum, linea, et magnitudo huius stipes - numerus linearum. Numerum temere ab 0 ad numerum linearum minus accipimus 1. Clavis in memcache est praepositio cum hoc temere numero concatenata. Servamus truncum lineam et tempus praesens ad valorem.

Cum necesse est omnia legere, nos exequimur Multi Get omnes claves, tempore digestae, et sic in tempore reali producendum trabem obtine. Eo consilio adhibetur, cum opus est ut aliquid in productione reali tempore monstret, nihilque frangat, sine intermissione vel mercatura aliis machinis permittens, sed hic stipes non diu durat.

Pro certa repono lignorum machinam habemus omnia, engine. Hanc ob rem condita est et late in botri numero. Botrus amplissimus novi thesaurorum 600 TB lignorum refertorum.

Machina vetustissima est, racemi iam 6-7 annorum sunt. Difficultates cum ea sunt quas solvere conamur, exempli gratia, ClickHouse ad ligna condere active coepimus.

Tigna colligendis in ClickHouse

Hoc schema ostendit quomodo in machinas ambulamus.

FAQ in architectura et opere VKontakte

Extat codice, qui localiter per RPC ad RPC procuratorem accedit, et intelligit ubi ad machinam eundum sit. Si ligna scribere in ClickHouse velimus, duas partes in hoc schemate mutare necesse est:

  • repone aliquod machinam cum ClickHouse;
  • repone RPC procuratorem qui non potest accedere ClickHouse, cum aliqua solutione quae potest, et per RPC.

Machina simplex est - reponemus cum servo vel botro servientium cum strepita.

Et ire ad ClickHouse, fecimus Kittenhouse. Si directe ex KittenHouse ad ClickHouse eamus, non cope. Etiam sine petitionibus, ex HTTP nexus addit ingentem machinarum numerum. Ad rationem operis, de servo cum ClickHouse loci contra procuratorem attolliturqui scriptus est ita, ut necessariorum voluminum nexus sustinere possit. Potest etiam quiddam notitia in seipso relative certo certius habere.

FAQ in architectura et opere VKontakte

Aliquando non volumus RPC schema in solutionibus non-vexilibus, exempli gratia, in nginx deducendi. Ergo KittenHouse facultatem habet ligna recipiendi per UDP.

FAQ in architectura et opere VKontakte

Si mittens et recipiens ligna in eadem machina operantur, probabilitas amittendi UDP fasciculum intra exercitum localem satis humile est. Compromissum inter necessitatem RPC deducendi in tertia factione solutione et constantia, simpliciter utimur UDP mittens. Ad hoc propositum postea revertemur.

Cras

Duo genera lignorum habemus: ab administratoribus in servientibus collectae et quae ab essulis e codice scriptae sunt. Duo genera metri respondent; ratio et productum.

Ratio metrics

Operatur in omnibus nostris servientibus netdataquae statisticam colligit et eas mittit Graphite Carbon. Ideo ClickHouse pro reposita ratio ponitur, et non Whisper, exempli gratia. Si opus est, protinus legere potes e ClickHouse, vel usu grafana for metrice, graphe et tradit. Ut tincidunt, satis habemus accessum ad Netdata et Grafana.

Product metrics

Multum pro commodo scripsimus. Exempli gratia, copia est functionum ordinariarum quae te permittunt scribere Comites, valores UniqueCount in statisticam, quae alicubi mittuntur amplius.

statlogsCountEvent   ( ‘stat_name’,            $key1, $key2, …)
statlogsUniqueCount ( ‘stat_name’, $uid,    $key1, $key2, …)
statlogsValuetEvent  ( ‘stat_name’, $value, $key1, $key2, …)

$stats = statlogsStatData($params)

Postmodum filtras digerere et copulare possumus et facere omnia quae volumus ex statisticis - graphis construere, canes configurare.

Nos ipsum scribimus multi metrics numerus eventuum ab 600 miliardis ad 1 trillion per diem. Sed eas servare volumus saltem duobus annisintelligere trends in metrics. Omnia simul ponere magnum problema est quod nondum solutum habemus. Dicam tibi quomodo per hosce annos laboravit.

Munera habemus quae his metricis scribunt ad loci memcachead redigendum numerum entries. Semel in brevi tempore localiter deductae stats-daemon omnia monumenta colligit. Deinceps daemon metri in duas ordines ministrantium mergit acta publicaniquae aggregata mutant ex fasciculo machinarum nostrarum, ut lavacrum post eas non moriatur.

FAQ in architectura et opere VKontakte

Si opus sit, protinus ad collectores lignarios scribere possumus.

FAQ in architectura et opere VKontakte

Sed scriptura e codice directe ad collectores, praeteriens stas-daemom, solutio male scalabilis est quia onus decumanum auget. Solutio apta tantum est si aliqua de causa memcache statorum daemonum in machina tollere non possumus, vel ingruat et directe ivimus.

Deinde, stipites collectores merge statisticae in meowDB - Haec nostra datorum est, quae etiam metricas condere potest.

FAQ in architectura et opere VKontakte

Inde colligere possumus excerpta e codice binaria "prope-SQL".

FAQ in architectura et opere VKontakte

experimentum

Aestate MMXVIII, hackathon internam habuimus, et idea accessit ut conetur partem rubram schematis reponere cum aliquo quod metrica in strepita reponunt. Tigna in ClickHouse habemus - cur non eam temptas?

FAQ in architectura et opere VKontakte

Consilium habuimus qui acta per KittenHouse scripsit.

FAQ in architectura et opere VKontakte

constituimus adde aliud "Domus" in tabulaquae in forma metrica prorsus recipiet, ut noster codex scribit per UDP. Tum haec *Domus eas vertit in insertas, sicut tigna, quae KittenHouse intelligit. Has tabulas perfecte tradere potest ut strepita, quae legere possit.

FAQ in architectura et opere VKontakte

Consilium cum memcache, stats-daemon et collectoribus datorum, hoc uno reponitur.

FAQ in architectura et opere VKontakte

Consilium cum memcache, stats-daemon et collectoribus datorum, hoc uno reponitur.

  • Est hic epistolae e codice, qui in StatsHouse localiter scriptus est.
  • StatsHouse metrica scribit UDP, iam conversa in SQL inserta, KittenHouse in batches.
  • KittenHouse mittit ad ClickHouse.
  • Si eas legere velimus, illos statsHouse praetereuntes legamus - directe ex strepita utens regularis SQL.

Numquid adhuc? experimentumsed placet quomodo eveniat. Si problemata cum schemate figamus, fortasse omnino vertas erit. Personaliter, ut spero.

ratio non salvat ferrum. Paucioribus ministris opus est, statorum-daemonum et index publicanorum localium non opus est, sed strepita servientium ampliorem requirit quam qui in schedula hodierna. Paucioribus servientibus opus est, sed carior et potentior esse debent.

Deploy

Primum videamus in PHP instruere. In developing sumus ad: usus GitLab и TeamCity for instruere. Rami progressionis in ramum magistri immerguntur, a magistro ad probationem in scaenas merguntur et in productionem choragii mittuntur.

Antequam instruere, ramus productio currentis et prior sumuntur, et fasciculi diff in illis considerantur - mutationes: creata, deleta, mutata. Haec mutatio in binlogo peculiaris machinae exemplaris descripta est, quae celeriter mutationes toti servitori classi nostrae replicare potest. Quod hic adhibetur, non directe exscribend relator replicatioquando scilicet aliquis mutat proximos suos ad proximos, et sic de aliis. Hoc tibi permittit ut codicem in decem et unitatibus secundorum per totam classem renovare possis. Cum mutatio loci ad imaginem pervenerit, haec inaequaliter ad suum applicat loci lima ratio. Revolvitur etiam secundum eandem rationem.

Nos quoque kPHP multam explicamus et eam etiam suam evolutionem habet ad ex icone supra. Cum hoc HTTP servo binariiergo diss - emissio binarii pondera centena MB producere non possumus. Ergo alia optionis hic est - versio scribitur to . binlog copyfast. Cum singulis struunt auget, et in reverti auget. Version replicatur ad servers. Loci librarii vident novam versionem binlogum inisse, eodemque rumore replicationem sibi postremam versionem binarii sibi sumunt, sine servitore domini nostri infatigabili, sed onus trans retia diligenter expandentes. quid sequitur? gratus relaunch ad novam versionem.

Nostris enim tormentis, quae etiam per se binarii sunt, schema est simillimum;

  • git dominum ramus;
  • binarii in .deb;
  • versio scribitur to binlog copyfast;
  • servientibus replicatur;
  • nova servo .depe extrahit;
  • dpkg i*;
  • venuste relaunch to new version.

Discrimen est quod binarius noster in archivo sarcinad est .debEt cum flare dpkg i* ponuntur in systemate. Cur kPHP explicatur ut binarii, et machinae ut dpkg explicantur? Contigit hoc modo. Operatur - noli tangere.

Utile links:

Alexey Akulovich unus est ex iis qui, ut partem Committee Programmatis, adiuvat PHP Russia die 17 mensis Maii fiet maximus eventus pro tincidunt PHP recentioribus temporibus. Vide quid frigidum PC habemus, quid loquentium (duo ex eis PHP nucleum explicant!) - videtur simile quiddam non deesset si PHP scriberes.

Source: www.habr.com

Add a comment