Pozdravljeni vsi skupaj. Spodaj je prepis .
– sistem za spremljanje različnih sistemov in storitev, s pomočjo katerega lahko sistemski skrbniki zbirajo informacije o trenutnih parametrih sistemov in nastavijo opozorila za prejemanje obvestil o odstopanjih v delovanju sistemov.
Poročilo bo vsebovalo primerjavo и — projekti za dolgoročno hrambo metrike Prometheus.



Najprej vam bom povedal o Prometeju. To je nadzorni sistem, ki zbira metrike iz določenih ciljev in jih shrani v lokalno shrambo. Prometheus lahko beleži meritve v oddaljeno shrambo in lahko ustvarja opozorila in pravila za snemanje.

Omejitve Prometheusa:
- Nima pogleda globalne poizvedbe. To je, ko imate več neodvisnih primerkov prometheusa. Zbirajo meritve. In želite poizvedovati na vrhu vseh teh meritev, zbranih iz različnih primerkov prometheusa. Prometej tega ne dovoli.
- Pri prometheusu je zmogljivost omejena na samo en strežnik. Prometheus se ne prilagaja samodejno na več strežnikih. Svoje cilje lahko samo ročno razdelite med več Prometheusov.
- Obseg metrik v Prometheusu je omejen na samo en strežnik iz istega razloga, ker se ne more samodejno prilagoditi več strežnikov.
- V Prometheusu ni tako enostavno organizirati varnosti podatkov.

Rešitve za te težave/izzive?
Rešitve so:
Vse te rešitve so namenjene oddaljenemu shranjevanju podatkov, ki jih zbira Prometheus. Težavo oddaljenega shranjevanja iz prejšnjega diapozitiva rešujejo na različne načine. V tej predstavitvi bom govoril samo o prvih dveh rešitvah: и .
Prvič podatek o pojavil s strani . Tam je opisana arhitektura in kako deluje.

Thanos vzame podatke, ki jih je Prometheus shranil na lokalni disk, in jih kopira v S3, na ali v drugo shrambo predmeta.

Tako Thanos ponuja pogled globalne poizvedbe. Podatke, shranjene v objektni shrambi, lahko poizvedujete iz več primerkov Prometheus.

Thanos podpira PromQL in .

Thanos uporablja kodo Prometheus za shranjevanje podatkov.

Thanos razvijajo isti razvijalci kot Prometheus.
na . Tukaj , kjer smo prvič govorili o .

VictoriaMetrics prejema podatke od več prometejev protokol, ki ga podpira Prometheus.

VictoriaMetrics ponuja pogled globalne poizvedbe, saj lahko več primerkov Prometheus zapiše podatke v en VictoriaMetrics. V skladu s tem lahko izvajate poizvedbe po vseh teh podatkih.

VictoriaMetrics podpira tudi, kot je Thanos, PromQL in API za poizvedovanje Prometheus.

Za razliko od Thanosa je izvorna koda VictoriaMetrics napisana iz nič in je optimizirana za hitrost in porabo virov.

VictoriaMetrics za razliko od Thanosa skalira navpično in vodoravno. Jejte , ki se spreminja navpično. Začnete lahko z enim procesorjem in 1 GB pomnilnika ter postopoma povečate na stotine procesorjev in 1 TB pomnilnika. VictoriaMetrics lahko uporablja vse te vire. Njegova zmogljivost se bo povečala za približno 100-krat v primerjavi z 1-jedrnim sistemom.

Zgodovina Thanosa se je začela novembra 2017, ko se je pojavila prva javna zaveza. Pred tem je bil Thanos razvit interno .

Junija 2019 je izšla prelomna izdaja 0.5.0, v kateri protokol. Odstranjen je bil iz Thanosa, ker se ni dobro izkazal. Groča Thanos pogosto ni delovala pravilno, vozlišča so bila z njo napačno povezana zaradi protokola ogovarjanja. Zato smo se odločili, da ga odstranimo od tam. Mislim, da je to prava odločitev.

Istega junija 2019 so poslali številko prijave в .

In po nekaj mesecih je bil Thanos sprejet , ki vključuje Prometheus, Kubernetes in druge popularne projekte.

Januarja 2018 se je začel razvoj VictoriaMetrics.

Septembra 2018 sem prvič javno omenil VictoriaMetrics.

Decembra 2018 je bila objavljena različica z enim vozliščem.

Maja 2019 viri različic z enim vozliščem in gruče.

Junija 2019 smo tako kot Thanos oddali prijavo na fundacijo CNCF pod št . Prijavili smo se en dan pred prijavo Thanosa.

A na žalost tam še vedno nismo sprejeti. Potrebna pomoč skupnosti.

Oglejmo si najpomembnejše diapozitive, ki prikazujejo arhitekturo Thanosa in VictoriaMetrics.

Začnimo s Thanosom. Rumene komponente so komponente Prometheus. Vse ostalo so komponente Thanosa. Začnimo z najpomembnejšo komponento. Thanos Sidecar je komponenta, ki je nameščena poleg vsakega Prometheusa. Podatke Prometheus naloži iz lokalnega pomnilnika v S3 ali drugo Object Storage.
Obstaja tudi komponenta, imenovana Thanos Store Gateway, ki lahko prebere te podatke iz Object Storage na dohodne zahteve Thanos Query. Thanos Query implementira PromQL in Prometheus API. To pomeni, da je od zunaj videti kot Prometej. Prejme poizvedbe PromQL, jih pošlje v Thanos Store Gateway, Thanos Store Gateway pridobi potrebne podatke iz Object Storage in jih pošlje nazaj.
Toda podatke v Object Storage shranjujemo brez zadnjih dveh ur zaradi funkcije implementacije Thanos Sidecar, ki ne more naložiti zadnjih dveh ur v Object Storage S3, ker Prometheus še ni ustvaril datotek za ti dve uri v lokalni shrambi.
Kako ste se odločili, da se temu izognete? Thanos Query poleg zahtev Thanos Store Gateway pošilja vzporedne zahteve vsakemu Thanos Sidecar, ki se nahaja poleg Prometheusa.
Thanos Sidecar pa posreduje zahteve naprej Prometheusu in pridobi podatke za zadnji dve uri.
Poleg teh komponent obstaja tudi izbirna komponenta, brez katere Thanos ne bo deloval dobro. To je Thanos Compact, ki je odgovoren za združevanje majhnih datotek na Object Storage v večje datoteke, ki jih je sem naložil Thanos Sidecars. Thanos Sidecar tja naloži podatkovne datoteke v dveh urah. Te datoteke, če niso združene v večje datoteke, lahko njihovo število zelo močno naraste. Več kot je takšnih datotek, več pomnilnika potrebuje Thanos Store Gateway, več virov je potrebnih za prenos podatkov po omrežju, metapodatkov. Thanos Store Gateway postane neučinkovit. Zato je treba pognati Thanos Compact, ki združuje majhne datoteke v večje, da je takih datotek manj in da se zmanjšajo stroški na Thanos Store Gateway.
Obstaja tudi taka komponenta, kot je Thanos Ruler. Izvaja opozorilna pravila Prometheus in lahko ovrednoti pravila snemanja Prometheus, da zapiše podatke nazaj v Object Storage. Toda ta komponenta ni priporočljiva, ker... On .
To je preprosta shema Thanosa.

Zdaj pa jo primerjajmo s shemo VictoriaMetrics.
VictoriaMetrics ima 2 različici: različico z enim vozliščem in različico v gruči. Eno vozlišče deluje na enem računalniku. Eno vozlišče nima teh komponent, samo eno binarno. Ta dvojiška datoteka na diapozitivu je videti kot ta kvadrat. Vse, kar je znotraj kvadrata, je vsebina binarne datoteke za različico z enim vozliščem. Ni ti treba vedeti zanj. Samo zaženete dvojiško datoteko in vse deluje za nas.
Različica grozda je bolj zapletena. V njem so tri različne komponente: vmselect, vminsert in vmstorage. Iz njihovega imena bi moralo biti razvidno, kaj počne vsak od njih. Komponenta Insert sprejema podatke v različnih formatih: od API-ja za oddaljeno pisanje Prometheus, protokola Influx line, protokola Graphite in protokola OpenTSDB. Komponenta Insert jih sprejme, razčleni in razdeli med obstoječe pomnilniške komponente, kjer so podatki že shranjeni. Komponenta Select pa sprejema poizvedbe PromQL. Izvaja , kot tudi API za poizvedovanje Prometheus in se lahko uporablja kot zamenjava za Prometheus v Grafani ali drugih odjemalcih API Prometheus. Select sprejme zahtevo promql, jo razčleni, prebere potrebne podatke za izvedbo te zahteve iz vozlišč za shranjevanje, obdela te podatke in vrne odgovor.

Primerjajmo kompleksnost namestitve Thanosa in VictoriaMetrics.

Začnimo s Thanosom. Preden začnete delati s Thanosom, morate v Object Storage ustvariti vedro, kot je S3 ali GCS, da lahko Thanos Sidecar vanj zapisuje podatke.

Potem morate za vsakega Prometheusa namestiti Thanos Sidecar. Pred tem se morate spomniti, da onemogočite stiskanje podatkov v Prometheusu. Zgoščevanje podatkov občasno stisne podatke v lokalni shrambi Prometheus, da zmanjša porabo virov.
Ko namestite Thanos Sidecar na vaš Prometheus, morate onemogočiti to stiskanje podatkov, ker Thanos Sidecar ne deluje pravilno z omogočenim zgoščanjem podatkov. To pomeni, da vaš Prometheus začne shranjevati podatke v dvournih blokih in preneha z združevanjem teh blokov v večje. V skladu s tem, če naredite poizvedbe, ki presegajo trajanje zadnjih dveh ur, potem ne bodo delovale tako učinkovito, kot bi lahko delovale, če bi bilo zgoščevanje podatkov omogočeno.

Zato Thanos priporoča zmanjšanje časa hrambe podatkov v lokalni shrambi na 6-8 ur, da bi zmanjšali režijske stroške velikega števila majhnih blokov.
Ko namestite Thanos Sidecar, morate namestiti dve komponenti za vsako Object Storage Bucket. To sta Thanos Compactor in Thanos Store Gateway.

Po tem morate namestiti Thanos Query in ga konfigurirati tako, da se lahko poveže z vsemi Thanos Store Gateways, ki jih imate, in se lahko poveže tudi z vsemi Thanos Sidecars.
Tukaj lahko pride do manjše težave.

Konfigurirati morate zanesljivo in varno povezavo Thanos Query s temi komponentami. In če se vaš Prometheus nahaja v različnih podatkovnih centrih ali v različnih VPC-jih, so povezave z njimi od zunaj prepovedane. Da pa Thanos Query deluje, morate tam nekako konfigurirati povezavo in ugotoviti morate način.
Če imate veliko takšnih podatkovnih centrov, potem se ustrezno zmanjša zanesljivost celotnega sistema. Ker mora Thanos Query nenehno vzdrževati povezave z vsemi Thanos Sidecars, ki se nahajajo v različnih podatkovnih centrih. Za vsako dohodno zahtevo bo preusmeril zahteve na vse Thanos Sidecars. Če je povezava prekinjena, boste prejeli nepopoln nabor podatkov ali pa boste prejeli odgovor »gruča ne deluje«.

V VictoriaMetrics je vse nekoliko preprostejše. Za različico z enim vozliščem morate samo zagnati eno binarno datoteko in vse deluje.

V različici grozda je dovolj, da zaženete vse zgornje tri vrste komponent v poljubni količini ali uporabite za avtomatizacijo zagona komponent v Kubernetesu. Načrtujemo tudi izdelavo operaterja Kubernetes. Tabela Helm ne zajema nekaterih primerov in vam omogoča, da se ustrelite v nogo. Na primer, omogoča zmanjšanje števila vozlišč za shranjevanje, kar bo povzročilo izgubo podatkov.

Ko zaženete eno binarno različico ali različico v gručah, morate samo dodati Prometheus v konfiguracijo tako da začne zapisovati podatke vzporedno v lokalno shrambo in oddaljeno shrambo. Kot lahko vidite, bi morala ta konfiguracija delovati veliko bolj zanesljivo v primerjavi s konfiguracijo Thanosa. Ni nam treba vzdrževati povezave od VictoriaMetrics do vseh Prometheusov, ker se Prometheusi sami povezujejo z VictoriaMetrics in prenašajo podatke.

Razmislimo o podpori Thanosa in VictoriaMetrics.

Thanos mora spremljati Sidecar, da se prepriča, da ne preneha nalagati podatkov v Object Storage. Prenos teh podatkov lahko ustavijo zaradi napak pri prenosu, na primer vaša omrežna povezava z Object Storage je začasno prekinjena ali pa Object Storage začasno ni na voljo. Thanos Sidecar bo to opazil v tem trenutku, prijavil napako, se lahko zruši in preneha delovati. Če tega ne spremljate, boste prenehali prenašati podatke v Object Storage. Če čas hrambe mine (priporočeno 6-8 ur), boste izgubili podatke, ki niso končali v Object Storage.

Kompaktorji Thanos lahko prenehajo delovati zaradi . Kompaktorji vzamejo podatke iz Object Storage in jih združijo v večje dele podatkov. Ker kompaktorji niso sinhronizirani s Sidecars, se lahko zgodi naslednje: Sidecar še ni imel časa dokončati bloka, Compactor se odloči, da je bil ta blok v celoti napisan. Compactor ga začne brati. Ne prebere bloka v celoti in preneha delovati. Glej podrobnosti .

Store Gateway lahko vrne nedosledne podatke zaradi tekmovanj med Compactor in Sidecars. Enako se zgodi tukaj, ker Store Gateway ni na noben način sinhroniziran s Compactors in Sidecars. V skladu s tem se lahko pojavijo pogoji tekmovanja, ko Store Gateway ne vidi dela podatkov ali vidi nepotrebne podatke.

Komponenta poizvedbe v Thanosu privzeto vrne delni rezultat, če nekateri Sidecars ali Store Gateways trenutno niso na voljo. Prejeli boste del podatkov in sploh ne boste vedeli, da niste prejeli vseh podatkov. Tako deluje privzeto. V podobni situaciji VictoriaMetrics vrne označene podatke kot delne.

Za razliko od Thanosa VictoriaMetrics redko izgubi podatke. Tudi če je povezava od Prometheusa do VictoriaMetrics prekinjena, to ni problem, saj Prometheus še naprej beleži dohodne nove podatke v Write Ahead Log, katerega velikost je 2 uri. Če obnovite povezavo z VictoriaMetrics v dveh urah, vaši podatki ne bodo izgubljeni. Prometej .

Za razliko od Thanosa, ki zapiše podatke v shrambo objektov šele po dveh urah, Prometheus samodejno replicira podatke z uporabo protokola za oddaljeno pisanje v oddaljeno shrambo, kot je VictoriaMetrics. Ne bojite se izgube lokalnega prostora za shranjevanje v Prometheusu. Če je nenadoma izgubil lokalni pomnilnik, potem boste v najslabšem primeru izgubili zadnje sekunde podatkov, ki niso imeli časa za snemanje v oddaljenem pomnilniku.

Kubernetes samodejno upravlja gručo, za razliko od Thanosa. Za razliko od komponent gruče VictoriaMetrics je težko postaviti vse komponente Thanosa v eno gručo Kubernetes.

VictoriaMetrics ima zelo preprosto posodobitev na novo različico. Samo zaustavite VictoriaMetrics, posodobite binarne datoteke in ga zaženite. Ko se zaustavijo prek signala SIGINT, vse binarne datoteke VictoriaMetrics izvedejo natančno zaustavitev. Pravilno shranijo potrebne podatke, pravilno zaprejo dohodne povezave, da ne izgubijo ničesar. Tako pri nadgradnji ne boste izgubili ničesar.

VictoriaMetrics omogoča zelo enostavno razširitev gruče. Samo dodajte potrebne komponente in nadaljujte z delom.

O pasteh v Thanosu in VictoriaMetrics.

Thanos ima naslednje pasti. Prometheus mora shraniti podatke za zadnji dve uri. Če se izgubijo, jih boste popolnoma izgubili, saj še niso imeli časa za pisanje v Object Storage, kot je S3.

Komponenta Store Gateway in komponenta kompaktorja lahko zahtevata veliko pomnilnika za delo z velikim Object Storageom, če je tam shranjenih veliko majhnih datotek. Večje kot je število in velikost datotek, več prehoda za shranjevanje in kompaktnega RAM-a je potrebnih za shranjevanje metainformacij. Thanos ima veliko težav glede tega .

Thanos se oglašuje v neskončnem obsegu s količino Prometheusa, ki ga imate. To dejansko ni res. Ker gredo vse zahteve skozi komponento Query, ki mora hkrati anketirati vse komponente Store Gateway in vse komponente Sidecar, potegniti podatke od tam in jih nato predhodno obdelati. Očitno je hitrost zahteve omejena z najpočasnejšo šibko povezavo, najpočasnejšim prehodom trgovine ali najpočasnejšim Sidecarjem.
Te komponente so lahko neenakomerno obremenjene. Na primer, imate Prometheus, ki zbira milijone meritev na sekundo. In tu je Prometheus, ki zbira na tisoče metrik na sekundo. Prometheus, ki zbira na milijone metrik na sekundo, veliko bolj obremeni strežnik, na katerem teče. V skladu s tem Sidecar tam deluje počasneje. In na splošno tam vse deluje počasi. In komponenta poizvedbe bo zelo počasi črpala podatke od tam. Skladno s tem bo delovanje vaše celotne gruče omejeno s tem počasnim Sidecarjem.

Thanos privzeto daje delne podatke, če nekateri Sidecars in bodisi Store Gateway niso na voljo. Na primer, če so vaši Sidecars razpršeni po vsem svetu v različnih podatkovnih centrih, se verjetnost prekinitve povezave in nerazpoložljivosti komponent močno poveča. V skladu s tem boste v večini primerov prejeli delne podatke, ne da bi se tega sploh zavedali.

VictoriaMetrics ima tudi pasti. Prva past je možnost, ki omejuje količino RAM-a, uporabljenega za predpomnilnik VictoriaMetrics. Privzeto je enako 60 % RAM-a na računalniku, kjer se izvaja VictoriaMetrics, ali 60 % RAM-a sklopa VictoriaMetrics v Kubernetesu.
Če to vrednost spremenite nepravilno, lahko uničite delovanje VictoriaMetrics. Če na primer nastavite prenizko vrednost, se podatki morda ne bodo več prilegali v predpomnilnik VictoriaMetrics. Zaradi tega bo morala dodatno delati in obremenjevati procesor in disk. Če naredite to možnost preveliko, se poveča, prvič, verjetnost, da se bo VictoriaMetrics zrušil zaradi napake zmanjkanja pomnilnika, in drugič, to bo vodilo do dejstva, da bo v pomnilniku operacijskega sistema ostalo zelo malo RAM-a za predpomnilnik datotek. In VictoriaMetrics se za delovanje zanaša na predpomnilnik datotek. Če je premalo, se lahko obremenitev diska močno poveča. Zato nasvet: ne spreminjajte parametra, razen če je to nujno potrebno.

Druga možnost. To je retentionPeriod – obdobje, ki je privzeto nastavljeno na 1 mesec. To je čas, v katerem VictoriaMetrics shranjuje podatke. Po tem obdobju VictoriaMetrics izbriše podatke.
Veliko ljudi izvaja VictoriaMetrics brez tega parametra in beleži podatke en mesec. In potem vprašajo: zakaj so izginili podatki za prejšnji mesec? Ker je privzeto obdobje hrambe 1 mesec. Zato morate poznati in nastaviti pravilno RetentionPeriod.

Oglejmo si edinstvene lastnosti.

Thanos ima funkcijo, imenovano znižanje vzorčenja: 5-minutne in urne intervale, ki pogosto . Če poguglate in pogledate njihovo težavo na githubu, je veliko težav povezanih s tem zmanjševanjem vzorčenja, da včasih ne deluje pravilno ali ne deluje, kot pričakujejo uporabniki.

Thanos ima deduplikacijo podatkov za pare Prometheus HA. Ko dva Prometheja zbereta iste metrike iz istih ciljev in jih Thanos shrani v Object Storage. Thanos lahko pravilno odstrani podvojitve teh podatkov, za razliko od VictoriaMetrics.

Thanos ima opozorilno komponento, ki je bila v shemi Thanosa. Ampak njega .

Thanos ima to prednost, da imata Thanos in Prometheus isto kodo. Thanosa in Prometheusa razvijajo isti razvijalci. Z izboljšavami Thanosa ali Prometheusa zmaga druga stran.

Glavna značilnost VictoriaMetrics je MetricsQL. To so razširitve VictoriaMetrics za PromQL, o katerih sem govoril na prejšnjem velikem spremljanju.

VictoriaMetrics podpira nalaganje podatkov z uporabo številnih različnih protokolov. VictoriaMetrics ne more sprejemati samo podatkov iz Prometheusa, temveč tudi prek protokolov Influx, OpenTSDB in Graphite.

Podatki VictoriaMetrics zavzamejo veliko manj prostora v primerjavi s Thanosom in Prometheusom.
Če snemate resnične podatke, uporabniki govorijo o 2-5-kratnem zmanjšanju velikosti podatkov na disku v primerjavi s Prometheusom in Thanosom.

Druga prednost VictoriaMetrics je, da je optimiziran za hitrost.

Poglejmo stroške infrastrukture.

Ena od prednosti Thanosa je, da podatke shranjuje v objektno shrambo, kar je relativno poceni.
Pri shranjevanju podatkov v shrambo objektov morate plačati za operacije zapisovanja in branja podatkov (10 USD na milijon operacij). Ko zapisujete podatke v shrambo objektov, plačate svoje stroške gostovanja za nalaganje podatkov v internet; če vaša gruča ni v AWS, je tam brezplačno. Ko berete podatke, plačate med 10 in 230 USD na 1 TB. To je lahko pomembno, če pogosto poizvedujete po zgodovinskih podatkih iz gruče Thanos.

Za gručo Thanos morate plačati strežnike za komponente Compact, Store Gateway, Query, ki zahtevajo veliko pomnilnika, in CPE za velike količine podatkov.

VictoriaMetrics ima naslednje stroške. Če shranjujete podatke na diske GCE HDD, potem znaša 40 USD za 1 TB. Za VictoriaMetrics zadostujejo navadni trdi diski, ne potrebujejo se SSD diski, ki stanejo petkrat dražje. VictoriaMetrics je optimiziran za HDD.

VictoriaMetrics zahteva strežnike za komponente: bodisi komponente z enim vozliščem bodisi komponente v gruči, ki za razliko od komponent Thanos zahtevajo veliko manj CPU in RAM-a – in bodo temu primerno cenejše.

Primeri izvedbe.

Thanos ima primer implementacije v Gitlabu. Gitlab v celoti deluje na Thanosu. A tam ni vse tako gladko. Če jih pogledate , potem lahko vidite, da imajo nenehno nekaj : Ni dovolj pomnilnika za komponente Store Gateway ali Query. Nenehno morajo povečevati količino pomnilnika.
Zaradi tega se povečajo stroški reševanja teh problemov.
Druga izvedba, ki bo morda uspešnejša, je podjetje Improbable, ki je začelo razvijati Thanosa. Objavili so izvorno kodo Thanosa. Improbable je podjetje, ki razvija motorje za igre.

VictoriaMetrics ima primere javne implementacije:
- graditelj spletnega mesta wix.com
- Adidas uvaja VictoriaMetrics in se je celo predstavil na zadnjem PromConu 2019
- TrafficStars - oglasno omrežje
- Seznam.cz je priljubljen češki iskalnik.
In potem so bila podjetja brez imena, ki jih zdaj ne morem poimenovati. Niso privolili.
- Eden glavnih razvijalcev iger. Večje kot im Neverjetno.
- Glavni razvijalec grafične programske opreme.
- Velika ruska banka.
- Evropski proizvajalec vetrnih turbin, ki je uspešno testiral VictoriaMetrics. Ta proizvajalec uvaja VictoriaMetrics za spremljanje podatkov, zbranih iz vetrnih turbin, s hitrostjo 50 vzorcev na sekundo na senzor. Vsaka vetrna turbina ima več sto senzorjev. Imajo več sto vetrnih turbin.
- Ruske letalske družbe, ki želijo implementirati VictoriaMetrics, a še vedno ne morejo. Z njimi smo v fazi pogodbe.
Sklepi.
VictoriaMetrics in Thanos rešujeta podobne težave, vendar na različne načine:
- Pogled globalne poizvedbe
- horizontalno skaliranje
- samovoljno zadrževanje

Hvala.
Čakamo vas pri nas .

V anketi lahko sodelujejo samo registrirani uporabniki. , prosim.
Kaj uporabljate kot dolgoročno shrambo za Prometheus?
35,3%Thanos6
0,0%Cortex0
0,0%M3DB0
41,2%VictoriaMetrics7
23,5%drugo4
Glasovalo je 17 uporabnikov. 16 uporabnikov se je vzdržalo.
Vir: www.habr.com
