Distribiye Rejis pou Wheelsets: Yon Eksperyans ak Hyperledger Fabric

Bonjou, mwen travay nan ekip pwojè DRD KP (rejis done distribye pou kontwole sik lavi seri wou yo). Isit la mwen vle pataje eksperyans ekip nou an nan devlope yon blockchain antrepriz pou pwojè sa a anba kontrent yo nan teknoloji. Mwen pral sitou ap pale sou twal Hyperledger la, men apwòch ki dekri isit la ka ekstrapolasyon nan nenpòt blockchain otorize. Objektif final la nan rechèch nou an se prepare solisyon blockchain antrepriz pou pwodwi final la se bèl pou itilize epi li pa twò difisil pou kenbe.

Pa pral gen dekouvèt, solisyon inatandi, epi pa gen okenn devlopman inik yo pral make isit la (paske mwen pa gen okenn). Mwen jis vle pataje eksperyans modès mwen an, montre ke "li te posib" epi, petèt, li sou eksperyans lòt moun nan pran bon ak desizyon pa tèlman bon nan kòmantè yo.

Pwoblèm: Blockchains pa echèl ankò

Jodi a, efò anpil devlopè yo vize pou fè blockchain yon teknoloji vrèman pratik, epi yo pa yon bonm relè nan yon bèl anbalaj. Chanèl leta yo, optimis rollup, plasma ak sharding ap pwobableman vin komen. Yon jou. Oswa petèt TON pral ankò ranvwaye lansman an pou sis mwa, ak pwochen Plasma Group la pral sispann egziste. Nou ka kwè nan pwochen plan wout la epi li briyan papye blan nan mitan lannwit, men isit la ak kounye a nou bezwen fè yon bagay ak sa nou genyen. Fè kaka.

Travay la fikse pou ekip nou an nan pwojè aktyèl la sanble an jeneral tankou sa a: gen anpil sijè, rive plizyè milye, ki pa vle bati relasyon sou konfyans; Li nesesè yo bati yon solisyon sou DLT ki pral travay sou PC òdinè san kondisyon pèfòmans espesyal epi bay yon eksperyans itilizatè pa pi mal pase nenpòt sistèm kontablite santralize. Teknoloji ki dèyè solisyon an dwe minimize posiblite pou manipilasyon move done - se poutèt sa blockchain isit la.

Slogan ki soti nan liv blan ak medya yo pwomèt nou ke pwochen devlopman an pral pèmèt nou fè dè milyon de tranzaksyon pa segonn. Ki sa li vrèman?

Mainnet Ethereum ap kouri kounye a nan ~ 30 tps. Poutèt sa pou kont li, li difisil pou wè li kòm blockchain nan nenpòt fason apwopriye pou bezwen antrepriz. Pami solisyon otorize yo gen referans ki montre 2000 tps (Kowòm) oswa 3000 tps (Twal Hyperledger, gen yon ti kras mwens nan piblikasyon an, men ou bezwen pran an kont ke referans a te pote soti sou motè a konsansis fin vye granmoun). Te yon tantativ nan pwosesis radikal twal, ki pa bay rezilta ki pi mal yo, 20000 tps, men byen lwen tèlman sa a se jis rechèch akademik, ap tann pou aplikasyon ki estab li yo. Li fasil pou yon sosyete ki gen mwayen pou kenbe yon depatman devlopè blockchain ap sipòte endikatè sa yo. Men, pwoblèm nan se pa sèlman debi, gen tou latansi.

Latans

Reta a soti nan moman sa a yon tranzaksyon inisye nan apwobasyon final li pa sistèm nan depann pa sèlman sou vitès la nan ki mesaj la pase nan tout etap nan validation ak lòd, men tou, sou paramèt fòmasyon blòk yo. Menmsi blockchain nou an pèmèt nou komèt nan yon vitès 1000000 tps, men li mande 10 minit pou jenere yon blòk 488 MB, èske l ap vin pi fasil pou nou?

Ann pran yon gade pi pre nan sik lavi tranzaksyon an nan Hyperledger Fabric pou konprann ki kote tan yo pase ak ki jan li gen rapò ak paramèt jenerasyon blòk.

Distribiye Rejis pou Wheelsets: Yon Eksperyans ak Hyperledger Fabric
pran soti isit la: hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

(1) Kliyan an kreye yon tranzaksyon, voye l bay parèy ki bay sipò yo, lèt sa a similye tranzaksyon an (aplike chanjman ki fèt pa chaincode nan eta aktyèl la, men pa angaje nan Ledger la) epi resevwa RWSet - non kle, vèsyon ak valè ​​pran nan koleksyon an nan CouchDB, (2) andose yo voye tounen yon RWSet ki siyen bay kliyan an, (3) kliyan an swa tcheke pou prezans siyati tout kamarad ki nesesè yo (endosè), epi answit voye tranzaksyon an bay sèvis la kòmande. , oswa voye li san verifikasyon (chèk la ap toujou fèt pita), sèvis kòmande a fòme yon blòk epi (4) voye tounen bay tout kanmarad, pa sèlman andose; kanmarad yo tcheke ke vèsyon kle yo nan seri a lekti matche ak vèsyon yo nan baz done a, ke tout andose yo gen siyati, epi finalman komèt blòk la.

Men, sa se pa tout. Mo "kòmann-an fòme yon blòk" kache pa sèlman lòd tranzaksyon yo, men tou 3 demann rezo sekans soti nan lidè a nan disip yo ak tounen lakay ou: lidè a ajoute yon mesaj nan boutèy la, voye li bay disip yo, lèt la ajoute li. nan boutèy demi lit yo, voye konfimasyon replikasyon siksè bay lidè a, lidè a komèt mesaj la, voye konfimasyon komèt bay disip, disip komèt. Pi piti gwosè a ak tan nan fòmasyon blòk, pi souvan sèvis la kòmande ap gen etabli konsansis. Hyperledger Fabric gen de paramèt pou fòmasyon blòk: BatchTimeout - tan fòmasyon blòk ak BatchSize - gwosè blòk (kantite tranzaksyon yo ak gwosè blòk la tèt li an byte). Le pli vit ke youn nan paramèt yo rive nan limit la, yon nouvo blòk lage. Plis nœuds lòd, plis sa a pral pran. Se poutèt sa, ou bezwen ogmante BatchTimeout ak BatchSize. Men, piske RWSets yo vèsyon, pi gwo blòk nou fè, se pi gwo chans pou konfli MVCC. Anplis de sa, kòm BatchTimeout ogmante, UX a katastwofik degrade. Konplo sa a pou rezoud pwoblèm sa yo sanble rezonab ak evidan pou mwen.

Ki jan pou evite tann pou finalizasyon blòk epi pa pèdi kapasite nan swiv estati tranzaksyon yo

Plis tan fòmasyon an ak gwosè blòk la, se pi gwo debi a nan blockchain la. Youn pa swiv dirèkteman nan lòt la, men li ta dwe sonje ke etabli konsansis nan RAFT mande twa demann rezo soti nan lidè a patizan yo ak tounen lakay ou. Plis nœuds lòd, plis sa a pral pran. Pi piti gwosè ak tan fòmasyon blòk, se plis entèraksyon sa yo genyen. Ki jan yo ogmante tan an jenerasyon ak gwosè blòk san yo pa ogmante tan an repons sistèm pou itilizatè a fen?

Premyèman, nou bezwen yon jan kanmenm rezoud konfli MVCC ki te koze pa yon gwosè blòk gwo, ki ka gen ladan diferan RWSets ak menm vèsyon an. Li evidan, sou bò kliyan an (an relasyon ak rezo a blockchain, sa a ta ka byen backend la, e mwen vle di li) ou bezwen MVCC gestionnaire konfli, ki ka swa yon sèvis separe oswa yon dekoratè regilye pi wo a apèl la ki inisye tranzaksyon an ak lojik retry.

Retry ka aplike ak yon estrateji eksponansyèl, men Lè sa a, latansi pral degrade menm jan ak eksponansyèl. Se konsa, ou ta dwe itilize swa yon retry owaza nan sèten limit ti, oswa yon sèl konstan. Ak yon je sou kolizyon posib nan opsyon an premye.

Pwochen etap la se fè entèraksyon kliyan an ak sistèm nan asynchrone pou ke li pa tann pou 15, 30 oswa 10000000 segonn, ke nou pral mete kòm BatchTimeout. Men, an menm tan an, li nesesè kenbe kapasite nan verifye ke chanjman yo inisye pa tranzaksyon an yo / yo pa anrejistre nan blockchain la.
Yon baz done ka itilize pou estoke estati tranzaksyon yo. Opsyon ki pi senp la se CouchDB akòz fasilite li yo pou itilize: baz done a gen yon UI soti nan bwat la, yon API REST, epi ou ka fasilman mete kanpe replikasyon ak sharding pou li. Ou ka tou senpleman kreye yon koleksyon separe nan menm egzanp CouchDB ki sèvi ak Fabric pou konsève eta mond li yo. Nou bezwen sere kalite dokiman sa yo.

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

Dokiman sa a ekri nan baz done a anvan yo voye tranzaksyon an bay kanmarad, ID antite a retounen bay itilizatè a (yo se menm ID a itilize kòm yon kle) si sa a se yon operasyon kreyasyon, ak Lè sa a, Estati, TxID ak Erè jaden yo se mete ajou kòm enfòmasyon enpòtan yo resevwa nan men kanmarad yo.

Distribiye Rejis pou Wheelsets: Yon Eksperyans ak Hyperledger Fabric

Nan konplo sa a, itilizatè a pa tann pou blòk la finalman fòme, gade wou a k ap vire sou ekran an pou 10 segonn, li resevwa yon repons enstantane nan sistèm nan epi li kontinye travay.

Nou te chwazi BoltDB pou konsève estati tranzaksyon yo paske nou bezwen sove memwa epi nou pa vle pèdi tan nan entèraksyon rezo a ak yon sèvè baz done separe, sitou lè entèraksyon sa a fèt lè l sèvi avèk yon pwotokòl tèks klè. By wout la, si ou itilize CouchDB pou aplike konplo ki dekri pi wo a oswa tou senpleman pou konsève eta mond lan, nan nenpòt ka li fè sans pou optimize fason done yo estoke nan CouchDB. Pa default, nan CouchDB, gwosè b-tree nœuds se 1279 bytes, ki se pi piti anpil pase gwosè sektè a sou disk la, ki vle di tou de lekti ak re-balanse pye bwa a pral mande pou plis aksè fizik nan disk la. Gwosè pi bon an koresponn ak estanda a Fòma avanse epi li se 4 kilobyte. Pou optimize nou bezwen mete paramèt la btree_chunk_size egal a 4096 nan dosye konfigirasyon CouchDB. Pou BoltDB entèvansyon manyèl sa yo pa obligatwa.

Backpressure: estrateji tanpon

Men, ka gen anpil mesaj. Plis pase sistèm nan ka okipe, pataje resous ak yon douzèn lòt sèvis san konte sa yo montre nan dyagram nan - ak tout bagay sa yo ta dwe travay parfètman menm sou machin sou ki kouri Intellij Idea ta trè fatigan.

Pwoblèm nan kapasite diferan nan sistèm kominike, pwodiktè ak konsomatè, rezoud nan diferan fason. Ann wè sa nou ta ka fè.

Jete: Nou ka reklame ke nou kapab trete nan pifò X tranzaksyon yo nan T segonn. Tout demann ki depase limit sa a yo jete. Sa a se byen senp, men Lè sa a, ou ka bliye sou UX.

Kontwole: konsomatè a dwe gen yon kalite koòdone nan ki, depann sou chaj la, li ka kontwole TPS pwodiktè a. Pa move, men li enpoze obligasyon sou devlopè yo nan kliyan an kreye chaj la aplike koòdone sa a. Sa a se akseptab pou nou, paske blockchain pral nan lavni an entegre nan yon gwo kantite sistèm ki egziste depi lontan.

Buffering: Olye pou nou eseye reziste kouran done antre, nou ka tampon kouran sa a epi trete li nan vitès ki nesesè yo. Li evidan sa a se solisyon an pi bon si nou vle bay yon eksperyans itilizatè bon. Nou aplike tanpon an lè l sèvi avèk yon keu nan RabbitMQ.

Distribiye Rejis pou Wheelsets: Yon Eksperyans ak Hyperledger Fabric

De nouvo aksyon yo te ajoute nan konplo a: (1) apre yon demann nan API a rive, yon mesaj ki gen paramèt ki nesesè pou rele yon tranzaksyon yo mete nan keu a, epi kliyan an resevwa yon mesaj ke tranzaksyon an te aksepte pa. sistèm nan, (2) backend la li done yo nan vitès ki espesifye nan konfigirasyon an soti nan keu; inisye yon tranzaksyon epi mete ajou done nan magazen estati a.
Koulye a, ou ka ogmante tan fòmasyon an ak bloke kapasite otan ke ou vle, kache reta nan itilizatè a.

Lòt zouti

Pa gen anyen ki te di isit la sou chaincode, paske, kòm yon règ, pa gen anyen yo optimize nan li. Chaincode ta dwe senp epi an sekirite ke posib - se tout sa ki nesesè nan li. Fondasyon an ede nou ekri chaincode tou senpleman epi san danje CCKit soti nan S7 Techlab ak analizeur estatik reviv^CC.

Anplis de sa, ekip nou an ap devlope yon seri sèvis piblik pou fè travay ak Fabric senp epi agreyab: blockchain eksploratè, yon sèvis piblik pou chanjman konfigirasyon rezo otomatik yo (ajoute/retire òganizasyon, nœuds RAFT), sèvis piblik pou anilasyon sètifika ak retire idantite. Si ou vle kontribye, ou byen akeyi.

Konklizyon

Apwòch sa a pèmèt ou fasil ranplase Hyperledger Fabric ak Quorum, lòt rezo prive Ethereum (PoA oswa menm PoW), siyifikativman diminye debi aktyèl la, men an menm tan kenbe UX nòmal (tou de pou itilizatè yo nan navigatè a ak pou sistèm entegre). Lè w ap ranplase twal ak Ethereum nan konplo a, ou pral sèlman bezwen chanje lojik sèvis / dekoratè retry la soti nan pwosesis konfli MVCC nan enkreman atomik nonce ak renvoie. Tanpon ak depo estati te fè li posib pou dekouple tan repons lan ak tan fòmasyon blòk la. Koulye a, ou ka ajoute dè milye de nœuds lòd epi ou pa bezwen pè ke blòk yo fòme twò souvan epi chaje sèvis la kòmande.

Fondamantalman, se tout sa mwen te vle pataje. Mwen pral kontan si sa ede yon moun nan travay yo.

Sous: www.habr.com

Add nouvo kòmantè