Mar ann an
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!
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:
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:
- Gairm lìonra bhon neach-dèiligidh gu Alvin.
- Gairm lìonra bho Alvin chun stòr dàta.
- Lorg air diosc anns an stòr-dàta.
- Gairm lìonra bhon taigh-bathair dàta gu Alvin.
- 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:
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:
- Gairm lìonra bhon neach-dèiligidh gu Alvin.
- 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
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:
- Bidh an neach-dèiligidh a 'gairm an leabharlann
gRPC
- leabharlainn
gRPC
a’ dèanamh gairm lìonra don leabharlann air a’ chliantgRPC
air frithealaiche - 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
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-fhightegRPC
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
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!
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
An uairsin dh'fheuch mi
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.
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
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
gRPC
chaidh am bratach seo a shuidheachadh ann am buileachadh Linux airson socaidean TCP, ach chan ann ann an Windows. Is mise seo
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
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