{"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\/pl\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne","title":{"rendered":"Ile TPS w twoim blockchainie?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ulubionym pytaniem o ka\u017cd\u0105 rozproszon\u0105 systemu od osoby nietechnicznej jest \u201eIle tps ma wasz blockchain?\u201d. Jednak liczba podana w odpowiedzi zazwyczaj ma niewiele wsp\u00f3lnego z tym, co chcia\u0142by us\u0142ysze\u0107 pytaj\u0105cy. W rzeczywisto\u015bci chcia\u0142 zapyta\u0107 \u201eczy wasz blockchain spe\u0142nia moje wymagania biznesowe\u201d, a te wymagania to nie jedna liczba, a wiele warunk\u00f3w \u2014 chodzi tu o odporno\u015b\u0107 sieci, wymagania dotycz\u0105ce finalno\u015bci, rozmiary, charakter transakcji i wiele innych parametr\u00f3w. Dlatego odpowied\u017a na pytanie \u201eile tps\u201d z pewno\u015bci\u0105 nie b\u0119dzie prosta i prawie nigdy nie b\u0119dzie pe\u0142na. Rozproszony system z dziesi\u0105tkami i setkami w\u0119z\u0142\u00f3w, wykonuj\u0105cymi do\u015b\u0107 z\u0142o\u017cone obliczenia, mo\u017ce znajdowa\u0107 si\u0119 w ogromnej liczbie r\u00f3\u017cnych stan\u00f3w, zwi\u0105zanych ze stanem sieci, zawarto\u015bci\u0105 blockchaina, awariami technicznymi, problemami ekonomicznymi, atakami na sie\u0107 i wieloma innymi przyczynami. Etapy, na kt\u00f3rych mog\u0105 wyst\u0105pi\u0107 problemy z wydajno\u015bci\u0105, r\u00f3\u017cni\u0105 si\u0119 od tradycyjnych us\u0142ug, a serwer sieci blockchain to serwis sieciowy, \u0142\u0105cz\u0105cy w sobie funkcjonalno\u015b\u0107 bazy danych, serwera webowego i klienta torrent, co czyni go niezwykle skomplikowanym pod wzgl\u0119dem profilu obci\u0105\u017cenia dla wszystkich podsystem\u00f3w: procesora, pami\u0119ci, sieci, storage.<\/p>\n<p><\/p>\n<p>Zdarzy\u0142o si\u0119, \u017ce zdecentralizowane sieci i blockchains s\u0105 do\u015b\u0107 specyficznym i nietypowym oprogramowaniem dla programist\u00f3w oprogramowania scentralizowanego. Dlatego chcia\u0142bym om\u00f3wi\u0107 wa\u017cne aspekty wydajno\u015bci i odporno\u015bci zdecentralizowanych sieci, podej\u015bcia do ich pomiaru oraz znajdowania w\u0105skich garde\u0142. Zbadaamy r\u00f3\u017cne problemy zwi\u0105zane z wydajno\u015bci\u0105, kt\u00f3re ograniczaj\u0105 szybko\u015b\u0107 \u015bwiadczenia us\u0142ug u\u017cytkownikom blockchain\u00f3w i zwr\u00f3cimy uwag\u0119 na cechy charakterystyczne dla tego rodzaju oprogramowania.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"etapy-zaprosa-servisa-klientom-blokcheyna\">Etapy \u017c\u0105dania us\u0142ugi przez klienta blockchaina<\/h2>\n<p><\/p>\n<p>Aby uczciwie oceni\u0107 jako\u015b\u0107 jakiejkolwiek bardziej skomplikowanej us\u0142ugi, nale\u017cy wzi\u0105\u0107 pod uwag\u0119 nie tylko warto\u015bci \u015brednie, ale tak\u017ce maksymalne\/minimalne, mediany i percentyle. Teoretycznie mo\u017cna m\u00f3wi\u0107 o 1000 tps w jakim\u015b blockchainie, ale je\u015bli 900 transakcji zosta\u0142o zrealizowanych z ogromn\u0105 pr\u0119dko\u015bci\u0105, a 100 - 'zawiesi\u0142' si\u0119 na kilka sekund, to \u015bredni czas zebrany ze wszystkich transakcji nie jest uczciw\u0105 metryk\u0105 dla klienta, kt\u00f3ry nie m\u00f3g\u0142 zako\u0144czy\u0107 transakcji przez kilka sekund. Czasowe 'do\u0142ki' spowodowane utraconymi rundami konsensusu lub podzia\u0142em sieci mog\u0105 znacznie pogorszy\u0107 us\u0142ug\u0119, kt\u00f3ra na testowych stanowiskach pokazywa\u0142a doskona\u0142\u0105 wydajno\u015b\u0107.<\/p>\n<p><\/p>\n<p>Aby zidentyfikowa\u0107 takie w\u0105skie gard\u0142a, nale\u017cy dobrze zrozumie\u0107 etapy, na kt\u00f3rych rzeczywisty blockchain mo\u017ce napotyka\u0107 trudno\u015bci w obs\u0142udze u\u017cytkownik\u00f3w. Opiszmy cykl dostarczania i przetwarzania transakcji oraz uzyskiwania nowego stanu blockchaina, z kt\u00f3rego klient mo\u017ce upewni\u0107 si\u0119, \u017ce jego transakcja zosta\u0142a przetworzona i uwzgl\u0119dniona.<\/p>\n<p><\/p>\n<ol>\n<li>transakcja jest tworzona na kliencie<\/li>\n<li>transakcja jest podpisywana na kliencie<\/li>\n<li>klient wybiera jeden z w\u0119z\u0142\u00f3w i wysy\u0142a do niego swoj\u0105 transakcj\u0119<\/li>\n<li>klient subskrybuje aktualizacje bazy danych stanu w\u0119z\u0142a, czekaj\u0105c na wyniki przetwarzania swojej transakcji<\/li>\n<li>w\u0119ze\u0142 rozprzestrzenia transakcj\u0119 po sieci p2p<\/li>\n<li>kilku lub jeden BP (producent blok\u00f3w) przetwarza zgromadzone transakcje, aktualizuj\u0105c baz\u0119 danych stanu<\/li>\n<li>BP tworzy nowy blok, przetwarzaj\u0105c potrzebn\u0105 liczb\u0119 transakcji<\/li>\n<li>BP rozprzestrzenia nowy blok po sieci p2p<\/li>\n<li>nowy blok jest dostarczany do w\u0119z\u0142a, z kt\u00f3rym komunikuje si\u0119 klient<\/li>\n<li>w\u0119ze\u0142 aktualizuje baz\u0119 danych stanu<\/li>\n<li>w\u0119ze\u0142 widzi aktualizacj\u0119 dotycz\u0105c\u0105 klienta i wysy\u0142a mu powiadomienie o transakcji<\/li>\n<\/ol>\n<p><\/p>\n<p>Przyjrzyjmy si\u0119 teraz szczeg\u00f3\u0142owo tym krokom i opiszmy potencjalne problemy z wydajno\u015bci\u0105 na ka\u017cdym etapie. W odr\u00f3\u017cnieniu od system\u00f3w scentralizowanych, we\u017amiemy r\u00f3wnie\u017c pod uwag\u0119 wykonanie kodu na klientach sieci. Do\u015b\u0107 cz\u0119sto przy pomiarze tps czas przetwarzania transakcji zbierany jest z w\u0119z\u0142\u00f3w, a nie z klienta \u2014 to nie do ko\u0144ca sprawiedliwe. Klientowi jest oboj\u0119tne, jak szybko w\u0119ze\u0142 przetworzy\u0142 jego transakcj\u0119, najwa\u017cniejsze dla niego jest moment, kiedy wiarygodne informacje o tej transakcji, zawarte w \u0142a\u0144cuchu blok\u00f3w, stan\u0105 si\u0119 dla niego dost\u0119pne. To w\u0142a\u015bnie ta metryka jest de facto czasem wykonania transakcji. Oznacza to, \u017ce r\u00f3\u017cni klienci, nawet wysy\u0142aj\u0105c t\u0119 sam\u0105 transakcj\u0119, mog\u0105 uzyska\u0107 zupe\u0142nie r\u00f3\u017cne czasy, kt\u00f3re zale\u017c\u0105 od kana\u0142u, obci\u0105\u017cenia i blisko\u015bci w\u0119z\u0142a itd. Dlatego niezwykle wa\u017cne jest mierzenie tego czasu na klientach, poniewa\u017c to w\u0142a\u015bnie ten parametr nale\u017cy optymalizowa\u0107.<\/p>\n<p><\/p>\n<h2 id=\"podgotovka-tranzakcii-na-storone-klienta\">Przygotowanie transakcji po stronie klienta<\/h2>\n<p><\/p>\n<p>Zacznijmy od pierwszych dw\u00f3ch punkt\u00f3w: transakcja jest formu\u0142owana i podpisywana przez klienta. Jak to dziwnie brzmi, to tak\u017ce mo\u017ce by\u0107 w\u0105skim gard\u0142em wydajno\u015bci bloku \u0142a\u0144cucha z perspektywy klienta. To nie jest typowe dla us\u0142ug scentralizowanych, kt\u00f3re przejmuj\u0105 wszystkie obliczenia i operacje na danych, a klient po prostu przygotowuje kr\u00f3tki request, mog\u0105cy za\u017c\u0105da\u0107 du\u017cej ilo\u015bci danych lub oblicze\u0144, otrzymuj\u0105c gotowy wynik. W blockchainach kod kliencki staje si\u0119 coraz bardziej z\u0142o\u017cony, a j\u0105dro blockchaina coraz l\u017cejsze, a masywne zadania obliczeniowe zwykle przypisuje si\u0119 oprogramowaniu klienckiemu. W blockchainach istniej\u0105 klienci, kt\u00f3rzy mog\u0105 d\u0142ugo przygotowywa\u0107 jedn\u0105 transakcj\u0119 (m\u00f3wi\u0119 o r\u00f3\u017cnych dowodach merkle, dowodach szcz\u0105tkowych, podpisach progowych i innych z\u0142o\u017conych operacjach po stronie klienta). Dobrym przyk\u0142adem \u0142atwej weryfikacji on-chain i ci\u0119\u017ckiego przygotowania transakcji po stronie klienta jest dow\u00f3d przynale\u017cno\u015bci do listy oparty na drzewie Merkle. <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/evolution-of-airdrop-from-common-spam-to-the-merkle-tree-30caa2344170\">artyku\u0142<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Nie nale\u017cy r\u00f3wnie\u017c zapomina\u0107, \u017ce kod kliencki nie tylko przesy\u0142a transakcje do blockchaina, ale najpierw sprawdza stan blockchaina \u2014 a ta czynno\u015b\u0107 mo\u017ce wp\u0142ywa\u0107 na obci\u0105\u017cenie sieci i w\u0119z\u0142\u00f3w blockchaina. Dlatego przy przeprowadzaniu pomiar\u00f3w dobrze jest jak najwierniej emulowa\u0107 zachowanie kodu klienckiego. Nawet je\u015bli w twoim blockchainie s\u0105 standardowi klienci, kt\u00f3rzy stosuj\u0105 zwyk\u0142y podpis cyfrowy na prostej transakcji dotycz\u0105cej jakiego\u015b zasobu, z ka\u017cdym rokiem obci\u0105\u017cenia obliczeniowe na kliencie rosn\u0105, algorytmy kryptograficzne staj\u0105 si\u0119 silniejsze, a ta cz\u0119\u015b\u0107 przetwarzania mo\u017ce w przysz\u0142o\u015bci sta\u0107 si\u0119 istotnym w\u0105skim gard\u0142em. Dlatego b\u0105d\u017a ostro\u017cny i nie przegap sytuacji, gdy w transakcji trwaj\u0105cej 3,5 sekundy, 2,5 sekundy przeznacza si\u0119 na przygotowanie i podpisanie transakcji, a 1,0 sekundy na wys\u0142anie do sieci i oczekiwanie na odpowied\u017a. Aby oceni\u0107 ryzyko pojawienia si\u0119 tego w\u0105skiego gard\u0142a, nale\u017cy zbiera\u0107 metryki z maszyn klienckich, a nie tylko z w\u0119z\u0142\u00f3w blockchaina.<\/p>\n<p><\/p>\n<h2 id=\"otpravka-tranzakcii-i-monitoring-ee-statusa\">Wysy\u0142anie transakcji i monitorowanie jej statusu<\/h2>\n<p><\/p>\n<p>Kolejnym etapem jest wys\u0142anie transakcji do wybranego w\u0119z\u0142a blockchain i uzyskanie statusu jej akceptacji w puli transakcji. Ten etap przypomina zwyk\u0142e zapytanie do bazy danych, w\u0119ze\u0142 musi zapisa\u0107 transakcj\u0119 w puli i rozpocz\u0105\u0107 jej rozpowiadanie w sieci p2p. Podej\u015bcie do oceny wydajno\u015bci jest podobne do oceny dzia\u0142ania tradycyjnych mikroserwis\u00f3w Web API, przy czym same transakcje w blockchainach mog\u0105 by\u0107 aktualizowane, zmieniaj\u0105c status. Og\u00f3lnie rzecz bior\u0105c, aktualizacja informacji o transakcji w niekt\u00f3rych blockchainach mo\u017ce wyst\u0105pi\u0107 kilka razy, na przyk\u0142ad podczas prze\u0142\u0105czania mi\u0119dzy forkami \u0142a\u0144cucha lub gdy BP informuj\u0105 o zamiarze w\u0142\u0105czenia transakcji do bloku. Ograniczenia dotycz\u0105ce wielko\u015bci tego puli i liczby transakcji w niej mog\u0105 wp\u0142ywa\u0107 na wydajno\u015b\u0107 blockchaina. Je\u015bli pula transakcji zostanie zape\u0142niona do maksymalnych rozmiar\u00f3w, lub nie zmie\u015bci si\u0119 w pami\u0119ci operacyjnej \u2014 wydajno\u015b\u0107 sieci mo\u017ce gwa\u0142townie spada\u0107. Blockchainy nie maj\u0105 scentralizowanych \u015brodk\u00f3w ochrony przed nap\u0142ywem \u015bmieciowych komunikat\u00f3w, a je\u015bli blockchain wspiera transakcje o du\u017cej obj\u0119to\u015bci i niskie op\u0142aty, mo\u017ce to prowadzi\u0107 do przepe\u0142nienia puli transakcji \u2014 to kolejny potencjalny w\u0105skie gard\u0142o wydajno\u015bci.<\/p>\n<p><\/p>\n<p>W blockchainach klient wysy\u0142a transakcj\u0119 do dowolnego w\u0119z\u0142a, kt\u00f3ry mu si\u0119 podoba, hash transakcji jest zazwyczaj znany klientowi jeszcze przed wys\u0142aniem, wi\u0119c wszystko, co musi zrobi\u0107, to nawi\u0105za\u0107 po\u0142\u0105czenie i po przes\u0142aniu czeka\u0107, a\u017c blockchain zmieni swoje stany, w\u0142\u0105czaj\u0105c jego transakcj\u0119. Zauwa\u017cmy, \u017ce mierz\u0105c 'tps', mo\u017cna uzyska\u0107 zupe\u0142nie r\u00f3\u017cne wyniki w zale\u017cno\u015bci od sposobu pod\u0142\u0105czenia do w\u0119z\u0142a blockchaina. Mo\u017ce to by\u0107 zwyk\u0142y HTTP RPC lub WebSocket, kt\u00f3ry umo\u017cliwia wdro\u017cenie wzorca 'subscribe'. W tym drugim przypadku klient otrzyma powiadomienie wcze\u015bniej, a w\u0119ze\u0142 zu\u017cyje mniej zasob\u00f3w (g\u0142\u00f3wnie pami\u0119ci i danych) na odpowiedzi o stanie transakcji. Dlatego przy pomiarze 'tps' nale\u017cy uwzgl\u0119dni\u0107 spos\u00f3b pod\u0142\u0105czenia klient\u00f3w do w\u0119z\u0142\u00f3w. Dlatego, aby oceni\u0107 ryzyko wyst\u0105pienia tego w\u0105skiego gard\u0142a, benchmark blockchaina powinien mie\u0107 mo\u017cliwo\u015b\u0107 emulacji klient\u00f3w zar\u00f3wno z zapytaniami WebSocket, jak i HTTP RPC, w proporcjach odpowiadaj\u0105cych rzeczywistym sieciom, a tak\u017ce zmienia\u0107 charakter transakcji i ich rozmiar.<\/p>\n<p><\/p>\n<p>Aby oceni\u0107 ryzyko pojawienia si\u0119 tego bottleneck-a, nale\u017cy tak\u017ce zbiera\u0107 metryki z maszyn klienckich, a nie tylko z w\u0119z\u0142\u00f3w blockchaina.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-tranzakciy-i-blokov-po-p2p-seti\">Przesy\u0142anie transakcji i blok\u00f3w przez sie\u0107 p2p<\/h2>\n<p><\/p>\n<p>W blockchainach do przesy\u0142ania transakcji i blok\u00f3w mi\u0119dzy uczestnikami stosuje si\u0119 sieci peer-to-peer (p2p). Transakcje rozprzestrzeniaj\u0105 si\u0119 w sieci, zaczynaj\u0105c od jednego z w\u0119z\u0142\u00f3w, a\u017c dotr\u0105 do peer\u00f3w-producer\u00f3w blok\u00f3w, kt\u00f3rzy pakuj\u0105 transakcje w bloki i przy pomocy tej samej sieci p2p rozprzestrzeniaj\u0105 nowe bloki do wszystkich w\u0119z\u0142\u00f3w w sieci. Podstaw\u0105 wi\u0119kszo\u015bci nowoczesnych sieci p2p s\u0105 r\u00f3\u017cne modyfikacje protoko\u0142u Kademlia. <noindex><a rel=\"nofollow\" href=\"https:\/\/cardanodocs.com\/technical\/protocols\/p2p\/\">Oto<\/a><\/noindex> dobry kr\u00f3tki przegl\u0105d tego protoko\u0142u, a <noindex><a rel=\"nofollow\" href=\"https:\/\/web.njit.edu\/~dingxn\/papers\/BT-JSAC.pdf\">oto<\/a><\/noindex> \u2014 artyku\u0142 z r\u00f3\u017cnymi pomiarami w sieci BitTorrent, z kt\u00f3rego mo\u017cna zrozumie\u0107 \u2013 \u017ce ten rodzaj sieci jest bardziej z\u0142o\u017cony i mniej przewidywalny ni\u017c sztywno skonfigurowana sie\u0107 scentralizowanej us\u0142ugi. R\u00f3wnie\u017c, <noindex><a rel=\"nofollow\" href=\"https:\/\/zanema.com\/papers\/imc18_ethpeers.pdf\">oto<\/a><\/noindex> artyku\u0142 na temat pomiaru r\u00f3\u017cnych interesuj\u0105cych metryk dla w\u0119z\u0142\u00f3w Ethereum.<\/p>\n<p><\/p>\n<p>W skr\u00f3cie, ka\u017cdy peer w takich sieciach utrzymuje w\u0142asn\u0105 dynamiczn\u0105 list\u0119 innych peer\u00f3w, od kt\u00f3rych \u017c\u0105da blok\u00f3w informacji, kt\u00f3re s\u0105 adresowane wed\u0142ug zawarto\u015bci. Po otrzymaniu \u017c\u0105dania, peer albo dostarcza potrzebne informacje, albo przekazuje \u017c\u0105danie do nast\u0119pnego pseudolosowego peera z listy, a po otrzymaniu odpowiedzi, przekazuje j\u0105 \u017c\u0105daj\u0105cemu i przez pewien czas j\u0105 buforuje, udost\u0119pniaj\u0105c ten blok informacji wcze\u015bniej przy nast\u0119pnym zapytaniu. W ten spos\u00f3b popularne informacje znajduj\u0105 si\u0119 w du\u017cej liczbie bufor\u00f3w u wielu peer\u00f3w, a niepopularne s\u0105 stopniowo wypierane. Peery prowadz\u0105 ewidencj\u0119, kto ile informacji przekaza\u0142, a sie\u0107 stara si\u0119 stymulowa\u0107 aktywnych nadawc\u00f3w, podnosz\u0105c ich rankingi i zapewniaj\u0105c im wy\u017cszy poziom us\u0142ugi, automatycznie wypieraj\u0105c nieaktywnych uczestnik\u00f3w z list peer\u00f3w.<\/p>\n<p><\/p>\n<p>Teraz nale\u017cy rozpropagowa\u0107 transakcj\u0119 w sieci, aby zosta\u0142a zauwa\u017cona przez block-producer\u00f3w i w\u0142\u0105czona do bloku. W\u0119ze\u0142 aktywnie \u201eudost\u0119pnia\u201d now\u0105 transakcj\u0119 wszystkim zainteresowanym i nas\u0142uchuje sieci, oczekuj\u0105c na blok, w indeksie kt\u00f3rego pojawi si\u0119 potrzebna transakcja, aby powiadomi\u0107 oczekuj\u0105cego klienta. Czas, w kt\u00f3rym sie\u0107 przekazuje sobie nawzajem informacje o nowych transakcjach i blokach w sieciach p2p, zale\u017cy od bardzo wielu czynnik\u00f3w: liczby uczciwych, dzia\u0142aj\u0105cych w pobli\u017cu (z punktu widzenia sieci) w\u0119z\u0142\u00f3w, \u201eprzygotowania\u201d pami\u0119ci podr\u0119cznych tych w\u0119z\u0142\u00f3w, rozmiaru blok\u00f3w, transakcji, charakteru zmian, geografii sieci, liczby w\u0119z\u0142\u00f3w i wielu innych czynnik\u00f3w. Z\u0142o\u017cone pomiary metryk wydajno\u015bci w takich sieciach to skomplikowane zadanie, poniewa\u017c nale\u017cy jednocze\u015bnie ocenia\u0107 czas przetwarzania zapyta\u0144 zar\u00f3wno na klientach, jak i na peerach (w\u0119z\u0142ach blockchain). Problemy w jakimkolwiek z mechanizm\u00f3w p2p, niew\u0142a\u015bciwe wyprzedzanie i buforowanie danych, nieefektywne zarz\u0105dzanie listami aktywnych peer\u00f3w oraz wiele innych czynnik\u00f3w mog\u0105 powodowa\u0107 op\u00f3\u017anienia, kt\u00f3re wp\u0142ywaj\u0105 na wydajno\u015b\u0107 ca\u0142ej sieci jako ca\u0142o\u015bci, a ten w\u0105skie gard\u0142o jest najtrudniejsze do analizy, testowania i interpretacji wynik\u00f3w.<\/p>\n<p><\/p>\n<h2 id=\"processing-cepochki-blokov-i-obnovlenie-state-database\">Przetwarzanie \u0142a\u0144cucha blok\u00f3w i aktualizacja bazy danych stanu<\/h2>\n<p><\/p>\n<p>Najwa\u017cniejsz\u0105 cz\u0119\u015bci\u0105 dzia\u0142ania blockchaina jest algorytm konsensusu, jego zastosowanie do nowych blok\u00f3w otrzymanych z sieci oraz przetwarzanie transakcji z zapisem wynik\u00f3w w bazie danych stanu (state database). Dodanie nowego bloku do \u0142a\u0144cucha i kolejny wyb\u00f3r g\u0142\u00f3wnego \u0142a\u0144cucha powinny dzia\u0142a\u0107 jak najszybciej. Jednak w rzeczywisto\u015bci \u201epowinno\u201d nie oznacza \u201edzia\u0142a\u201d, i mo\u017cna wyobrazi\u0107 sobie sytuacj\u0119, w kt\u00f3rej dwa d\u0142ugie konkuruj\u0105ce \u0142a\u0144cuchy ci\u0105gle si\u0119 prze\u0142\u0105czaj\u0105, zmieniaj\u0105c metadane tysi\u0119cy transakcji w puli przy ka\u017cdym prze\u0142\u0105czeniu i powoduj\u0105c sta\u0142e cofanie stanu bazy danych stanu. Etap ten, pod wzgl\u0119dem okre\u015blenia w\u0105skiego gard\u0142a, jest prostszy ni\u017c warstwa p2p sieci, poniewa\u017c wykonanie transakcji i algorytm konsensusu s\u0105 \u015bci\u015ble deterministyczne, a tutaj \u0142atwiej jest co\u015b zmierzy\u0107.<br \/>\nNajwa\u017cniejsze \u2014 nie myli\u0107 przypadkowej degradacji wydajno\u015bci tego etapu z problemami w sieci \u2014 w\u0119z\u0142y wolniej przekazuj\u0105 bloki i informacje o g\u0142\u00f3wnym \u0142a\u0144cuchu, a dla zewn\u0119trznego klienta mo\u017ce to wygl\u0105da\u0107 jak wolna sie\u0107, podczas gdy problem tkwi zupe\u0142nie gdzie indziej.<\/p>\n<p><\/p>\n<p>Aby zoptymalizowa\u0107 wydajno\u015b\u0107 na tym etapie, warto zbiera\u0107 i monitorowa\u0107 metryki z samych w\u0119z\u0142\u00f3w, w tym te, kt\u00f3re dotycz\u0105 aktualizacji bazy danych stan\u00f3w: liczba blok\u00f3w przetwarzanych na w\u0119\u017ale, ich rozmiar, liczba transakcji, ilo\u015b\u0107 prze\u0142\u0105cze\u0144 mi\u0119dzy rozwidleniami \u0142a\u0144cucha, liczba niewa\u017cnych blok\u00f3w, czas dzia\u0142ania maszyny wirtualnej, czas zatwierdzania danych itd. To pozwoli nie pomyli\u0107 problem\u00f3w sieciowych z b\u0142\u0119dami w algorytmach procesowania \u0142a\u0144cuch\u00f3w.<\/p>\n<p><\/p>\n<p>Wirtualna maszyna przetwarzaj\u0105ca transakcje mo\u017ce by\u0107 u\u017cytecznym \u017ar\u00f3d\u0142em informacji, mog\u0105cym zoptymalizowa\u0107 dzia\u0142anie \u0142a\u0144cucha blok\u00f3w. Ilo\u015b\u0107 alokacji pami\u0119ci, liczba instrukcji read\/write oraz inne metryki dotycz\u0105ce efektywno\u015bci wykonywania kodu kontrakt\u00f3w mog\u0105 dostarczy\u0107 wielu cennych informacji deweloperom. Jednocze\u015bnie smart kontrakty to programy, co oznacza, \u017ce teoretycznie mog\u0105 zu\u017cywa\u0107 dowolne zasoby: cpu\/pami\u0119\u0107\/sie\u0107\/storage, wi\u0119c procesowanie transakcji to do\u015b\u0107 nieokre\u015blony etap, kt\u00f3ry dodatkowo mocno zmienia si\u0119 przy przej\u015bciu mi\u0119dzy wersjami i przy modyfikacji kodu kontrakt\u00f3w. Dlatego metryki dotycz\u0105ce procesowania transakcji s\u0105 r\u00f3wnie\u017c potrzebne do efektywnej optymalizacji wydajno\u015bci \u0142a\u0144cucha blok\u00f3w.<\/p>\n<p><\/p>\n<h2 id=\"poluchenie-klientom-uvedomleniya-o-vklyuchenii-tranzakcii-v-blokcheyn\">Powiadomienie klienta o w\u0142\u0105czeniu transakcji w blockchainie<\/h2>\n<p><\/p>\n<p>To jest ostatni etap korzystania z us\u0142ugi blockchain przez klienta, w por\u00f3wnaniu z innymi etapami nie ma tutaj du\u017cych wydatk\u00f3w operacyjnych, ale i tak warto wzi\u0105\u0107 pod uwag\u0119 mo\u017cliwo\u015b\u0107 otrzymania przez klienta obszernej odpowiedzi od w\u0119z\u0142a (na przyk\u0142ad smart contract zwracaj\u0105cy tablic\u0119 danych). W ka\u017cdym razie, to w\u0142a\u015bnie ten moment jest najwa\u017cniejszy dla tego, kto zada\u0142 pytanie \u201eile tps ma wasz blockchain?\u201d, poniewa\u017c w tym momencie rejestrowany jest czas uzyskania us\u0142ugi. <\/p>\n<p><\/p>\n<p>W tym miejscu musi by\u0107 obecne pe\u0142ne czas, kt\u00f3re klient musia\u0142 po\u015bwi\u0119ci\u0107 na oczekiwanie na odpowied\u017a z blockchaina, to w\u0142a\u015bnie ten czas u\u017cytkownik b\u0119dzie czeka\u0142 na potwierdzenie w swoim aplikacji, a jego optymalizacja jest podstawowym zadaniem programist\u00f3w.<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Podsumowanie<\/h1>\n<p><\/p>\n<p>W rezultacie mo\u017cna opisa\u0107 typy operacji realizowanych w blockchainach i podzieli\u0107 je na kilka kategorii:<\/p>\n<p><\/p>\n<ol>\n<li>przekszta\u0142cenia kryptograficzne, budowa dowod\u00f3w<\/li>\n<li>sieci peer-to-peer, replikacja transakcji i blok\u00f3w<\/li>\n<li>przetwarzanie transakcji, wykonanie smart kontrakt\u00f3w<\/li>\n<li>zastosowanie zmian w blockchainie do bazy danych stanu, aktualizacja danych o transakcjach i blokach<\/li>\n<li>zapytania tylko do odczytu do bazy danych stanu, API w\u0119z\u0142a blockchaina, us\u0142ugi subskrypcyjne <\/li>\n<\/ol>\n<p><\/p>\n<p>Og\u00f3lnie rzecz bior\u0105c, wymagania techniczne dla w\u0119z\u0142\u00f3w nowoczesnych blockchain\u00f3w s\u0105 bardzo powa\u017cne \u2014 to szybkie CPU do kryptografii, du\u017ca ilo\u015b\u0107 pami\u0119ci operacyjnej do przechowywania i szybkiego dost\u0119pu do bazy danych stanu, komunikacja sieciowa, wykorzystuj\u0105ca du\u017c\u0105 liczb\u0119 jednocze\u015bnie otwartych po\u0142\u0105cze\u0144, du\u017ca przestrze\u0144 dyskowa. Tak wysokie wymagania i obfito\u015b\u0107 r\u00f3\u017cnych typ\u00f3w operacji nieuchronnie prowadz\u0105 do sytuacji, w kt\u00f3rej zasob\u00f3w dla w\u0119z\u0142\u00f3w mo\u017ce zabrakn\u0105\u0107, a wtedy ka\u017cdy z om\u00f3wionych powy\u017cej etap\u00f3w mo\u017ce sta\u0107 si\u0119 w\u0105skim gard\u0142em dla og\u00f3lnej wydajno\u015bci sieci.<\/p>\n<p><\/p>\n<p>Opracowuj\u0105c i oceniaj\u0105c wydajno\u015b\u0107 blockchain\u00f3w, musisz wzi\u0105\u0107 pod uwag\u0119 wszystkie te aspekty. W tym celu nale\u017cy zbiera\u0107 i analizowa\u0107 metryki jednocze\u015bnie z klient\u00f3w i w\u0119z\u0142\u00f3w sieci, szuka\u0107 korelacji mi\u0119dzy nimi, ocenia\u0107 czas udost\u0119pniania us\u0142ug klientom, uwzgl\u0119dnia\u0107 wszystkie podstawowe zasoby: cpu\/memory\/network\/storage, rozumie\u0107, jak s\u0105 wykorzystywane i jak wp\u0142ywaj\u0105 na siebie nawzajem. Wszystko to sprawia, \u017ce por\u00f3wnywanie pr\u0119dko\u015bci r\u00f3\u017cnych blockchain\u00f3w w postaci \u201eile TPS\u201d jest skrajnie niewdzi\u0119cznym zaj\u0119ciem, poniewa\u017c istnieje ogromna liczba r\u00f3\u017cnych konfiguracji i stan\u00f3w. W du\u017cych scentralizowanych systemach, klastrach z setkami serwer\u00f3w, te problemy s\u0105 r\u00f3wnie\u017c z\u0142o\u017cone i wymagaj\u0105 zbierania du\u017cej liczby r\u00f3\u017cnych metryk, ale w blockchainach, z powodu sieci p2p, maszyn wirtualnych, przetwarzaj\u0105cych kontrakty, wewn\u0119trznej ekonomii, liczba stopni swobody jest znacznie wi\u0119ksza, co sprawia, \u017ce test nawet na kilku serwerach jest ma\u0142o reprezentatywny i pokazuje jedynie skrajnie przybli\u017cone warto\u015bci, kt\u00f3re maj\u0105 niewielki zwi\u0105zek z rzeczywisto\u015bci\u0105.<\/p>\n<p><\/p>\n<p>Dlatego, przy projektowaniu j\u0105dra blockchaina, aby oceni\u0107 wydajno\u015b\u0107 i odpowiedzie\u0107 na pytanie \u201eczy poprawi\u0142o si\u0119 w por\u00f3wnaniu z ostatnim razem\u201d, u\u017cywamy do\u015b\u0107 skomplikowanego oprogramowania, kt\u00f3re orkiestruje uruchomienie blockchaina z dziesi\u0105tkami w\u0119z\u0142\u00f3w i automatycznie uruchamia benchmark oraz zbieranie metryk, bez tej informacji niezwykle trudno jest debugowa\u0107 protoko\u0142y dzia\u0142aj\u0105ce z wieloma uczestnikami.<\/p>\n<p><\/p>\n<p>Dlatego, gdy otrzymasz pytanie \u201eile TPS ma wasz blockchain?\u201d, zaproponuj rozm\u00f3wcy herbat\u0119 i zapytaj, czy jest got\u00f3w zapozna\u0107 si\u0119 z dziesi\u0105tkami wykres\u00f3w oraz wys\u0142ucha\u0107 wszystkich trzech pude\u0142 problem\u00f3w wydajno\u015bci blockchain\u00f3w i twoich propozycji ich rozwi\u0105zania\u2026<\/p>\n<p>\u0179r\u00f3d\u0142o: <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.1.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\/pl\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47Ile TPS w waszym blockchainie? | ProHoster","description":"Ulubionym pytaniem niezwi\u0105zanej z technik\u0105 osoby o ka\u017cd\u0105 rozproszon\u0105 system jest \u201eIle TPS w waszym blockchainie?\u201d.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/skolko-tps-v-vashem-blokchejne","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/36157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=36157"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36157\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=36157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=36157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=36157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}