Uaireannan tha barrachd nas lugha. Nuair a bhios tu a’ lughdachadh luchdan bidh àrdachadh ann an latency

Mar ann an a’ mhòr-chuid de phuist, tha duilgheadas ann le seirbheis sgaoilte, canaidh sinn an t-seirbheis seo Alvin. An turas seo cha do lorg mi an duilgheadas mi-fhìn, chuir na balaich bho thaobh an neach-dèiligidh fios thugam.

Aon latha dhùisg mi gu post-d mì-thoilichte air sgàth dàil fhada le Alvin, a bha sinn an dùil a chuir air bhog a dh’ aithghearr. Gu sònraichte, bha eòlas aig an neach-dèiligidh 99mh ceudad latency timcheall air 50 ms, fada os cionn ar buidseat latency. Bha seo na iongnadh leis gun do rinn mi deuchainn farsaing air an t-seirbheis, gu sònraichte air latency, a tha na ghearan cumanta.

Mus do chuir mi Alvin gu deuchainn, ruith mi tòrr dheuchainnean le ceistean 40k gach diog (QPS), uile a’ nochdadh latency nas lugha na 10ms. Bha mi deiseil airson innse nach robh mi ag aontachadh leis na toraidhean aca. Ach a’ toirt sùil eile air an litir, mhothaich mi rudeigin ùr: cha robh mi dìreach air deuchainn a dhèanamh air na cumhaichean air an tug iad iomradh, bha an QPS aca mòran na b’ ìsle na mise. Rinn mi deuchainn aig 40k QPS, ach cha robh iad ach aig 1k. Ruith mi deuchainn eile, an turas seo le QPS nas ìsle, dìreach airson fois a ghabhail.

Leis gu bheil mi a’ blogadh mu dheidhinn seo, is dòcha gu bheil thu air faighinn a-mach mu thràth gu robh na h-àireamhan aca ceart. Rinn mi deuchainn air an neach-dèiligidh brìgheil agam a-rithist agus a-rithist, leis an aon toradh: tha àireamh ìosal de dh ’iarrtasan chan ann a-mhàin a’ meudachadh an latency, ach a ’meudachadh an àireamh de dh’ iarrtasan le latency nas motha na 10 ms. Ann am faclan eile, nam biodh aig 40k QPS mu 50 iarrtas gach diog nas àirde na 50 ms, an uairsin aig 1k QPS bha 100 iarrtas os cionn 50 ms gach diog. Paradocs!

Uaireannan tha barrachd nas lugha. Nuair a bhios tu a’ lughdachadh luchdan bidh àrdachadh ann an latency

A 'gearradh sìos air an rannsachadh

Nuair a tha duilgheadas latency ann an siostam sgaoilte le mòran phàirtean, is e a’ chiad cheum liosta ghoirid de dhaoine a tha fo amharas a chruthachadh. Cladhaich sinn beagan nas doimhne ann an ailtireachd Alvin:

Uaireannan tha barrachd nas lugha. Nuair a bhios tu a’ lughdachadh luchdan bidh àrdachadh ann an latency

Is e deagh àite tòiseachaidh liosta de dh’ eadar-ghluasadan I / O crìochnaichte (glaisean lìonra / lorg diosc, msaa). Feuchaidh sinn ri faighinn a-mach càite a bheil an dàil. A bharrachd air an I / O follaiseach leis an neach-dèiligidh, tha Alvin a’ gabhail ceum a bharrachd: bidh e a’ faighinn chun stòr dàta. Ach, tha an stòradh seo ag obair anns an aon bhuidheann ri Alvin, agus mar sin bu chòir gum biodh an latency ann nas lugha na leis an neach-dèiligidh. Mar sin, liosta nan daoine a tha fo amharas:

  1. Gairm lìonra bhon neach-dèiligidh gu Alvin.
  2. Gairm lìonra bho Alvin chun stòr dàta.
  3. Lorg air diosc anns an stòr-dàta.
  4. Gairm lìonra bhon taigh-bathair dàta gu Alvin.
  5. Gairm lìonra bho Alvin gu neach-dèiligidh.

Feuchaidh sinn ri faighinn thairis air cuid de phuingean.

Chan eil dad aig stòradh dàta ris

B’ e a’ chiad rud a rinn mi Alvin a thionndadh gu frithealaiche ping-ping nach bi a’ làimhseachadh iarrtasan. Nuair a gheibh e iarrtas, tillidh e freagairt falamh. Ma lùghdaicheas an latency, chan eil dad ri chluinntinn air bug ann an gnìomh Alvin no taigh-bathair dàta. Anns a’ chiad deuchainn gheibh sinn an graf a leanas:

Uaireannan tha barrachd nas lugha. Nuair a bhios tu a’ lughdachadh luchdan bidh àrdachadh ann an latency

Mar a chì thu, chan eil leasachadh sam bith ann nuair a bhios tu a’ cleachdadh an fhrithealaiche ping-ping. Tha seo a 'ciallachadh nach bi an taigh-bathair dàta a' meudachadh latency, agus tha an liosta de dhaoine a tha fo amharas air a ghearradh ann an leth:

  1. Gairm lìonra bhon neach-dèiligidh gu Alvin.
  2. Gairm lìonra bho Alvin gu neach-dèiligidh.

Sgoinneil! Tha an liosta a 'crìonadh gu luath. Bha mi a 'smaoineachadh gu robh mi cha mhòr air faighinn a-mach an adhbhar.

gRPC

Seo an t-àm airson cluicheadair ùr a thoirt a-steach dhut: gRPC. Is e seo leabharlann stòr fosgailte bho Google airson conaltradh in-phròiseas RPC... Ged gRPC air a dheagh leasachadh agus air a chleachdadh gu farsaing, b’ e seo a ’chiad uair a bha mi ga chleachdadh air siostam den mheud seo agus bha dùil agam gum biodh mo bhuileachadh suboptimal - co-dhiù.

ri fhaotainn gRPC dh’ èirich ceist ùr anns a’ chruaich: is dòcha gur e mo bhuileachadh no mi-fhìn gRPC ag adhbhrachadh duilgheadas latency? A’ cur neach a tha fo amharas ùr ris an liosta:

  1. Bidh an neach-dèiligidh a 'gairm an leabharlann gRPC
  2. leabharlainn gRPC a’ dèanamh gairm lìonra don leabharlann air a’ chliant gRPC air frithealaiche
  3. leabharlainn gRPC cuir fios gu Alvin (gun obrachadh air eagal frithealaiche ping-pong)

Gus beachd a thoirt dhut air cò ris a tha an còd coltach, chan eil buileachadh mo neach-dèiligidh / Alvin gu math eadar-dhealaichte bhon fheadhainn teachdaiche-frithealaidh eisimpleirean async.

Nota: Tha an liosta gu h-àrd beagan nas sìmplidhe oir gRPC ga dhèanamh comasach am modail snàthainn agad fhèin (teamplaid?) a chleachdadh, anns a bheil an stac cur gu bàs eadar-fhighte gRPC agus buileachadh luchd-cleachdaidh. Airson sìmplidh, cumaidh sinn ris a 'mhodail seo.

Ceartaichidh pròifil a h-uile càil

Às deidh dhomh a dhol thairis air na stòran dàta, shaoil ​​​​mi gun robh mi cha mhòr deiseil: “A-nis tha e furasta! Nach cuir sinn a’ phròifil an sàs agus faigh a-mach càite a bheil an dàil. ” mi neach-leantainn mòr de phròifil mionaideach, seach gu bheil CPUan gu math luath agus mar as trice chan eil iad nan cnap-starra. Bidh a’ mhòr-chuid de dhàil a’ tachairt nuair a dh’ fheumas am pròiseasar stad a chur air a’ ghiollachd gus rudeigin eile a dhèanamh. Bidh Pròifil CPU cruinn a’ dèanamh dìreach sin: bidh e a’ clàradh a h-uile càil gu ceart suidsichean co-theacsa agus ga dhèanamh soilleir far a bheil dàil a’ tachairt.

Ghabh mi ceithir pròifilean: le QPS àrd (latency ìosal) agus le frithealaiche ping-pong le QPS ìosal (latency àrd), an dà chuid air taobh an neach-dèiligidh agus air taobh an fhrithealaiche. Agus dìreach gun fhios, ghabh mi cuideachd sampall de phròifil pròiseasar. Nuair a bhios mi a’ dèanamh coimeas eadar pròifilean, mar as trice bidh mi a’ coimhead airson stac gairm neo-riaghailteach. Mar eisimpleir, air an droch thaobh le latency àrd tha mòran a bharrachd suidsichean co-theacsa (10 tursan no barrachd). Ach anns a 'chùis agam, bha an àireamh de suidsichean co-theacsa cha mhòr an aon rud. Gu m’ uamhas, cha robh dad cudromach an sin.

Debugging a bharrachd

Bha mi eu-dòchasach. Cha robh fios agam dè na h-innealan eile a b’ urrainn dhomh a chleachdadh, agus b’ e an ath phlana agam gu bunaiteach na deuchainnean ath-aithris le diofar atharrachaidhean seach an duilgheadas a dhearbhadh gu soilleir.

Dè ma tha

Bhon fhìor thoiseach, bha dragh orm mun latency sònraichte 50ms. Is e àm glè mhòr a tha seo. Cho-dhùin mi gun gearradh mi pìosan a-mach às a’ chòd gus am b’ urrainn dhomh faighinn a-mach dè dìreach am pàirt a bha ag adhbhrachadh a’ mhearachd seo. An uairsin thàinig deuchainn a dh’ obraich.

Mar as àbhaist, le bhith a’ coimhead air ais tha e coltach gu robh a h-uile dad follaiseach. Chuir mi an neach-dèiligidh air an aon inneal ri Alvin - agus chuir mi iarrtas gu localhost. Agus tha an àrdachadh ann an latency air falbh!

Uaireannan tha barrachd nas lugha. Nuair a bhios tu a’ lughdachadh luchdan bidh àrdachadh ann an latency

Bha rudeigin ceàrr air an lìonra.

Ag ionnsachadh sgilean innleadair lìonra

Feumaidh mi aideachadh: tha m ’eòlas air teicneòlasan lìonra uamhasach, gu sònraichte leis gu bheil mi ag obair còmhla riutha a h-uile latha. Ach b’ e an lìonra am prìomh neach a bha fo amharas, agus dh’ fheumadh mi ionnsachadh mar a dheasaicheas mi e.

Gu fortanach, tha an eadar-lìn dèidheil air an fheadhainn a tha airson ionnsachadh. Bha coltas ann gun robh an cothlamadh de ping agus tracer mar thoiseach tòiseachaidh math gu bhith a’ fuasgladh dhuilgheadasan còmhdhail lìonra.

An toiseach, chuir mi air bhog Psp gu port TCP Alvin. Chleachd mi na roghainnean bunaiteach - gun dad sònraichte. A-mach à còrr air mìle ping, cha deach gin dhiubh nas àirde na 10 ms, ach a-mhàin a’ chiad fhear airson blàthachadh. Tha seo an aghaidh an àrdachaidh a chaidh fhaicinn ann an latency de 50 ms aig an 99mh ceudadan: an sin, airson gach 100 iarrtas, bu chòir dhuinn a bhith air mu aon iarrtas fhaicinn le latency de 50 ms.

An uairsin dh'fheuch mi lorg: Is dòcha gu bheil duilgheadas ann aig aon de na nodan air an t-slighe eadar Alvin agus an neach-dèiligidh. Ach thill an lorgaire cuideachd falamh.

Mar sin cha b’ e mo chòd, buileachadh gRPC, no an lìonra a bha ag adhbhrachadh an dàil. Bha mi a’ tòiseachadh a’ gabhail dragh nach tuigeadh mi seo gu bràth.

A-nis dè an OS air a bheil sinn

gRPC air a chleachdadh gu farsaing air Linux, ach annasach air Windows. Cho-dhùin mi deuchainn fheuchainn, a dh’ obraich: chruthaich mi inneal brìgheil Linux, chuir mi ri chèile Alvin airson Linux, agus chuir mi a-steach e.

Uaireannan tha barrachd nas lugha. Nuair a bhios tu a’ lughdachadh luchdan bidh àrdachadh ann an latency

Agus seo na thachair: cha robh an aon dàil aig frithealaiche ping-pong Linux ri aoigheachd Windows coltach ris, ged nach robh an stòr dàta eadar-dhealaichte. Tha e coltach gu bheil an duilgheadas ann am buileachadh gRPC airson Windows.

Algorithm Nagle

Fad na h-ùine seo bha mi a 'smaoineachadh gu robh mi ag ionndrainn bratach gRPC. A-nis tha mi a 'tuigsinn dè a th' ann dha-rìribh gRPC Tha bratach Windows a dhìth. Lorg mi leabharlann RPC a-staigh a bha mi cinnteach gun obraicheadh ​​​​mi gu math airson a h-uile brataichean a chaidh a shuidheachadh Winsock. An uairsin chuir mi na brataichean sin gu gRPC agus chuir mi Alvin air Windows, ann am frithealaiche ping-pong Windows!

Uaireannan tha barrachd nas lugha. Nuair a bhios tu a’ lughdachadh luchdan bidh àrdachadh ann an latency

Cha mhòr Dèanta: Thòisich mi a 'toirt air falbh na brataichean a bharrachd aon aig aon àm gus an do thill an t-ath-thilleadh gus am b' urrainn dhomh an adhbhar a chomharrachadh. Bha e mì-chliùiteach TCP_NODELAY, tionndadh algairim Nagle.

Algorithm Nagle a’ feuchainn ris an àireamh de phasgan a thèid a chuir thairis air lìonra a lughdachadh le bhith a’ cur dàil air sgaoileadh teachdaireachdan gus am bi meud a’ phacaid nas àirde na àireamh sònraichte de bytes. Ged a dh ’fhaodadh seo a bhith snog don neach-cleachdaidh cuibheasach, tha e millteach dha frithealaichean fìor-ùine oir cuiridh an OS dàil air cuid de theachdaireachdan, ag adhbhrachadh lagan air QPS ìosal. U gRPC chaidh am bratach seo a shuidheachadh ann am buileachadh Linux airson socaidean TCP, ach chan ann ann an Windows. Is mise seo ceartachadh.

co-dhùnadh

Bha an latency nas àirde aig QPS ìosal air adhbhrachadh le optimization OS. Le bhith a’ coimhead air ais, cha do lorg pròifil latency oir chaidh a dhèanamh ann am modh kernel seach a-staigh modh cleachdaiche. Chan eil fios agam an urrainnear sùil a thoirt air algorithm Nagle tro ghlacadh ETW, ach bhiodh e inntinneach.

A thaobh an deuchainn localhost, is dòcha nach do bhean e ris a’ chòd lìonraidh fhèin agus cha do ruith algorithm Nagle, agus mar sin dh’ fhalbh na cùisean latency nuair a ràinig an neach-dèiligidh Alvin tro localhost.

An ath thuras a chì thu àrdachadh ann an latency mar a tha an àireamh de dh'iarrtasan gach diog a 'lùghdachadh, bu chòir algorithm Nagle a bhith air do liosta de dhaoine a tha fo amharas!

Source: www.habr.com

Cuir beachd ann