Giapod-apod nga Registry alang sa Wheelsets: Usa ka Kasinatian sa Hyperledger Fabric

Kumusta, nagtrabaho ko sa team sa proyekto sa DRD KP (giapod-apod nga rehistro sa datos alang sa pag-monitor sa siklo sa kinabuhi sa mga set sa ligid). Dinhi gusto nakong ipaambit ang kasinatian sa among team sa pagpalambo sa usa ka enterprise blockchain alang niini nga proyekto ubos sa mga pagpugong sa teknolohiya. Kasagaran maghisgot ako bahin sa Hyperledger Fabric, apan ang pamaagi nga gihulagway dinhi mahimong i-extrapolated sa bisan unsang gitugotan nga blockchain. Ang katapusang katuyoan sa among panukiduki mao ang pag-andam sa mga solusyon sa blockchain sa negosyo aron ang katapusan nga produkto makapahimuot nga gamiton ug dili kaayo lisud nga mapadayon.

Wala'y mga nadiskobrehan, wala damha nga mga solusyon, ug walay talagsaon nga mga kalamboan ang ipasiugda dinhi (tungod kay wala ako'y bisan unsa). Gusto lang nako ipaambit ang akong kasarangan nga kasinatian, ipakita nga "posible kini" ug, tingali, basaha ang bahin sa mga kasinatian sa ubang mga tawo sa paghimo og maayo ug dili maayo nga mga desisyon sa mga komento.

Problema: Ang mga blockchain wala pa modako

Karon, ang mga paningkamot sa daghang mga developer gitumong sa paghimo sa blockchain nga usa ka tinuod nga kombenyente nga teknolohiya, ug dili usa ka bomba sa panahon sa usa ka matahum nga wrapper. Ang mga channel sa estado, malaumon nga rollup, plasma ug sharding mahimong kasagaran. Sa pila ka adlaw. O tingali i-postpone na usab sa TON ang paglansad sulod sa unom ka bulan, ug ang sunod nga Plasma Group dili na maglungtad. Makatuo kita sa sunod nga mapa sa dalan ug makabasa og hayag nga puti nga mga papel sa gabii, apan dinhi ug karon kinahanglan natong buhaton ang unsay naa kanato. Buhata ang tae.

Ang buluhaton nga gitakda alang sa among team sa kasamtangan nga proyekto tan-awon sa kinatibuk-an sama niini: adunay daghang mga hilisgutan, nga moabot sa pipila ka libo, nga dili gusto nga magtukod og mga relasyon sa pagsalig; Kinahanglan nga maghimo usa ka solusyon sa DLT nga magamit sa ordinaryong mga PC nga wala’y espesyal nga mga kinahanglanon sa pasundayag ug maghatag usa ka kasinatian sa gumagamit nga dili labi ka daotan kaysa bisan unsang sentralisadong sistema sa accounting. Ang teknolohiya sa luyo sa solusyon kinahanglan nga maminusan ang posibilidad sa malisyosong pagmaniobra sa datos - mao nga ania dinhi ang blockchain.

Ang mga slogan gikan sa mga whitepaper ug sa media nagsaad kanamo nga ang sunod nga kalamboan magtugot kanamo sa paghimo sa minilyon nga mga transaksyon matag segundo. Unsa man gyud ni?

Ang Mainnet Ethereum karon nagdagan sa ~30 tps. Tungod lamang niini, lisud ang pagtan-aw niini ingon blockchain sa bisan unsang paagi nga angay alang sa mga panginahanglanon sa korporasyon. Lakip sa gitugotan nga mga solusyon adunay mga benchmark nga nagpakita sa 2000 tps (korum) o 3000 tps (Hyperledger nga Tela, adunay gamay nga gamay sa publikasyon, apan kinahanglan nimo nga tagdon nga ang benchmark gihimo sa daan nga consensus engine). Ang usa ka pagsulay sa radikal nga pagproseso sa Tela, nga naghatag dili sa pinakagrabe nga mga resulta, 20000 tps, apan sa pagkakaron kini usa lamang ka panukiduki sa akademiko, nga naghulat alang sa lig-on nga pagpatuman niini. Dili tingali nga ang usa ka korporasyon nga makahimo sa pagpadayon sa usa ka departamento sa mga nag-develop sa blockchain magbutang sa ingon nga mga timailhan. Apan ang problema dili lamang throughput, adunay usab latency.

Kalihokan

Ang paglangan gikan sa higayon nga ang usa ka transaksyon gisugdan hangtod sa katapusan nga pag-apruba sa sistema nagdepende dili lamang sa katulin diin ang mensahe moagi sa tanan nga mga yugto sa pag-validate ug pag-order, apan usab sa mga parameter sa pagporma sa block. Bisan kung ang among blockchain nagtugot kanamo nga mopasalig sa katulin nga 1000000 tps, apan nanginahanglan 10 minuto aron makamugna usa ka 488 MB block, mahimo ba kini nga labi kadali alang kanamo?

Atong tan-awon pag-ayo ang siklo sa kinabuhi sa transaksyon sa Hyperledger Fabric aron masabtan kung diin gigugol ang oras ug kung giunsa kini nalangkit sa pag-block sa mga parameter sa henerasyon.

Giapod-apod nga Registry alang sa Wheelsets: Usa ka Kasinatian sa Hyperledger Fabric
gikuha gikan dinhi: hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

(1) Ang kliyente nagmugna og usa ka transaksyon, gipadala kini ngadto sa pag-endorso sa mga kaedad, ang naulahi nag-simulate sa transaksyon (i-apply ang mga pagbag-o nga gihimo pinaagi sa chaincode sa kasamtangan nga estado, apan ayaw pag-commit sa ledger) ug makadawat sa RWSet - yawe nga mga ngalan, bersyon ug mga bili ​Gikuha gikan sa koleksyon sa CouchDB, (2) ang mga endorser nagpadala og balik sa usa ka pinirmahan nga RWSet ngadto sa kliyente, (3) ang kliyente nagsusi sa presensya sa mga pirma sa tanang gikinahanglan nga mga kaubanan (endorsers), ug dayon ipadala ang transaksyon ngadto sa serbisyo sa pag-order. , o ipadala kini nga walay pag-verify (ang tseke mahitabo gihapon sa ulahi), ang serbisyo sa pag-order mahimong usa ka block ug (4) ipadala balik sa tanan nga mga kaedad, dili lang mga endorser; gisusi sa mga kaubanan nga ang mga yawe nga bersyon sa gibasa nga set motakdo sa mga bersyon sa database, nga ang tanan nga mga nag-endorso adunay mga pirma, ug sa katapusan nahimo ang block.

Apan dili lang kana. Ang mga pulong nga "nag-order usa ka bloke" nagtago dili lamang sa pag-order sa mga transaksyon, apan usab sa 3 nga sunud-sunod nga mga hangyo sa network gikan sa lider ngadto sa mga sumusunod ug balik: ang lider nagdugang usa ka mensahe sa log, gipadala kini sa mga sumusunod, ang ulahi nagdugang niini. sa ilang log, nagpadala sa kumpirmasyon sa malampuson nga pagkopya ngadto sa lider, ang lider mitugyan sa mensahe , nagpadala sa pasalig sa pagkumpirma ngadto sa mga sumusunod, ang mga sumusunod mipasalig. Ang mas gamay nga gidak-on ug oras sa pagporma sa block, mas kanunay ang serbisyo sa pag-order kinahanglan magtukod og consensus. Ang Hyperledger Fabric adunay duha ka mga parameter alang sa block formation: BatchTimeout - block formation time ug BatchSize - block size (ang gidaghanon sa mga transaksyon ug ang gidak-on sa block mismo sa bytes). Sa diha nga ang usa sa mga parameter makaabot sa limitasyon, usa ka bag-ong block ang gipagawas. Ang mas daghang order node, mas dugay kini. Busa, kinahanglan nimo nga dugangan ang BatchTimeout ug BatchSize. Apan tungod kay ang RWSets gi-bersyon, mas dako ang block nga atong gihimo, mas taas ang posibilidad sa mga panagsumpaki sa MVCC. Dugang pa, samtang nagdugang ang BatchTimeout, ang UX malaglagon. Ang mosunod nga pamaagi sa pagsulbad niini nga mga problema daw makatarunganon ug klaro alang kanako.

Unsaon paglikay sa paghulat sa block finalization ug dili mawad-an sa abilidad sa pagsubay sa status sa transaksyon

Kung mas taas ang oras sa pagporma ug gidak-on sa block, mas taas ang throughput sa blockchain. Ang usa dili direkta nga nagsunod gikan sa lain, apan kinahanglan nga hinumdoman nga ang pag-establisar sa consensus sa RAFT nanginahanglan tulo nga mga hangyo sa network gikan sa lider hangtod sa mga sumusunod ug likod. Ang mas daghang order node, mas dugay kini. Ang mas gamay nga gidak-on ug oras sa pagporma sa block, mas daghan ang maong mga interaksyon. Giunsa nga madugangan ang oras sa henerasyon ug gidak-on sa block nga dili madugangan ang oras sa pagtubag sa sistema alang sa katapusan nga tiggamit?

Una, kinahanglan natong sulbaron ang mga panagbangi sa MVCC tungod sa dako nga gidak-on sa block, nga mahimong maglakip sa lain-laing mga RWSets nga adunay parehas nga bersyon. Dayag nga, sa bahin sa kliyente (may kalabotan sa network nga blockchain, mahimo’g kini ang backend, ug gipasabut nako kini) kinahanglan nimo MVCC conflict handler, nga mahimo nga usa ka bulag nga serbisyo o usa ka regular nga dekorador sa ibabaw sa tawag nga nagsugod sa transaksyon nga adunay pagsulay pag-usab nga lohika.

Mahimong ipatuman ang pagsulay pag-usab gamit ang usa ka exponential nga estratehiya, apan unya ang latency mous-os sama sa exponentially. Busa kinahanglan nimo nga gamiton ang usa ka random nga pagsulay pag-usab sulod sa pipila ka gagmay nga mga limitasyon, o usa ka kanunay. Uban sa usa ka mata sa posible nga mga bangga sa unang kapilian.

Ang sunod nga lakang mao ang paghimo sa interaksyon sa kliyente sa sistema nga asynchronous aron dili kini maghulat sa 15, 30 o 10000000 segundos, nga among ibutang nga BatchTimeout. Apan sa samang higayon, gikinahanglan ang pagmentinar sa abilidad sa pagmatuod nga ang mga kausaban nga gisugdan sa transaksyon/wala natala sa blockchain.
Ang usa ka database mahimong magamit sa pagtipig sa kahimtang sa transaksyon. Ang pinakasimple nga kapilian mao ang CouchDB tungod sa kasayon ​​​​sa paggamit niini: ang database adunay usa ka UI gikan sa kahon, usa ka REST API, ug dali ka nga mag-set up sa replikasyon ug sharding alang niini. Mahimo ka lang maghimo usa ka lahi nga koleksyon sa parehas nga pananglitan sa CouchDB nga naggamit sa Fabric aron itago ang kahimtang sa kalibutan. Kinahanglan natong tipigan kining mga matang sa mga dokumento.

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

Kini nga dokumento gisulat sa database sa wala pa ipadala ang transaksyon ngadto sa mga kaedad, ang entity ID ibalik sa user (ang parehas nga ID gigamit ingon usa ka yawe) kung kini usa ka operasyon sa paglalang, ug dayon ang Status, TxID ug Error fields updated samtang may kalabutan nga impormasyon nadawat gikan sa mga kaedad.

Giapod-apod nga Registry alang sa Wheelsets: Usa ka Kasinatian sa Hyperledger Fabric

Sa kini nga laraw, ang tiggamit wala maghulat nga ang bloke sa katapusan maporma, nga nagtan-aw sa nagtuyok nga ligid sa screen sulod sa 10 segundos, nakadawat siya usa ka dali nga tubag gikan sa sistema ug nagpadayon sa pagtrabaho.

Gipili namo ang BoltDB aron tipigan ang mga status sa transaksyon tungod kay kinahanglan namo nga i-save ang memorya ug dili gusto nga mag-usik og oras sa interaksyon sa network sa usa ka bulag nga database server, ilabi na kung kini nga interaksyon mahitabo gamit ang plain text protocol. Pinaagi sa dalan, bisan kung gigamit nimo ang CouchDB aron ipatuman ang laraw nga gihulagway sa ibabaw o yano nga pagtipig sa estado sa kalibutan, sa bisan unsang kaso makatarunganon nga ma-optimize ang paagi nga gitipigan ang data sa CouchDB. Sa kasagaran, sa CouchDB, ang gidak-on sa mga b-tree node mao ang 1279 bytes, nga mas gamay kay sa gidak-on sa sektor sa disk, nga nagpasabot nga ang pagbasa ug pagbalanse sa kahoy magkinahanglan ug dugang pisikal nga pag-access sa disk. Ang kamalaumon nga gidak-on katumbas sa sumbanan Advanced nga Format ug 4 kilobytes. Aron ma-optimize kinahanglan namon nga itakda ang parameter btree_chunk_size nga katumbas sa 4096 sa CouchDB configuration file. Alang sa BoltDB ang ingon nga manual nga interbensyon dili gikinahanglan.

Backpressure: estratehiya sa buffer

Apan mahimong adunay daghang mga mensahe. Labaw pa sa mahimo sa sistema, ang pagpaambit sa mga kahinguhaan sa usa ka dosena nga uban pang mga serbisyo gawas sa gipakita sa diagram - ug kining tanan kinahanglan nga molihok nga wala’y kapuslanan bisan sa mga makina diin ang pagpadagan sa Intellij Idea labi ka makalaay.

Ang problema sa lainlaing kapasidad sa mga sistema sa komunikasyon, prodyuser ug konsumidor, nasulbad sa lainlaing paagi. Atong tan-awon kon unsay atong mahimo.

Pag-undang: Mahimo natong i-claim nga kita makahimo sa pagproseso sa kadaghanan sa X nga mga transaksyon sa T segundos. Ang tanan nga mga hangyo nga molapas sa kini nga limitasyon gisalikway. Kini yano ra, apan mahimo nimong kalimtan ang bahin sa UX.

Pagkontrol: ang konsumidor kinahanglan adunay usa ka matang sa interface diin, depende sa load, mahimo niyang makontrol ang TPS sa prodyuser. Dili daotan, apan nagpahamtang kini mga obligasyon sa mga nag-develop sa kliyente nga nagmugna sa load aron ipatuman kini nga interface. Dili kini madawat alang kanamo, tungod kay ang blockchain sa umaabot i-integrate sa daghang mga sistema nga dugay nang naglungtad.

Pagkabugnaw: Imbis nga sulayan ang pagsukol sa input data stream, mahimo natong buffer kini nga sapa ug iproseso kini sa gikinahanglan nga katulin. Dayag nga kini ang labing kaayo nga solusyon kung gusto namon maghatag usa ka maayong kasinatian sa tiggamit. Gipatuman namo ang buffer gamit ang pila sa RabbitMQ.

Giapod-apod nga Registry alang sa Wheelsets: Usa ka Kasinatian sa Hyperledger Fabric

Duha ka bag-ong aksyon ang gidugang sa laraw: (1) pagkahuman moabut ang usa ka hangyo sa API, usa ka mensahe nga adunay mga parameter nga gikinahanglan sa pagtawag sa usa ka transaksyon gibutang sa pila, ug ang kliyente nakadawat usa ka mensahe nga ang transaksyon gidawat sa ang sistema, (2) ang backend nagbasa sa datos sa gikusgon nga gitakda sa config gikan sa pila; nagsugod sa usa ka transaksyon ug nag-update sa datos sa status store.
Karon mahimo nimong madugangan ang oras sa pagporma ug pag-block sa kapasidad kutob sa imong gusto, pagtago sa mga paglangan gikan sa tiggamit.

Uban pang mga gamit

Wala’y gisulti dinhi bahin sa chaincode, tungod kay, ingon usa ka lagda, wala’y bisan unsa nga ma-optimize niini. Ang Chaincode kinahanglan nga yano ug luwas kutob sa mahimo - mao ra kana ang gikinahanglan niini. Ang balangkas nagtabang kanamo sa pagsulat sa chaincode nga yano ug luwas CCKit gikan sa S7 Techlab ug static analyzer buhion^CC.

Dugang pa, ang among team nag-develop og usa ka set sa mga utilities aron mahimo ang pagtrabaho sa Fabric nga yano ug makalingaw: block explorer, usa ka gamit alang sa awtomatikong pagbag-o sa configuration sa network (pagdugang/pagtangtang sa mga organisasyon, RAFT nodes), gamit para sa pagbawi sa mga sertipiko ug pagtangtang sa pagkatawo. Kung gusto ka mutampo, welcome ka.

konklusyon

Kini nga pamaagi nagtugot kanimo sa dali nga pag-ilis sa Hyperledger Fabric sa Quorum, uban pang pribadong Ethereum network (PoA o bisan PoW), nga makapakunhod pag-ayo sa aktwal nga throughput, apan sa samang higayon mamentinar ang normal nga UX (pareho alang sa mga tiggamit sa browser ug alang sa integrated system). Kung gipulihan ang Fabric sa Ethereum sa laraw, kinahanglan ra nimo nga usbon ang lohika sa serbisyo sa pagsulay / dekorasyon gikan sa pagproseso sa mga panagbangi sa MVCC ngadto sa atomic nonce increment ug resending. Ang pag-buffer ug pagtipig sa status nagpaposible sa pag-decouple sa oras sa pagtubag gikan sa oras sa pagporma sa block. Karon mahimo nimong idugang ang libu-libo nga mga node sa order ug ayaw kahadlok nga ang mga bloke kanunay nga naporma ug gikarga ang serbisyo sa pag-order.

Sa panguna, kana ra ang gusto nakong ipaambit. Malipay ko kung makatabang kini sa usa ka tawo sa ilang trabaho.

Source: www.habr.com

Idugang sa usa ka comment