Netramesh - fuasgladh mogal seirbheis aotrom

Mar a ghluaiseas sinn bho thagradh monolithic gu ailtireachd microservices, tha dùbhlain ùra romhainn.

Ann an tagradh monolithic, mar as trice tha e gu math furasta faighinn a-mach dè am pàirt den t-siostam anns an do thachair a’ mhearachd. Nas coltaiche, tha an duilgheadas ann an còd an monolith fhèin, no san stòr-dàta. Ach nuair a thòisicheas sinn a 'coimhead airson duilgheadas ann an ailtireachd microservice, chan eil a h-uile dad cho follaiseach tuilleadh. Feumaidh sinn an t-slighe gu lèir a lorg a ghabh an t-iarrtas bho thoiseach gu deireadh agus a thaghadh bho na ceudan de mhicro-sheirbheisean. A bharrachd air an sin, tha na goireasan stòraidh aca fhèin aig mòran dhiubh, a dh’ fhaodadh mearachdan loidsigeach adhbhrachadh, a bharrachd air duilgheadasan le coileanadh agus fulangas sgàinidhean.

Netramesh - fuasgladh mogal seirbheis aotrom

Tha mi air a bhith a’ coimhead airson ùine mhòr airson inneal a chuidicheadh ​​le bhith a’ dèiligeadh ri duilgheadasan mar sin (sgrìobh mi mu dheidhinn seo air Habré: 1, 2), ach aig a’ cheann thall rinn mi am fuasgladh fosgailte agam fhèin. Anns an aiste seo bidh mi a 'bruidhinn mu na buannachdan an t-seirbheis mogaill dòigh-obrach agus a' roinn inneal ùr airson a chur an gnìomh.

Tha lorg sgaoilte mar fhuasgladh cumanta air an duilgheadas a thaobh lorg mhearachdan ann an siostaman sgaoilte. Ach dè mura h-eil an dòigh-obrach seo airson fiosrachadh a chruinneachadh mu eadar-obrachadh lìonra fhathast air a chuir an gnìomh san t-siostam, no, nas miosa, ann am pàirt den t-siostam tha e ag obair gu ceart mar-thà, ach ann am pàirt chan eil e, leis nach deach a chuir ri seann sheirbheisean ? Gus faighinn a-mach fìor adhbhar na duilgheadas, feumar dealbh iomlan a bhith agad de na tha a 'tachairt san t-siostam. Tha e gu sònraichte cudromach tuigsinn dè na meanbh-sheirbheisean a tha an sàs ann am prìomh shlighean a tha deatamach do ghnìomhachas.

An seo faodaidh an dòigh mogal seirbheis a thighinn gu ar taic, a dhèiligeas ris a h-uile inneal airson fiosrachadh lìonra a chruinneachadh aig ìre nas ìsle na na seirbheisean fhèin ag obrachadh. Leigidh an dòigh-obrach seo leinn stad a chuir air a h-uile trafaic agus a sgrùdadh air an itealan. A bharrachd air an sin, chan fheum eadhon fios a bhith aig tagraidhean mu dheidhinn.

Dòigh-obrach mogal seirbheis

Is e am prìomh bheachd air dòigh-obrach mogal seirbheis còmhdach bun-structair eile a chuir thairis air an lìonra, a leigeas leinn rud sam bith a dhèanamh le eadar-obrachadh eadar-sheirbheis. Bidh a’ mhòr-chuid de bhuileachadh ag obair mar a leanas: tha inneal càr-taobh a bharrachd le neach-ionaid follaiseach air a chur ri gach microservice, tro bheil a h-uile trafaic a-steach agus a-mach den t-seirbheis air a dhol seachad. Agus is e seo an dearbh àite far an urrainn dhuinn cothromachadh teachdaiche a dhèanamh, poileasaidhean tèarainteachd a chuir an sàs, casg a chuir air an àireamh de dh ’iarrtasan agus fiosrachadh cudromach a chruinneachadh mu eadar-obrachadh sheirbheisean ann an cinneasachadh.

Netramesh - fuasgladh mogal seirbheis aotrom

Fuasglaidhean

Tha grunn dhòighean-obrach air an cur an gnìomh mar-thà: Istio и ceangail 2. Bidh iad a 'toirt seachad mòran fheartan a-mach às a' bhogsa. Ach aig an aon àm, tha cosgais mhòr air goireasan. A bharrachd air an sin, mar as motha an cruinneachadh anns a bheil siostam mar seo ag obair, is ann as motha de ghoireasan a bhios a dhìth gus am bun-structar ùr a chumail suas. Aig Avito, bidh sinn ag obrachadh cruinneachaidhean kubernetes anns a bheil mìltean de shuidheachaidhean seirbheis (agus tha an àireamh aca a’ sìor fhàs gu luath). Anns a bhuileachadh làithreach, bidh Istio ag ithe ~300Mb de RAM gach eisimpleir seirbheis. Mar thoradh air an àireamh mhòr de chothroman, tha cothromachadh follaiseach cuideachd a’ toirt buaidh air ùine freagairt iomlan nan seirbheisean (suas ri 10ms).

Mar thoradh air an sin, choimhead sinn air dè dìreach na comasan a bha a dhìth oirnn an-dràsta, agus cho-dhùin sinn gur e am prìomh adhbhar gun do thòisich sinn a’ cur an gnìomh fuasglaidhean mar sin an comas fiosrachadh lorg bhon t-siostam gu lèir a chruinneachadh gu follaiseach. Bha sinn cuideachd airson smachd a bhith againn air eadar-obrachadh sheirbheisean agus diofar làimhseachadh a dhèanamh leis na cinn a thèid a ghluasad eadar seirbheisean.

Mar thoradh air an sin, thàinig sinn chun cho-dhùnadh againn:  netramesh.

netramesh

netramesh na fhuasgladh mogal seirbheis aotrom le comas sgèile gun chrìoch, ge bith dè an àireamh de sheirbheisean san t-siostam.

B’ e prìomh amasan an fhuasglaidh ùr goireasan ìosal os cionn agus àrd-choileanadh. Am measg nam prìomh fheartan, bha sinn sa bhad airson a bhith comasach air rèisean lorg a chuir chun t-siostam Jaeger againn gu follaiseach.

An-diugh, tha a’ mhòr-chuid de fhuasglaidhean sgòthan air an cur an gnìomh ann an Golang. Agus, gu dearbh, tha adhbharan airson seo. Tha e goireasach agus gu math sìmplidh a bhith a’ sgrìobhadh thagraidhean lìonraidh ann an Golang a bhios ag obair gu neo-chunbhalach le I/O agus a’ sgèile thairis air coraichean mar a dh’ fheumar. Agus, dè a tha cuideachd glè chudromach, tha an coileanadh gu leòr gus an duilgheadas seo fhuasgladh. Sin as coireach gun do thagh sinn Golang cuideachd.

Coileanadh

Tha sinn air ar n-oidhirpean a chuimseachadh air a’ chinneasachd as àirde a choileanadh. Airson fuasgladh a tha air a chleachdadh ri taobh gach eisimpleir den t-seirbheis, tha feum air beagan ùine de RAM agus CPU. Agus, gu dearbh, bu chòir an dàil freagairt a bhith beag cuideachd.

Chì sinn dè na toraidhean a fhuair sinn.

RAM

Bidh Netramesh ag ithe ~ 10Mb às aonais trafaic agus 50Mb aig a’ char as àirde le luchd suas ri 10000 RPS gach eisimpleir.

Bidh neach-ionaid tosgaire Istio an-còmhnaidh ag ithe ~300Mb anns na cruinneachaidhean againn le mìltean de chùisean. Chan eil seo a 'leigeil leis a bhith air a sgèileadh don bhuidheann gu lèir.

Netramesh - fuasgladh mogal seirbheis aotrom

Netramesh - fuasgladh mogal seirbheis aotrom

Le Netramesh fhuair sinn lùghdachadh ~ 10x ann an caitheamh cuimhne.

CPU

Tha cleachdadh CPU an ìre mhath co-ionann fo luchd. Tha e an urra ris an àireamh de dh'iarrtasan gach aonad ùine chun a 'chàr-taobh. Luachan aig 3000 iarrtas gach diog aig àirde:

Netramesh - fuasgladh mogal seirbheis aotrom

Netramesh - fuasgladh mogal seirbheis aotrom

Tha aon phuing nas cudromaiche ann: Netramesh - chan eil fuasgladh gun itealan smachd agus gun luchd ag ithe ùine CPU. Le Istio, bidh sidecars an-còmhnaidh ag ùrachadh puingean crìochnachaidh seirbheis. Mar thoradh air an sin, chì sinn an dealbh seo gun luchd:

Netramesh - fuasgladh mogal seirbheis aotrom

Bidh sinn a’ cleachdadh HTTP/1 airson conaltradh eadar seirbheisean. Bha an àrdachadh san ùine freagairt airson Istio nuair a bha e a’ dol tro thosgaire suas ri 5-10ms, rud a tha gu math mòr airson seirbheisean a tha deiseil airson freagairt ann am millisecond. Le Netramesh tha an ùine seo air a dhol sìos gu 0.5-2ms.

Scalability

Leis an ìre bheag de ghoireasan a bhios gach neach-ionaid ag ithe tha e comasach a chuir ri taobh gach seirbheis. Chaidh Netramesh a chruthachadh a dh’aona ghnothach às aonais pàirt plèana smachd gus dìreach gach càr-taobh a chumail aotrom. Gu tric ann am fuasglaidhean mogal seirbheis, bidh am plèana smachd a’ sgaoileadh fiosrachadh lorg seirbheis gu gach càr-taobh. Còmhla ris thig fiosrachadh mu amannan-ama agus roghainnean cothromachaidh. Tha seo uile a 'toirt cothrom dhut tòrr rudan feumail a dhèanamh, ach, gu mì-fhortanach, bidh e a' blàthachadh chàraichean taobh ann am meud.

Lorg seirbheis

Netramesh - fuasgladh mogal seirbheis aotrom

Cha bhith Netramesh a’ cur uidheamachd a bharrachd ris airson lorg seirbheis. Tha an trafaic gu lèir air a ghluasad gu follaiseach tro netra sidecar.

Tha Netramesh a’ toirt taic do phròtacal tagraidh HTTP/1. Gus a mhìneachadh, thèid liosta rèiteachaidh de phuirt a chleachdadh. Mar as trice, tha grunn phuirt aig an t-siostam tro bheil conaltradh HTTP a’ tachairt. Mar eisimpleir, bidh sinn a’ cleachdadh 80, 8890, 8080 airson eadar-obrachadh eadar seirbheisean agus iarrtasan bhon taobh a-muigh. Anns a’ chùis seo, faodar an suidheachadh a’ cleachdadh caochladair àrainneachd NETRA_HTTP_PORTS.

Ma chleachdas tu Kubernetes mar orcastra agus an uidheamachd eintiteas Seirbheis aige airson conaltradh taobh a-staigh cruinneachadh eadar seirbheisean, tha an uidheamachd fhathast mar an ceudna. An toiseach, bidh am microservice a’ faighinn seòladh IP seirbheis a’ cleachdadh kube-dns agus a’ fosgladh ceangal ùr ris. Tha an ceangal seo air a stèidheachadh an toiseach leis an netra-sidecar ionadail agus bidh a h-uile pacaid TCP a’ ruighinn netra an toiseach. An ath rud, bidh netra-sidecar a’ stèidheachadh ceangal ris a’ cheann-uidhe thùsail. Tha NAT air pod IP air an nód fhathast an aon rud ri às aonais netra.

Sgaoileadh lorg agus cur air adhart co-theacsa

Tha Netramesh a’ toirt seachad an comas-gnìomh a dh’ fheumar gus rèisean lorg a chuir mu eadar-obrachaidhean HTTP. Bidh Netra-sidecar a’ parsadh a’ phròtacal HTTP, a’ tomhas dàil iarrtasan, agus a’ toirt a-mach am fiosrachadh riatanach bho chinn-cinn HTTP. Aig a’ cheann thall, gheibh sinn a h-uile lorg ann an aon shiostam Jaeger. Airson rèiteachadh grinn, faodaidh tu cuideachd na caochladairean àrainneachd a thug an leabharlann oifigeil seachad a chleachdadh jaeger dol an leabharlann.

Netramesh - fuasgladh mogal seirbheis aotrom

Netramesh - fuasgladh mogal seirbheis aotrom

Ach tha duilgheadas ann. Gus am bi seirbheisean a’ gineadh agus a’ cur bann-cinn uber sònraichte, chan fhaic sinn raointean lorg ceangailte san t-siostam. Agus is e seo a dh'fheumas sinn gus adhbhar duilgheadasan a lorg gu luath. An seo a-rithist tha fuasgladh aig Netramesh. Bidh luchd-ionaid a’ leughadh cinn-cinn HTTP agus, mura h-eil an uber trace id annta, cruthaich fear. Bidh Netramesh cuideachd a’ stòradh fiosrachadh mu iarrtasan a tha a’ tighinn a-steach agus a-mach ann an càr-taobh agus gan maidseadh le bhith gan beairteachadh leis na cinn-cinn iarrtasan a-mach a tha riatanach. Chan eil agad ach a dhèanamh anns na seirbheisean dìreach aon bhann-cinn a chuir X-Request-Id, a ghabhas a rèiteachadh a’ cleachdadh caochladair àrainneachd NETRA_HTTP_REQUEST_ID_HEADER_NAME. Gus smachd a chumail air meud a’ cho-theacsa ann an Netramesh, faodaidh tu na caochladairean àrainneachd a leanas a shuidheachadh: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (an ùine airson an tèid an co-theacsa a stòradh) agus NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (tricead glanadh co-theacsa).

Tha e comasach cuideachd grunn shlighean a chur còmhla air an t-siostam agad le bhith gan comharrachadh le comharra seisean sònraichte. Leigidh Netra leat a stàladh HTTP_HEADER_TAG_MAP gus bannan-cinn HTTP a thionndadh gu tagaichean rèis lorg co-fhreagarrach. Faodaidh seo a bhith gu sònraichte feumail airson deuchainn. Às deidh dhut a dhol seachad air an deuchainn gnìomh, chì thu dè am pàirt den t-siostam air an tug sìoladh leis an iuchair seisean co-fhreagarrach buaidh.

Co-dhùnadh an Stòr Iarrtais

Gus faighinn a-mach cò às a thàinig an t-iarrtas, faodaidh tu an comas-gnìomh a chleachdadh gus bann-cinn a chuir ris an stòr gu fèin-ghluasadach. A’ cleachdadh caochladair àrainneachd NETRA_HTTP_X_SOURCE_HEADER_NAME Faodaidh tu ainm bann-cinn a shònrachadh a thèid a stàladh gu fèin-obrachail. Le bhith a 'cleachdadh NETRA_HTTP_X_SOURCE_VALUE faodaidh tu an luach a shuidheachadh air an tèid bann-cinn X-Source a shuidheachadh airson gach iarrtas a-mach.

Leigidh seo le bhith a 'sgaoileadh a' chinn-cinn feumail seo gu co-ionnan air feadh an lìonra. An uairsin faodaidh tu a chleachdadh ann an seirbheisean agus a chuir ri logaichean agus meatrach.

Slighe trafaic agus taobh a-staigh Netramesh

Tha dà phrìomh phàirt aig Netramesh. Tha a’ chiad fhear, netra-init, a’ suidheachadh riaghailtean lìonra gus casg a chuir air trafaic. Bidh e a’ cleachdadh riaghailtean ath-stiùireadh iptables gus stad a chuir air an trafaic gu lèir no pàirt dheth air cliathaich, a tha mar an dàrna prìomh phàirt de Netramesh. Faodaidh tu rèiteachadh dè na puirt a dh'fheumas a bhith air an gabhail a-steach airson seiseanan TCP a tha a' tighinn a-steach agus a-mach: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Tha feart inntinneach aig an inneal cuideachd - slighe probabilistic. Ma chleachdas tu Netramesh a-mhàin airson rèisean lorg a chruinneachadh, an uairsin ann an àrainneachd cinneasachaidh faodaidh tu goireasan a shàbhaladh agus slighe probabilistic a chomasachadh a’ cleachdadh caochladairean NETRA_INBOUND_PROBABILITY и NETRA_OUTBOUND_PROBABILITY (bho 0 gu 1). Is e an luach bunaiteach 1 (tha a h-uile trafaic air a ghlacadh).

Às deidh eadar-bheachd soirbheachail, bidh Netra sidecar a’ gabhail ris a’ cheangal agus na cleachdaidhean ùra SO_ORIGINAL_DST roghainn socaid gus an ceann-uidhe tùsail fhaighinn. Bidh Netra an uairsin a ’fosgladh ceangal ùr ris an t-seòladh IP tùsail agus a’ stèidheachadh conaltradh TCP dà-shligheach eadar na pàrtaidhean, ag èisteachd ris a h-uile trafaic a ’dol troimhe. Ma tha am port air a mhìneachadh mar HTTP, bidh Netra a’ feuchainn ri a pharsadh agus a lorg. Ma dh’ fhailicheas parsadh HTTP, bidh Netra a’ tuiteam air ais gu TCP agus gu follaiseach a’ proxachadh nam bytes.

Togail graf eisimeileachd

Às deidh dhomh tòrr fiosrachaidh lorg fhaighinn ann an Jaeger, tha mi airson graf iomlan de eadar-obrachaidhean san t-siostam fhaighinn. Ach ma tha an siostam agad làn luchdaichte agus na billeanan de rèisean lorg a’ cruinneachadh gach latha, chan e obair cho furasta a bhith gan cruinneachadh. Tha dòigh oifigeil ann airson seo a dhèanamh: eisimeileachd spìosrach. Ach, bheir e uairean airson graf iomlan a thogail agus bheir e ort an dàta gu lèir a luchdachadh sìos bho Jaeger airson na XNUMX uairean a dh’ fhalbh.

Ma tha thu a’ cleachdadh Elasticsearch gus rèisean lorg a stòradh, faodaidh tu a chleachdadh goireas Golang sìmplidh, a thogas an aon ghraf ann am mionaidean a’ cleachdadh feartan agus comasan Elasticsearch.

Netramesh - fuasgladh mogal seirbheis aotrom

Mar a chleachdas tu Netramesh

Faodar Netra a chuir gu furasta ri seirbheis sam bith a tha a’ ruith orcastra sam bith. Chì thu eisimpleir an seo.

Aig an àm seo, chan eil comas aig Netra càraichean-taobh a chuir an gnìomh gu fèin-ghluasadach gu seirbheisean, ach tha planaichean ann airson a bhuileachadh.

San àm ri teachd Netramesh

prìomh amas netramesh gus cosgaisean stòrais as ìsle agus àrd-choileanadh a choileanadh, a’ toirt seachad comasan bunaiteach airson amharc agus smachd air conaltradh eadar-sheirbheis.

Anns an àm ri teachd, bheir Netramesh taic do phròtacalan còmhdach tagraidh eile a bharrachd air HTTP. Bidh slighe L7 ri fhaighinn a dh’ aithghearr.

Cleachd Netramesh ma thachras tu air duilgheadasan coltach ris agus sgrìobh thugainn le ceistean agus molaidhean.

Source: www.habr.com

Cuir beachd ann