Сіздің блокчейніңізде қанша TPS бар?

Техникалық емес тұлғаның кез келген таратылған жүйе туралы сүйікті сұрағы: «Сіздің блокчейніңізде қанша tps бар?» Дегенмен, жауап ретінде берілген санның әдетте сұрақ қоюшының естігісі келетін нәрсеге ортақтығы шамалы. Шындығында, ол «сіздің блокчейніңіз менің бизнес талаптарыма сай келе ме» деп сұрағысы келді және бұл талаптар бір сан емес, көптеген шарттар - мұнда желі ақауларына төзімділік, түпкілікті талаптар, өлшемдер, транзакциялар сипаты және басқа да көптеген параметрлер бар. Сондықтан «қанша tps» деген сұраққа жауап қарапайым болуы екіталай және ешқашан толық емес. Күрделі есептеулерді орындайтын ондаған немесе жүздеген түйіндері бар бөлінген жүйе желі күйіне, блокчейннің мазмұнына, техникалық ақауларға, экономикалық мәселелерге, желіге шабуылдарға және басқа да көптеген себептерге байланысты әртүрлі күйлердің үлкен санында болуы мүмкін. . Өнімділік мәселелері болуы мүмкін кезеңдері дәстүрлі қызметтерден ерекшеленеді және блокчейн желілік сервері дерекқордың, веб-сервердің және торрент клиентінің функционалдығын біріктіретін желілік қызмет болып табылады, бұл оны барлық ішкі жүйелердегі жүктеме профилі тұрғысынан өте күрделі етеді. : процессор, жад, желі, сақтау

Орталықтандырылмаған желілер мен блокчейндер орталықтандырылған бағдарламалық жасақтаманы әзірлеушілер үшін өте ерекше және әдеттен тыс бағдарламалық құрал болып табылады. Сондықтан мен орталықтандырылмаған желілердің өнімділігі мен тұрақтылығының маңызды аспектілерін, оларды өлшеу және кедергілерді табу тәсілдерін атап өткім келеді. Біз блокчейн пайдаланушыларына қызмет көрсету жылдамдығын шектейтін әртүрлі өнімділік мәселелерін қарастырамыз және бағдарламалық қамтамасыз етудің осы түріне тән мүмкіндіктерді атап өтеміз.

Блокчейн клиентінің қызмет сұрауының кезеңдері

Кез келген азды-көпті күрделі қызметтің сапасы туралы шынайы айту үшін тек орташа мәндерді ғана емес, сонымен қатар максималды/минималды, медианаларды, процентильдерді де ескеру қажет. Теориялық тұрғыдан кейбір блокчейндерде 1000 т/с туралы айтуға болады, бірақ егер 900 транзакция орасан зор жылдамдықпен аяқталса және 100 транзакция бірнеше секундқа «қақып» қалса, онда барлық транзакциялар бойынша жиналған орташа уақыт клиент үшін мүлдем әділ көрсеткіш емес. Мен транзакцияны бірнеше секундта аяқтай алмадым. Қабылданбаған консенсус раундтарынан немесе желінің бөлінуінен туындаған уақытша «саңылаулар» сынақ стендтерінде тамаша өнімділік көрсеткен қызметті айтарлықтай бұзуы мүмкін.

Мұндай кедергілерді анықтау үшін нақты блокчейннің пайдаланушыларға қызмет көрсетуде қиындықтар туындауы мүмкін кезеңдерді жақсы түсіну қажет. Келіңіздер, транзакцияны жеткізу және өңдеу циклін сипаттап көрейік, сонымен қатар блокчейннің жаңа күйін алу, одан клиент өзінің транзакциясының өңделгенін және есепке алынғанын тексере алады.

  1. транзакция клиентте қалыптасады
  2. транзакцияға клиент қол қояды
  3. клиент түйіндердің бірін таңдап, оған өзінің транзакциясын жібереді
  4. клиент оның транзакциясының нәтижелерінің пайда болуын күте отырып, түйіннің мемлекеттік дерекқорына жаңартуларға жазылады
  5. түйін транзакцияны p2p желісі арқылы таратады
  6. бірнеше немесе бір BP (блок өндіруші) жинақталған транзакцияларды өңдейді, мемлекеттік дерекқорды жаңартады
  7. BP транзакциялардың қажетті санын өңдегеннен кейін жаңа блокты құрайды
  8. BP p2p желісі арқылы жаңа блокты таратады
  9. жаңа блок клиент қатынасатын түйінге жеткізіледі
  10. түйін күй дерекқорын жаңартады
  11. түйін клиентке қатысты жаңартуды көреді және оған транзакция туралы хабарлама жібереді

Енді осы кезеңдерді егжей-тегжейлі қарастырайық және әр кезеңдегі ықтимал өнімділік мәселелерін сипаттайық. Орталықтандырылған жүйелерден айырмашылығы, біз желілік клиенттерде кодтың орындалуын да қарастырамыз. Көбінесе TPS өлшеу кезінде транзакцияны өңдеу уақыты клиенттен емес, түйіндерден алынады - бұл мүлдем әділ емес. Клиент түйіннің транзакцияны қаншалықты жылдам өңдегені маңызды емес, ол үшін ең бастысы - блокчейнге енгізілген осы транзакция туралы сенімді ақпарат оған қол жетімді болған сәт. Дәл осы көрсеткіш транзакцияның орындалу уақыты болып табылады. Бұл әртүрлі клиенттер, тіпті бір транзакцияны жіберсе де, арнаға, жүктемеге және түйіннің жақындығына және т.б. байланысты мүлдем басқа уақытты ала алатынын білдіреді. Сондықтан бұл уақытты клиенттерге өлшеу өте қажет, өйткені бұл оңтайландыруды қажет ететін параметр.

Клиент тарапынан транзакцияны дайындау

Алғашқы екі тармақтан бастайық: транзакцияны клиент қалыптастырады және оған қол қояды. Бір қызығы, бұл клиенттің көзқарасы бойынша блокчейн өнімділігінің тар жолы болуы мүмкін. Бұл барлық есептеулер мен деректермен операцияларды қабылдайтын орталықтандырылған қызметтер үшін әдеттен тыс және клиент дайын нәтижені ала отырып, деректердің немесе есептеулердің үлкен көлемін сұрай алатын қысқа сұранысты дайындайды. Блокчейндерде клиент коды барған сайын күшейе түседі, ал блокчейн ядросы барған сайын жеңілірек болады және жаппай есептеу тапсырмалары әдетте клиенттік бағдарламалық құралға беріледі. Блокчейндерде бір транзакцияны ұзақ уақытқа дайындай алатын клиенттер бар (мен әртүрлі меркерлік дәлелдер, қысқаша дәлелдер, шекті қолтаңбалар және клиент жағындағы басқа да күрделі операциялар туралы айтып отырмын). Жеңіл тізбектегі тексерудің және клиент бойынша транзакцияны күрделі дайындаудың жақсы мысалы - Merkle-tree негізіндегі тізімге мүшеліктің дәлелі, мұнда мақала.

Сондай-ақ, клиент коды транзакцияларды блокчейнге жай ғана жібермейтінін, бірақ алдымен блокчейннің күйін сұрайтынын ұмытпаңыз - және бұл әрекет желі мен блокчейн түйіндерінің кептелуіне әсер етуі мүмкін. Осылайша, өлшемдерді қабылдаған кезде, клиент кодының әрекетін мүмкіндігінше толығымен эмуляциялау орынды болар еді. Тіпті сіздің блокчейніңізде қандай да бір активті аудару үшін қарапайым транзакцияға тұрақты цифрлық қолтаңба қоятын қарапайым жеңіл клиенттер болса да, жыл сайын клиент бойынша әлі де ауқымды есептеулер бар, криптографиялық алгоритмдер күшейе түсуде және өңдеудің бұл бөлігі болашақта маңызды тығырыққа айналады. Сондықтан сақ болыңыз және 3.5 секундқа созылатын транзакцияда транзакцияны дайындауға және оған қол қоюға 2.5 секунд, ал желіге жіберуге және жауапты күтуге 1.0 секунд жұмсалатын жағдайды жіберіп алмаңыз. Бұл тығырықтың тәуекелдерін бағалау үшін тек блокчейн түйіндерінен емес, клиенттік машиналардан көрсеткіштерді жинау керек.

Транзакцияны жіберу және оның күйін бақылау

Келесі қадам транзакцияны таңдалған блокчейн түйініне жіберу және оны транзакция пулына қабылдау мәртебесін алу болып табылады. Бұл кезең дерекқорға кәдімгі қол жеткізуге ұқсас; түйін транзакцияны пулға жазып, p2p желісі арқылы ол туралы ақпаратты таратуды бастауы керек. Мұнда өнімділікті бағалау тәсілі дәстүрлі Web API микросервистерінің өнімділігін бағалауға ұқсас және блокчейндердегі транзакциялардың өзі жаңартылып, олардың күйін белсенді түрде өзгертуге болады. Жалпы, кейбір блокчейндердегі транзакция туралы ақпаратты жаңарту бірнеше рет орын алуы мүмкін, мысалы, тізбекті шанышқылар арасында ауысқанда немесе BP транзакцияны блокқа қосу ниетін жариялағанда. Бұл пулдың көлеміне және ондағы транзакциялар санына шектеулер блокчейннің өнімділігіне әсер етуі мүмкін. Егер транзакция пулы мүмкін болатын максималды өлшемге дейін толтырылса немесе жедел жадқа сәйкес келмесе, желі өнімділігі күрт төмендеуі мүмкін. Блокчейндерде қалаусыз хабарламалар тасқынынан қорғайтын орталықтандырылған құралдар жоқ және егер блокчейн үлкен көлемдегі транзакцияларды және төмен комиссияларды қолдаса, бұл транзакция пулының толып кетуіне әкелуі мүмкін - бұл басқа ықтимал өнімділік кедергісі.

Блокчейндерде клиент транзакцияны өзіне ұнайтын кез келген блокчейн түйініне жібереді, транзакцияның хэші әдетте жіберу алдында клиентке белгілі, сондықтан оған тек қосылымға қол жеткізу және жібергеннен кейін блокчейннің өзгеруін күту жеткілікті. оның транзакциясына мүмкіндік беретін күйі. «Tps» өлшеу арқылы блокчейн түйініне қосылудың әртүрлі әдістері үшін мүлдем басқа нәтижелерге қол жеткізуге болатынын ескеріңіз. Бұл әдеттегі HTTP RPC немесе «жазылу» үлгісін жүзеге асыруға мүмкіндік беретін WebSocket болуы мүмкін. Екінші жағдайда, клиент бұрын хабарландыру алады, ал түйін транзакция күйі туралы жауаптарға аз ресурстарды (негізінен жад пен трафик) жұмсайды. Сондықтан «tps» өлшеу кезінде клиенттердің түйіндерге қосылу тәсілін ескеру қажет. Сондықтан, осы тығырықтан туындайтын тәуекелдерді бағалау үшін эталондық блокчейн клиенттерді WebSocket және HTTP RPC сұрауларымен шынайы желілерге сәйкес пропорцияда эмуляциялай алуы, сондай-ақ транзакциялардың сипаты мен олардың өлшемін өзгертуі керек.

Бұл тығырықтың тәуекелдерін бағалау үшін тек блокчейн түйіндерінен емес, клиенттік машиналардан көрсеткіштерді жинау керек.

p2p желісі арқылы транзакциялар мен блоктарды беру

Блокчейндерде қатысушылар арасындағы транзакциялар мен блоктарды тасымалдау үшін тең дәрежелі (p2p) желі қолданылады. Транзакциялар түйіндердің бірінен бастап, транзакцияларды блоктарға жинайтын және бірдей p2p пайдалана отырып, барлық желі түйіндеріне жаңа блоктарды тарататын әріптес блок өндірушілеріне жеткенше бүкіл желіге таралады. Көптеген заманауи p2p желілерінің негізі Kademlia протоколының әртүрлі модификациялары болып табылады. осында осы хаттаманың жақсы қысқаша мазмұны, және қараңыз - BitTorrent желісіндегі әртүрлі өлшемдері бар мақала, одан желінің бұл түрі орталықтандырылған қызметтің қатаң конфигурацияланған желісіне қарағанда күрделірек және болжамдылығы азырақ екенін түсінуге болады. Сондай-ақ, қараңыз Ethereum түйіндері үшін әртүрлі қызықты метрикаларды өлшеу туралы мақала.

Қысқаша айтқанда, мұндай желілердегі әрбір құрдас басқа теңдестердің өзінің динамикалық тізімін сақтайды, олардан ол мазмұнға бағытталған ақпарат блоктарын сұрайды. Сұрауды алған кезде, ол қажетті ақпаратты береді немесе сұрауды тізімнен келесі жалған кездейсоқ теңдестігіне береді және жауап алған соң оны сұраушыға береді және оны біраз уақытқа кэштейді, осылайша келесі жолы ертерек ақпарат блогы. Осылайша, танымал ақпарат көптеген құрдастар санының кэштерінде аяқталады, ал танымал емес ақпарат біртіндеп ауыстырылады. Құрбылар кімнің кімге қанша ақпарат бергені туралы жазбаларды жүргізеді және желі белсенді дистрибьюторларды олардың рейтингтерін жоғарылату және оларға жоғары деңгейдегі қызмет көрсету арқылы ынталандыруға тырысады, белсенді емес қатысушыларды тең тізімнен автоматты түрде ығыстырады.

Сонымен, транзакцияны енді блок-продюсерлер оны көріп, блокқа қосуы үшін бүкіл желіге тарату керек. Түйін жаңа транзакцияны барлығына белсенді түрде «таратады» және күтетін клиентті хабардар ету үшін индексте қажетті транзакция пайда болатын блокты күтіп, желіні тыңдайды. Желіге p2p желілерінде жаңа транзакциялар мен блоктар туралы ақпаратты бір-біріне жіберуге кететін уақыт факторлардың өте үлкен санына байланысты: жақын жерде жұмыс істейтін адал түйіндердің саны (желі тұрғысынан), «жылы- осы түйіндердің кэштерін, блоктардың өлшемін, транзакцияларды, өзгерістер сипатын, желі географиясын, түйіндер санын және басқа да көптеген факторларды жоғарылатады. Мұндай желілердегі өнімділік көрсеткіштерінің күрделі өлшемдері күрделі мәселе болып табылады; бір уақытта клиенттерде де, әріптестерде де (блокчейн түйіндері) сұранысты өңдеу уақытын бағалау қажет. Кез келген p2p механизмдеріндегі мәселелер, деректерді қате шығару және кэштеу, белсенді серіктестер тізімдерін тиімсіз басқару және басқа да көптеген факторлар тұтастай алғанда бүкіл желінің тиімділігіне әсер ететін кідірістерді тудыруы мүмкін және бұл тығырықты талдау ең қиын болып табылады. , тестілеу және нәтижелерді интерпретациялау.

Блокчейнді өңдеу және мемлекеттік дерекқорды жаңарту

Блокчейннің ең маңызды бөлігі консенсус алгоритмі, оны желіден алынған жаңа блоктарға қолдану және нәтижелерді мемлекеттік дерекқорға тіркей отырып, транзакцияларды өңдеу болып табылады. Тізбекке жаңа блок қосу, содан кейін негізгі тізбекті таңдау мүмкіндігінше жылдам жұмыс істеуі керек. Дегенмен, нақты өмірде «керек» деген сөз «жұмыс істейді» дегенді білдірмейді және, мысалы, екі ұзақ бәсекелес тізбек үнемі бір-бірімен ауысатын жағдайды елестетуге болады, бұл әр коммутаторда пулдағы мыңдаған транзакциялардың метадеректерін өзгертеді. , және мемлекеттік дерекқорды үнемі кері айналдыру. Бұл кезең тығырықты анықтау тұрғысынан p2p желілік қабатына қарағанда қарапайым, өйткені транзакцияны орындау және консенсус алгоритмі қатаң детерминирленген және мұнда кез келген нәрсені өлшеу оңайырақ.
Ең бастысы, осы кезеңді орындаудағы кездейсоқ деградацияны желілік мәселелермен шатастырмау - түйіндер блоктарды және негізгі тізбек туралы ақпаратты жеткізуде баяуырақ, ал сыртқы клиент үшін бұл баяу желі сияқты көрінуі мүмкін, бірақ мәселе мынада жатыр. мүлде басқа жер.

Осы кезеңде өнімділікті оңтайландыру үшін түйіндердің өздерінен көрсеткіштерді жинау және бақылау және оларға күй-деректер қорын жаңартуға қатыстыларды қосу пайдалы: түйінде өңделген блоктар саны, олардың өлшемі, транзакциялар саны, тізбек шанышқылары арасындағы қосқыштар саны, жарамсыз блоктар саны, виртуалды машинаның жұмыс уақыты, деректерді қабылдау уақыты және т.б. Бұл желілік проблемаларды тізбекті өңдеу алгоритмдеріндегі қателермен шатастыруға жол бермейді.

Транзакцияларды өңдеу виртуалды машина блокчейннің жұмысын оңтайландыратын пайдалы ақпарат көзі бола алады. Жадты бөлу саны, оқу/жазу нұсқауларының саны және келісімшарт кодын орындау тиімділігіне қатысты басқа көрсеткіштер әзірлеушілерге көптеген пайдалы ақпаратты бере алады. Сонымен қатар, смарт келісім-шарттар бағдарламалар болып табылады, бұл теорияда олар кез келген ресурстарды тұтына алады: процессор/жад/желі/сақтау, сондықтан транзакцияны өңдеу өте белгісіз кезең болып табылады, оған қоса, нұсқалар арасында ауысқанда айтарлықтай өзгереді. және шарт кодтарын өзгерту кезінде. Сондықтан транзакцияларды өңдеуге қатысты көрсеткіштер блокчейн өнімділігін тиімді оңтайландыру үшін де қажет.

Клиенттің транзакцияны блокчейнге қосу туралы хабарламаны алуы

Бұл блокчейн клиентінің қызметті алуының соңғы кезеңі; басқа кезеңдермен салыстырғанда үлкен үстеме шығындар жоқ, бірақ клиенттің түйіннен көлемді жауап алу мүмкіндігін қарастырған жөн (мысалы, смарт келісім-шарт). деректер массивін қайтару). Қалай болғанда да, бұл нүкте «сіздің блокчейніңізде қанша tps бар?» Деген сұрақты қойған адам үшін ең маңызды, өйткені Қазіргі уақытта қызметті алу уақыты жазылады.

Бұл жерде әрқашан клиент блокчейннен жауап күтуге жұмсауға тура келетін толық уақытты жіберу бар; дәл осы уақытта пайдаланушы өз қосымшасында растауды күтеді және оны оңтайландыру болып табылады. әзірлеушілердің негізгі міндеті.

қорытынды

Нәтижесінде блокчейндерде орындалатын операциялардың түрлерін сипаттап, оларды бірнеше санатқа бөлуге болады:

  1. криптографиялық түрлендірулер, дәлелдеу құрылысы
  2. тең дәрежелі желі, транзакция және блокты репликациялау
  3. транзакцияларды өңдеу, смарт келісім-шарттарды орындау
  4. блокчейндегі өзгерістерді мемлекеттік дерекқорға қолдану, транзакциялар мен блоктар туралы деректерді жаңарту
  5. күй дерекқорына, API блокчейн түйініне, жазылым қызметтеріне тек оқуға арналған сұраулар

Тұтастай алғанда, қазіргі заманғы блокчейн түйіндеріне қойылатын техникалық талаптар өте маңызды – криптографияға арналған жылдам процессорлар, сақтау және мемлекеттік деректер базасына жылдам қол жеткізу үшін оперативті жадының үлкен көлемі, бір уақытта ашық қосылымдардың үлкен санын пайдаланып желілік өзара әрекеттесу және үлкен жады. Мұндай жоғары талаптар және әртүрлі операциялар түрлерінің көптігі сөзсіз түйіндердің жеткілікті ресурстарға ие болмауына әкеледі, содан кейін жоғарыда қарастырылған кез келген кезең жалпы желінің өнімділігі үшін тағы бір тығырық болуы мүмкін.

Блокчейндердің өнімділігін жобалау және бағалау кезінде сіз осы тармақтардың барлығын ескеруіңіз керек. Ол үшін бір уақытта клиенттерден және желі түйіндерінен көрсеткіштерді жинау және талдау, олардың арасындағы корреляцияны іздеу, клиенттерге қызмет көрсетуге кететін уақытты бағалау, барлық негізгі ресурстарды ескеру қажет: процессор/жад/желі/сақтау , олардың қалай қолданылатынын түсініп, бір-біріне әсер етеді. Мұның бәрі әртүрлі блокчейндердің жылдамдықтарын «қанша TPS» түріндегі салыстыруды өте риза емес тапсырмаға айналдырады, өйткені әртүрлі конфигурациялар мен күйлердің үлкен саны бар. Үлкен орталықтандырылған жүйелерде, жүздеген серверлердің кластерлерінде бұл мәселелер де күрделі және әртүрлі өлшемдердің үлкен санын жинауды талап етеді, бірақ блокчейндерде p2p желілеріне, келісім-шарттарды өңдеуге арналған виртуалды машиналарға, ішкі экономикаларға, дәрежелер санына байланысты. еркіндік әлдеқайда үлкен, бұл тестті бірнеше серверлерде де жасайды, ол индикативті емес және шындықпен байланысы жоқ өте жуық мәндерді ғана көрсетеді.

Сондықтан, блокчейн өзегінде даму кезінде өнімділікті бағалау және «өткен уақытпен салыстырғанда жақсарды ма?» деген сұраққа жауап беру үшін біз ондаған түйіндері бар блокчейнді іске қосуды ұйымдастыратын және автоматты түрде эталонды іске қосатын және көрсеткіштерді жинайтын өте күрделі бағдарламалық жасақтаманы қолданамыз. ; бұл ақпаратсыз бірнеше қатысушылармен жұмыс істейтін протоколдарды жөндеу өте қиын.

Сонымен, сіз «Сіздің блокчейніңізде қанша TPS бар?» Деген сұрақты алған кезде, әңгімелесушіңізге шай ұсыныңыз және оның ондаған графиктерді қарауға дайын екенін сұраңыз, сонымен қатар блокчейн өнімділігі мәселелерінің барлық үш қорабын тыңдаңыз және сіздің ұсыныстарыңызды тыңдаңыз. оларды шешу ...

Ақпарат көзі: www.habr.com

пікір қалдыру