Bioyino - rarraba, mai daidaita ma'auni

Don haka kuna tattara awo. Kamar yadda muke. Muna kuma tattara awo. Hakika, wajibi ne don kasuwanci. A yau za mu yi magana game da hanyar haɗin farko ta tsarin sa ido na mu - uwar garken tarawa mai jituwa tare da statsd. bioino, dalilin da ya sa muka rubuta shi da kuma dalilin da ya sa muka watsar da brubeck.

Bioyino - rarraba, mai daidaita ma'auni

Daga labaran mu da suka gabata (1, 2) za ka iya gano cewa har zuwa wani lokaci mun tattara alamomi ta amfani da Brubeck. An rubuta shi a cikin C. Daga ra'ayi na lamba, yana da sauƙi kamar toshe (wannan yana da mahimmanci lokacin da kake son ba da gudummawa) kuma, mafi mahimmanci, yana sarrafa kundin mu na metrics miliyan 2 a sakan daya (MPS) a kololuwa. ba tare da wata matsala ba. Takardun sun nuna goyon bayan MPS miliyan 4 tare da alamar alama. Wannan yana nufin cewa zaku sami adadi da aka bayyana idan kun saita hanyar sadarwar daidai akan Linux. (Ba mu san adadin MPS da za ku iya samu ba idan kun bar cibiyar sadarwa kamar yadda yake). Duk da fa'idodin, muna da manyan gunaguni game da brubeck.

Da'awar 1. Github, mai haɓaka aikin, ya daina tallafa masa: buga faci da gyarawa, karɓar namu da (ba namu kaɗai ba) PR. A cikin 'yan watannin da suka gabata (wani wuri daga Fabrairu-Maris 2018), ayyuka sun sake komawa, amma kafin wannan akwai kusan shekaru 2 na cikakkiyar nutsuwa. Bugu da kari, ana ci gaba da aikin don bukatun Gihub na ciki, wanda zai iya zama babban cikas ga gabatarwar sababbin siffofi.

Da'awar 2. Daidaiton lissafin. Brubeck yana tattara jimlar ƙimar 65536 don tarawa. A cikin yanayinmu, don wasu ma'auni, yayin lokacin haɗuwa (30 seconds), ƙarin ƙima za su iya zuwa (1 a kololuwa). A sakamakon wannan samfurin, matsakaicin da mafi ƙarancin ƙima ba su da amfani. Misali, kamar haka:

Bioyino - rarraba, mai daidaita ma'auni
Kamar yadda ya kasance

Bioyino - rarraba, mai daidaita ma'auni
Yadda yakamata ya kasance

Saboda wannan dalili, gabaɗaya ana ƙididdige adadin kuɗi ba daidai ba. Ƙara anan bug tare da ambaliya mai 32-bit, wanda gabaɗaya yana aika sabar zuwa segfault lokacin karɓar ma'auni mara laifi, kuma komai ya zama babba. Kuskuren, ta hanya, ba a gyara ba.

Kuma a ƙarshe Da'awar X. A lokacin rubutawa, muna shirye mu gabatar da shi ga duk 14 fiye ko žasa da aiwatar da statsd aiki da muka iya samu. Bari mu yi tunanin cewa wasu abubuwan more rayuwa guda ɗaya sun girma har karɓar MPS miliyan 4 bai isa ba. Ko ma idan bai girma ba tukuna, amma ma'auni sun riga sun kasance da mahimmanci a gare ku cewa ko da gajere, 2-3 mintuna a cikin ginshiƙi na iya zama mai mahimmanci kuma ya haifar da rashin tausayi a tsakanin manajoji. Tunda magance bakin ciki aiki ne na rashin godiya, ana buƙatar mafita na fasaha.

Da fari dai, haƙuri na kuskure, don haka kwatsam matsala a kan uwar garke ba ta haifar da psychiatric aljan apocalypse a cikin ofishin. Abu na biyu, zazzagewa don samun damar karɓar fiye da miliyan 4 MPS, ba tare da zurfafa zurfafa ba cikin tarin hanyar sadarwar Linux da kuma girma cikin nutsuwa "a faɗi" zuwa girman da ake buƙata.

Tun da muna da wurin yin sikeli, mun yanke shawarar farawa da rashin haƙuri. " GAME DA! Haƙuri na kuskure! Yana da sauƙi, za mu iya yin shi, "Mun yi tunani kuma mun ƙaddamar da sabobin 2, muna haɓaka kwafin brubeck akan kowane. Don yin wannan, dole ne mu kwafi zirga-zirga tare da ma'auni zuwa sabobin biyu har ma da rubuta don wannan kananan amfani. Mun warware matsalar haƙuri ta kuskure tare da wannan, amma ... ba sosai ba. Da farko duk abin da ya yi kama da kyau: kowane brubeck yana tattara nau'ikansa na tarawa, yana rubuta bayanai zuwa Graphite sau ɗaya kowane sakan 30, yana sake rubuta tsohuwar tazara (ana yin wannan a gefen Graphite). Idan uwar garken ɗaya ta gaza ba zato ba tsammani, koyaushe muna da na biyu tare da kwafin bayanan da aka tara. Amma ga matsalar: idan uwar garken ta kasa, "gani" yana bayyana akan jadawali. Hakan ya faru ne saboda ba a daidaita tazarar brubeck na daƙiƙa 30, kuma a halin yanzu ba a sake rubutawa ɗaya daga cikinsu ba. Lokacin da uwar garken na biyu ya fara, abu ɗaya ya faru. Yana da haƙuri sosai, amma ina son mafi kyau! Har ila yau matsalar scalability ba ta tafi ba. Duk ma'auni har yanzu suna "tashi" zuwa uwar garken guda ɗaya, sabili da haka an iyakance mu zuwa MPS miliyan 2-4, dangane da matakin cibiyar sadarwa.

Idan kun yi tunani kadan game da matsalar kuma a lokaci guda tono dusar ƙanƙara tare da felu, to, ra'ayin da ke gaba zai iya zuwa a hankali: kuna buƙatar statsd wanda zai iya aiki a cikin yanayin rarraba. Wato, wanda ke aiwatar da aiki tare tsakanin nodes a cikin lokaci da awo. "Tabbas, irin wannan mafita tabbas ya riga ya wanzu," mun ce mun je Google…. Kuma ba su sami kome ba. Bayan an bi ta cikin takaddun don daban-daban statsd (https://github.com/etsy/statsd/wiki#server-implementations har zuwa Disamba 11.12.2017, XNUMX), ba mu sami cikakkiyar komai ba. A bayyane yake, ba masu haɓakawa ko masu amfani da waɗannan hanyoyin ba har yanzu sun ci karo da ma'auni masu yawa, in ba haka ba tabbas za su fito da wani abu.

Kuma a sa'an nan muka tuna game da "abin wasa" statsd - bioyino, wanda aka rubuta a Just for Fun hackathon (sunan aikin da aka samar ta hanyar rubutun kafin fara hackathon) kuma mun gane cewa muna buƙatar namu statsd cikin gaggawa. Don me?

  • saboda akwai 'yan kaɗan na statsd clones a duniya,
  • saboda yana yiwuwa a samar da abin da ake so ko kusa da haƙurin kuskure da ake so da ƙima (ciki har da daidaita ma'auni tsakanin sabar da magance matsalar aika rikice-rikice),
  • saboda yana yiwuwa a lissafta ma'auni daidai fiye da brubeck,
  • saboda zaku iya tattara ƙarin kididdigar da kanku, wanda brubeck a zahiri bai samar mana ba,
  • saboda na sami damar shirya kaina hyperperformance rarraba sikelin lab aikace-aikace, wanda ba zai gaba daya maimaita gine-gine na wani irin hyperfor ... da kyau, shi ke nan.

Me za a rubuta a kai? Hakika, a cikin Rust. Me yasa?

  • saboda an riga an sami mafita na samfur,
  • domin marubucin labarin ya riga ya san Tsatsa a lokacin kuma yana da sha'awar rubuta wani abu a ciki don samarwa tare da damar da za a saka shi a cikin bude-source,
  • saboda harsunan da ke da GC ba su dace da mu ba saboda yanayin zirga-zirgar da aka karɓa (kusan ainihin lokacin) da dakatarwar GC a zahiri ba za a yarda da su ba,
  • saboda kuna buƙatar mafi girman aiki kwatankwacin C
  • saboda Tsatsa tana ba mu ƙima ba tare da tsoro ba, kuma idan mun fara rubuta shi a cikin C/C++, da mun sami ƙarin lahani, ɓarna mai ɓarna, yanayin tsere da sauran kalmomi masu ban tsoro fiye da brubeck.

Akwai kuma jayayya a kan Tsatsa. Kamfanin ba shi da kwarewa wajen ƙirƙirar ayyuka a cikin Rust, kuma yanzu ba ma shirin yin amfani da shi a cikin babban aikin. Saboda haka, akwai tsoro mai tsanani cewa babu abin da zai iya faruwa, amma mun yanke shawarar ɗaukar dama kuma mun gwada.

Lokaci ya wuce...

A ƙarshe, bayan yunƙurin gazawar da yawa, sigar aiki ta farko ta shirya. Me ya faru? Abin da ya faru ke nan.

Bioyino - rarraba, mai daidaita ma'auni

Kowane kumburi yana karɓar tsarin awo nasa kuma yana tara su, kuma baya tara ma'auni na waɗannan nau'ikan inda ake buƙatar cikakken saitin su don haɗawa ta ƙarshe. An haɗa nodes da juna ta hanyar wasu nau'ikan ka'idojin kulle da aka rarraba, wanda ke ba ku damar zaɓar ɗaya daga cikinsu (a nan muka yi kuka) wanda ya cancanci aika ma'auni zuwa Babban. A halin yanzu ana magance wannan matsala ta hanyar Karamin, amma nan gaba burin marubucin ya kai ga mallaka aiwatarwa Raft, inda mafi cancanta zai kasance, ba shakka, ya zama kullin jagoran yarjejeniya. Baya ga ijma'i, nodes sau da yawa (sau ɗaya a cikin dakika ta hanyar tsohuwa) suna aika wa maƙwabta waɗannan sassan ma'aunin da aka riga aka tara waɗanda suka yi nasarar tattarawa a cikin wannan daƙiƙa. Ya bayyana cewa ana kiyaye juriya da kuskure - kowane kumburi har yanzu yana riƙe da cikakken saitin awo, amma ana aika ma'aunin an riga an haɗa shi, ta hanyar TCP kuma an sanya shi cikin ƙa'idar binary, don haka farashin kwafi yana raguwa sosai idan aka kwatanta da UDP. Duk da ɗimbin adadin ma'auni masu shigowa, tarawa yana buƙatar ƙananan ƙwaƙwalwar ajiya har ma da ƙasan CPU. Ga ma'auni na mu mai ƙarfi, wannan kaɗan ne kawai na megabyte na bayanai. A matsayin ƙarin kari, ba mu sami sake rubuta bayanan da ba dole ba a cikin Graphite, kamar yadda ya faru da burbeck.

Fakitin UDP tare da ma'auni ba su daidaita tsakanin nodes akan kayan aikin cibiyar sadarwa ta hanyar Round Robin mai sauƙi. Tabbas, na'urar sadarwar ba ta rarraba abubuwan da ke cikin fakiti don haka yana iya cire fakiti fiye da 4M a sakan daya, ba tare da ma'auni ba wanda bai san komai ba. Idan muka yi la'akari da cewa ma'aunin ba ya zuwa ɗaya bayan ɗaya a cikin kowane fakiti, to ba mu hango wata matsala ta aiki a wannan wuri ba. Idan uwar garken ya fadi, na'urar sadarwar da sauri (a cikin dakika 1-2) ta gano wannan gaskiyar kuma ta cire uwar garken da ya fadi daga juyawa. Sakamakon haka, za a iya kunna kuɗaɗen kuɗaɗe (watau waɗanda ba jagora ba) a zahiri ba tare da lura da faifai a kan ginshiƙi ba. Matsakaicin da muka rasa wani ɓangare ne na ma'aunin da ya shigo a daƙiƙan ƙarshe. Asara kwatsam/rushewa/canzawar jagora zai haifar da ɗan ƙaramin abu (tazara na 30 na biyu har yanzu bai daidaita ba), amma idan akwai sadarwa tsakanin nodes, waɗannan matsalolin za a iya rage su, misali, ta hanyar aika fakitin aiki tare. .

Kadan game da tsarin ciki. Aikace-aikacen, ba shakka, multithreaded ne, amma zane-zanen zane ya bambanta da wanda aka yi amfani da shi a cikin brubeck. Zaren da ke cikin brubeck iri ɗaya ne - kowannensu yana da alhakin duka tattara bayanai da tarawa. A cikin bioyino, ma'aikata sun kasu kashi biyu: masu alhakin cibiyar sadarwa da masu alhakin tarawa. Wannan rarrabuwa tana ba ku damar sarrafa aikace-aikacen cikin sassauƙa dangane da nau'ikan ma'auni: inda ake buƙatar tarawa mai ƙarfi, zaku iya ƙara masu tarawa, inda akwai zirga-zirgar hanyar sadarwa da yawa, zaku iya ƙara adadin kwararar hanyar sadarwa. A halin yanzu, a kan sabobin mu muna aiki a cikin hanyar sadarwa 8 da 4 aggregation flows.

Sashin kirgawa (alhakin tarawa) yana da ban sha'awa sosai. Ana rarraba maɓuɓɓugan da ke cike da magudanar ruwa a tsakanin magudanar ruwa, inda daga baya a nazarce su kuma a haɗa su. Bayan buƙatar, ana ba da awo don aikawa zuwa wasu nodes. Duk waɗannan, gami da aika bayanai tsakanin nodes da aiki tare da Consul, ana yin su ba tare da izini ba, suna gudana akan tsarin. tokyo.

Yawancin ƙarin matsaloli yayin haɓakawa sun haifar da sashin cibiyar sadarwa da ke da alhakin karɓar awo. Babban makasudin raba hanyoyin sadarwa zuwa sassa daban-daban shine sha'awar rage lokacin da kwararar ke kashewa ba don karanta bayanai daga soket. Zaɓuɓɓuka masu amfani da UDP asynchronous da recvmsg na yau da kullun sun ɓace cikin sauri: na farko yana cinye CPU mai yawan sararin samaniya don sarrafa taron, na biyu yana buƙatar jujjuya mahallin da yawa. Don haka yanzu ana amfani da shi recvmmsg tare da manyan buffers (da buffers, ma'aikatan jami'ai, ba kome ba ne a gare ku!). An tanadar tallafi don UDP na yau da kullun don lokuta masu haske inda ba a buƙatar recvmmsg. A cikin yanayin multimessage, yana yiwuwa a cimma babban abu: mafi yawan lokuta, zaren cibiyar sadarwa yana rake layin OS - yana karanta bayanai daga soket kuma yana tura shi zuwa buffer sararin mai amfani, kawai lokaci-lokaci yana canzawa zuwa ba da buffer mai cika zuwa aggregators. Lissafin da ke cikin soket a zahiri baya tarawa, adadin fakitin da aka sauke a zahiri baya girma.

Примечание

A cikin saitunan tsoho, an saita girman buffer ya zama babba. Idan ba zato ba tsammani ka yanke shawarar gwada uwar garken da kanka, za ka iya saduwa da gaskiyar cewa bayan aika ƙananan adadin ma'auni, ba za su isa cikin Graphite ba, suna cikin buffer rafin cibiyar sadarwa. Don yin aiki tare da ƙaramin adadin ma'auni, kuna buƙatar saita bufsize da girman jerin gwano zuwa ƙaramin ƙima a cikin saitin.

A ƙarshe, wasu ginshiƙi don masu sha'awar zane.

Kididdigar kan adadin ma'auni masu shigowa ga kowane uwar garken: fiye da MPS miliyan 2.

Bioyino - rarraba, mai daidaita ma'auni

Kashe ɗaya daga cikin nodes da sake rarraba awo masu shigowa.

Bioyino - rarraba, mai daidaita ma'auni

Kididdigar kan ma'auni masu fita: kumburi ɗaya ne kawai ke aikawa koyaushe - shugaban hari.

Bioyino - rarraba, mai daidaita ma'auni

Ƙididdiga na aiki na kowane kumburi, la'akari da kurakurai a cikin nau'ikan tsarin daban-daban.

Bioyino - rarraba, mai daidaita ma'auni

Cikakkun ma'auni masu shigowa (sunaye na awo suna ɓoye).

Bioyino - rarraba, mai daidaita ma'auni

Me muke shirin yi da duk wannan na gaba? Tabbas, rubuta code, tsine...! Tun da farko an shirya aikin zai kasance bude tushen kuma zai ci gaba da kasancewa har tsawon rayuwarsa. Shirye-shiryen mu na gaggawa sun haɗa da canzawa zuwa nau'in Raft namu, canza ƙa'idar takwarorinsu zuwa mafi šaukuwa, gabatar da ƙarin ƙididdiga na ciki, sabbin nau'ikan awo, gyaran kwari da sauran haɓakawa.

Tabbas, ana maraba da kowa don taimakawa wajen haɓaka aikin: ƙirƙirar PR, Batutuwa, idan zai yiwu za mu amsa, haɓakawa, da dai sauransu.

Da aka ce, ai jama’a ke nan, ku sayi giwayenmu!



source: www.habr.com

Add a comment