Reġistru Mqassam għal Wheelsets: Esperjenza b'Hyperledger Fabric

Hello, naħdem fit-tim tal-proġett DRD KP (reġistru tad-dejta distribwit għall-monitoraġġ taċ-ċiklu tal-ħajja tas-settijiet tar-roti). Hawnhekk nixtieq naqsam l-esperjenza tat-tim tagħna fl-iżvilupp ta 'blockchain ta' intrapriża għal dan il-proġett taħt ir-restrizzjonijiet tat-teknoloġija. Fil-biċċa l-kbira, se nkun qed nitkellem dwar Hyperledger Fabric, iżda l-approċċ deskritt hawn jista 'jiġi estrapolat għal kwalunkwe blockchain permess. L-għan aħħari tar-riċerka tagħna huwa li nippreparaw soluzzjonijiet ta 'blockchain ta' intrapriżi b'tali mod li l-prodott finali jkun pjaċevoli biex jintuża u mhux diffiċli wisq biex jinżamm.

Mhux se jkun hemm skoperti, soluzzjonijiet mhux mistennija, u l-ebda żviluppi uniċi mhu se jkunu koperti hawn (għax m'għandihomx). Irrid biss naqsam l-esperjenza umli tiegħi, nuri li “kien possibbli” u, forsi, naqra dwar l-esperjenza ta’ xi ħadd ieħor fit-teħid ta’ deċiżjonijiet tajbin u mhux daqshekk tajbin fil-kummenti.

Problema: blockchains għadhom mhumiex skalabbli

Illum, l-isforzi ta 'ħafna żviluppaturi huma mmirati biex jagħmlu l-blockchain teknoloġija verament konvenjenti, u mhux bomba tal-ħin f'tgeżwir sabiħ. Kanali tal-istat, rollup ottimist, plażma u sharding jistgħu jsiru komuni. Xi jum. Jew forsi TON jerġa’ jipposponi t-tnedija għal sitt xhur, u l-Grupp tal-Plasma li jmiss ma jibqax jeżisti. Nistgħu nemmnu fi roadmap ieħor u naqraw white papers brillanti bil-lejl, imma hawn u issa rridu nagħmlu xi ħaġa b’dak li għandna. Get shit isir.

Il-kompitu assenjat lit-tim tagħna fil-proġett attwali jidher bħal dan f'termini ġenerali: hemm ħafna suġġetti, li jilħqu diversi eluf, li ma jridux jibnu relazzjonijiet fuq il-fiduċja; huwa meħtieġ li tibni fuq DLT soluzzjoni li taħdem fuq kompjuters ordinarji mingħajr rekwiżiti ta 'prestazzjoni speċjali u tipprovdi esperjenza għall-utent mhux agħar minn kwalunkwe sistema ta' kontabilità ċentralizzata. It-teknoloġija wara s-soluzzjoni għandha timminimizza l-possibbiltà ta 'manipulazzjoni ta' data malizzjuża - u huwa għalhekk li blockchain qiegħed hawn.

Slogans minn whitepapers u midja jwiegħduna li l-iżvilupp li jmiss se jippermetti miljuni ta 'tranżazzjonijiet kull sekonda. X'inhu verament?

Mainnet Ethereum bħalissa qed jaħdem għal ~ 30 tps. Minħabba dan biss, huwa diffiċli li wieħed jipperċepixxiha bħala blockchain li hija b'xi mod adattata għall-bżonnijiet korporattivi. Fost is-soluzzjonijiet permessi, huma magħrufa l-benchmarks li juru 2000 tps (Quorum) jew 3000 tps (Tessili Iperledġer, hemm ftit inqas fil-pubblikazzjoni, iżda żomm f'moħħok li l-benchmark twettaq fuq il-magna tal-kunsens l-antika). Kien tentattiv biex tinħadem mill-ġdid Tessili radikalment, li ma tawx l-agħar riżultati, 20000 tps, iżda s'issa dawn huma biss studji akkademiċi li qed jistennew l-implimentazzjoni stabbli tagħhom. Huwa improbabbli li korporazzjoni li tistax taffordja li żżomm dipartiment ta 'żviluppaturi blockchain se tlaħħaq ma' indikaturi bħal dawn. Iżda l-problema mhix biss fil-fluss, hemm ukoll latency.

Latenza

Id-dewmien mill-mument li tranżazzjoni tinbeda sal-approvazzjoni finali tagħha mis-sistema jiddependi mhux biss fuq il-veloċità tal-messaġġ li jgħaddi mill-istadji kollha tal-validazzjoni u l-ordni, iżda wkoll fuq il-parametri tal-formazzjoni tal-blokki. Anki jekk il-blockchain tagħna jippermettilna li nikkommettu 1000000 tps, iżda tieħu 10 minuti biex tifforma blokka ta '488MB, se ssir aktar faċli għalina?

Ejja nagħtu ħarsa aktar mill-qrib lejn iċ-ċiklu tal-ħajja ta 'tranżazzjoni f'Hyperledger Fabric biex nifhmu x'jieħu ż-żmien u kif jirrelata mal-parametri tal-formazzjoni tal-blokki.

Reġistru Mqassam għal Wheelsets: Esperjenza b'Hyperledger Fabric
meħuda minn hawn: hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

(1) Il-klijent jifforma tranżazzjoni, jibgħatha lill-pari li japprovaw, dawn tal-aħħar jissimulaw it-tranżazzjoni (applikaw il-bidliet magħmula mill-chaincode għall-istat attwali, iżda ma jimpenjawx ruħhom fir-reġistru) u jirċievu RWSet - ismijiet ewlenin, verżjonijiet u valuri meħuda mill-ġbir f'CouchDB, (2) l-endorsers jibagħtu l-RWSet iffirmat lura lill-klijent, (3) il-klijent jew jiċċekkja l-firem tal-pari kollha meħtieġa (endorsers), u mbagħad jibgħat it-tranżazzjoni lis-servizz tal-ordnijiet , jew jibgħatha mingħajr verifika (il-verifika xorta se ssir aktar tard), is-servizz tal-ordni jifforma blokka u (4) jibgħat lura lill-pari kollha, mhux biss lill-endorsers; il-pari jivverifikaw li l-verżjonijiet taċ-ċwievet fis-sett tal-qari jaqblu mal-verżjonijiet fid-database, il-firem tal-endorsers kollha, u finalment jimpenjaw il-blokk.

Imma dan mhux kollox. Wara l-kliem "l-ordni jifforma blokka" huwa moħbi mhux biss l-ordni tat-tranżazzjonijiet, iżda wkoll 3 talbiet konsekuttivi tan-netwerk mill-mexxej għas-segwaċi u lura: il-mexxej iżid messaġġ mal-ġurnal, jibgħat lis-segwaċi, l-aħħar iżid ma ' log tagħhom, ibgħat konferma ta 'replikazzjoni b'suċċess lill-mexxej, il-mexxej jikkommetti l-messaġġ , jibgħat konferma ta' impenn lis-segwaċi, is-segwaċi jimpenjaw. Iktar ma jkun żgħir id-daqs u l-ħin tal-blokk, aktar spiss is-servizz tal-ordnijiet ikollu jistabbilixxi kunsens. Hyperledger Fabric għandu żewġ parametri ta 'formazzjoni ta' blokki: BatchTimeout - ħin ta 'formazzjoni ta' blokki u BatchSize - daqs tal-blokk (in-numru ta 'tranżazzjonijiet u d-daqs tal-blokk innifsu f'bytes). Hekk kif wieħed mill-parametri jilħaq il-limitu, jinħareġ blokk ġdid. Iktar ma jkun hemm nodi li jordnaw, iktar se jieħu aktar żmien. Għalhekk, jeħtieġ li żżid BatchTimeout u BatchSize. Iżda peress li l-RWSets huma verżjonati, iktar ma nagħmlu l-blokk, iktar tkun għolja l-probabbiltà ta 'kunflitti MVCC. Barra minn hekk, b'żieda fil-BatchTimeout, UX tiddegrada b'mod katastrofiku. Jidhirli raġonevoli u ovvja l-iskema li ġejja biex issolvi dawn il-problemi.

Kif tevita li tistenna l-finalizzazzjoni tal-blokk u ma titlifx ir-rata tal-istatus tat-tranżazzjoni

Aktar ma jkun twil il-ħin tal-formazzjoni u d-daqs tal-blokk, iktar ikun għoli l-fluss tal-blockchain. Wieħed ma jsegwix direttament mill-ieħor, iżda għandu jiġi mfakkar li l-istabbiliment ta 'kunsens fir-RAFT jeħtieġ tliet talbiet tan-netwerk mill-mexxej lis-segwaċi u lura. Iktar ma jkun hemm nodi ta' ordni, iktar se tieħu. Iktar ma jkun żgħir id-daqs u l-ħin tal-formazzjoni tal-blokki, iktar interazzjonijiet bħal dawn. Kif iżżid il-ħin tal-formazzjoni u d-daqs tal-blokk mingħajr ma żżid il-ħin tar-rispons tas-sistema għall-utent aħħari?

L-ewwel, għandek bżonn b'xi mod issolvi l-kunflitti MVCC ikkawżati minn daqs kbir ta 'blokk, li jista' jinkludi RWSets differenti bl-istess verżjoni. Ovvjament, min-naħa tal-klijent (b'relazzjoni man-netwerk tal-blockchain, dan jista 'jkun backend, u nfissirha) MVCC konflitt handler, li jista' jkun jew servizz separat jew dekoratur regolari fuq sejħa li tibda t-tranżazzjoni b'loġika mill-ġdid.

Ipprova mill-ġdid jista 'jiġi implimentat bi strateġija esponenzjali, iżda mbagħad il-latency se tiddegrada b'mod esponenzjali wkoll. Għalhekk għandek tuża jew retry randomised f'ċerti limiti żgħar, jew waħda kostanti. B'għajnejk għall-ħabtiet possibbli fl-ewwel varjant.

Il-pass li jmiss huwa li tagħmel l-interazzjoni tal-klijent mas-sistema mhux sinkronika sabiex ma tistennax għal 15, 30, jew 10000000 sekonda, li aħna nissettjaw bħala BatchTimeout. Iżda fl-istess ħin, huwa meħtieġ li tinżamm il-kapaċità li jiġi żgurat li l-bidliet mibdija mit-tranżazzjoni jiġu rreġistrati / mhux irreġistrati fil-blockchain.
Tista' tintuża database biex tinħażen l-istatus tat-tranżazzjonijiet. L-eħfef għażla hija CouchDB minħabba l-faċilità ta 'użu tagħha: id-database għandha UI barra mill-kaxxa, REST API, u faċilment tista' twaqqaf replikazzjoni u sharding għaliha. Tista 'sempliċement toħloq ġabra separata fl-istess istanza CouchDB li Fabric juża biex jaħżen l-istat dinji tiegħu. Għandna bżonn naħżnu dokumenti ta 'dan it-tip.

{
 Status string // Статус транзакции: "pending", "done", "failed"
 TxID: string // ID транзакции
 Error: string // optional, сообщение об ошибке
}

Dan id-dokument jinkiteb fid-database qabel it-tranżazzjoni tintbagħat lill-pari, l-ID tal-entità tiġi rritornata lill-utent (l-istess ID tintuża bħala ċavetta) jekk din hija operazzjoni ta’ ħolqien, u mbagħad l-oqsma Status, TxID u Żball huma aġġornata hekk kif tiġi riċevuta informazzjoni rilevanti mingħand sħabhom.

Reġistru Mqassam għal Wheelsets: Esperjenza b'Hyperledger Fabric

F'din l-iskema, l-utent ma jistenna li l-blokka fl-aħħar tifforma, jara r-rota tal-għażil fuq l-iskrin għal 10 sekondi, jirċievi rispons immedjat mis-sistema u jkompli jaħdem.

Aħna għażilna BoltDB biex taħżen l-istatus tat-tranżazzjonijiet għaliex għandna bżonn insalvaw il-memorja u ma rridux naħlu l-ħin fuq l-interazzjoni tan-netwerk ma 'server ta' database waħdu, speċjalment meta din l-interazzjoni sseħħ bl-użu tal-protokoll ta 'test sempliċi. Mill-mod, kemm jekk tuża CouchDB biex timplimenta l-iskema deskritta hawn fuq jew sempliċement biex taħżen l-istat dinji, fi kwalunkwe każ, jagħmel sens li tottimizza l-mod kif id-dejta tinħażen f'CouchDB. B'mod awtomatiku, f'CouchDB, id-daqs tan-nodi b-tree huwa 1279 bytes, li huwa ħafna inqas mid-daqs tas-settur fuq id-diska, li jfisser li kemm il-qari kif ukoll l-ibbilanċjar mill-ġdid tas-siġra se jeħtieġu aktar aċċessi fiżiċi tad-disk. Id-daqs ottimali jilħaq l-istandard Format Avvanzat u huwa 4 kilobytes. Għall-ottimizzazzjoni, għandna bżonn nissettjaw il-parametru btree_chunk_size ugwali għal 4096 fil-fajl tal-konfigurazzjoni CouchDB. Għal BoltDB tali intervent manwali mhux meħtieġ.

Backpressure: strateġija buffer

Iżda jista 'jkun hemm ħafna messaġġi. Aktar milli s-sistema tista' timmaniġġja, taqsam ir-riżorsi ma' tużżana servizzi oħra minbarra dawk murija fid-dijagramma - u dan kollu għandu jaħdem bla difetti anke fuq magni li fuqhom it-tħaddim ta' Intellij Idea ikun tedjanti ħafna.

Il-problema ta' throughput differenti ta' sistemi ta' komunikazzjoni, produttur u konsumatur, tissolva b'modi differenti. Ejja naraw x’nistgħu nagħmlu.

Twaqqa: nistgħu nippretendu li nkunu nistgħu nipproċessaw l-aktar X transazzjonijiet f'T sekondi. It-talbiet kollha li jaqbżu dan il-limitu jitwarrbu. Huwa pjuttost sempliċi, imma mbagħad tista' tinsa dwar l-UX.

Jikontrolla: il-konsumatur għandu jkollu xi interface li permezz tiegħu, skont it-tagħbija, jista 'jikkontrolla t-tps tal-produttur. Mhux ħażin, iżda timponi obbligu fuq l-iżviluppaturi tal-klijent tat-tagħbija biex jimplimentaw din l-interface. Għalina, dan huwa inaċċettabbli, peress li l-blockchain fil-futur se tkun integrata f'numru kbir ta 'sistemi li ilhom jeżistu.

Buffering: minflok ma naħdmu biex nirreżistu l-fluss tad-dejta tal-input, nistgħu nibferu dan il-fluss u nipproċessawha bil-veloċità meħtieġa. Ovvjament, din hija l-aħjar soluzzjoni jekk irridu nipprovdu esperjenza tajba għall-utent. Aħna implimentajna l-buffer bl-użu ta 'kju f'RabbitMQ.

Reġistru Mqassam għal Wheelsets: Esperjenza b'Hyperledger Fabric

Żewġ azzjonijiet ġodda ġew miżjuda mal-iskema: (1) wara li tiġi riċevuta talba API, messaġġ jitqiegħed fil-kju bil-parametri meħtieġa biex issejjaħ it-tranżazzjoni, u l-klijent jirċievi messaġġ li t-tranżazzjoni ġiet aċċettata mis-sistema, ( 2) il-backend jaqra d-dejta b'veloċità speċifikata fil-konfigurazzjoni mill-kju; jibda tranżazzjoni u jaġġorna d-dejta fil-maħżen tal-istatus.
Issa tista 'żżid il-ħin tal-bini u timblokka l-kapaċità kemm trid, u taħbi d-dewmien mill-utent.

Għodda oħra

Hawnhekk ma ntqal xejn dwar il-chaincode, għax normalment ma jkun hemm xejn x'jottimizza fih. Il-chaincode għandu jkun sempliċi u sigur kemm jista 'jkun - dak kollu li huwa meħtieġ minnu. Il-qafas jgħinna ħafna biex niktbu chaincode b'mod sempliċi u sikur. CSKit minn S7 Techlab u analizzatur statiku reve^CC.

Barra minn hekk, it-tim tagħna qed jiżviluppa sett ta 'utilitajiet biex ix-xogħol ma' Fabric ikun sempliċi u pjaċevoli: esploratur tal-blockchain, utilità għal rikonfigurazzjoni awtomatika tan-netwerk (żid / neħħi organizzazzjonijiet, nodi RAFT), utilità għal revoka ta’ ċertifikat u tneħħija ta’ identità. Jekk tixtieq tikkontribwixxi, merħba.

Konklużjoni

Dan l-approċċ jagħmilha faċli li tissostitwixxi Hyperledger Fabric ma 'Quorum, netwerks Ethereum privati ​​oħra (PoA jew saħansitra PoW), inaqqas b'mod sinifikanti l-fluss reali, iżda fl-istess ħin iżomm UX normali (kemm għall-utenti fil-browser kif ukoll min-naħa tas-sistemi integrati). ). Meta tissostitwixxi Tessili b'Ethereum fl-iskema, il-loġika tas-servizz / dekoratur mill-ġdid biss se teħtieġ li tinbidel mill-immaniġġjar tal-kunflitti MVCC għal inkrement atomiku nonce u jibgħat mill-ġdid. Il-buffering u l-ħażna tal-istatus għamluha possibbli li l-ħin tar-rispons jiġi diżakkoppjat mill-ħin tal-formazzjoni tal-blokk. Issa tista 'żżid eluf ta' nodi tal-ordni u ma tibżax li l-blokki jiġu ffurmati ta 'spiss wisq u tagħbija s-servizz tal-ordni.

B'mod ġenerali, dan huwa dak kollu li ridt naqsam. Inkun ferħan jekk jgħin lil xi ħadd fix-xogħol tiegħu.

Sors: www.habr.com

Żid kumment