Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê

Îro, ji bilî koda monolîtîk, projeya me bi dehan mîkroxizmet hene. Pêdivî ye ku her yek ji wan were şopandin. Bi karanîna endezyarên DevOps kirina vê astek wusa pirsgirêk e. Me pergalek çavdêriyê pêşxistiye ku wekî karûbarek ji bo pêşdebiran dixebite. Ew dikarin serbixwe metrîkan di pergala çavdêriyê de binivîsin, wan bikar bînin, li ser bingeha wan tabloyan ava bikin, û hişyariyên ku dê gava ku bigihîjin nirxên bordûmanê werin destnîşan kirin bi wan ve girêdin. Ji bo endezyarên DevOps, tenê binesaz û belge.

Ev nivîs ji axaftina min a bi me re ye beşan li RIT ++. Gelek kesan ji me xwestin ku em ji wir versiyonên nivîsê yên raporan çêbikin. Ger hûn li konferansê bûn an li vîdyoyê temaşe bikin, hûn ê tiştek nû nebînin. Û her kesê din - bi xêr hatî pisikê. Ez ê ji we re vebêjim ka em çawa gihîştin pergalek wusa, ew çawa dixebite û em çawa plan dikin ku wê nûve bikin.

Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê

Rabirdû: pîlan û plan

Em çawa gihîştin pergala çavdêriya heyî? Ji bo bersiva vê pirsê, divê hûn biçin 2015. Wê demê ev xuya bû:

Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê

Nêzî 24 noqteyên me yên ku ji çavdêriyê berpirsyar bûn hebûn. Komek tacên cihêreng, nivîsar, şeytan hene ku bi rengekî tiştek çavdêrî dikin, peyaman dişînin, û fonksiyonan pêk tînin. Em difikirîn ku her ku em pêşde biçin, dê pergalek weha kêm bibe. Ti wateya pêşxistina wê tune: ew pir giran e.
Me biryar da ku em wan hêmanên çavdêriyê yên ku em ê biparêzin û pêş bixin û yên ku em ê dev jê berdin hilbijêrin. 19 kes bûn.Tenê grafît, aggregator û Grafana wek dashboard mabûn. Lê pergala nû dê çawa xuya bike? Welî evê:

Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê

Me depoyek metrîkê heye: ev grafît in, ku dê li ser ajokarên SSD-ya bilez bingeh bibin, ev ji bo metrîkan hin komker in. Paşê - Grafana ji bo nîşandana tabloyan û Moira ji bo hişyarkirinê. Me jî xwest sîstemeke lêgerîna anomaliyan pêş bixin.

Standard: Şopandina 2.0

Planên di sala 2015an de wisa xuya dikirin. Lê me neçar ma ku ne tenê binesaz û xizmet bi xwe, lê her weha belgeyên wê jî amade bikin. Me ji xwe re standardek pargîdanî pêşxistiye, ku em jê re dibêjin çavdêrîkirin 2.0. Pêdiviyên pergalê çi bûn?

  • hebûna berdewam;
  • navbera hilanîna metrics = 10 çirke;
  • hilanîna sazkirî ya metrîk û tabloyan;
  • SLA > 99,99%
  • berhevkirina metrîkên bûyerê bi navgîniya UDP (!).

Me hewceyê UDP bû ji ber ku me herikînek mezin a seyrûsefer û bûyeran heye ku metrîkan çêdike. Ger hûn wan bi yekcarî di nav grafît de binivîsin, hilanînê dê hilweşe. Me ji bo hemî pîvanan pêşgiriyên asta yekem jî hilbijart.

Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê

Her yek ji pêşgiran hin taybetmendî hene. Metrîkên ji bo pêşkêşker, toran, konteynir, çavkanî, serîlêdan û hwd hene. Parzûnkirina zelal, hişk û tîpkirî hatîye bicîh kirin, ku em metrîkên asta yekem qebûl dikin û yên mayî bi tenê davêjin. Di sala 2015’an de me ev sîstem bi vî awayî plan kir. Di dema niha de çi heye?

Niha: diagrama pêwendiya pêkhateyên çavdêriyê

Berî her tiştî, em serîlêdanan dişopînin: koda PHP, serîlêdan û mîkroxizmetên me - bi kurtî, her tiştê ku pêşdebirên me dinivîsin. Hemî serîlêdan metrîkan bi navgîniya UDP ve ji berhevkarê Brubeck re dişînin (statsd, di C de ji nû ve hatî nivîsandin). Ew di ceribandinên sentetîk de zûtirîn derket holê. Û ew metrîkên berê yên berhevkirî bi TCP-ê ji Graphite re dişîne.

Ew celebek metrîk heye ku jê re timer tê gotin. Ev tiştekî pir musaît e. Mînakî, ji bo her girêdana bikarhêner a bi karûbarê re, hûn metrikek bi dema bersivê re ji Brubeck re dişînin. Milyonek bersiv hatin, lê berhevkar tenê 10 metrîk vegerand. Hejmara we ya kesên ku hatine, dema bersivê ya herî zêde, hindik û navîn, navîn û sedî 4 hene. Dûv re daneyên li Graphite têne veguheztin û em hemî zindî dibînin.

Di heman demê de ji bo metrîkên li ser hardware, nermalavê, metrîkên pergalê û pergala meya çavdêriya kevn a Munin jî kombûnek heye (heta 2015-an ji me re xebitî). Em van hemîyan bi navgîniya C's CollectD daemon berhev dikin (ew komek pêvekên cihêreng tê de hatine çêkirin, ew dikare hemî çavkaniyên pergala mêvandar a ku li ser hatî saz kirin rapirsî bike, tenê di veavakirinê de diyar bike ku li ku derê daneyan binivîse) û bi rêya wê daneyan ji Graphite re binivîsin. Di heman demê de ew pêvekên python û nivîsarên şêlê piştgirî dike, ji ber vê yekê hûn dikarin çareseriyên xwerû yên xwerû binivîsin: CollectD dê van daneyan ji mêvandarek herêmî an dûr (bihesibînin Curl) berhev bike û ji Graphite re bişîne.

Dûv re em hemî metrîkên ku me berhev kirine dişînin Carbon-c-relay. Ev çareseriya Carbon Relay ji Graphite ye, ku di C-yê de hatî guherandin. Ev routerek e ku hemî metrikên ku em ji berhevkarên xwe dişînin berhev dike û wan digihîne girêkan. Di heman demê de di qonaxa rêwîtiyê de, ew rastdariya metrîkan kontrol dike. Ya yekem, divê ew bi pilana pêşgira ku min berê destnîşan kir re têkildar bin û, ya duyemîn jî, ew ji bo grafît derbasdar in. Wekî din ew ê dakevin.

Carbon-c-relay paşê metrîkan dişîne koma Graphite. Em Carbon-cache, ku di Go de ji nû ve hatî nivîsandin, wekî hilanîna sereke ya metrîkan bikar tînin. Go-karbon, ji ber pirtirsiya xwe, ji karbon-cache-ê pirtir e. Ew daneyan distîne û bi karanîna pakêta whisper (standard, bi python hatî nivîsandin) li dîskan dinivîse. Ji bo ku em daneyên ji depoyên xwe bixwînin, em API-ya Graphite bikar tînin. Ew ji WEB Graphite standard pir zûtir e. Dûv re li ser daneyan çi dibe?

Ew diçin Grafana. Em komikên xwe yên grafîtê wekî çavkaniya bingehîn a daneyê bikar tînin, ji bilî vê yekê me Grafana wekî navgînek malperê heye ji bo nîşandana metrîkan û çêkirina dashboardan. Ji bo her karûbarê xwe, pêşdebiran dashboarda xwe diafirînin. Dûv re ew li ser bingeha wan grafîkan ava dikin, ku metrîkên ku ew ji serîlêdanên xwe dinivîsin nîşan didin. Ji bilî Grafana, me SLAM jî heye. Ev cinek python e ku SLA li ser bingeha daneyên ji grafîtê hesab dike. Wekî ku min berê jî got, me bi dehan mîkroxizmet hene, ku her yek ji wan hewcedariyên xwe hene. Bi karanîna SLAM-ê, em diçin belgeyê û wê bi ya ku di Graphite de heye berhev dikin û berhev dikin ka çiqas hewcedarî bi hebûna karûbarên me re li hev dikin.

Ka em bêtir biçin: hişyarkirin. Ew bi karanîna pergalek bihêz tê organîze kirin - Moira. Ew serbixwe ye ji ber ku ew di binê kapê de Grafîta xwe heye. Ji hêla xortên SKB "Kontur" ve hatî pêşve xistin, bi python û Go, bi tevahî çavkaniya vekirî hatî nivîsandin. Moira heman herikîna ku diçe nav grafît distîne. Ger ji ber hin sedeman hilanîna we bimire, hişyariya we dê hîn jî bixebite.

Me Moira li Kubernetes bicîh kir; ew komek serverên Redis wekî databasa sereke bikar tîne. Di encamê de sîstemek xelet-tehemûl bû. Ew herikîna metrîkan bi navnîşa teşqeleyan re berhev dike: heke tê de behs tune be, wê hingê metrîkê davêje. Ji ber vê yekê ew dikare di hûrdemê de gigabytes metrîkan bişewitîne.

Me di heman demê de LDAPek pargîdanî jî pê ve girêda, bi alîkariya wê her bikarhênerek pergala pargîdanî dikare li ser bingeha kêşeyên heyî (an nû hatine afirandin) ji xwe re agahdariyan biafirîne. Ji ber ku Moira Graphite dihewîne, ew hemî taybetmendiyên wê piştgirî dike. Ji ber vê yekê hûn pêşî rêzê digirin û wê di Grafana de kopî bikin. Binêrin ka dane çawa li ser grafîkan têne xuyang kirin. Û dûv re hûn heman rêzê digirin û wê di Moira de kopî bikin. Hûn wê bi sînoran daliqînin û di derketinê de hişyariyek digirin. Ji bo kirina van hemîyan, hûn ne hewce ne zanînek taybetî. Moira dikare bi SMS, e-name, Jira, Slack hişyar bike... Di heman demê de cîbicîkirina nivîsarên xwerû piştgirî dike. Gava ku tetikek jê re çêdibe, û ew ji bo skrîptek xwerû an binaryê tê abone, ew wê dimeşîne û JSON ji bo vê binaryê ji stdin re dişîne. Li gorî vê yekê, bernameya we divê wê parsek bike. Tiştê ku hûn ê bi vê JSON-ê re bikin li ser we ye. Ger hûn bixwazin, wê ji Telegram re bişînin, ger hûn bixwazin, karên li Jira vekin, her tiştê bikin.

Em ji bo hişyarkirinê jî pêşveçûna xwe bikar tînin - Imagotag. Me panela ku bi gelemperî ji bo bihayên bihayê elektronîkî li firotgehan tê bikar anîn, li gorî hewcedariyên xwe adapte kir. Me tetik ji Moira jê re anî. Ew nîşan dide ku ew di kîjan dewletê de ne û kengê qewimîne. Hin xortên pêşkeftinê di berjewendiya vê panelê de notifications di Slack û e-nameyê de berdan.

Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê

Welê, ji ber ku em pargîdaniyek pêşverû ne, me di vê pergalê de Kubernetes jî şopand. Me ew di nav pergalê de bi karanîna Heapster-ê, ya ku me di komê de saz kir, kir, ew daneyan berhev dike û ji Graphite re dişîne. Wekî encamek, diagram wiha xuya dike:

Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê

Pêkhateyên Şopandina

Li vir navnîşek girêdanên pêkhateyên ku me ji bo vê peywirê bikar anîne heye. Hemî wan çavkaniya vekirî ne.

Grafît:

Carbon-c-relay:

github.com/grobian/carbon-c-relay

Brubeck:

github.com/github/brubeck

Berhevkirin:

collectd.org

Moira:

github.com/moira-alert

Grafana:

grafana.com

Heapster:

github.com/kubernetes/heapster

Статистика

Û li vir hinek hejmar hene ku çawa sîstem ji me re dixebite.

Aggregator (brubeck)

Hejmara pîvanan: ~ 300 / sec
Navbera şandina metrîkan ji Graphite: 30 saniye
Bikaranîna çavkaniya serverê: ~ 6% CPU (em li ser pêşkêşkerên tam dipeyivin); ~ 1 GB RAM; ~ 3 Mbps LAN

Grafît (go-karbon)

Hejmara pîvanan: ~ 1 / min
Navbera nûvekirina metrîkê: 30 saniye
Plana hilanîna metrîkan: 30sec 35d, 5min 90d, 10min 365d (têgihîştina ku di demek dirêj de bi karûbarê re diqewime dide we)
Bikaranîna çavkaniya serverê: ~10% CPU; ~ 20 GB RAM; ~ 30 Mbps LAN

Felqbûn

Em li Avito di karûbarê çavdêriya xwe de bi rastî qîmetê didin nermbûnê. Çima ew bi rastî bi vî rengî derket? Ya yekem, pêkhateyên wê bi hev veguhêz in: hem pêkhateyên xwe û hem jî guhertoyên wan. Ya duyemîn, piştgirî. Ji ber ku tevahiya proje çavkaniyek vekirî ye, hûn dikarin kodê bi xwe biguherînin, guhertinan bikin, û fonksiyonên ku li derveyî qutiyê peyda nabin bicîh bînin. Stakên pir hevpar têne bikar anîn, bi taybetî Go û Python, ji ber vê yekê ev bi hêsanî tête kirin.

Li vir mînakek pirsgirêkek rastîn e. Metricek di Graphite de pelek e. Navek wê heye. Navê pelê = navê metrîk. Û rêyek heye ku bigihîje wir. Navên pelan di Linux de bi 255 tîpan têne sînorkirin. Û em (wek "mişteriyên navxweyî") xortên ji beşa databasê hene. Ew ji me re dibêjin: "Em dixwazin pirsên xwe yên SQL bişopînin. Û ew ne 255 tîp in, lê her yek 8 MB in. Em dixwazin wan li Grafana nîşan bidin, pîvanên vê daxwazê ​​bibînin, û hê çêtir, em dixwazin serî ya daxwazên weha bibînin. Ger ew di wextê rast de were xuyang kirin dê pir xweş be. Dê pir xweş be ku meriv wan di hişyariyê de bihêle."

Çavdêrî wekî karûbar: pergalek modular ji bo mîmariya mîkroxizmetê
Mînaka pirsa SQL wekî mînakek jê tê girtin malpera postgrespro.ru

Em serverek Redis saz dikin û pêvekên xwe yên Komkirî bikar tînin, ku diçin Postgres û hemî daneyan ji wir digirin, metrîkan dişînin Graphite. Lê em navê metrîkê bi haş diguherînin. Em di heman demê de heman haş ji Redis re wekî mifteyek, û tevahiya pirsa SQL wekî nirxek dişînin. Tiştê ku divê em bikin ev e ku pê ewle bin ku Grafana dikare biçe Redisê û vê agahiyê bigire. Em API-ya Graphite vedikin ji ber ku ... ev navbera sereke ye ji bo danûstendina hemî hêmanên çavdêriyê bi grafît re, û em têkevin fonksiyonek nû li wir bi navê aliasByHash() - ji Grafana em navê metrîkê digirin, û wê di daxwaznameyekê de ji Redis re wekî mifteyê bikar tînin. bersiv em nirxa mifteyê digirin, ku "pirsa meya SQL" e " Bi vî rengî, me di Grafana de pêşandanek pirsek SQL, ku di teoriyê de ne gengaz bû ku li wir were xuyang kirin, digel statîstîkên li ser wê (bang, rêz, total_time, ...) nîşan da.

Encam

Avabûnbûn Karûbarê meya çavdêriyê 24/7 ji her serîlêdan û her kodek heye. Heke hûn gihîştina dezgehên hilanînê hene, hûn dikarin daneyan li ser karûbarê binivîsin. Ziman ne girîng e, biryar ne girîng e. Hûn tenê hewce ne ku hûn zanibin ka meriv çawa soketek vedike, metrîkek li wir deyne û soketê bigire.

Ewlehiyê Hemî pêkhate beredayî ne û barên me baş digirin.

Astengiya kêm a têketinê. Ji bo ku hûn vê pergalê bikar bînin, hûn ne hewce ne ku hûn li Grafana zimanên bernamekirinê û pirsan fêr bibin. Tenê serîlêdana xwe vekin, têkevin soketek tê de ku dê metrîkan ji Graphite re bişîne, wê bigire, Grafana veke, li wir dashboardan biafirîne û li tevgera metrîkên xwe binihêre, bi navgîniya Moira agahdariyan werbigire.

Serxwebûnî. Hûn dikarin van hemîyan bixwe bikin, bêyî arîkariya endezyarên DevOps. Û ev avantaj e, ji ber ku hûn dikarin projeya xwe rast bişopînin, ne hewce ye ku hûn ji kesî bipirsin - an dest bi xebatê bikin an jî guhertinan bikin.

Em ji bo çi armanc dikin?

Her tiştê ku li jêr hatî navnîş kirin ne tenê ramanên razber e, lê tiştek ku bi kêmanî gavên pêşîn hatine avêtin.

  1. Detektora anomalî. Em dixwazin karûbarek biafirînin ku dê biçin depoyên meya Graphite û her metrîkê bi karanîna algorîtmayên cihêreng kontrol bikin. Jixwe algorîtmayên ku em dixwazin bibînin hene, dane hene, em dizanin ka meriv çawa pê re bixebite.
  2. Metadata. Gelek xizmetên me hene, ew bi demê re diguherin, mîna mirovên ku bi wan re dixebitin. Bi domdarî domandina belgekirinê bi destan ne vebijarkek e. Ji ber vê yekê em naha metadata di mîkroxizmetên xwe de vedihewînin. Ew diyar dike ku kê ew pêşxistiye, zimanên ku pê re têkilî daynin, hewcedariyên SLA, li ku û ji kê re agahdarî bêne şandin. Dema ku karûbarek tête danîn, hemî daneyên sazûmanê serbixwe têne afirandin. Wekî encamek, hûn du girêdan distînin - yek ji tîrêjan re, ya din jî dashboardên li Grafana.
  3. Di her malê de çavdêrîkirin. Em bawer dikin ku divê hemî pêşdebiran pergalek weha bikar bînin. Di vê rewşê de, hûn her gav fêm dikin ku seyrûsefera we li ku ye, çi tê serê wê, ew li ku dikeve, qelsiyên wê li ku ne. Ger, mînakî, tiştek were û karûbarê we têk bibe, wê hingê hûn ê ne di dema bangek ji rêveberê, lê ji hişyariyekê de fêr bibin, û hûn dikarin tavilê têketinên herî paşîn vekin û bibînin ka li wir çi qewimî.
  4. Performansa bilind. Projeya me bi domdarî mezin dibe, û îro ew di hûrdemê de nêzîkî 2 nirxên metrîkî pêvajoyê dike. Salek berê, ev hejmar bû 000. Û mezinbûn berdewam dike, û ev tê wê wateyê ku piştî demekê Graphite (pisik) dê dest bi barkirina bine-pergala dîskê bike. Wekî ku min berê jî got, ev pergala çavdêriyê ji ber veguheztina pêkhateyan pir gerdûnî ye. Kesek binesaziya xwe bi taybetî ji bo Graphite diparêze û bi domdarî berfireh dike, lê me biryar da ku em rêyek cûda biçin: bikar bînin clickhouse wekî depoyek ji bo metrîkên me. Ev veguhertin hema hema qediya ye, û di demek nêzîk de ez ê bi hûrgulî ji we re vebêjim ka ev çawa hate kirin: çi zehmetî hebûn û ew çawa hatin derbas kirin, pêvajoya koçberiyê çawa derbas bû, ez ê beşên ku wekî girêdan hatine hilbijartin û vesazên wan vebêjim.

Spas ji bo baldariya we! Pirsên xwe li ser mijarê bipirsin, ez ê hewl bidim ku li vir an di postên jêrîn de bersiv bidim. Dibe ku kesek xwedî ezmûnek avakirina pergalek çavdêriyê ya bi vî rengî an veguheztina Clickhouse di rewşek wusa de hebe - wê di şîroveyan de parve bikin.

Source: www.habr.com

Add a comment