Kulawa azaman sabis: tsarin zamani don gine-ginen microservice

A yau, ban da lambar monolithic, aikinmu ya haɗa da ɗimbin ƙananan sabis. Kowannen su yana bukatar a sa ido. Yin wannan akan irin wannan sikelin ta amfani da injiniyoyin DevOps yana da matsala. Mun haɓaka tsarin sa ido wanda ke aiki azaman sabis ga masu haɓakawa. Za su iya rubuta awo da kansu cikin tsarin sa ido, amfani da su, gina dashboards dangane da su, da kuma haɗa faɗakarwa gare su waɗanda za a kunna lokacin da ƙimar ƙima ta kai. Ga injiniyoyin DevOps, abubuwan more rayuwa da takardu kawai.

Wannan rubutun shine rubutun jawabina tare da mu sassan da RIT++. Mutane da yawa sun nemi mu yi nau'ikan rahotannin rubutu daga can. Idan kun kasance a wurin taron ko kallon bidiyon, ba za ku sami sabon abu ba. Kuma kowa da kowa - maraba ga cat. Zan gaya muku yadda muka zo irin wannan tsarin, yadda yake aiki da kuma yadda muke shirin sabunta shi.

Kulawa azaman sabis: tsarin zamani don gine-ginen microservice

Abubuwan da suka gabata: tsare-tsare da tsare-tsare

Ta yaya muka isa tsarin sa ido na yanzu? Domin amsa wannan tambayar, kuna buƙatar zuwa 2015. Ga yadda abin yake a lokacin:

Kulawa azaman sabis: tsarin zamani don gine-ginen microservice

Muna da nodes kusan 24 waɗanda ke da alhakin sa ido. Akwai duka fakitin rawanin daban-daban, rubutun, daemons waɗanda ko ta yaya suke lura da wani abu, aika saƙonni, da yin ayyuka. Mun yi tunanin cewa idan muka ci gaba, irin wannan tsarin zai zama ƙasa da ƙasa. Babu ma'ana a haɓaka shi: yana da wahala sosai.
Mun yanke shawarar zaɓar waɗannan abubuwan sa ido waɗanda za mu kiyaye da haɓakawa, da waɗanda za mu watsar. Akwai 19 daga cikinsu. Sai graphites, aggregators da Grafana a matsayin dashboard suka rage. Amma yaya sabon tsarin zai kasance? Kamar wannan:

Kulawa azaman sabis: tsarin zamani don gine-ginen microservice

Muna da ma'auni na ma'auni: waɗannan graphites ne, waɗanda za su dogara ne akan faifan SSD masu sauri, waɗannan wasu takamaiman masu tarawa ne don awo. Na gaba - Grafana don nuna dashboards da Moira don faɗakarwa. Mun kuma so samar da tsarin neman abubuwan da ba su da kyau.

Matsayi: Sa ido 2.0

Wannan shi ne abin da tsare-tsaren ya kasance a cikin 2015. Amma dole ne mu shirya ba kawai kayan aiki da sabis da kanta ba, har ma da takardun shaida don shi. Mun samar da ma'auni na kamfani don kanmu, wanda muke kira saka idanu 2.0. Menene bukatun tsarin?

  • kasancewa akai-akai;
  • Tazarar ajiyar awo = 10 seconds;
  • tsararrun ajiya na awo da dashboards;
  • SLA> 99,99%
  • tarin ma'auni na taron ta hanyar UDP (!).

Muna buƙatar UDP saboda muna da yawan zirga-zirgar ababen hawa da abubuwan da ke haifar da awo. Idan ka rubuta su duka cikin graphite lokaci guda, ma'ajiyar zata rushe. Mun kuma zaɓi prefixes matakin farko don duk ma'auni.

Kulawa azaman sabis: tsarin zamani don gine-ginen microservice

Kowane daga cikin prefixes yana da wasu dukiya. Akwai ma'auni don sabobin, cibiyoyin sadarwa, kwantena, albarkatu, aikace-aikace, da sauransu. An aiwatar da tacewa mai tsauri, mai tsauri, inda muka karɓi ma'auni na matakin farko kuma kawai mu sauke sauran. Haka muka tsara wannan tsari a shekarar 2015. Menene a halin yanzu?

Present: zane na hulɗar abubuwan sa ido

Da farko, muna sa ido kan aikace-aikacen: lambar PHP ɗinmu, aikace-aikacenmu da microservices - a takaice, duk abin da masu haɓaka mu ke rubutawa. Duk aikace-aikacen suna aika awo ta UDP zuwa ga mai tarawa Brubeck (statsd, sake rubutawa a cikin C). Ya zama mafi sauri a cikin gwaje-gwajen roba. Kuma yana aika ma'aunin da aka riga aka haɗa zuwa Graphite ta hanyar TCP.

Yana da nau'in awo da ake kira masu lokaci. Wannan abu ne mai matukar dacewa. Misali, ga kowane haɗin mai amfani zuwa sabis ɗin, kuna aika awo tare da lokacin amsawa zuwa Brubeck. Amsoshin miliyan guda sun shigo, amma mai tarawa ya dawo da awo 10 kawai. Kuna da adadin mutanen da suka zo, matsakaicin, ƙarami da matsakaicin lokacin amsawa, matsakaici da kashi 4. Sannan ana canja wurin bayanan zuwa Graphite kuma muna ganin su duka suna rayuwa.

Har ila yau, muna da tarawa don ma'auni akan hardware, software, tsarin awo da kuma tsohuwar tsarin sa ido na Munin (ya yi mana aiki har zuwa 2015). Muna tattara duk wannan ta hanyar C daemon CollectD (yana da ɗimbin nau'ikan plugins daban-daban da aka gina a ciki, yana iya bincika duk albarkatun tsarin tsarin da aka shigar dashi, kawai saka a cikin tsarin inda za'a rubuta bayanan) da rubuta bayanan zuwa Graphite ta hanyarsa. Hakanan yana goyan bayan plugins na python da rubutun harsashi, don haka zaku iya rubuta naku mafita na al'ada: Tattara zai tattara wannan bayanan daga mai gida ko na nesa (zaton Curl) kuma aika zuwa Graphite.

Sa'an nan kuma mu aika duk awo da muka tattara zuwa Carbon-c-relay. Wannan shine hanyar isar da sakon Carbon Relay daga Graphite, wanda aka gyara a cikin C. Wannan na'ura mai ba da hanya tsakanin hanyoyin sadarwa ce da ke tattara duk ma'aunin da muke aikawa daga masu tarawa kuma yana tura su zuwa nodes. Haka nan a matakin tuƙi, yana bincika ingancin awo. Da fari dai, dole ne su dace da tsarin prefix wanda na nuna a baya kuma, na biyu, suna da inganci don graphite. In ba haka ba za su sauke.

Carbon-c-relay sannan ya aika awo zuwa gungu na Graphite. Muna amfani da cache Carbon, wanda aka sake rubutawa a cikin Go, azaman babban ma'ajiyar awo. Go-carbon, saboda yawan zaren sa, ya fi Carbon-cache nisa. Yana karɓar bayanai kuma yana rubuta su zuwa faifai ta amfani da kunshin raɗaɗi (misali, da aka rubuta a cikin python). Domin karanta bayanai daga ma'ajiyar mu, muna amfani da API ɗin Graphite. Yana da sauri fiye da daidaitaccen WEB Graphite. Me zai faru da bayanan gaba?

Suna zuwa Grafana. Muna amfani da gungu na graphite a matsayin babban tushen bayanai, haka kuma muna da Grafana azaman hanyar sadarwa ta yanar gizo don nuna awo da ginin dashboards. Ga kowane sabis ɗin su, masu haɓakawa suna ƙirƙirar dashboard nasu. Sannan suna gina jadawali akan su, wanda ke nuna ma'aunin da suke rubutawa daga aikace-aikacen su. Baya ga Grafana, muna kuma da SLAM. Wannan aljanin python ne wanda ke lissafin SLA bisa bayanai daga graphite. Kamar yadda na fada a baya, muna da microservices dozin da yawa, kowannensu yana da nasa bukatun. Yin amfani da SLAM, muna zuwa takaddun kuma mu kwatanta shi da abin da ke cikin Graphite kuma mu kwatanta yadda buƙatun suka dace da kasancewar ayyukanmu.

Mu ci gaba: faɗakarwa. An tsara shi ta amfani da tsari mai ƙarfi - Moira. Yana da zaman kansa saboda yana da nasa Graphite a ƙarƙashin kaho. Mutanen SKB "Kontur" suka haɓaka, an rubuta su cikin Python da Go, tushen buɗe ido gaba ɗaya. Moira yana karɓar kwarara guda ɗaya wanda ke shiga cikin graphites. Idan saboda wasu dalilai ma'ajin ku ya mutu, faɗakarwarku za ta ci gaba da aiki.

Mun tura Moira a Kubernetes; yana amfani da gungun sabar Redis a matsayin babban bayanan bayanai. Sakamakon ya kasance tsarin jurewa kuskure. Yana kwatanta rafi na ma'auni tare da jerin abubuwan jawo: idan babu ambato a ciki, to ya sauke awo. Don haka yana iya narkar da gigabytes na awo a minti daya.

Mun kuma haɗa LDAP na kamfani zuwa gare shi, tare da taimakon wanda kowane mai amfani da tsarin kamfani zai iya ƙirƙirar sanarwar kansa dangane da abubuwan da ke faruwa (ko sabbin ƙirƙira). Tun da Moira ya ƙunshi Graphite, yana goyan bayan duk fasalulluka. Don haka sai ku fara ɗaukar layin ku kwafa shi cikin Grafana. Dubi yadda aka nuna bayanan akan jadawali. Sannan ku ɗauki layi ɗaya ku kwafa shi cikin Moira. Kuna rataye shi tare da iyaka kuma ku sami faɗakarwa a wurin fitarwa. Don yin wannan duka, ba kwa buƙatar kowane takamaiman ilimi. Moira na iya faɗakarwa ta SMS, imel, Jira, Slack... Hakanan yana goyan bayan aiwatar da rubutun al'ada. Lokacin da faɗakarwa ta faru da ita, kuma an yi mata rajista zuwa rubutun al'ada ko binary, ta gudanar da shi ta aika JSON zuwa stdin don wannan binary. Saboda haka, shirinku dole ne ya rarraba shi. Abin da za ku yi da wannan JSON ya rage na ku. Idan kana so, aika shi zuwa Telegram, idan kana so, bude ayyuka a Jira, yi komai.

Hakanan muna amfani da ci gaban namu don faɗakarwa - Imagotag. Mun daidaita panel, wanda yawanci ana amfani dashi don alamun farashin lantarki a cikin shaguna, don dacewa da bukatunmu. Mun kawo abubuwan jan hankali daga Moira zuwa gare shi. Yana nuna halin da suke ciki da kuma lokacin da suka faru. Wasu daga cikin mutanen ci gaba sun watsar da sanarwa a cikin Slack da imel don goyon bayan wannan rukunin.

Kulawa azaman sabis: tsarin zamani don gine-ginen microservice

To, tunda mu kamfani ne mai ci gaba, mun kuma sanya ido kan Kubernetes a cikin wannan tsarin. Mun saka shi a cikin tsarin ta amfani da Heapster, wanda muka sanya a cikin cluster, yana tattara bayanai kuma ya aika zuwa Graphite. Sakamakon haka, zane ya yi kama da haka:

Kulawa azaman sabis: tsarin zamani don gine-ginen microservice

Abubuwan Kulawa

Anan akwai jerin hanyoyin haɗin kai zuwa abubuwan da muka yi amfani da su don wannan aikin. Dukan su buɗaɗɗe ne.

Graphite:

Carbon-c-relay:

github.com/grobian/carbon-c-relay

Brubeck:

github.com/github/brubeck

An tattara:

tattara.org

Moira:

github.com/moira-alert

Grafana:

grafana.com

Heapster:

github.com/kubernetes/heapster

Stats

Kuma ga wasu lambobi game da yadda tsarin ke aiki a gare mu.

Mai tarawa (brubeck)

Adadin ma'auni: ~ 300/sec
Tazarar don aika awo zuwa Graphite: 30 seconds
Amfani da albarkatun uwar garke: ~ 6% CPU (muna magana ne game da cikakkun sabobin); ~ 1Gb RAM; ~ 3Mbps LAN

Graphite (go-carbon)

Adadin ma'auni: ~ 1 / min
Tazarar sabunta awo: 30 seconds
Tsarin ma'auni na ma'auni: 30sec 35d, 5min 90d, 10min 365d (yana ba ku fahimtar abin da ke faruwa da sabis na dogon lokaci)
Amfani da albarkatun uwar garken: ~ 10% CPU; ~ 20GB RAM; ~ 30Mbps LAN

Sassauci

Mu a Avito da gaske muna daraja sassauci a cikin sabis ɗin sa ido. Me ya sa a zahiri ya zama haka? Da fari dai, abubuwan da ke cikinsa suna musanya: duka abubuwan da kansu da nau'ikan su. Na biyu, tallafi. Tun da gabaɗayan aikin buɗaɗɗen tushe ne, zaku iya shirya lambar da kanku, yin canje-canje, da aiwatar da ayyukan da ba su samuwa daga cikin akwatin. Ana amfani da tari na gama-gari, galibi Go da Python, don haka ana yin hakan a sauƙaƙe.

Ga misalin matsala ta gaske. Ma'auni a cikin Graphite fayil ne. Yana da suna. Sunan fayil = Sunan awo. Kuma akwai hanyar zuwa can. Sunayen fayil a Linux an iyakance su zuwa haruffa 255. Kuma muna da (a matsayin "abokan ciniki na ciki") mutane daga sashen bayanai. Suna gaya mana: “Muna son saka idanu kan tambayoyinmu na SQL. Kuma ba haruffa 255 ba ne, amma 8 MB kowannensu. Muna so mu nuna su a cikin Grafana, duba sigogi don wannan buƙatar, har ma mafi kyau, muna so mu ga saman irin waɗannan buƙatun. Zai yi kyau idan an nuna shi a ainihin lokacin. Zai yi kyau sosai a saka su cikin faɗakarwa. "

Kulawa azaman sabis: tsarin zamani don gine-ginen microservice
Ana ɗaukar tambayar SQL misali azaman misali daga shafin postgrespro.ru

Mun kafa uwar garken Redis kuma muna amfani da plugins ɗinmu da aka tattara, waɗanda ke zuwa Postgres kuma suna ɗaukar duk bayanan daga can, aika awo zuwa Graphite. Amma muna maye gurbin ma'aunin suna da hashes. A lokaci guda muna aika zanta iri ɗaya zuwa Redis azaman maɓalli, kuma duk tambayar SQL azaman ƙima. Duk abin da za mu yi shi ne tabbatar da cewa Grafana zai iya zuwa Redis kuma ya ɗauki wannan bayanin. Muna buɗe API ɗin Graphite saboda... Wannan shine babban hanyar sadarwa don hulɗar duk abubuwan kulawa tare da graphite, kuma mun shigar da sabon aiki a can wanda ake kira aliasByHash () - daga Grafana muna samun sunan metric, kuma muyi amfani da shi a cikin buƙatun Redis a matsayin maɓalli, in amsa muna samun darajar maɓalli, wanda shine "tambayar SQL" Don haka, mun nuna a Grafana nunin tambayar SQL, wanda a ka'idar ba zai yiwu a nuna shi ba, tare da kididdiga akansa (kira, layuka, jimlar_lokaci, ...).

Sakamakon

Kasancewa Sabis ɗin mu na sa ido yana samuwa 24/7 daga kowace aikace-aikace da kowace lamba. Idan kuna da damar zuwa wuraren ajiya, zaku iya rubuta bayanai zuwa sabis ɗin. Harshen ba shi da mahimmanci, yanke shawara ba su da mahimmanci. Kuna buƙatar sanin yadda ake buɗe soket, sanya ma'auni a wurin kuma rufe soket.

Dogara Duk abubuwan da aka gyara suna da jurewa kuskure kuma suna ɗaukar nauyinmu da kyau.

Ƙananan shinge ga shigarwa. Domin amfani da wannan tsarin, ba kwa buƙatar koyon yarukan shirye-shirye da tambayoyi a Grafana. Kawai buɗe aikace-aikacen ku, shigar da soket a ciki wanda zai aika awo zuwa Graphite, rufe shi, buɗe Grafana, ƙirƙira dashboards a wurin kuma duba halayen awoyin ku, karɓar sanarwa ta hanyar Moira.

'Yanci. Kuna iya yin duk wannan da kanku, ba tare da taimakon injiniyoyin DevOps ba. Kuma wannan fa'ida ce, saboda za ku iya saka idanu akan aikinku a yanzu, ba lallai ne ku tambayi kowa ba - ko dai don fara aiki ko yin canje-canje.

Me muke nufi?

Duk abin da aka jera a ƙasa ba kawai tunani ba ne, amma wani abu ne wanda aƙalla an ɗauki matakan farko zuwa gare shi.

  1. Anomaly ganowa. Muna son ƙirƙirar sabis ɗin da zai je ma'ajiyar Graphite ɗin mu kuma bincika kowane awo ta amfani da algorithms iri-iri. Akwai riga algorithms cewa muna so mu duba, akwai bayanai, mun san yadda za a yi aiki da shi.
  2. Metadata. Muna da ayyuka da yawa, suna canzawa akan lokaci, kamar mutanen da ke aiki tare da su. Ci gaba da rike takardu da hannu ba zaɓi ba ne. Shi ya sa yanzu muke saka metadata a cikin ƙananan sabis na mu. Ya bayyana wanda ya haɓaka shi, harsunan da yake hulɗa da su, bukatun SLA, inda kuma wa ya kamata a aika sanarwar. Lokacin tura sabis, duk bayanan mahaɗan ana ƙirƙira su da kansu. Sakamakon haka, kuna samun hanyoyin haɗin gwiwa guda biyu - ɗaya zuwa abubuwan jan hankali, ɗayan zuwa dashboards a Grafana.
  3. Kulawa a kowane gida. Mun yi imanin cewa ya kamata duk masu haɓakawa suyi amfani da irin wannan tsarin. A wannan yanayin, koyaushe kuna fahimtar inda zirga-zirgar ku take, abin da ke faruwa da shi, inda ya faɗi, inda rauninsa yake. Idan, alal misali, wani abu ya zo ya rushe sabis ɗin ku, to, zaku koyi game da shi ba lokacin kira daga manajan ba, amma daga faɗakarwa, kuma nan da nan zaku iya buɗe sabon rajistan ayyukan ku ga abin da ya faru a can.
  4. Babban aiki. Aikinmu yana girma koyaushe, kuma a yau yana aiwatar da kusan ƙimar awo 2 a cikin minti ɗaya. Shekara daya da ta wuce, wannan adadi ya kai 000. Kuma ci gaban ya ci gaba, kuma wannan yana nufin cewa bayan wani lokaci Graphite (rawa) zai fara ɗaukar nauyin faifan subsystem. Kamar yadda na fada a baya, wannan tsarin sa ido ya zama gama gari saboda musanyar abubuwan da aka gyara. Wani yana kiyayewa kuma koyaushe yana faɗaɗa kayan aikin su musamman don Graphite, amma mun yanke shawarar zuwa wata hanya ta daban: amfani DannaHause a matsayin ma'ajiya don ma'aunin mu. Wannan sauyi ya kusan kammala, kuma nan ba da jimawa ba zan ba ku dalla-dalla yadda aka yi haka: irin wahalhalun da aka samu da kuma yadda aka shawo kan su, yadda tsarin ƙaura ya gudana, zan bayyana abubuwan da aka zaɓa a matsayin ɗaure da tsarin su.

Na gode da kulawar ku! Tambayi tambayoyinku akan maudu'in, zan yi ƙoƙarin amsawa anan ko a cikin rubutun masu zuwa. Wataƙila wani yana da ƙwarewar gina tsarin sa ido irin wannan ko canzawa zuwa Clickhouse a cikin irin wannan yanayin - raba shi a cikin sharhi.

source: www.habr.com

Add a comment