Hyperledger audums manekeniem

Blockchain platforma uzņēmumam

Hyperledger audums manekeniem

Labdien, dārgie lasÄ«tāji, mani sauc Nikolajs Ņefedovs, es esmu IBM tehniskais speciālists, Å”ajā rakstā es vēlos jÅ«s iepazÄ«stināt ar blokķēdes platformu - Hyperledger Fabric. Platforma ir paredzēta biznesa klases biznesa lietojumprogrammu veidoÅ”anai. Raksta lÄ«menis ir paredzēts nesagatavotiem lasÄ«tājiem ar IT tehnoloÄ£iju pamatzināŔanām.

Hyperledger Fabric ir atvērtā koda projekts, viens no atvērtā koda Hyperledger projekta atzariem, kas ir Linux Foundation konsorcijs. Hyperledger Fabric sākotnēji izveidoja Digital Assets un IBM. Galvenā Hyperledger Fabric platformas iezÄ«me ir tās koncentrÄ“Å”anās uz uzņēmumu izmantoÅ”anu. Tāpēc platforma tika izstrādāta, ņemot vērā lielo darÄ«jumu ātrumu un to zemās izmaksas, kā arÄ« visu dalÄ«bnieku identifikāciju. Å Ä«s priekÅ”rocÄ«bas tiek panāktas, atdalot darÄ«jumu pārbaudes pakalpojumu un veidojot jaunus sadalÄ«tā reÄ£istra blokus, kā arÄ« izmantojot sertifikācijas centru un dalÄ«bnieku autorizāciju.

Mans raksts ir daļa no rakstu sērijas par Hyperledger Fabric, kurā mēs aprakstām sistēmas projektu studentu uzņemÅ”anai universitātē.

Hyperledger Fabric vispārējā arhitektūra

Hyperledger Fabric ir sadalīts blokķēdes tīkls, kas sastāv no dažādiem funkcionāliem komponentiem, kas ir instalēti tīkla mezglos. Hyperledger Fabric komponenti ir Docker konteineri, kurus var brīvi lejupielādēt no DockerHub. Hyperledger Fabric var palaist arī Kubernetes vidē.

Lai rakstÄ«tu viedos lÄ«gumus (ķēdes kods Hyperledger Fabric kontekstā), mēs izmantojām Golang (lai gan Hyperledger Fabric ļauj izmantot citas valodas). Lai izstrādātu pielāgotu lietojumprogrammu, mÅ«su gadÄ«jumā mēs izmantojām Node.js ar atbilstoÅ”o Hyperledger Fabric SDK.

Mezgli izpilda biznesa loģiku (viedais līgums) - ķēdes kodu, glabā izplatītā reģistra stāvokli (virsgrāmatas datus) un izpilda citus platformas sistēmas pakalpojumus. Mezgls ir tikai loģiska vienība; vienā fiziskajā serverī var pastāvēt dažādi mezgli. Daudz svarīgāk ir tas, kā mezgli tiek grupēti (uzticamais domēns) un ar kādām blokķēdes tīkla funkcijām tie ir saistīti.

Vispārējā arhitektÅ«ra izskatās Ŕādi:

Hyperledger audums manekeniem

1. attēls. Hyperledger auduma vispārējā arhitektūra

Lietotāja lietojumprogramma (Submitting Client) ir lietojumprogramma, ar kuru lietotāji strādā ar blokķēdes tÄ«klu. Lai strādātu, jums ir jābÅ«t autorizētam un atbilstoŔām tiesÄ«bām dažāda veida darbÄ«bām tÄ«klā.

Vienaudži ir vairākās lomās:

  • Endorsing Peer ir mezgls, kas simulē darÄ«juma izpildi (izpilda viedā lÄ«guma kodu). Pēc viedā lÄ«guma pārbaudes un izpildes mezgls izpildes rezultātus kopā ar parakstu atdod klienta lietojumprogrammai.
  • PasÅ«tÄ«Å”anas pakalpojums ir sadalÄ«ts pakalpojums vairākos mezglos, ko izmanto, lai Ä£enerētu jaunus sadalÄ«tā reÄ£istra blokus un izveidotu rindu darÄ«jumu izpildei. PasÅ«tÄ«Å”anas pakalpojums nepievieno jaunus blokus reÄ£istram (Å”is lÄ«dzeklis ir pārvietots uz Committing Peers, lai uzlabotu veiktspēju).
  • Vienādranga apņemÅ”anās ir mezgls, kas satur izplatÄ«tu reÄ£istru un pievieno reÄ£istram jaunus blokus (kurus Ä£enerēja pasÅ«tÄ«Å”anas pakalpojums). Visās saistoÅ”ajās programmās ir ietverta izplatÄ«tās virsgrāmatas lokāla kopija. Vienādranga izpilde pārbauda visu blokā esoÅ”o transakciju derÄ«gumu pirms jauna bloka pievienoÅ”anas lokāli.

ApstiprināŔanas politika ir politika darījuma derīguma pārbaudei. Šīs politikas nosaka nepiecieŔamo mezglu kopu, kurā jāizpilda viedais līgums, lai transakcija tiktu atzīta par derīgu.

IzplatÄ«tais reÄ£istrs ā€“ Lerger ā€“ sastāv no divām daļām: WolrldState (saukta arÄ« par State DataBase) un BlockChain.

BlockChain ir bloku ķēde, kurā tiek glabāti ieraksti par visām izmaiņām, kas notikuÅ”as izplatÄ«tajos reÄ£istra objektos.

WolrldState ir sadalÄ«ts virsgrāmatas komponents, kas saglabā visu sadalÄ«to virsgrāmatas objektu paÅ”reizējās (jaunākās) vērtÄ«bas.

WorldState ir datubāze, pamata versijā - LevelDB vai sarežģītākā - CouchDB, kurā ir atslēgu-vērtÄ«bu pāri, piemēram: Vārds - Ivans, Uzvārds - Ivanovs, reÄ£istrācijas datums sistēmā - 12.12.21. , dzimÅ”anas datums - 17.12.1961 utt. WorldState un izplatÄ«tajam reÄ£istram ir jāatbilst visiem konkrētā kanāla dalÄ«bniekiem.

Tā kā Hyperledger Fabric ir tÄ«kls, kurā visi dalÄ«bnieki ir zināmi un autentificēti, tas izmanto Ä«paÅ”u sertifikācijas iestādi - CA (sertifikācijas iestādi). CA darbojas, pamatojoties uz X.509 standartu un publiskās atslēgas infrastruktÅ«ru - PKI.

DalÄ«bas pakalpojums ir pakalpojums, ar kura palÄ«dzÄ«bu dalÄ«bnieki pārbauda, ā€‹ā€‹vai objekts pieder noteiktai organizācijai vai kanālam.

DarÄ«jums ā€“ vairumā gadÄ«jumu ir jaunu datu ierakstÄ«Å”ana izplatÄ«tajā reÄ£istrā.
Ir arī darījumi par kanālu vai viedo līgumu izveidi. Darījumu iniciē lietotāja lietojumprogramma, un tas beidzas ar ierakstu izplatītajā virsgrāmatā.

Kanāls ir slēgts apakÅ”tÄ«kls, kas sastāv no diviem vai vairākiem blokķēdes tÄ«kla dalÄ«bniekiem, kas paredzēts konfidenciālu darÄ«jumu veikÅ”anai ierobežotā, bet zināmā dalÄ«bnieku lokā. Kanālu nosaka dalÄ«bnieki, tā izplatÄ«tais reÄ£istrs, viedie lÄ«gumi, PasÅ«tÄ«Å”anas pakalpojums, WorldState. Katram kanāla dalÄ«bniekam ir jābÅ«t autorizētam, lai piekļūtu kanālam, un tam ir jābÅ«t tiesÄ«bām veikt dažāda veida darÄ«jumus. Autorizācija tiek veikta, izmantojot dalÄ«bas pakalpojumu.

Tipisks darījuma izpildes scenārijs

Tālāk es vēlētos runāt par tipisku darījuma izpildes scenāriju, izmantojot mūsu projektu kā piemēru.

MÅ«su iekŔējā projekta ietvaros mēs izveidojām tÄ«klu Hyperledger Fabric, kas paredzēts studentu reÄ£istrÄ“Å”anai un uzskaitei augstskolās. MÅ«su tÄ«kls sastāv no divām organizācijām, kas pieder universitātei A un universitātei B. Katrā organizācijā ir klienta lietojumprogramma, kā arÄ« savs apņemÅ”anās un apstiprinājums. Mēs izmantojam arÄ« kopējos pakalpojumus PasÅ«tÄ«Å”anas pakalpojums, DalÄ«bas pakalpojums un Sertifikācijas iestāde.

1) Darījuma uzsākŔana

Lietotāja lietojumprogramma, izmantojot Hyperledger Fabric SDK, ierosina darÄ«juma pieprasÄ«jumu un nosÅ«ta pieprasÄ«jumu mezgliem ar viedajiem lÄ«gumiem. PieprasÄ«jums var bÅ«t mainÄ«t vai lasÄ«t no izplatÄ«tā reÄ£istra (virsgrāmatas). Ja ņemam vērā mÅ«su testa sistēmas konfigurācijas piemēru augstskolu studentu uzskaitei, klienta lietojumprogramma nosÅ«ta transakcijas pieprasÄ«jumu augstskolu A un B mezgliem, kas ir iekļauti izsauktā viedā lÄ«guma apstiprināŔanas politikā. Mezgls A ir mezgls, kas atrodas universitātē, kas reÄ£istrē ienākoÅ”o studentu, un mezgls B ir mezgls, kas atrodas citā universitātē. Lai transakcija tiktu saglabāta izplatÄ«tajā reÄ£istrā, ir nepiecieÅ”ams, lai visi mezgli, kuriem saskaņā ar biznesa loÄ£iku ir jāapstiprina darÄ«jums, veiksmÄ«gi izpildÄ«tu viedos lÄ«gumus ar tādu paÅ”u rezultātu. Mezgls Lietotāja lietojumprogramma, izmantojot Hyperledger Fabric SDK rÄ«kus, iegÅ«st apstiprinājuma politiku un uzzina, uz kuriem mezgliem nosÅ«tÄ«t darÄ«juma pieprasÄ«jumu. Å is ir pieprasÄ«jums izsaukt konkrētu viedo lÄ«gumu (ķēdes koda funkciju), lai nolasÄ«tu vai ierakstÄ«tu noteiktus datus izplatÄ«tā reÄ£istrā. Tehniski klienta SDK izmanto atbilstoÅ”o funkciju, kuras API tiek nodots noteiktam objektam ar transakcijas parametriem, kā arÄ« pievieno klienta parakstu un nosÅ«ta Å”os datus, izmantojot protokola buferi, izmantojot gRPC, attiecÄ«gajiem mezgliem (apstiprināŔanas vienādrangiem).

Hyperledger audums manekeniem
2. attēls. DarÄ«juma uzsākÅ”ana

2) Viedā līguma izpilde

Mezgli (Endorsing Peers), saņēmuÅ”i pieprasÄ«jumu veikt darÄ«jumu, pārbauda klienta parakstu un, ja viss ir kārtÄ«bā, paņem objektu ar pieprasÄ«juma datiem un veic viedā lÄ«guma izpildes simulāciju (ķēdes koda funkcija) ar Å”ie dati. Gudrs lÄ«gums ir darÄ«juma biznesa loÄ£ika, noteikts nosacÄ«jumu un instrukciju kopums (mÅ«su gadÄ«jumā tā ir studenta pārbaude, vai tas ir jauns students, vai viņŔ jau ir reÄ£istrēts, vecuma pārbaude utt.). Lai izpildÄ«tu viedo lÄ«gumu, jums bÅ«s nepiecieÅ”ami arÄ« dati no WorldState. Viedā lÄ«guma simulācijas rezultātā Endorsing vienādrangā tiek iegÅ«tas divas datu kopas ā€“ Read Set un Write Set. Read Set un Write Set ir sākotnējās un jaunās WorldState vērtÄ«bas. (jaunums ā€“ viedā lÄ«guma simulācijas laikā iegÅ«tā nozÄ«mē).

Hyperledger audums manekeniem
3.attēls Viedā līguma izpilde

3) Datu atgrieŔana klienta lietojumprogrammā

Pēc viedā lÄ«guma simulācijas veikÅ”anas Endorsing Peers atdod klienta lietojumprogrammai sākotnējos datus un simulācijas rezultātu, kā arÄ« RW komplektu, kas parakstÄ«ts ar sertifikātu. Å ajā posmā izplatÄ«tajā reÄ£istrā izmaiņas nenotiek. Klienta lietojumprogramma pārbauda apstiprinoÅ”o vienādranga parakstu, kā arÄ« salÄ«dzina sākotnējos transakcijas datus, kas tika nosÅ«tÄ«ti, un datus, kas tika atgriezti (tas ir, tā pārbauda, ā€‹ā€‹vai sākotnējie dati, uz kuriem tika simulēts darÄ«jums, nav izkropļoti). Ja darÄ«jums tika veikts tikai datu nolasÄ«Å”anai no reÄ£istra, tad klienta lietojumprogramma attiecÄ«gi saņem nepiecieÅ”amo Read Set un tas parasti veiksmÄ«gi pabeidz darÄ«jumu, nemainot izplatÄ«to reÄ£istru. DarÄ«juma gadÄ«jumā, kuram jāmaina dati reÄ£istrā, klienta lietojumprogramma papildus pārbauda apstiprinājuma politikas ievieÅ”anu. Iespējams, ka klienta lietojumprogramma nepārbauda apstiprinājuma politikas izpildes rezultātu, bet Hyperledger Fabric platforma Å”ajā gadÄ«jumā nodroÅ”ina mezglu politiku (Committing Peers) pārbaudi transakcijas pievienoÅ”anas reÄ£istram posmā.

Hyperledger audums manekeniem
4. attēls. Datu atgrieÅ”ana klienta lietojumprogrammā

4) RW komplektu nosūtīŔana Ordering Peers

Klienta aplikācija nosūta darījumu kopā ar pavadoŔajiem datiem PasūtīŔanas pakalpojumam. Tas ietver RW komplektu, apstiprinoŔos partneru parakstus un kanāla ID.

PasÅ«tÄ«Å”anas pakalpojums ā€“ pamatojoties uz nosaukumu, Ŕī pakalpojuma galvenā funkcija ir sakārtot ienākoÅ”os darÄ«jumus pareizā secÄ«bā. Kā arÄ« jauna sadalÄ«tā reÄ£istra bloka izveidoÅ”ana un garantēta jaunu Ä£enerēto bloku piegāde uz visiem Commiting mezgliem, tādējādi nodroÅ”inot datu konsekvenci visos mezglos, kas satur sadalÄ«to reÄ£istru (Committing peer). Tajā paŔā laikā pats PasÅ«tÄ«Å”anas pakalpojums nekādā veidā nemaina reÄ£istru. PasÅ«tÄ«Å”anas pakalpojums ir bÅ«tiska sistēmas sastāvdaļa, tāpēc tas ir vairāku mezglu kopums. PasÅ«tÄ«jumu serviss nepārbauda darÄ«juma derÄ«gumu, tas vienkārÅ”i pieņem darÄ«jumu ar noteiktu kanāla identifikatoru, sakārto ienākoŔās transakcijas noteiktā secÄ«bā un no tiem veido jaunus izplatÄ«tā reÄ£istra blokus. Viens PasÅ«tÄ«Å”anas pakalpojums var apkalpot vairākus kanālus vienlaicÄ«gi. PasÅ«tÄ«Å”anas pakalpojums ietver Kafka klasteru, kas uztur pareizo (nemainÄ«go) darÄ«jumu rindu (skatÄ«t 7. punktu).

Hyperledger audums manekeniem
5. attēls. RW komplektu nosÅ«tÄ«Å”ana Ordering Peers

5) Ä£enerēto bloku nosÅ«tÄ«Å”ana Committing Peer

PasÅ«tÄ«Å”anas pakalpojumā Ä£enerētie bloki tiek pārraidÄ«ti (apraide) uz visiem tÄ«kla mezgliem. Katrs mezgls, saņēmis jaunu bloku, pārbauda tā atbilstÄ«bu apstiprināŔanas politikai, pārbauda, ā€‹ā€‹vai viedā lÄ«guma simulācijas rezultātā visi apstiprinoÅ”ie lÄ«dzÄ«gie ir saņēmuÅ”i vienādu rezultātu (Write Set), kā arÄ« pārbauda, ā€‹ā€‹vai sākotnējām vērtÄ«bām ir mainÄ«ts (tas ir, Read Set ā€” dati, ko nolasa viedais lÄ«gums no WorldState) no darÄ«juma uzsākÅ”anas brīža. Ja visi nosacÄ«jumi ir izpildÄ«ti, darÄ«jums tiek atzÄ«mēts kā derÄ«gs, pretējā gadÄ«jumā darÄ«jums saņem statusu nederÄ«gs.

Hyperledger audums manekeniem
6. attēls. Izveidoto bloku nosÅ«tÄ«Å”ana uz Committing Peer

6) Bloka pievienoŔana reģistram

Katrs mezgls pievieno transakciju savai izplatÄ«tā reÄ£istra vietējai kopijai, un, ja darÄ«jums ir derÄ«gs, Write Set tiek lietots WorldState (paÅ”reizējais stāvoklis), un attiecÄ«gi tiek iegÅ«tas jaunas objektu vērtÄ«bas, kuras ietekmēja darÄ«jums ir uzrakstÄ«ts. Ja darÄ«jums saņēma nederÄ«gu marÄ·ieri (piemēram, divi darÄ«jumi notika ar vieniem un tiem paÅ”iem objektiem vienā blokā, tad viens no darÄ«jumiem izrādÄ«sies nederÄ«gs, jo sākotnējās vērtÄ«bas jau ir mainÄ«jis cits darÄ«jums). ArÄ« Ŕī transakcija tiek pievienota izdalÄ«tajai virsgrāmatai ar nederÄ«gu marÄ·ieri, taču Ŕī darÄ«juma rakstÄ«Å”anas kopa netiek attiecināta uz paÅ”reizējo WorldState un attiecÄ«gi nemaina darÄ«jumā iesaistÄ«tos objektus. Pēc tam lietotāja lietojumprogrammai tiek nosÅ«tÄ«ts paziņojums, ka darÄ«jums ir neatgriezeniski pievienots izplatÄ«tajam reÄ£istram, kā arÄ« darÄ«juma statuss, tas ir, vai tas ir derÄ«gs vai ne...

Hyperledger audums manekeniem
7. attēls. Bloka pievienoÅ”ana reÄ£istram

PASÅŖTÄŖÅ ANAS PAKALPOJUMS

PasÅ«tÄ«Å”anas pakalpojums sastāv no Kafka klastera ar atbilstoÅ”iem ZooKeeper mezgliem un PasÅ«tÄ«Å”anas pakalpojumu mezgliem (OSN), kas atrodas starp PasÅ«tÄ«Å”anas pakalpojuma klientiem un Kafka Cluster. Kafka klasteris ir sadalÄ«ta, pret defektiem izturÄ«ga plÅ«smas (ziņojumu) pārvaldÄ«bas platforma. Katrs Kafkas kanāls (tēma) ir nemainÄ«ga ierakstu secÄ«ba, kas atbalsta tikai jauna ieraksta pievienoÅ”anu (esoÅ”u nav iespējams dzēst). Tēmas struktÅ«ras ilustrācija ir parādÄ«ta zemāk. TieÅ”i Å”is Kafkas Ä«paÅ”ums tiek izmantots blokķēdes platformas izveidoÅ”anai.

Hyperledger audums manekeniem
ņemts no kafka.apache.org

  • 8. attēls. Pakalpojuma pasÅ«tÄ«Å”anas tēmas struktÅ«ra*

Noderīgas saites

Youtube ā€” biznesa blokķēdes izveide, izmantojot projektu Hyperledger
Hyperledger Fabric Docs
Hyperledger audums: izplatīta operētājsistēma atļautajām blokķēdēm

Pateicības

Es vēlos izteikt lielu pateicÄ«bu saviem kolēģiem par palÄ«dzÄ«bu Ŕī raksta sagatavoÅ”anā:
Nikolajs Marins
Igors Hapovs
Dmitrijs Gorbačovs
Aleksandrs Zemcovs
Jekaterina Guseva

Avots: www.habr.com

Pievieno komentāru