Баъзан бештар камтар аст. Ҳангоми кам кардани сарборӣ боиси зиёд шудани таъхири

Ба монанди аксари паёмҳо, мушкилот бо хидмати тақсимшуда вуҷуд дорад, биёед ин хидматро Элвин меномем. Ин дафъа ман мушкилотро худам кашф накардам, бачаҳо аз ҷониби муштарӣ ба ман хабар доданд.

Як рӯз ман аз почтаи электронии норозӣ аз сабаби таъхирҳои тӯлонӣ бо Элвин бедор шудам, ки мо онро дар ояндаи наздик ба нақша гирифтаем. Махсусан, муштарӣ таъхири 99 фоизиро дар минтақаи 50 мс аз сар гузаронидааст, ки аз буҷаи таъхири мо хеле болотар аст. Ин тааҷҷубовар буд, зеро ман хидматро ба таври васеъ санҷидам, махсусан дар таъхир, ки шикояти маъмулист.

Пеш аз он ки ман Элвинро ба озмоиш гузорам, ман таҷрибаҳои зиёдеро бо 40k дархост дар як сония (QPS) гузаронидам, ки ҳамаашон таъхири камтар аз 10 мс-ро нишон медиҳанд. Ман тайёр будам изхор кунам, ки бо натичахои онхо розй нестам. Аммо бори дигар ба нома нигариста, ман чизи навро мушоҳида кардам: ман шартҳои зикршударо дақиқ санҷида будам, QPS онҳо аз ман хеле пасттар буд. Ман дар 40k QPS озмоиш кардам, аммо онҳо танҳо дар 1k. Ман озмоиши дигарро гузаронидам, ин дафъа бо QPS пасттар, танҳо барои ором кардани онҳо.

Азбаски ман дар ин бора блог менависам, шумо эҳтимол аллакай фаҳмидед, ки шумораи онҳо дуруст аст. Ман муштарии виртуалии худро такрор ба такрор санҷидам, бо ҳамон натиҷа: шумораи ками дархостҳо на танҳо таъхирро зиёд мекунад, балки шумораи дархостҳоро бо таъхири зиёда аз 10 мс зиёд мекунад. Ба ибораи дигар, агар дар 40k QPS тақрибан 50 дархост дар як сония аз 50 мс зиёд бошад, пас дар 1k QPS ҳар сония 100 дархост аз 50 мс зиёд буд. Парадокс!

Баъзан бештар камтар аст. Ҳангоми кам кардани сарборӣ боиси зиёд шудани таъхири

Маҳдуд кардани ҷустуҷӯ

Ҳангоми дучор шудан бо мушкилоти таъхир дар системаи тақсимшуда бо ҷузъҳои зиёд, қадами аввал эҷод кардани рӯйхати кӯтоҳи гумонбарон аст. Биёед меъмории Элвинро каме амиқтар кобед:

Баъзан бештар камтар аст. Ҳангоми кам кардани сарборӣ боиси зиёд шудани таъхири

Нуқтаи оғози хуб ин рӯйхати гузаришҳои ба итмомрасидаи воридот ва баромад (зангҳои шабакавӣ/ҷустуҷӯи дискҳо ва ғ.) мебошад. Биёед кӯшиш кунем, ки фаҳмем, ки таъхир дар куҷост. Ба ғайр аз вуруди возеҳ бо муштарӣ, Элвин як қадами иловагӣ мегузорад: ӯ ба мағозаи маълумот дастрасӣ пайдо мекунад. Аммо, ин анбор дар ҳамон кластер бо Элвин кор мекунад, бинобар ин, таъхир дар он бояд нисбат ба муштарӣ камтар бошад. Ҳамин тариқ, рӯйхати гумонбарон:

  1. Зангҳои шабакавӣ аз муштарӣ ба Элвин.
  2. Зангҳои шабакавӣ аз Элвин ба мағозаи маълумот.
  3. Ҷустуҷӯ дар диск дар мағозаи маълумот.
  4. Зангҳои шабакавӣ аз анбори додаҳо ба Элвин.
  5. Зангҳои шабакавӣ аз Элвин ба муштарӣ.

Биёед кӯшиш кунем, ки баъзе нуктаҳоро аз байн барем.

Нигоҳдории маълумот ба он ҳеҷ иртиботе надорад

Аввалин чизе, ки ман кардам, табдил додани Элвин ба сервери пинг-пинг буд, ки дархостҳоро коркард намекунад. Вақте ки он дархостро қабул мекунад, он ҷавоби холӣ медиҳад. Агар таъхир кам шавад, он гоҳ хато дар татбиқи Алвин ё анбори додаҳо чизе нест. Дар озмоиши якум мо графики зеринро мегирем:

Баъзан бештар камтар аст. Ҳангоми кам кардани сарборӣ боиси зиёд шудани таъхири

Тавре ки шумо мебинед, ҳангоми истифодаи сервери ping-ping ҳеҷ беҳбудие нест. Ин маънои онро дорад, ки анбори додаҳо таъхирро зиёд намекунад ва рӯйхати гумонбарон ду маротиба кам карда мешавад:

  1. Зангҳои шабакавӣ аз муштарӣ ба Элвин.
  2. Зангҳои шабакавӣ аз Элвин ба муштарӣ.

Аҷоиб! Рӯйхат зуд коҳиш меёбад. Ман фикр мекардам, ки сабабашро қариб фаҳмидам.

gRPC

Ҳоло вақти он аст, ки шуморо бо як бозигари нав муаррифӣ кунед: gRPC. Ин як китобхонаи кушодаасос аз Google барои иртибот дар раванд аст CPR... Ҳарчанд gRPC хуб оптимизатсияшуда ва ба таври васеъ истифодашаванда, ин бори аввал буд, ки ман онро дар системаи ин андоза истифода мебарам ва ман интизор будам, ки татбиқи ман ноустувор бошад - ҳадди ақалл.

дастрас gRPC дар стек саволи навро ба вуҷуд овард: шояд ин амалисозии ман ё худам бошад gRPC боиси мушкилоти таъхир? Ба рӯйхат илова кардани гумонбари нав:

  1. Мизоҷ ба китобхона занг мезанад gRPC
  2. китобхона gRPC занги шабакавӣ ба китобхона дар муштарӣ мекунад gRPC дар сервер
  3. китобхона gRPC алоқаҳо Элвин (ҳеҷ гуна амалиёт дар сервери пинг-понг)

Барои ба шумо тасаввур кардани он, ки код чӣ гуна аст, татбиқи муштарии ман / Элвин аз барномаҳои муштарӣ-сервер чандон фарқ надорад. мисолҳои асинкӣ.

Эзоҳ: Рӯйхати боло каме содда карда шудааст, зеро gRPC имкон медиҳад, ки модели риштаи худии (шаблон?) истифода шавад, ки дар он стеки иҷро бо ҳам пайваст аст. gRPC ва татбиқи истифодабаранда. Барои соддагӣ, мо ба ин модел пайваст мешавем.

Профилсозӣ ҳама чизро ислоҳ мекунад

Дӯконҳои маълумотро хат зада, ман фикр кардам, ки қариб анҷом шудаам: “Акнун ин осон аст! Биёед профилро татбиқ кунем ва бифаҳмем, ки таъхир дар куҷо рух медиҳад." И мухлиси калони профили дақиқ, зеро CPU-ҳо хеле зуданд ва аксар вақт монеа нестанд. Аксарияти таъхирҳо вақте рух медиҳанд, ки протсессор бояд коркардро қатъ кунад, то кори дигарро анҷом диҳад. Профили дақиқи CPU ин корро мекунад: он ҳама чизро дақиқ сабт мекунад коммутаторҳои контекстӣ ва равшан нишон медихад, ки дар кучо кашолкорй ба амал меояд.

Ман чор профилро гирифтам: бо QPS-и баланд (таҳқири паст) ва бо сервери пинг-понг бо QPS-и паст (даҳлати баланд), ҳам дар тарафи муштарӣ ва ҳам дар тарафи сервер. Ва танҳо дар ҳолате, ки ман инчунин профили протсессори намунавӣ гирифтам. Ҳангоми муқоисаи профилҳо, ман одатан стеки зангҳои аномалӣ меҷӯям. Масалан, дар паҳлӯи бад бо таъхири баланд бисёр коммутаторҳои контекстӣ мавҷуданд (10 маротиба ё бештар). Аммо дар ҳолати ман, шумораи коммутаторҳои контекстӣ тақрибан якхела буд. Даҳшати ман, дар он ҷо ҳеҷ чизи муҳиме набуд.

Debugging иловагӣ

Ман ноумед шудам. Ман намедонистам, ки кадом асбобҳои дигарро истифода бурда метавонам ва нақшаи навбатии ман аслан такрор кардани таҷрибаҳо бо вариантҳои гуногун буд, на ба таври возеҳ ташхис.

Чӣ шавад, агар

Аз ибтидо, ман дар бораи таъхири мушаххаси 50ms нигарон будам. Ин як давраи хеле калон аст. Ман қарор додам, ки ман қисмҳоро аз рамз ҷудо мекунам, то он даме, ки дақиқ фаҳмам, ки кадом қисм ин хаторо ба вуҷуд меорад. Пас аз он таҷрибае омад, ки кор кард.

Чун одат, дар паси андеша ба назар мерасад, ки ҳама чиз аён буд. Ман муштариро дар ҳамон мошини Элвин ҷойгир кардам ва ба он дархост фиристодам localhost. Ва афзоиши таъхир аз байн рафт!

Баъзан бештар камтар аст. Ҳангоми кам кардани сарборӣ боиси зиёд шудани таъхири

Дар шабака чизе хато буд.

Омӯзиши малакаҳои муҳандиси шабака

Ман бояд иқрор шавам: дониши ман дар бораи технологияҳои шабакавӣ даҳшатнок аст, хусусан бо назардошти он, ки ман ҳар рӯз бо онҳо кор мекунам. Аммо шабака гумонбари асосӣ буд ва ба ман лозим буд, ки чӣ гуна ислоҳ кардани онро омӯзам.

Хушбахтона, Интернет онҳоеро дӯст медорад, ки мехоҳанд таҳсил кунанд. Омезиши ping ва tracert ба назар чунин менамуд, ки оғози кофӣ барои бартараф кардани мушкилоти нақлиёти шабакавӣ.

Аввалан, ман оғоз кардам PsPing ба порти TCP Элвин. Ман танзимоти пешфарзро истифода кардам - ​​ҳеҷ чизи махсусе. Аз зиёда аз ҳазор пинг, ҳеҷ кадомаш аз 10 мс зиёд набуд, ба истиснои аввалин барои гармкунӣ. Ин бар хилофи афзоиши мушоҳидашудаи таъхири 50 мс дар фоизи 99-ум аст: дар он ҷо, барои ҳар 100 дархост, мо бояд тақрибан як дархостро бо таъхири 50 мс медидем.

Баъд ман кӯшиш кардам tracert: Шояд дар яке аз гиреҳҳо дар масири байни Элвин ва муштарӣ мушкилот вуҷуд дошта бошад. Аммо пайгиранда низ дасти холӣ баргашт.

Ҳамин тавр, ин рамзи ман, татбиқи gRPC ё шабака набуд, ки боиси таъхир гардид. Ман хавотир шудам, ки ман ҳеҷ гоҳ инро намефаҳмам.

Ҳоло мо дар кадом OS ҳастем

gRPC ба таври васеъ дар Linux истифода бурда мешавад, вале экзотикӣ дар Windows. Ман тасмим гирифтам, ки озмоишеро санҷам, ки он кор кард: Ман як мошини виртуалии Linux-ро сохтам, Алвинро барои Linux тартиб додам ва онро ҷойгир кардам.

Баъзан бештар камтар аст. Ҳангоми кам кардани сарборӣ боиси зиёд шудани таъхири

Ва ин аст, ки чӣ ҳодиса рӯй дод: сервери пинг-понги Linux ҳамон гуна таъхирҳоро бо мизбони шабеҳи Windows надошт, гарчанде ки манбаи додаҳо фарқе надошт. Маълум мешавад, ки мушкилот дар татбиқи gRPC барои Windows аст.

Алгоритми Нагле

Ҳама вақт ман фикр мекардам, ки парчам намерасад gRPC. Ҳоло ман фаҳмидам, ки ин дар ҳақиқат чӣ аст gRPC Парчами Windows нест. Ман китобхонаи дохилии RPC пайдо кардам, ки боварӣ доштам, ки барои ҳама парчамҳои муқарраршуда хуб кор мекунад Винсок. Пас аз он ман ҳамаи ин парчамҳоро ба gRPC илова кардам ва Элвинро дар Windows, дар сервери пинг-понги часпондашудаи Windows ҷойгир кардам!

Баъзан бештар камтар аст. Ҳангоми кам кардани сарборӣ боиси зиёд шудани таъхири

Қариб Иҷро шуд: Ман парчамҳои иловашударо як-як тоза кардам, то он даме, ки регрессия баргардад, то тавонам сабаби онро муайян кунам. Ин бадном буд TCP_NODELAY, Калиди алгоритми Нагле.

Алгоритми Нагле кӯшиш мекунад, ки шумораи бастаҳои тавассути шабака фиристодашуда бо роҳи таъхир додани интиқоли паёмҳо то он даме, ки андозаи пакет аз миқдори муайяни байт зиёд бошад. Гарчанде ки ин барои корбари миёна хуб аст, он барои серверҳои вақти воқеӣ харобиовар аст, зеро ОС баъзе паёмҳоро ба таъхир меандозад ва боиси ақибмонӣ дар QPS-и паст мегардад. У gRPC ин парчам дар татбиқи Linux барои розеткаҳои TCP гузошта шудааст, аммо на дар Windows. Ман ин ҳастам ислоҳ шудааст.

хулоса

Таъхири баландтар дар QPS паст аз сабаби оптимизатсияи OS ба вуҷуд омадааст. Дар бозгашт, профилсозӣ таъхирро ошкор накард, зеро он на дар реҷаи ядро ​​​​кор карда шуда буд ҳолати корбар. Ман намедонам, ки оё алгоритми Нагле тавассути сабтҳои ETW мушоҳида мешавад, аммо ин ҷолиб хоҳад буд.

Дар мавриди озмоиши localhost, он эҳтимол ба рамзи воқеии шабакавӣ даст назадааст ва алгоритми Нагле кор намекард, бинобар ин, вақте ки муштарӣ тавассути localhost ба Элвин расид, мушкилоти таъхир аз байн рафт.

Дафъаи дигар шумо афзоиши таъхирро мебинед, зеро шумораи дархостҳо дар як сония кам мешавад, алгоритми Нагле бояд дар рӯйхати гумонбарони шумо бошад!

Манбаъ: will.com

Илова Эзоҳ