{"id":36157,"date":"2019-10-31T22:09:55","date_gmt":"2019-10-31T19:09:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/skolko-tps-v-vashem-blokchejne\/"},"modified":"2019-10-31T22:09:55","modified_gmt":"2019-10-31T19:09:55","slug":"skolko-tps-v-vashem-blokchejne","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne","title":{"rendered":"C\u00e2te TPS are blockchain-ul dumneavoastr\u0103?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>O \u00eentrebare frecvent\u0103 despre orice sistem distribuit din partea unui specialist non-tehnic este \u201eCare este num\u0103rul de tps \u00een blockchain-ul vostru?\u201d. Totu\u0219i, cifra men\u021bionat\u0103 ca r\u0103spuns este de obicei pu\u021bin relevant\u0103 pentru ceea ce ar dori s\u0103 aud\u0103 \u00eentreb\u0103torul. \u00cen realitate, el a vrut s\u0103 \u00eentrebe \u201eVa fi blockchain-ul vostru potrivit pentru cerin\u021bele mele de afaceri\u201d, iar aceste cerin\u021be nu constau \u00eentr-un singur num\u0103r, ci \u00eentr-o multitudine de condi\u021bii \u2014 aici se includ at\u00e2t rezisten\u021ba la erori a re\u021belei, c\u00e2t \u0219i cerin\u021bele legate de finalitate, dimensiunile, natura tranzac\u021biilor \u0219i multe alte parametrii. A\u0219adar, r\u0103spunsul la \u00eentrebarea \u201ec\u00e2te tps\u201d va fi probabil complicat \u0219i aproape niciodat\u0103 complet. Un sistem distribuit cu zeci \u0219i sute de noduri care efectueaz\u0103 calcule destul de complexe poate exista \u00eentr-un num\u0103r mare de st\u0103ri diferite, legate de starea re\u021belei, con\u021binutul blockchain-ului, defectele tehnice, problemele economice, atacurile asupra re\u021belei \u0219i multe alte motive. Etapele \u00een care pot ap\u0103rea probleme de performan\u021b\u0103 sunt diferite de serviciile tradi\u021bionale, iar serverul re\u021belei blockchain este un serviciu de re\u021bea care combin\u0103 func\u021bionalitatea unei baze de date, a unui server web \u0219i a unui client torrent, ceea ce \u00eel face extrem de complex \u00een ceea ce prive\u0219te profilul de sarcin\u0103 asupra tuturor subsistemelor: procesor, memorie, re\u021bea, stocare.<\/p>\n<p><\/p>\n<p>S-a \u00eent\u00e2mplat ca re\u021belele descentralizate \u0219i blockchain-urile s\u0103 fie un software destul de specific \u0219i neobi\u0219nuit pentru dezvoltatorii de software centralizat. De aceea, a\u0219 dori s\u0103 subliniez aspectele importante ale performan\u021bei \u0219i rezilien\u021bei re\u021belelor descentralizate, abord\u0103rile de m\u0103surare ale acestora \u0219i identificarea bottleneck-urilor. Vom examina diferitele probleme de performan\u021b\u0103 care limiteaz\u0103 viteza de livrare a serviciilor utilizatorilor blockchain-urilor \u0219i vom observa tr\u0103s\u0103turile caracteristice acestui tip de software.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"etapy-zaprosa-servisa-klientom-blokcheyna\">Etapele solicit\u0103rii serviciului de c\u0103tre clientul blockchain-ului<\/h2>\n<p><\/p>\n<p>Pentru a vorbi cu sinceritate despre calitatea oric\u0103rui serviciu mai complex, trebuie s\u0103 \u021binem cont nu doar de valorile medii, ci \u0219i de maxime, minime, medii aritmetice \u0219i percentile. Teoretic, se poate vorbi despre 1000 tps \u00eentr-un blockchain, dar dac\u0103 900 de tranzac\u021bii au fost procesate rapid \u0219i 100 au \"\u00eenghe\u021bat\" timp de c\u00e2teva secunde, atunci timpul mediu calculat pe baza tuturor tranzac\u021biilor nu este o metric\u0103 corect\u0103 pentru clientul care nu a reu\u0219it s\u0103 finalizeze tranzac\u021bia \u00een c\u00e2teva secunde. \"G\u0103urile\" temporale cauzate de runde de consens omise sau de divizarea re\u021belei pot afecta semnificativ un serviciu care a demonstrat o performan\u021b\u0103 excelent\u0103 pe bancurile de testare.<\/p>\n<p><\/p>\n<p>Pentru a identifica astfel de bottleneck-uri, trebuie s\u0103 \u00een\u021belegem bine etapele \u00een care un blockchain real poate \u00eent\u00e2mpina dificult\u0103\u021bi \u00een servirea utilizatorilor. S\u0103 descriem ciclul de livrare \u0219i procesare a tranzac\u021biilor, precum \u0219i ob\u021binerea unei noi st\u0103ri a blockchain-ului, din care clientul poate verifica c\u0103 tranzac\u021bia sa a fost procesat\u0103 \u0219i \u00eenregistrat\u0103.<\/p>\n<p><\/p>\n<ol>\n<li>tranzac\u021bia se formeaz\u0103 pe client<\/li>\n<li>tranzac\u021bia este semnat\u0103 pe client<\/li>\n<li>clientul alege unul dintre noduri \u0219i \u00ee\u0219i trimite tranzac\u021bia c\u0103tre acesta<\/li>\n<li>clientul se aboneaz\u0103 la actualiz\u0103rile bazei de date a st\u0103rii nodului, a\u0219tept\u00e2nd apari\u021bia rezultatelor execu\u021biei tranzac\u021biei sale<\/li>\n<li>nodul r\u0103sp\u00e2nde\u0219te tranzac\u021bia prin re\u021beaua p2p<\/li>\n<li>c\u00e2teva sau un singur BP (block producer) proceseaz\u0103 tranzac\u021biile acumulate, actualiz\u00e2nd baza de date a st\u0103rii<\/li>\n<li>BP formeaz\u0103 un nou bloc, proces\u00e2nd num\u0103rul necesar de tranzac\u021bii<\/li>\n<li>BP r\u0103sp\u00e2nde\u0219te noul bloc prin re\u021beaua p2p<\/li>\n<li>noul bloc este livrat c\u0103tre nodul la care se adreseaz\u0103 clientul<\/li>\n<li>nodul actualizeaz\u0103 baza de date a st\u0103rii<\/li>\n<li>nodul observ\u0103 actualizarea referitoare la client \u0219i \u00eei trimite o notificare despre tranzac\u021bie<\/li>\n<\/ol>\n<p><\/p>\n<p>Acum s\u0103 examin\u0103m aceste etape \u00een detaliu \u0219i s\u0103 descriem problemele poten\u021biale de performan\u021b\u0103 la fiecare etap\u0103. Spre deosebire de sistemele centralizate, vom analiza \u0219i execu\u021bia codului pe clien\u021bii re\u021belei. Destul de des, la m\u0103surarea tps, timpul de procesare a tranzac\u021biilor este colectat de la noduri, nu de la client \u2014 ceea ce nu este tocmai corect. Clientului nu-i pas\u0103 c\u00e2t de repede a procesat nodul tranzac\u021bia lui, cel mai important pentru el este momentul \u00een care informa\u021bia valid\u0103 despre aceast\u0103 tranzac\u021bie, inclus\u0103 \u00een blockchain, devine disponibil\u0103. Aceast\u0103 metric\u0103 este, de fapt, timpul de execu\u021bie a tranzac\u021biei. Aceasta \u00eenseamn\u0103 c\u0103 diferi\u021bi clien\u021bi, chiar \u0219i atunci c\u00e2nd trimit aceea\u0219i tranzac\u021bie, pot ob\u021bine timpi complet diferi\u021bi, care depind de canal, de \u00eenc\u0103rcare \u0219i de proximitatea nodului, etc. A\u0219adar, este absolut necesar s\u0103 m\u0103sur\u0103m acest timp pe clien\u021bi, deoarece aceasta este parametrul care trebuie optimizat.<\/p>\n<p><\/p>\n<h2 id=\"podgotovka-tranzakcii-na-storone-klienta\">Preg\u0103tirea tranzac\u021biei pe partea clientului<\/h2>\n<p><\/p>\n<p>S\u0103 \u00eencepem cu primele dou\u0103 puncte: tranzac\u021bia este format\u0103 \u0219i semnat\u0103 de client. Ciudat, este un poten\u021bial bottleneck de performan\u021b\u0103 a blockchain-ului din perspectiva clientului. Aceasta este neobi\u0219nuit pentru serviciile centralizate, care \u00ee\u0219i asum\u0103 toate calculele \u0219i opera\u021biile cu datele, iar clientul preg\u0103te\u0219te pur \u0219i simplu o cerere scurt\u0103, capabil\u0103 s\u0103 solicite un volum mare de date sau calcule, ob\u021bin\u00e2nd un rezultat final. \u00cen blockchain-uri, codul clientului devine din ce \u00een ce mai puternic, iar nucleul blockchain-ului devine din ce \u00een ce mai u\u0219or, iar sarcinile de calcul masive sunt predat\u0103 software-ului client. \u00cen blockchain-uri exist\u0103 clien\u021bi care pot preg\u0103ti o tranzac\u021bie destul de mult timp (vorbesc despre diverse dovezi Merkle, dovezi succincte, semn\u0103turi threshold \u0219i alte opera\u021bii complexe pe partea clientului). Un exemplu bun de verificare u\u0219oar\u0103 on-chain \u0219i preg\u0103tire grea a tranzac\u021biei pe client este dovada apartenen\u021bei la o list\u0103 pe baza unui Merkle-tree, iat\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/evolution-of-airdrop-from-common-spam-to-the-merkle-tree-30caa2344170\">articol<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>De asemenea, nu trebuie uitat c\u0103 codul clientului nu trimite doar tranzac\u021bii \u00een blockchain, ci mai \u00eent\u00e2i cere starea blockchain-ului \u2014 iar aceast\u0103 activitate poate influen\u021ba \u00eenc\u0103rcarea re\u021belei \u0219i a nodurilor blockchain. A\u0219adar, atunci c\u00e2nd facem m\u0103sur\u0103tori, ar fi \u00een\u021belept s\u0103 emul\u0103m c\u00e2t mai complet comportamentul codului clientului. Chiar dac\u0103 \u00een blockchain-ul t\u0103u exist\u0103 clien\u021bi obi\u0219nui\u021bi care semneaz\u0103 digital o tranzac\u021bie simpl\u0103 de transfer a unui anumit asset, cu fiecare an, volumul de calcul pe client devine tot mai mare, algoritmii criptografici devin mai puternici, iar aceast\u0103 parte a proces\u0103rii poate deveni un bottleneck semnificativ \u00een viitor. De aceea, fii atent \u0219i nu rata situa\u021bia \u00een care, dintr-o tranzi\u021bie care dureaz\u0103 3.5s, 2.5s sunt consumate pentru preg\u0103tirea \u0219i semnarea tranzac\u021biei, iar 1.0s pentru trimiterea \u00een re\u021bea \u0219i a\u0219teptarea r\u0103spunsului. Pentru a evalua riscurile apari\u021biei acestui bottleneck, trebuie s\u0103 colectezi metrici de pe ma\u0219inile clientului, nu doar de la nodurile blockchain.<\/p>\n<p><\/p>\n<h2 id=\"otpravka-tranzakcii-i-monitoring-ee-statusa\">Trimiterea tranzac\u021biei \u0219i monitorizarea st\u0103rii acesteia<\/h2>\n<p><\/p>\n<p>Urm\u0103torul pas este trimiterea tranzac\u021biei c\u0103tre nodul blockchain selectat \u0219i ob\u021binerea st\u0103rii de acceptare a acesteia \u00een pool-ul de tranzac\u021bii. Aceast\u0103 etap\u0103 este similar\u0103 cu o solicitare obi\u0219nuit\u0103 c\u0103tre o baz\u0103 de date, nodul trebuie s\u0103 \u00eenregistreze tranzac\u021bia \u00een pool \u0219i s\u0103 \u00eenceap\u0103 s\u0103 r\u0103sp\u00e2ndeasc\u0103 informa\u021bia despre aceasta prin re\u021beaua p2p. Abordarea de evaluare a performan\u021bei aici este similar\u0103 cu evaluarea func\u021bion\u0103rii microservicilor tradi\u021bionali Web API, iar tranzac\u021biile din blockchain-uri pot fi actualizate, schimb\u00e2nd activ starea. \u00cen general, actualizarea informa\u021biei despre tranzac\u021bie \u00een unele blockchain-uri poate s\u0103 aib\u0103 loc de mai multe ori, de exemplu, \u00een cazul trecerii \u00eentre fork-uri ale lan\u021bului sau atunci c\u00e2nd BP-urile anun\u021b\u0103 inten\u021bia de a include tranzac\u021bia \u00een bloc. Restric\u021biile asupra volumului acestui pool \u0219i num\u0103rul de tranzac\u021bii din acesta pot influen\u021ba performan\u021ba blockchain-ului. Dac\u0103 pool-ul de tranzac\u021bii este umplut p\u00e2n\u0103 la dimensiunea maxim\u0103 posibil\u0103 sau nu \u00eencape \u00een memoria opera\u021bional\u0103 \u2014 performan\u021ba re\u021belei poate sc\u0103dea brusc. Blockchain-urile nu au mijloace centralizate de protec\u021bie \u00eempotriva fluxului de mesaje junk, iar dac\u0103 blockchain-ul suport\u0103 tranzac\u021bii de mari dimensiuni \u0219i comisioane reduse, acesta poate duce la supraaglomerarea pool-ului de tranzac\u021bii \u2014 acesta este un alt poten\u021bial bottleneck de performan\u021b\u0103.<\/p>\n<p><\/p>\n<p>\u00cen blockchain-uri, clientul trimite o tranzac\u021bie c\u0103tre orice nod al blockchain-ului care \u00eei place, hash-ul tranzac\u021biei este, de obicei, cunoscut clientului chiar \u00eenainte de trimitere, astfel \u00eenc\u00e2t tot ce trebuie s\u0103 fac\u0103 este s\u0103 se conecteze \u0219i, dup\u0103 transmitere, s\u0103 a\u0219tepte c\u00e2nd blockchain-ul \u00ee\u0219i va schimba starea, integr\u00e2ndu-i tranzac\u021bia. Observ\u0103m c\u0103, m\u0103sur\u00e2nd \"tps\", se pot ob\u021bine rezultate complet diferite pentru diversele modalit\u0103\u021bi de conectare la nodul blockchain-ului. Aceasta poate fi o RPC HTTP obi\u0219nuit\u0103 sau WebSocket, care permite implementarea modelului \"subscribe\". \u00cen cel de-al doilea caz, clientul va primi o notificare mai devreme, iar nodul va consuma mai pu\u021bine resurse (\u00een principal memorie \u0219i trafic) pentru a r\u0103spunde la starea tranzac\u021biei. A\u0219adar, atunci c\u00e2nd m\u0103sur\u0103m \"tps\", este esen\u021bial s\u0103 lu\u0103m \u00een considerare modul de conectare al clien\u021bilor la noduri. Prin urmare, pentru a evalua riscurile apari\u021biei acestui bottleneck, benchmark-ul blockchain-ului ar trebui s\u0103 fie capabil s\u0103 emuleze clien\u021bi at\u00e2t cu WebSocket, c\u00e2t \u0219i cu solicit\u0103ri RPC HTTP, \u00een propor\u021bii corespunz\u0103toare re\u021belelor reale, precum \u0219i s\u0103 schimbe natura tranzac\u021biilor \u0219i dimensiunea acestora.<\/p>\n<p><\/p>\n<p>Pentru a evalua riscurile apari\u021biei acestui bottleneck, este necesar s\u0103 se colecteze metriki \u0219i de pe ma\u0219inile clien\u021bilor, nu doar de pe nodurile blockchain.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-tranzakciy-i-blokov-po-p2p-seti\">Transmiterea tranzac\u021biilor \u0219i blocurilor prin re\u021bea p2p<\/h2>\n<p><\/p>\n<p>\u00cen blockchain-uri, pentru transferul tranzac\u021biilor \u0219i blocurilor \u00eentre participan\u021bi se utilizeaz\u0103 re\u021bele peer-to-peer (p2p). Tranzac\u021biile se r\u0103sp\u00e2ndesc prin re\u021bea, \u00eencep\u00e2nd de la unul dintre noduri, p\u00e2n\u0103 ajung la peer-ii produc\u0103torilor de blocuri, care \u00eenglobeaz\u0103 tranzac\u021biile \u00een blocuri \u0219i, prin aceea\u0219i re\u021bea p2p, r\u0103sp\u00e2ndesc noile blocuri la toate nodurile din re\u021bea. Baza majorit\u0103\u021bii re\u021belelor p2p moderne este format\u0103 din diverse modific\u0103ri ale protocolului Kademlia. <noindex><a rel=\"nofollow\" href=\"https:\/\/cardanodocs.com\/technical\/protocols\/p2p\/\">Iat\u0103<\/a><\/noindex> o bun\u0103 prezentare general\u0103 a acestui protocol, iar <noindex><a rel=\"nofollow\" href=\"https:\/\/web.njit.edu\/~dingxn\/papers\/BT-JSAC.pdf\">iat\u0103<\/a><\/noindex> \u2013 un articol cu diverse m\u0103sur\u0103tori \u00een re\u021beaua BitTorrent, din care se poate \u00een\u021belege c\u0103 acest tip de re\u021bele este mai complex \u0219i mai imprevizibil dec\u00e2t o re\u021bea centralizat\u0103 rigid configurat\u0103. De asemenea, <noindex><a rel=\"nofollow\" href=\"https:\/\/zanema.com\/papers\/imc18_ethpeers.pdf\">iat\u0103<\/a><\/noindex> un articol despre m\u0103surarea diferitelor metrici interesante pentru nodurile Ethereum.<\/p>\n<p><\/p>\n<p>\u00cen esen\u021b\u0103, fiecare peer din aceste re\u021bele \u00ee\u0219i men\u021bine propria list\u0103 dinamic\u0103 de al\u021bi peers, de la care solicit\u0103 blocuri de informa\u021bie adresate pe baza con\u021binutului. Atunci c\u00e2nd prime\u0219te o solicitare, peer-ul fie furnizeaz\u0103 informa\u021bia solicitat\u0103, fie transmite solicitarea c\u0103tre urm\u0103torul peer pseudo-aleator din list\u0103, iar dup\u0103 ce prime\u0219te un r\u0103spuns, \u00eel trimite celui care a solicitat \u0219i \u00eel memoreaz\u0103 temporar, oferind acest bloc de informa\u021bii mai devreme data viitoare. Astfel, informa\u021biile populare ajung s\u0103 fie \u00een multe cache-uri ale unui num\u0103r mare de peers, \u00een timp ce cele nepopulare sunt treptat eliminate. Peers \u021bin eviden\u021ba a c\u00e2te informa\u021bii au transferat unii altora, iar re\u021beaua \u00eencearc\u0103 s\u0103 stimuleze distribuitorii activi, sporindu-le ratingul \u0219i asigur\u00e2ndu-le un nivel mai \u00eenalt de serviciu, elimin\u00e2nd automat participan\u021bii inactivi din listele de peers.<\/p>\n<p><\/p>\n<p>A\u0219adar, tranzac\u021bia trebuie acum s\u0103 fie distribuit\u0103 \u00een re\u021bea, astfel \u00eenc\u00e2t s\u0103 fie vizibil\u0103 pentru produc\u0103torii de blocuri \u0219i s\u0103 fie inclus\u0103 \u00eentr-un bloc. Nodul distribuie activ noua tranzac\u021bie tuturor doritorilor \u0219i ascult\u0103 re\u021beaua, a\u0219tept\u00e2nd blocul \u00een care va ap\u0103rea tranzac\u021bia dorit\u0103, pentru a notifica clientul care a\u0219teapt\u0103. Timpul \u00een care re\u021beaua transfer\u0103 informa\u021bii despre noi tranzac\u021bii \u0219i blocuri \u00een re\u021bele p2p depinde de un num\u0103r foarte mare de factori: num\u0103rul de noduri apropiate care func\u021bioneaz\u0103 corect (din punct de vedere al re\u021belei), \u201e\u00eenc\u0103lzirea\u201d memoriei cache a acestor noduri, dimensiunea blocurilor \u0219i a tranzac\u021biilor, natura modific\u0103rilor, geografia re\u021belei, num\u0103rul de noduri \u0219i mul\u021bi al\u021bi factori. M\u0103surarea complex\u0103 a metricilor de performan\u021b\u0103 \u00een astfel de re\u021bele este o sarcin\u0103 complicat\u0103; este necesar\u0103 evaluarea simultan\u0103 a timpului de procesare a cererilor at\u00e2t pe clien\u021bi, c\u00e2t \u0219i pe peer-uri (noduri blockchain). Probleme \u00een orice mecanism p2p, management incorect al excluderilor \u0219i al memoriei cache, gestionarea ineficient\u0103 a listelor de peer-uri active \u0219i multe alte aspecte pot deveni cauza \u00eent\u00e2rzierilor, care afecteaz\u0103 eficien\u021ba \u00eentregii re\u021bele, iar acest bottleneck este cel mai dificil de analizat, testat \u0219i interpretat.<\/p>\n<p><\/p>\n<h2 id=\"processing-cepochki-blokov-i-obnovlenie-state-database\">Procesarea lan\u021bului de blocuri \u0219i actualizarea bazei de date de stare<\/h2>\n<p><\/p>\n<p>Cea mai important\u0103 parte a func\u021bion\u0103rii blockchain-ului este algoritmul de consens, aplicarea acestuia la blocurile noi primite din re\u021bea \u0219i procesarea tranzac\u021biilor cu \u00eenregistrarea rezultatelor \u00een baza de date de stare. Ad\u0103ugarea unui nou bloc \u00een lan\u021b \u0219i selectarea ulterioar\u0103 a lan\u021bului principal ar trebui s\u0103 func\u021bioneze c\u00e2t mai rapid posibil. Cu toate acestea, \u00een via\u021ba real\u0103, \u201ear trebui\u201d nu \u00eenseamn\u0103 \u201efunc\u021bioneaz\u0103\u201d, \u0219i putem, de exemplu, s\u0103 ne imagin\u0103m o situa\u021bie \u00een care dou\u0103 lan\u021buri lungi concurente se comut\u0103 constant \u00eentre ele, modific\u00e2nd meta-datele a mii de tranzac\u021bii din pool la fiecare comutare, \u0219i provoc\u00e2nd constant revenirea la starea bazei de date de stare. Aceast\u0103 etap\u0103, \u00een ceea ce prive\u0219te determinarea bottleneck-ului, este mai simpl\u0103 dec\u00e2t stratul de re\u021bea p2p, deoarece execu\u021bia tranzac\u021biilor \u0219i algoritmul de consens sunt stricte \u0219i deteministe, iar m\u0103surarea oric\u0103rui aspect aici este mai u\u0219oar\u0103.<br \/>\nCel mai important este s\u0103 nu confund\u0103m degradarea randomizat\u0103 a performan\u021bei acestei etape cu problemele re\u021belei - nodurile r\u0103spund mai lent blocurilor \u0219i informa\u021biilor despre lan\u021bul principal \u0219i pentru clientul extern, aceasta poate p\u0103rea o re\u021bea lent\u0103, de\u0219i problema se afl\u0103 complet \u00een alt\u0103 parte.<\/p>\n<p><\/p>\n<p>Pentru optimizarea performan\u021bei \u00een aceast\u0103 etap\u0103, este util s\u0103 colect\u0103m \u0219i s\u0103 monitoriz\u0103m metrici de la noduri, incluz\u00e2ndu-le pe cele care vizeaz\u0103 actualizarea bazei de date de stat: num\u0103rul de blocuri procesate pe nod, dimensiunea acestora, num\u0103rul de tranzac\u021bii, num\u0103rul de switch-uri \u00eentre fork-uri, num\u0103rul de blocuri invalide, timpul de execu\u021bie al ma\u0219inii virtuale, timpul pentru fixa\u021bii de date etc. Acest lucru va permite s\u0103 nu confund\u0103m problemele de re\u021bea cu erorile din algoritmii de procesare a lan\u021bului.<\/p>\n<p><\/p>\n<p>Ma\u0219ina virtual\u0103 care proceseaz\u0103 tranzac\u021biile poate fi o surs\u0103 valoroas\u0103 de informa\u021bii capabile s\u0103 optimizeze func\u021bionarea blocului de date. Cantitatea de aloc\u0103ri de memorie, num\u0103rul de instruc\u021biuni read\/write, \u0219i alte metrici care \u021bin de eficien\u021ba execu\u021biei codului contractelor pot oferi multe informa\u021bii utile dezvoltatorilor. \u00cen acela\u0219i timp, contractele inteligente sunt programe, ceea ce \u00eenseamn\u0103 c\u0103, teoretic, acestea pot consuma orice dintre resurse: cpu\/memory\/network\/storage, astfel c\u0103 procesarea tranzac\u021biilor este o etap\u0103 destul de indefinit\u0103, care, \u00een plus, variaz\u0103 semnificativ atunci c\u00e2nd se trece \u00eentre versiuni \u0219i c\u00e2nd se modific\u0103 codul contractelor. Prin urmare, metricile care vizeaz\u0103 procesarea tranzac\u021biilor sunt, de asemenea, necesare pentru o optimizare eficient\u0103 a performan\u021bei blocului de date.<\/p>\n<p><\/p>\n<h2 id=\"poluchenie-klientom-uvedomleniya-o-vklyuchenii-tranzakcii-v-blokcheyn\">Notificarea clientului cu privire la activarea tranzac\u021biei \u00een blockchain<\/h2>\n<p><\/p>\n<p>Aceasta este etapa final\u0103 a ob\u021binerii serviciului blockchain de c\u0103tre client. Comparativ cu alte etape, aici nu exist\u0103 costuri indirecte mari, dar este important s\u0103 se considere posibilitatea ca clientul s\u0103 primeasc\u0103 un r\u0103spuns voluminos de la nod (de exemplu, un smart contract care returneaz\u0103 un array de date). \u00cen orice caz, acest moment este cel mai important pentru cel care a \u00eentrebat \u201ec\u00e2te TPS are blockchain-ul vostru?\u201d, deoarece \u00een acest moment se \u00eenregistreaz\u0103 timpul de ob\u021binere a serviciului. <\/p>\n<p><\/p>\n<p>\u00cen acest loc se va trimite cu siguran\u021b\u0103 timpul total pe care clientul l-a petrecut a\u0219tept\u00e2nd r\u0103spunsul de la blockchain; exact acest timp va fi a\u0219teptat de utilizator pentru a ob\u021bine confirmarea \u00een aplica\u021bia sa, iar optimizarea lui este principalul obiectiv al dezvoltatorilor.<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Concluzie<\/h1>\n<p><\/p>\n<p>Ca urmare, putem descrie tipurile de opera\u021biuni efectuate \u00een blockchain-uri \u0219i le putem \u00eemp\u0103r\u021bi \u00een mai multe categorii:<\/p>\n<p><\/p>\n<ol>\n<li>transform\u0103ri criptografice, construirea dovezilor<\/li>\n<li>re\u021bele peer-to-peer, replicarea tranzac\u021biilor \u0219i blocurilor<\/li>\n<li>procesarea tranzac\u021biilor, executarea smart contractelor<\/li>\n<li>aplicarea modific\u0103rilor \u00een blockchain la baza de date de st\u0103ri, actualizarea datelor despre tranzac\u021bii \u0219i blocuri<\/li>\n<li>\u00eentreb\u0103ri read-only la baza de date de st\u0103ri, API-ul nodului blockchain, servicii de abonare <\/li>\n<\/ol>\n<p><\/p>\n<p>\u00cen general, cerin\u021bele tehnice pentru nodurile blockchain-urilor moderne sunt extrem de stricte \u2014 este nevoie de CPU-uri rapide pentru criptografie, de mult\u0103 memorie RAM pentru a stoca \u0219i accesa rapid baza de date de st\u0103ri, de o interac\u021biune de re\u021bea care utilizeaz\u0103 un num\u0103r mare de conexiuni deschise simultan, \u0219i de un stocare semnificativ\u0103. Aceste cerin\u021be ridicate \u0219i abunden\u021ba diverselor tipuri de opera\u021biuni duc inevitabil la lipsa de resurse pentru noduri, iar, \u00een acel caz, orice etap\u0103 discutat\u0103 mai sus poate deveni o nou\u0103 g\u00e2tleu pentru performan\u021ba general\u0103 a re\u021belei.<\/p>\n<p><\/p>\n<p>C\u00e2nd dezvolta\u021bi \u0219i evalua\u021bi performan\u021ba blockchain-urilor, va trebui s\u0103 lua\u021bi \u00een considerare toate aceste aspecte. Pentru aceasta, trebuie s\u0103 colecta\u021bi \u0219i s\u0103 analiza\u021bi metrile simultan de la clien\u021bi \u0219i nodurile re\u021belei, s\u0103 c\u0103uta\u021bi corela\u021bii \u00eentre ele, s\u0103 evalua\u021bi timpul de furnizare a serviciului c\u0103tre clien\u021bi, \u0219i s\u0103 lua\u021bi \u00een considerare toate resursele de baz\u0103: CPU\/memory\/network\/storage, \u00een\u021beleg\u00e2nd cum sunt folosite \u0219i cum se influen\u021beaz\u0103 unele pe altele. Toate acestea fac compararea vitezelor diferitelor blockchain-uri \u00een termeni de \u201ec\u00e2te TPS\u201d o sarcin\u0103 extrem de ingrat\u0103, deoarece exist\u0103 o multitudine de configura\u021bii \u0219i st\u0103ri diferite. \u00cen sistemele centralizate mari, clusterele de sute de servere, aceste probleme sunt de asemenea complexe \u0219i necesit\u0103 colectarea unui num\u0103r mare de metrici variate, dar \u00een blockchain-uri, din cauza re\u021belelor P2P, a ma\u0219inilor virtuale, a contractelor procesate, a economiei interne, num\u0103rul gradelor de libertate este mult mai mare, ceea ce face ca testele chiar \u0219i pe c\u00e2teva servere s\u0103 fie necorespunz\u0103toare \u0219i s\u0103 ofere valori estimative, aproape f\u0103r\u0103 leg\u0103tur\u0103 cu realitatea.<\/p>\n<p><\/p>\n<p>Prin urmare, \u00een dezvoltarea kernel-ului blockchain-ului, pentru a evalua performan\u021ba \u0219i a r\u0103spunde la \u00eentrebarea \u201es-a \u00eembun\u0103t\u0103\u021bit comparativ cu ultima dat\u0103?\u201d folosim un software destul de complex, care orchestreaz\u0103 lansarea blockchain-ului cu zeci de noduri \u0219i lansarea automat\u0103 a benchmark-ului \u0219i colectarea metricilor. F\u0103r\u0103 aceste informa\u021bii, este extrem de dificil s\u0103 dezvol\u021bi protocoalele care func\u021bioneaz\u0103 cu mul\u021bi participan\u021bi.<\/p>\n<p><\/p>\n<p>A\u0219adar, c\u00e2nd prime\u0219ti \u00eentrebarea \u201ec\u00e2te TPS are blockchain-ul vostru?\u201d, ofer\u0103-i interlocutorului o cea\u0219c\u0103 de ceai \u0219i \u00eentreab\u0103-l dac\u0103 este preg\u0103tit s\u0103 se familiarizeze cu zeci de grafice \u0219i s\u0103 asculte toate cele trei cutii de probleme legate de performan\u021ba blockchain-urilor \u0219i propunerile tale pentru solu\u021bionarea acestora...<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/459763\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041b\u044e\u0431\u0438\u043c\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0442 \u043d\u0435\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201c\u0421\u043a\u043e\u043b\u044c\u043a\u043e tps \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435?\u201d. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0430\u0437\u0432\u0430\u043d\u043d\u043e\u0435 \u0432 \u043e\u0442\u0432\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u043b\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0448\u0430\u044e\u0449\u0438\u0439. \u041d\u0430 \u0434\u0435\u043b\u0435, \u043e\u043d \u0445\u043e\u0442\u0435\u043b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u201c\u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043b\u0438 \u0432\u0430\u0448 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d \u043f\u043e\u0434 \u043c\u043e\u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u201d, \u0438 \u044d\u0442\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043d\u0435 \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e, \u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36157","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041b\u044e\u0431\u0438\u043c\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0442 \u043d\u0435\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201c\u0421\u043a\u043e\u043b\u044c\u043a\u043e tps \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435?\u201d.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u043a\u043e\u043b\u044c\u043a\u043e TPS \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041b\u044e\u0431\u0438\u043c\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0442 \u043d\u0435\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201c\u0421\u043a\u043e\u043b\u044c\u043a\u043e tps \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435?\u201d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:55+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47C\u00e2t TPS are blockchain-ul vostru? | ProHoster","description":"\u00centrebarea preferat\u0103 despre orice sistem distribuit de c\u0103tre un specialist non-tehnic este \u201eC\u00e2t TPS are blockchain-ul vostru?\u201d","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u043a\u043e\u043b\u044c\u043a\u043e TPS \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435? | ProHoster","og:description":"\u041b\u044e\u0431\u0438\u043c\u044b\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043e\u0442 \u043d\u0435\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u201c\u0421\u043a\u043e\u043b\u044c\u043a\u043e tps \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435?\u201d.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:55+00:00","article:modified_time":"2019-10-31T19:09:55+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36157","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:15:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:49:44","updated":"2026-01-22 02:15:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=36157"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36157\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=36157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=36157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=36157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}