Blockchain platforma uzÅÄmumam
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:
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).
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Ä).
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Ä.
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).
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.
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...
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.
Åemts no kafka.apache.org
- 8. attÄls. Pakalpojuma pasÅ«tÄ«Å”anas tÄmas struktÅ«ra*
Noderīgas saites
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