Registry Yogawidwa ya Ma Wheelsets: Zochitika ndi Hyperledger Fabric

Moni, ndimagwira ntchito m'gulu la projekiti ya DRD KP (kaundula wa data wogawira kuti aziwunika momwe ma wheel seti amayendera). Pano ndikufuna kugawana zomwe gulu lathu likuchita popanga bizinesi blockchain ya polojekitiyi pansi pa zovuta zamakono. Ndikhala ndikulankhula za Hyperledger Fabric, koma njira yomwe yafotokozedwa apa ikhoza kuwonjezeredwa ku blockchain iliyonse yololedwa. Cholinga chachikulu cha kafukufuku wathu ndikukonzekera mayankho a mabizinesi a blockchain kuti chomalizacho chikhale chosangalatsa kugwiritsa ntchito osati chovuta kuchisunga.

Sipadzakhala zopezedwa, zothetsera zosayembekezereka, ndipo palibe zochitika zapadera zomwe zidzasonyezedwe apa (chifukwa ndilibe). Ndikungofuna kugawana zomwe ndakumana nazo modzichepetsa, kusonyeza kuti "zinali zotheka" ndipo, mwinamwake, werengani za zochitika za anthu ena pakupanga zisankho zabwino osati zabwino mu ndemanga.

Vuto: Ma blockchains samakulabe

Masiku ano, zoyesayesa za opanga ambiri zimayang'ana kupanga blockchain kukhala ukadaulo wosavuta, osati bomba la nthawi mu chokulunga chokongola. Ma mayendedwe aboma, kukwera kwachiyembekezo, plasma ndi sharding mwina zitha kukhala zofala. Tsiku lina. Kapena mwinamwake TON idzayimitsanso kukhazikitsidwa kwa miyezi isanu ndi umodzi, ndipo Plasma Group yotsatira idzasiya kukhalapo. Titha kukhulupirira mumsewu wotsatira ndikuwerenga mapepala oyera owala usiku, koma pano ndi pano tiyenera kuchitapo kanthu ndi zomwe tili nazo. Chitani zoyipa.

Ntchito yokhazikitsidwa kwa gulu lathu mu polojekiti yamakono ikuwoneka motere: pali maphunziro ambiri, kufika zikwi zingapo, omwe safuna kumanga maubwenzi pakukhulupirirana; M'pofunika kumanga njira pa DLT kuti ntchito pa ma PC wamba popanda zofunika ntchito yapadera ndi kupereka wosuta zinachitikira palibe choipa kuposa machitidwe apakati mlandu. Ukadaulo womwe uli kumbuyo kwa yankho uyenera kuchepetsa kuthekera kwakusintha koyipa kwa data - ndichifukwa chake blockchain ili pano.

Mawu omveka ochokera m'manyuzipepala ndi atolankhani amatilonjeza kuti chitukuko chotsatira chidzatilola kupanga mamiliyoni a malonda pamphindi. Ndi chiyani kwenikweni?

Mainnet Ethereum ikugwira ntchito pa ~ 30 tps. Chifukwa cha izi zokha, ndizovuta kuziwona ngati blockchain mwanjira iliyonse yoyenera zosowa zamabizinesi. Pakati pa mayankho ololedwa pali zizindikiro zosonyeza 2000 tps (Chiwerengero) kapena 3000 tps (Chovala cha Hyperledger, pali zochepa pang'ono m'bukuli, koma muyenera kuganizira kuti chizindikirocho chinachitika pa injini yakale yogwirizana). Anali kuyesa kwakukulu kwa Fabric processing, zomwe sizinapereke zotsatira zoyipa kwambiri, 20000 tps, koma mpaka pano izi ndi kafukufuku wamaphunziro chabe, kuyembekezera kukhazikitsidwa kwake kokhazikika. Ndizokayikitsa kuti bungwe lomwe lingakwanitse kusunga dipatimenti ya opanga blockchain liziyika zizindikiro zotere. Koma vuto si kungodutsa, palinso latency.

Latency

Kuchedwa kuyambira pomwe kugulitsako kuyambika mpaka kuvomerezedwa komaliza ndi dongosololi sikungotengera liwiro lomwe uthengawo umadutsa pazigawo zonse zotsimikizira ndi kuyitanitsa, komanso pazigawo zopanga block. Ngakhale blockchain yathu imatilola kuchita pa liwiro la 1000000 tps, koma imafuna mphindi 10 kuti tipange chipika cha 488 MB, zitha kukhala zosavuta kwa ife?

Tiyeni tiwone mwatsatanetsatane za kusintha kwa moyo mu Hyperledger Fabric kuti timvetsetse komwe nthawi imathera komanso momwe ikukhudzira kutsekereza magawo a mibadwo.

Registry Yogawidwa ya Ma Wheelsets: Zochitika ndi Hyperledger Fabric
zotengedwa kuchokera pano: hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

(1) Wogula amapanga malonda, amawatumiza kwa anzawo ovomerezeka, omalizawo amatsanzira zomwe zikuchitika (gwiritsani ntchito zosintha zomwe zasinthidwa ndi chaincode ku chikhalidwe chamakono, koma osadzipereka ku ledger) ndi kulandira RWSet - mayina ofunika, matembenuzidwe ndi makhalidwe zotengedwa kuchokera ku CouchDB, (2) ovomereza amatumizanso RWSet yosainidwa kwa kasitomala, (3) kasitomala amafufuza ngati pali siginecha ya anzawo onse ofunikira (othandizira), ndiyeno amatumiza ndalamazo ku ntchito yoyitanitsa. , kapena kutumiza popanda kutsimikizira (chekecho chidzachitikabe pambuyo pake), ntchito yoyitanitsa imapanga chipika ndipo (4) imatumizanso kwa anzawo onse, osati ongovomereza; anzanu amayang'ana kuti makiyi omasulira omwe amawerengedwa amafanana ndi matembenuzidwe omwe ali mumsungidwe, kuti ovomereza onse ali ndi siginecha, ndipo pamapeto pake achite chipikacho.

Koma si zokhazo. Mawu oti "owongolera amapanga chipika" samabisala kuyitanitsa kochitika, komanso zopempha 3 zotsatizana zapaintaneti kuchokera kwa mtsogoleri kupita kwa otsatira ndi kumbuyo: mtsogoleri amawonjezera uthenga pa chipikacho, amatumiza kwa otsatira, womaliza amawonjezera. ku chipika chawo, chimatumiza chitsimikiziro cha kubwereza bwino kwa mtsogoleri, mtsogoleriyo amatumiza uthenga, amatumiza chitsimikiziro chodzipereka kwa otsatira, otsatira adzipereka. Zing'onozing'ono kukula ndi nthawi yopangira chipika, nthawi zambiri ntchito yoyitanitsa iyenera kukhazikitsa mgwirizano. Hyperledger Fabric ili ndi magawo awiri opangira block: BatchTimeout - nthawi yopangira block ndi BatchSize - kukula kwa block (chiwerengero cha zochitika ndi kukula kwa chipika chokhachokha). Mwamsanga pamene chimodzi mwa magawowo chikafika malire, chipika chatsopano chimatulutsidwa. Kuchuluka kwa madongosolo, izi zitenga nthawi yayitali. Chifukwa chake, muyenera kuwonjezera BatchTimeout ndi BatchSize. Koma popeza ma RWSets amasinthidwa, kukula kwa chipika chomwe timapanga, kumapangitsa kuti mikangano ya MVCC ichuluke. Kuphatikiza apo, BatchTimeout ikachulukira, UX imawononga kwambiri. Ndondomeko yotsatirayi yothetsera mavutowa ikuwoneka yomveka komanso yowonekera kwa ine.

Momwe mungapewere kudikirira kumalizidwa kwa block komanso kuti musataye kutsata zomwe zikuchitika

Kutalikirapo kwa nthawi yopangira ndi kukula kwa block, kumapangitsa kuti blockchain ichuluke. Mmodzi satsatira mwachindunji kuchokera kwa wina, koma ziyenera kukumbukira kuti kukhazikitsa mgwirizano mu RAFT kumafuna zopempha zitatu zapaintaneti kuchokera kwa mtsogoleri kupita kwa otsatira ndi kumbuyo. Kuchuluka kwa madongosolo, izi zitenga nthawi yayitali. Zing'onozing'ono kukula ndi nthawi ya mapangidwe a chipika, kuyanjana kotereku kumakhalapo. Momwe mungakulitsire nthawi ya m'badwo ndi kukula kwa block popanda kuwonjezera nthawi yoyankha kwa wogwiritsa ntchito?

Choyamba, tifunika kuthetsa mikangano ya MVCC yomwe imayambitsidwa ndi kukula kwakukulu kwa block, komwe kungaphatikizepo ma RWSets osiyanasiyana omwe ali ndi mtundu womwewo. Mwachiwonekere, kumbali ya kasitomala (pokhudzana ndi netiweki ya blockchain, izi zitha kukhala kumbuyo, ndipo ndikutanthauza) muyenera MVCC yolimbana ndi mikangano, yomwe ingakhale ntchito yosiyana kapena yokongoletsa nthawi zonse pamwamba pa kuyimba komwe kumayambitsa ntchitoyo ndikuyesanso kulingalira.

Kuyesanso kutha kukhazikitsidwa ndi njira yotsatsira, koma kuchedwa kumatsika mochulukira. Chifukwa chake muyenera kuyesanso mwachisawawa mkati mwa malire ang'onoang'ono, kapena osasintha. Ndi diso pa zotheka kugunda mu njira yoyamba.

Chotsatira ndikupangitsa kuyanjana kwa kasitomala ndi dongosolo kukhala lofanana kuti lisadikire masekondi 15, 30 kapena 10000000, omwe tidzakhazikitsa ngati BatchTimeout. Koma panthawi imodzimodziyo, m'pofunika kukhalabe ndi mphamvu zotsimikizira kuti zosintha zomwe zimayambitsidwa ndi malonda ndi / sizinalembedwe mu blockchain.
Dongosolo losungiramo zinthu litha kugwiritsidwa ntchito kusunga zomwe zikuchitika. Njira yosavuta ndi CouchDB chifukwa chosavuta kugwiritsa ntchito: nkhokwe ili ndi UI kunja kwa bokosi, REST API, ndipo mutha kuyiyika mosavuta kubwereza ndi kugawana. Mutha kupanga chosonkhanitsira chosiyana munthawi yomweyo ya CouchDB yomwe imagwiritsa ntchito Nsalu kusungira dziko lapansi. Tiyenera kusunga zolemba zamtunduwu.

{
 Status string // Бтатус Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ: "pending", "done", "failed"
 TxID: string // ID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
 Error: string // optional, сообщСниС ΠΎΠ± ошибкС
}

Chikalatachi chimalembedwa ku database isanatumizedwe kwa anzawo, ID ya bungwe imabwezeretsedwa kwa wogwiritsa ntchito (ID yomweyi imagwiritsidwa ntchito ngati kiyi) ngati iyi ndi ntchito yolenga, ndiye kuti Status, TxID ndi Error fields ndi kusinthidwa monga momwe zidziwitso zofunikira zimalandilidwa kuchokera kwa anzawo.

Registry Yogawidwa ya Ma Wheelsets: Zochitika ndi Hyperledger Fabric

Muchiwembu ichi, wogwiritsa ntchito samadikirira kuti chipikacho chikhazikike pomaliza, kuyang'ana gudumu lozungulira pazenera kwa masekondi a 10, amalandira yankho lachangu kuchokera kudongosolo ndikupitiriza kugwira ntchito.

Tinasankha BoltDB kusunga ziwerengero zamalonda chifukwa tifunika kusunga kukumbukira ndipo sitikufuna kuwononga nthawi pa intaneti ndi seva yosiyana ya database, makamaka pamene kuyanjanaku kumachitika pogwiritsa ntchito ndondomeko yomveka bwino. Mwa njira, kaya mumagwiritsa ntchito CouchDB kukhazikitsa chiwembu chomwe chafotokozedwa pamwambapa kapena kungosunga dziko lapansi, mulimonse momwe zingakhalire ndizomveka kukhathamiritsa momwe deta imasungidwira ku CouchDB. Mwachikhazikitso, mu CouchDB, kukula kwa ma b-tree node ndi 1279 byte, yomwe ndi yaying'ono kwambiri kuposa kukula kwa gawo pa disk, zomwe zikutanthauza kuti kuwerenga ndi kukonzanso mtengo kudzafuna mwayi wochuluka wa diski. Kukula koyenera kumafanana ndi muyezo Mtundu Wapamwamba ndi 4 kilobytes. Kuti tichite bwino tiyenera kukhazikitsa parameter btree_chunk_size wofanana ndi 4096 mu fayilo yosintha ya CouchDB. Kwa BoltDB kuchitapo kanthu pamanja sizinayesedwe.

Backpressure: njira ya buffer

Koma pakhoza kukhala mauthenga ambiri. Zoposa momwe dongosololi lingagwiritsire ntchito, kugawana zothandizira ndi ntchito zina khumi ndi ziwiri kupatula zomwe zikuwonetsedwa pachithunzichi - ndipo zonsezi ziyenera kugwira ntchito mosalakwitsa ngakhale pamakina omwe Intellij Idea imagwiritsa ntchito ingakhale yotopetsa kwambiri.

Vuto la kuthekera kosiyanasiyana kwa machitidwe olankhulirana, opanga ndi ogula, amathetsedwa m'njira zosiyanasiyana. Tiyeni tione zimene tingachite.

Kugwetsa: Titha kunena kuti timatha kukonza nthawi zambiri za X mumasekondi a T. Zopempha zonse zopyola malirewa zimatayidwa. Izi ndizosavuta, koma mutha kuyiwala za UX.

Kuwongolera: wogula ayenera kukhala ndi mtundu wina wa mawonekedwe omwe, malingana ndi katundu, amatha kulamulira TPS ya wopanga. Osati zoipa, koma amaika udindo kwa Madivelopa kasitomala kupanga katundu kuti agwiritse ntchito mawonekedwe. Izi ndizosavomerezeka kwa ife, popeza blockchain idzaphatikizidwa m'magulu ambiri omwe akhalapo kwa nthawi yayitali.

Kubera: M'malo moyesa kukana mtsinje wa data, titha kubisa mtsinjewu ndikuwukonza pa liwiro lofunikira. Mwachiwonekere iyi ndiye yankho labwino kwambiri ngati tikufuna kupereka wogwiritsa ntchito wabwino. Tinakhazikitsa buffer pogwiritsa ntchito mzere ku RabbitMQ.

Registry Yogawidwa ya Ma Wheelsets: Zochitika ndi Hyperledger Fabric

Zochita ziwiri zatsopano zawonjezeredwa ku chiwembu: (1) pempho la API litafika, uthenga wokhala ndi magawo ofunikira kuti muyitanitse malondawo umayikidwa pamzere, ndipo kasitomala amalandira uthenga woti ntchitoyo yalandiridwa. dongosolo, (2) backend amawerenga deta pa liwiro lotchulidwa mu config kuchokera pamzere; imayambitsa malonda ndikusintha deta mu sitolo yosungiramo zinthu.
Tsopano mutha kuwonjezera nthawi yopangira ndikutchinga mphamvu momwe mukufunira, kubisala kuchedwa kwa wogwiritsa ntchito.

Zida zina

Palibe chomwe chidanenedwa pano za chaincode, chifukwa, monga lamulo, palibe chomwe chingakwaniritse bwino. Chaincode iyenera kukhala yosavuta komanso yotetezeka momwe mungathere - ndizo zonse zomwe zimafunikira. Ndondomekoyi imatithandiza kulemba chaincode mosavuta komanso motetezeka CCKit kuchokera ku S7 Techlab ndi static analyzer tsitsimutsa^CC.

Kuphatikiza apo, gulu lathu likupanga zida zothandizira kuti ntchito ndi Nsalu ikhale yosavuta komanso yosangalatsa: blockchain wofufuza, zothandiza kwa zosintha zosintha zamanetiweki (kuwonjezera/kuchotsa mabungwe, ma RAFT node), zothandiza kuchotsedwa kwa ziphaso ndikuchotsa chizindikiritso. Ngati mukufuna kupereka, ndinu olandiridwa.

Pomaliza

Njirayi imakulolani kuti musinthe mosavuta Hyperledger Fabric ndi Quorum, maukonde ena apadera a Ethereum (PoA kapena ngakhale PoW), kuchepetsa kwambiri kutulutsa kwenikweni, koma panthawi imodzimodziyo khalani ndi UX wamba (zonse kwa ogwiritsa ntchito osatsegula ndi machitidwe osakanikirana). Mukasintha Nsalu ndi Ethereum mu chiwembu, mudzangofunika kusintha malingaliro a kuyesanso ntchito / wokongoletsa kuchokera pakukonza mikangano ya MVCC kupita ku ma atomiki osawonjezera ndikutumizanso. Kusungirako ndi kusunga malo kunapangitsa kuti zitheke kuchotseratu nthawi yoyankha kuchokera pa nthawi yopangira block. Tsopano mutha kuwonjezera masauzande ambiri a dongosolo ndipo musawope kuti midadada imapangidwa nthawi zambiri ndikuyika ntchito yoyitanitsa.

Kwenikweni, ndizo zonse zomwe ndimafuna kugawana. Ndidzasangalala ngati izi zithandiza wina pantchito yawo.

Source: www.habr.com

Kuwonjezera ndemanga