Kakau Kakau no na Wheelsets: He ʻike me Hyperledger Fabric

Aloha ʻoe, hana wau i ka hui o ka papahana DRD KP (ka helu helu helu no ka nānā ʻana i ke ola o nā huila huila). Maanei makemake wau e kaʻana like i ka ʻike o kā mākou hui i ka hoʻomohala ʻana i kahi blockchain ʻoihana no kēia papahana ma lalo o nā kaohi i kau ʻia e ka ʻenehana. No ka hapa nui, e kamaʻilio wau e pili ana i ka Hyperledger Fabric, akā ʻo ke ala i wehewehe ʻia ma aneʻi hiki ke extrapolated i kekahi blockchain ʻae ʻia. ʻO ka pahuhopu nui o kā mākou noiʻi ʻana, ʻo ia ka hoʻomākaukau ʻana i nā ʻōnaehana blockchain i ke ʻano e ʻoluʻolu ai ka huahana hope e hoʻohana a ʻaʻole paʻakikī loa e mālama.

ʻAʻole loaʻa nā ʻike, nā hopena i manaʻo ʻole ʻia, a ʻaʻohe hanana kūʻokoʻa e uhi ʻia ma ʻaneʻi (no ka mea ʻaʻohe oʻu). Makemake wau e kaʻana like i koʻu ʻike haʻahaʻa, e hōʻike ana "hiki iā ia" a, malia paha, heluhelu e pili ana i ka ʻike o kekahi i ka hana ʻana i nā hoʻoholo maikaʻi a maikaʻi ʻole i nā manaʻo.

Pilikia: ʻaʻole hiki ke scalable nā ​​blockchains

I kēia lā, ʻo ka hoʻoikaika ʻana o nā mea hoʻomohala he nui i ka hana ʻana i ka blockchain i kahi ʻenehana kūpono maoli, ʻaʻole i kahi pōkā manawa i loko o kahi kāwili nani. Hiki ke lilo i mea maʻamau nā kahawai mokuʻāina, ka hoʻololi maikaʻi ʻana, ka plasma a me ka sharding. I kekahi lā. A i ʻole e hoʻopanee hou ʻo TON i ka hoʻokuʻu ʻana no ʻeono mahina, a e pau ana ka Plasma Group aʻe. Hiki iā mākou ke manaʻoʻiʻo i kahi palapala alanui ʻē aʻe a heluhelu i nā pepa keʻokeʻo nani i ka pō, akā ma ʻaneʻi a i kēia manawa pono mākou e hana i kekahi mea me kā mākou mea. Hana ʻino.

ʻO ka hana i hāʻawi ʻia i kā mākou hui i ka papahana o kēia manawa e like me kēia ma nā ʻōlelo maʻamau: nui nā kumuhana, hiki i nā tausani, ʻaʻole makemake e kūkulu i nā pilina ma luna o ka hilinaʻi; pono e kūkulu ma luna o DLT kahi hopena e hana ma nā PC maʻamau me ka ʻole o nā koi hana kūikawā a hāʻawi i kahi ʻike mea hoʻohana ʻaʻole ʻoi aku ka maikaʻi ma mua o nā ʻōnaehana helu kikowaena. Pono ka ʻenehana ma hope o ka hoʻonā e hōʻemi i ka hiki ke hoʻololi i ka ʻikepili maikaʻi ʻole - ʻo ia ke kumu o blockchain ma aneʻi.

ʻO nā slogans mai nā pepa keʻokeʻo a me nā media e hoʻohiki iā mākou e hiki i ka hoʻomohala aʻe ke ʻae i nā miliona o nā kālepa i kēlā me kēia kekona. He aha ia?

Ke holo nei ʻo Mainnet Ethereum ma ~ 30 tps. Ma muli o kēia wale nō, paʻakikī ke ʻike iā ia he blockchain i kūpono i nā pono ʻoihana. Ma waena o nā ʻae i ʻae ʻia, ʻike ʻia nā benchmarks e hōʻike ana i 2000 tps (ʻO ka hui) a i ʻole 3000 tps (ʻOhana hana ula, he emi iki ma ka paʻi ʻana, akā e hoʻomanaʻo ua lawe ʻia ka benchmark ma ka ʻenekini consensus kahiko). Ua he ho'āʻo e hana hou i ka lole, ʻaʻole i hāʻawi i nā hopena maikaʻi loa, 20000 tps, akā i kēia manawa he mau haʻawina hoʻonaʻauao wale nō e kali nei i kā lākou hoʻokō paʻa. ʻAʻole hiki i kahi hui i hiki ke mālama i kahi keʻena o nā mea hoʻomohala blockchain e hoʻokomo i ia mau hōʻailona. Akā ʻaʻole wale ka pilikia ma ka throughput, aia pū kekahi latency.

Latency

ʻO ka lohi ʻana mai ka manawa i hoʻomaka ʻia ai kahi kālepa a hiki i kona ʻae ʻia ʻana e ka ʻōnaehana ʻaʻole i hilinaʻi wale i ka wikiwiki o ka memo e hele ana ma nā pae āpau o ka hōʻoia a me ke kauoha ʻana, akā ma nā palena hoʻokumu poloka. ʻOiai inā ʻae kā mākou blockchain iā mākou e hana i ka 1000000 tps, akā he 10 mau minuke e hana i kahi poloka 488MB, e maʻalahi anei ia no mākou?

E nānā pono kākou i ka pōʻai ola o kahi kālepa ma Hyperledger Fabric e hoʻomaopopo i ka mea e pono ai ka manawa a pehea e pili ai i ka pale ʻana i nā ʻāpana hoʻokumu.

Kakau Kakau no na Wheelsets: He ʻike me Hyperledger Fabric
lawe ʻia mai ʻaneʻi: hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

(1) Hoʻokumu ka mea kūʻai i kahi kālepa, hoʻouna iā ia i ke kākoʻo ʻana i nā hoa, hoʻohālikelike ka mea hope i ke kālepa (e hoʻopili i nā hoʻololi i hana ʻia e ka chaincode i ka mokuʻāina o kēia manawa, akā ʻaʻole e hoʻohiki i ka papa helu) a loaʻa iā RWSet - nā inoa kī, nā mana a me nā waiwai i lawe ʻia mai ka hōʻiliʻili ʻana ma CouchDB, (2) hoʻouna nā mea hōʻoia i kahi RWset i hoʻopaʻa ʻia i ka mea kūʻai aku, (3) nānā ka mea kūʻai aku i nā pūlima o nā hoa pono āpau (endorsers), a laila hoʻouna i ke kālepa i ke kauoha. lawelawe, a hoʻouna ʻole ʻia me ka hōʻoia ʻole (e hoʻomau ʻia ka hōʻoia ma hope), hana ka lawelawe kauoha i kahi poloka a (4) hoʻihoʻi i nā hoa āpau, ʻaʻole nā ​​mea kākoʻo wale; E nānā nā hoa i nā mana o nā kī i ka heluhelu ʻana i nā mana i loko o ka waihona, nā pūlima o nā mea kākoʻo a pau, a hoʻopaʻa hope i ka poloka.

Akā ʻaʻole ʻo ia wale nō. Ma hope o nā hua'ōlelo "mea hoʻonohonoho i kahi poloka" huna ʻia ʻaʻole wale ka hoʻonohonoho ʻana o nā hana, akā ʻo 3 mau noi pūnaewele hoʻi mai ke alakaʻi i nā mea hahai a hoʻi: hoʻohui ke alakaʻi i kahi leka i ka log, hoʻouna i nā mea hahai, hoʻohui ka hope kā lākou log, hoʻouna i ka hōʻoia o ka hoʻopiʻi kūleʻa i ke alakaʻi, hana ke alakaʻi i ka memo , hoʻouna i ka hōʻoia ʻana i ka poʻe hahai, hana ka poʻe hahai. ʻO ka liʻiliʻi o ka nui o ka poloka a me ka manawa, ʻoi aku ka nui o ka lawelawe kauoha e hoʻokumu i ka ʻae. Loaʻa i ka Hyperledger Fabric ʻelua mau ʻāpana hoʻonohonoho poloka: BatchTimeout - ka manawa hoʻokumu poloka a me BatchSize - ka nui o ka poloka (ka helu o nā hana a me ka nui o ka poloka iā ia iho i nā bytes). I ka hiki ʻana o kekahi o nā palena i ka palena, hoʻopuka ʻia kahi poloka hou. ʻOi aku ka nui o nā node kauoha, ʻoi aku ka lōʻihi o kēia. No laila, pono ʻoe e hoʻonui i ka BatchTimeout a me BatchSize. Akā ʻoiai ua hoʻololi ʻia nā RWSets, ʻoi aku ka nui o kā mākou hana ʻana i ka poloka, ʻoi aku ka kiʻekiʻe o ka nui o nā paio MVCC. Eia kekahi, me ka hoʻonui ʻana i ka BatchTimeout, UX degrades catastrophically. Me he mea lā he kūpono a maopopo iaʻu ke kumumanaʻo no ka hoʻoponopono ʻana i kēia mau pilikia.

Pehea e pale aku ai i ke kali ʻana no ka hoʻopau ʻana i ka poloka a ʻaʻole e nalowale i ke kūlana o ke kālepa

ʻO ka lōʻihi o ka manawa hoʻokumu a me ka nui o ka poloka, ʻoi aku ka kiʻekiʻe o ka throughput o ka blockchain. ʻAʻole hahai pololei kekahi mai kekahi, akā pono e hoʻomanaʻo ʻia ʻo ka hoʻokumu ʻana i ka ʻae ʻana ma RAFT pono ʻekolu mau noi pūnaewele mai ke alakaʻi i ka poʻe hahai a hoʻi. ʻOi aku ka nui o nā nodes, ʻoi aku ka lōʻihi. ʻOi aku ka liʻiliʻi o ka nui a me ka manawa o ka hoʻokumu ʻana i ka poloka, ʻoi aku ka nui o ia mau pilina. Pehea e hoʻonui ai i ka manawa hoʻokumu a me ka nui o ka poloka me ka hoʻonui ʻole i ka manawa pane ʻōnaehana no ka mea hoʻohana hope?

ʻO ka mea mua, pono ʻoe e hoʻoholo i nā paio MVCC i hoʻokumu ʻia e ka nui poloka, hiki ke hoʻokomo i nā RWSets like ʻole me ka mana like. ʻIke loa, ma ka ʻaoʻao o ka mea kūʻai aku (e pili ana i ka pūnaewele blockchain, he backend paha kēia, a ke manaʻo nei wau) MVCC mea hoʻopaʻapaʻa, hiki ke lilo i lawelawe ʻokoʻa a i ʻole ka mea hoʻonaninani maʻamau ma luna o kahi kelepona hoʻomaka ʻana me ka hoʻāʻo hou ʻana.

Hiki ke hoʻokō ʻia ka hoʻāʻo hou ʻana me kahi hoʻolālā exponential, akā e hoʻohaʻahaʻa loa ka latency. No laila pono ʻoe e hoʻohana i ka hoʻāʻo hou ʻana i loko o kekahi mau palena liʻiliʻi, a i ʻole ka mea mau. Me ka maka i ka hiki ke collisions i ka mua okoa.

ʻO ka hana aʻe, ʻo ia ka hana ʻana i ka pilina o ka mea kūʻai aku me ka ʻōnaehana asynchronous i ʻole ia e kali no 15, 30, a i ʻole 10000000 kekona, a mākou e hoʻonoho ai ʻo BatchTimeout. Akā i ka manawa like, pono e mālama i ka hiki ke hōʻoia i ka hoʻololi ʻana i hoʻomaka ʻia e ke kālepa i hoʻopaʻa ʻia / ʻaʻole i hoʻopaʻa ʻia i ka blockchain.
Hiki ke hoʻohana ʻia kahi waihona no ka mālama ʻana i ke kūlana o nā kālepa. ʻO ka koho maʻalahi loa ʻo CouchDB ma muli o kona maʻalahi o ka hoʻohana ʻana: he UI ka waihona i waho o ka pahu, kahi REST API, a hiki iā ʻoe ke hoʻonohonoho maʻalahi i ka replication a me ka sharding no ia. Hiki iā ʻoe ke hana i kahi hōʻiliʻili ʻokoʻa ma ke ʻano like ʻo CouchDB e hoʻohana ai ʻo Fabric e mālama i kona kūlana honua. Pono mākou e mālama i nā palapala o kēia ʻano.

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

Ua kākau ʻia kēia palapala i ka waihona ma mua o ka hoʻouna ʻia ʻana o ke kālepa i nā hoa, ua hoʻihoʻi ʻia ka ID entity i ka mea hoʻohana (ua hoʻohana ʻia ka ID like me ke kī) inā he hana hana kēia, a laila ʻo ke kūlana, TxID a me nā kahua Hapa. hōʻano hou ʻia e like me ka loaʻa ʻana o ka ʻike pili mai nā hoa.

Kakau Kakau no na Wheelsets: He ʻike me Hyperledger Fabric

Ma kēia papahana, ʻaʻole kali ka mea hoʻohana no ka hoʻokumu ʻana o ka poloka, e nānā ana i ka huila wili ma ka pale no 10 kekona, loaʻa iā ia kahi pane koke mai ka ʻōnaehana a hoʻomau i ka hana.

Ua koho mākou iā BoltDB e mālama i nā kūlana kālepa no ka mea pono mākou e mālama i ka hoʻomanaʻo a ʻaʻole makemake mākou e hoʻopau i ka manawa ma ka launa pūnaewele me kahi kikowaena waihona kū hoʻokahi, ʻoiai ke hana ʻia kēia pilina me ka hoʻohana ʻana i ka protocol text plain. Ma ke ala, inā ʻoe e hoʻohana iā CouchDB e hoʻokō i ka hoʻolālā i hōʻike ʻia ma luna a i ʻole e mālama i ka mokuʻāina o ka honua, i kēlā me kēia hihia, kūpono ke koho ʻana i ke ʻano o ka mālama ʻana i ka ʻikepili ma CouchDB. ʻO ka mea maʻamau, ma CouchDB, ʻo ka nui o nā nodes b-tree he 1279 bytes, ʻoi aku ka liʻiliʻi ma mua o ka nui o ka māhele ma ka disk, ʻo ia hoʻi, ʻo ka heluhelu ʻana a me ka hoʻoponopono hou ʻana i ka lāʻau e koi ai i nā komo disk kino. ʻO ka nui kūpono e kūpono i ka maʻamau Hōʻike Pae holomua a he 4 kilobytes. No ka optimization, pono mākou e hoʻonohonoho i ka parameter btree_chunk_size like me 4096 ma ka waihona hoʻonohonoho CouchDB. No ka BoltDB ka hana lima ʻaʻole i koiʻia.

Pumi hope: hoʻolālā pale

Akā hiki ke nui nā memo. ʻOi aku ma mua o ka ʻōnaehana hiki ke mālama, kaʻana like ʻana i nā kumuwaiwai me nā lawelawe ʻē aʻe he ʻumi ma waho o nā mea i hōʻike ʻia ma ke kiʻikuhi - a pono e hana hewa kēia mau mea a hiki i nā mīkini e holo ai i ka Intellij Idea he mea luhi loa.

Hoʻoholo ʻia ka pilikia o nā ala like ʻole o nā ʻōnaehana kamaʻilio, ka mea hana a me ka mea kūʻai aku. E ʻike kākou i ka mea hiki iā kākou ke hana.

Nā ʻaka: hiki iā mākou ke koi i hiki iā mākou ke hana i ka hapa nui o nā hana X i kekona T. Hoʻokuʻu ʻia nā noi a pau ma mua o kēia palena. He mea maʻalahi, akā hiki iā ʻoe ke poina iā UX.

Ke hoʻoponopono nei: pono e loaʻa i ka mea kūʻai aku kekahi interface e pili ana i ka ukana, hiki iā ia ke hoʻomalu i nā tps o ka mea hana. ʻAʻole maikaʻi, akā ke kau nei i kahi kuleana i nā mea hoʻomohala o ka mea kūʻai ukana e hoʻokō i kēia interface. No mākou, ʻaʻole ʻae ʻia kēia, no ka mea, e hoʻopili ʻia ka blockchain i ka wā e hiki mai ana i kahi helu nui o nā ʻōnaehana lōʻihi.

Laulā: ma kahi o ka hoʻoikaika ʻana e kūʻē i ke kahawai ʻikepili hoʻokomo, hiki iā mākou ke hoʻopaʻa i kēia kahawai a hana i ka wikiwiki i koi ʻia. ʻIke loa, ʻo kēia ka hopena maikaʻi loa inā makemake mākou e hāʻawi i kahi ʻike mea hoʻohana maikaʻi. Hoʻokomo mākou i ka buffer me ka hoʻohana ʻana i kahi queue ma RabbitMQ.

Kakau Kakau no na Wheelsets: He ʻike me Hyperledger Fabric

ʻElua mau hana hou i hoʻohui ʻia i ka papahana: (1) ma hope o ka loaʻa ʻana o kahi noi API, ua hoʻonohonoho ʻia kahi leka me nā ʻāpana e pono ai e kāhea i ke kālepa, a loaʻa i ka mea kūʻai aku kahi leka ua ʻae ʻia ke kālepa e ka ʻōnaehana, ( 2) heluhelu ka backend i ka ʻikepili i ka wikiwiki i kuhikuhi ʻia ma ka config mai ka queue; hoʻomaka i kahi kālepa a hoʻohou i ka ʻikepili i ka hale kūʻai kūlana.
I kēia manawa hiki iā ʻoe ke hoʻonui i ka manawa kūkulu a hoʻopaʻa i ka hiki e like me kou makemake, e hūnā ana i nā lohi mai ka mea hoʻohana.

Nā mea hana ʻē aʻe

ʻAʻohe mea i ʻōlelo ʻia ma aneʻi e pili ana i ka chaincode, no ka mea, ʻaʻohe mea e hoʻomaikaʻi ai i loko. Pono e maʻalahi a paʻa ka chaincode - ʻo ia wale nō ka mea e pono ai. Kōkua nui ka framework iā mākou e kākau i ka chaincode maʻalahi a palekana. CSKit mai S7 Techlab a me static analyer hoola hou^CC.

Eia kekahi, ke kūkulu nei kā mākou hui i kahi hoʻonohonoho o nā pono hana e hana maʻalahi a leʻaleʻa me Fabric: mea ʻimi blockchain, pono no hoʻonohonoho hou pūnaewele (hoʻohui a wehe i nā hui, RAFT nodes), pono no hoʻopau palapala a me ka wehe ʻana i ka ʻike. Inā makemake ʻoe e hāʻawi, aloha mai.

hopena

ʻO kēia ala e maʻalahi ke hoʻololi i ka Hyperledger Fabric me Quorum, nā pūnaewele Ethereum pilikino'ē aʻe (PoA a iʻole PoW), e ho'ēmi nui i ka throughput maoli, akā i ka manawa like e mālama i ka UX maʻamau (no nā mea hoʻohana i ka polokalamu kele pūnaewele a mai kaʻaoʻao o nā pūnaewele hoʻohui. ). I ka hoʻololi ʻana i ka Fabric me Ethereum i ka hoʻolālā, pono e hoʻololi ʻia ka loiloi o ka lawelawe hoʻāʻo hou / decorator mai ka lawelawe ʻana i nā hakakā MVCC i kahi hoʻonui atomic nonce a hoʻouna hou. ʻO ka hoʻopaʻa ʻana a me ka mālama kūlana i hiki ke wehe i ka manawa pane mai ka manawa hoʻokumu poloka. I kēia manawa hiki iā ʻoe ke hoʻohui i nā tausani o nā nodes kauoha a mai makaʻu i ka hana pinepine ʻana o nā poloka a hoʻouka i ka lawelawe kauoha.

Ma ka laulā, ʻo kēia wale nō kaʻu i makemake ai e kaʻana like. E hauʻoli wau inā kōkua ia i kekahi i kā lākou hana.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka