Феҳристи тақсимшуда барои чархҳо: Таҷриба бо Hyperledger Fabric

Салом, ман дар гурӯҳи лоиҳаи DRD KP кор мекунам (феҳристи маълумоти тақсимшуда барои мониторинги давраи ҳаёти маҷмӯи чархҳо). Дар ин ҷо ман мехоҳам таҷрибаи дастаи мо дар таҳияи blockchain корхона барои ин лоиҳаро дар доираи маҳдудиятҳои технология мубодила кунам. Дар аксари мавридҳо, ман дар бораи Hyperledger Fabric гап мезанам, аммо равиши дар ин ҷо тавсифшуда метавонад ба ҳама гуна блокчейнҳои иҷозатдодашуда экстраполятсия карда шавад. Ҳадафи ниҳоии таҳқиқоти мо ин омода кардани қарорҳои blockchain-и корхона аст, то маҳсулоти ниҳоӣ барои истифода гуворо бошад ва нигоҳдорӣ он қадар душвор набошад.

Дар ин ҷо ягон кашфиёт, ҳалли ғайричашмдошт вуҷуд нахоҳад дошт ва ҳеҷ гуна таҳаввулоти беназир дар ин ҷо фаро гирифта намешаванд (зеро ман онҳоро надорам). Ман танҳо мехоҳам, ки таҷрибаи хоксоронаи худро мубодила кунам, нишон диҳам, ки "ин имконпазир буд" ва шояд дар шарҳҳо дар бораи таҷрибаи ягон каси дигар дар қабули қарорҳои хуб ва на он қадар хуб хонед.

Мушкилот: блокчейнҳо ҳанӯз миқёспазир нестанд

Имрӯз, кӯшишҳои бисёре аз таҳиягарон ба он равона карда шудаанд, ки блокчейнро ба технологияи воқеан қулай табдил диҳанд, на бомбаи замонавӣ дар бастаи зебо. Каналҳои давлатӣ, ҷамъшавии оптимистӣ, плазма ва шардинг метавонанд маъмулӣ шаванд. Як рӯз. Ё шояд TON бори дигар оғози корашро ба шаш моҳ ба таъхир гузорад ва гурӯҳи навбатии плазма мавҷудияти худро қатъ кунад. Мо метавонем ба харитаи дигари роҳ бовар кунем ва шабона варақаҳои сафеди олиҷаноб хонем, аммо дар ин ҷо ва ҳоло мо бояд бо он чизе, ки дорем, коре кунем. Корро анҷом диҳед.

Вазифае, ки дар лоихаи хозира ба зиммаи коллективи мо гузошта шудааст, ба таври умум чунин менамояд: субъектхои бисьёре хастанд, ки ба якчанд хазор нафар мерасанд, ки муносибатхоро дар асоси боварй барпо кардан намехоханд; бояд дар асоси DLT як ҳалли он сохта шавад, ки дар компютерҳои оддӣ бидуни талаботи махсуси иҷроиш кор кунад ва таҷрибаи корбарро на бадтар аз ҳама гуна системаҳои мутамаркази ҳисобдорӣ таъмин кунад. Технологияи паси ҳалли он бояд имкони коркарди маълумоти зарароварро кам кунад - аз ин рӯ blockchain дар ин ҷост.

Шиорҳо аз варақаҳои сафед ва ВАО ба мо ваъда медиҳанд, ки рушди оянда имкон медиҳад, ки миллионҳо транзаксия дар як сония анҷом дода шаванд. Он дар ҳақиқат чист?

Mainnet Ethereum айни замон дар ~ 30 tps кор мекунад. Танҳо аз ин сабаб, онро ҳамчун блокчейн қабул кардан душвор аст, ки ба ҳеҷ ваҷҳ барои эҳтиёҷоти корпоративӣ мувофиқ аст. Дар байни ҳалли иҷозатдодашуда нишондиҳандаҳои 2000 tps маълуманд (Quorum) ё 3000 tps (Чорабиниҳои Hyperledger, дар нашрия каме камтар аст, аммо дар хотир доред, ки нишондиҳанда дар муҳаррики консенсуси кӯҳна гузаронида шудааст). буд кушиши ба куллй аз нав кор карда баромадани матоъ, ки натиҷаҳои бадтарин надод, 20000 tps, аммо то ҳол инҳо танҳо таҳқиқоти академӣ ҳастанд, ки татбиқи устувори онҳоро интизоранд. Гумон аст, ки корпоратсияе, ки тавони нигоҳ доштани шӯъбаи таҳиягарони блокчейнро дорад, бо чунин нишондиҳандаҳо муқовимат кунад. Аммо мушкилот на танҳо дар интиқол аст, балки таъхир низ вуҷуд дорад.

Latitude

Таъхир аз лаҳзаи оғоз шудани транзаксия то тасдиқи ниҳоии он аз ҷониби система на танҳо аз суръати паём, ки аз тамоми марҳилаҳои тасдиқ ва фармоиш мегузарад, балки аз параметрҳои ташаккули блок низ вобаста аст. Ҳатто агар blockchain мо ба мо имкон диҳад, ки 1000000 tps содир кунем, аммо барои сохтани блоки 10МБ 488 дақиқа вақт лозим аст, оё ин барои мо осонтар мешавад?

Биёед ба давраи зиндагии транзаксия дар Hyperledger Fabric бодиққат назар андозем, то бифаҳмем, ки чӣ вақт лозим аст ва чӣ гуна он ба параметрҳои ташаккули блок алоқаманд аст.

Феҳристи тақсимшуда барои чархҳо: Таҷриба бо Hyperledger Fabric
аз ин чо гирифта шудааст: hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

(1) Муштарӣ транзаксияро ташкил мекунад, онро ба ҳамсолони индоссант мефиристад, охирин транзаксияро тақлид мекунад (тағйироти бо занҷир воридшударо ба ҳолати кунунӣ татбиқ кунед, аммо ба дафтар ӯҳдадор намешавад) ва RWSet - номҳои калидӣ, версияҳо ва арзишҳое, ки аз коллексия дар CouchDB гирифта шудаанд, (2) индоссантҳо RWSet-и имзошударо ба муштарӣ бармегардонанд, (3) муштарӣ ё имзоҳои ҳамаи ҳамсолони (индоссантҳо) заруриро месанҷад ва сипас транзаксияро ба хидмати фармоишӣ мефиристад , ё онро бе тафтиш мефиристад (тафтиш ҳоло ҳам дертар сурат мегирад), хадамоти фармоиш блокро ташкил медиҳад ва (4) ба ҳама ҳамсолон мефиристад, на танҳо индоссантҳо; ҳамсолон тафтиш мекунанд, ки версияҳои калидҳои маҷмӯи хондашуда ба версияҳои пойгоҳи додаҳо, имзоҳои ҳамаи индоссантҳо мувофиқат мекунанд ва дар ниҳоят блокро содир мекунанд.

Аммо ин ҳама нест. Дар паси калимаҳои "фармоишгар блокро ташкил медиҳад" на танҳо фармоиши транзаксияҳо, балки инчунин 3 дархости пайдарпайи шабакавӣ аз роҳбар ба пайравон ва бозгашт пинҳон аст: роҳбар ба журнал паём илова мекунад, ба пайравон мефиристад, охирин ба сабти онҳо, тасдиқи такрори бомуваффақиятро ба пешво фиристед, роҳбар паёмро содир мекунад, тасдиқи ӯҳдадориро ба пайравон мефиристад, пайравон ӯҳдадор мешаванд. Чӣ қадаре ки андозаи блок ва вақт хурдтар бошад, ҳамон қадар хадамоти фармоишӣ бояд консенсусро муқаррар кунад. Hyperledger Fabric ду параметри ташаккули блок дорад: BatchTimeout - вақти ташаккули блок ва BatchSize - андозаи блок (шумораи транзаксияҳо ва андозаи худи блок дар байт). Ҳамин ки яке аз параметрҳо ба ҳадди ниҳоӣ мерасад, блоки нав дода мешавад. Чӣ қадаре ки гиреҳҳои фармоишгар бештар бошанд, ин ҳамон қадар тӯл мекашад. Аз ин рӯ, шумо бояд BatchTimeout ва BatchSize-ро зиёд кунед. Аммо азбаски RWSets нусхабардорӣ шудааст, ҳар қадаре ки мо блокро калонтар созем, эҳтимолияти муноқишаҳои MVCC ҳамон қадар зиёдтар мешавад. Илова бар ин, бо афзоиши BatchTimeout, UX ба таври фалокатбор таназзул мекунад. Ба назари ман схемаи зерини халли ин масъалахо окилона ва аён аст.

Чӣ тавр аз интизории анҷоми блок худдорӣ кардан мумкин аст ва ҳолати транзаксияро гум накунед

Чӣ қадаре ки вақти ташаккул ва андозаи блок дарозтар бошад, интиқоли blockchain ҳамон қадар баландтар мешавад. Яке аз дигаре мустақиман пайгирӣ намекунад, аммо бояд дар хотир дошт, ки барои ташкили консенсус дар RAFT се дархости шабакавӣ аз роҳбар ба пайравон ва бозгашт лозим аст. Чӣ қадаре ки гиреҳҳои фармоиш зиёд бошанд, ҳамон қадар зиёдтар вақт мегирад. Ҳаҷм ва вақти ташаккули блок ҳар қадар хурдтар бошад, ҳамон қадар чунин таъсироти мутақобила зиёд мешавад. Чӣ тавр вақти ташаккул ва андозаи блокро бе зиёд кардани вақти вокуниши система барои корбари ниҳоӣ зиёд кардан мумкин аст?

Аввалан, ба шумо лозим аст, ки бо ягон роҳ ихтилофоти MVCC-ро, ки аз андозаи бузурги блок ба вуҷуд омадаанд, ҳал кунед, ки метавонад RWSets гуногунро бо як версияи худ дар бар гирад. Аён аст, ки аз ҷониби муштарӣ (дар робита ба шабакаи blockchain, ин метавонад як пуштибонӣ бошад ва ман инро дар назар дорам) Идоракунандаи низоъ MVCC, ки метавонад ё хидмати алоҳида ё ороишгари муқаррарӣ аз болои занги оғозкунандаи транзаксия бо мантиқи такрорӣ бошад.

Кӯшиши такрориро бо стратегияи экспоненсиалӣ амалӣ кардан мумкин аст, аммо пас аз он таъхир низ ба таври экспоненсиалӣ коҳиш меёбад. Аз ин рӯ, шумо бояд ё кӯшиши тасодуфии такрориро дар ҳудуди муайяни хурд ё як доимӣ истифода баред. Бо назардошти бархӯрдҳои эҳтимолӣ дар варианти аввал.

Қадами навбатӣ ин аст, ки ҳамкории муштарӣ бо система асинхронӣ кунад, то он 15, 30 ё 10000000 сонияро интизор нашавад, ки мо онро ҳамчун BatchTimeout муқаррар мекунем. Аммо дар айни замон, қобилияти нигоҳ доштани қобилияти боварӣ ҳосил кардан лозим аст, ки тағиротҳои аз ҷониби транзаксия оғозшуда дар blockchain сабт / сабт нашудаанд.
Махзани маълумот метавонад барои нигоҳ доштани ҳолати транзаксияҳо истифода шавад. Осонтарин вариант CouchDB аз сабаби осонии истифода аст: пойгоҳи додаҳо интерфейси интерфейси берун аз қуттӣ, REST API дорад ва шумо метавонед ба осонӣ такрорӣ ва тақсимкуниро барои он танзим кунед. Шумо метавонед танҳо дар ҳамон мисоли CouchDB коллексияи алоҳида эҷод кунед, ки Fabric барои нигоҳ доштани ҳолати ҷаҳонии худ истифода мебарад. Мо бояд ин гуна ҳуҷҷатҳоро нигоҳ дорем.

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

Ин ҳуҷҷат ба пойгоҳи додаҳо пеш аз фиристодани транзаксия ба ҳамсолон навишта мешавад, ID-и объект ба корбар баргардонида мешавад (ҳамон ID ҳамчун калид истифода мешавад), агар ин амалиёти эҷодӣ бошад ва пас майдонҳои Статус, TxID ва Хато. бо гирифтани маълумоти дахлдор аз ҳамсолон нав карда мешавад.

Феҳристи тақсимшуда барои чархҳо: Таҷриба бо Hyperledger Fabric

Дар ин схема корбар то ба охир расидани блок мунтазир нашуда, чархи чархзанандаро дар экран 10 сония тамошо карда, аз система посухи фаврӣ мегирад ва корро идома медиҳад.

Мо BoltDB-ро барои нигоҳ доштани ҳолати транзаксия интихоб кардем, зеро мо бояд хотираро сарфа кунем ва намехоҳем, ки вақтро барои ҳамкории шабакавӣ бо сервери пойгоҳи додаҳои мустақил беҳуда сарф кунем, хусусан вақте ки ин ҳамкорӣ бо истифода аз протоколи матнии оддӣ сурат мегирад. Дар омади гап, хоҳ шумо CouchDB-ро барои татбиқи нақшаи дар боло тавсифшуда истифода мебаред ё танҳо барои нигоҳ доштани ҳолати ҷаҳонӣ, дар ҳар сурат оптимизатсия кардани тарзи нигоҳдории маълумот дар CouchDB маъно дорад. Ба таври нобаёнӣ, дар CouchDB, андозаи гиреҳҳои дарахти b 1279 байт аст, ки аз андозаи бахши диск хеле камтар аст, яъне ҳам хондан ва ҳам мувозинат кардани дарахт дастрасии бештари дискҳои физикиро талаб мекунад. Андозаи оптималӣ ба стандарт мувофиқат мекунад Формати пешрафта ва 4 килобайт аст. Барои оптимизатсия, мо бояд параметрро муқаррар кунем btree_chunk_size баробар ба 4096 дар файли конфигуратсияи CouchDB. Барои BoltDB чунин дахолати дастӣ талаб карда намешавад.

Фишори бозгашт: стратегияи буферӣ

Аммо паёмҳо метавонанд зиёд бошанд. Зиёда аз он ки система метавонад идора кунад, мубодилаи захираҳоро бо даҳҳо хидматҳои дигар, ғайр аз хидматҳои дар диаграмма нишондодашуда - ва ҳамаи ин бояд ҳатто дар мошинҳое, ки Intellij Idea кор кардан хеле дилгиркунанда хоҳад буд, бенуқсон кор кунад.

Масъалаи гузариши гуногуни системаҳои алоқа, истеҳсолкунанда ва истеъмолкунанда бо роҳҳои гуногун ҳал карда мешавад. Биёед бубинем, ки мо чӣ кор карда метавонем.

Тарк: мо метавонем даъво кунем, ки дар тӯли T сония ҳадди аксар X транзаксияҳоро коркард кунем. Ҳама дархостҳое, ки аз ин меъёр зиёданд, қатъ карда мешаванд. Ин хеле содда аст, аммо пас шумо метавонед дар бораи UX фаромӯш кунед.

Назорат: истеъмолкунанда бояд интерфейси муайяне дошта бошад, ки тавассути он вобаста ба сарборӣ вай метавонад tps-и истеҳсолкунандаро идора кунад. Бад нест, аммо он ба зиммаи таҳиягарони муштарии боркунӣ ӯҳдадор мешавад, ки ин интерфейсро татбиқ кунанд. Барои мо, ин қобили қабул нест, зеро blockchain дар оянда ба шумораи зиёди системаҳои деринаи мавҷуда муттаҳид карда мешавад.

Буферизатсия: ба ҷои муқовимат ба ҷараёни додаҳои воридотӣ, мо метавонем ин ҷараёнро буфер кунем ва онро бо суръати зарурӣ коркард кунем. Аён аст, ки ин беҳтарин роҳи ҳалли он аст, агар мо мехоҳем таҷрибаи хуби корбарро пешниҳод кунем. Мо буферро бо истифода аз навбат дар RabbitMQ амалӣ кардем.

Феҳристи тақсимшуда барои чархҳо: Таҷриба бо Hyperledger Fabric

Ба нақша ду амали нав илова карда шуд: (1) пас аз қабули дархости API, паём бо параметрҳои зарурӣ барои занг задан ба транзаксия навбат гузошта мешавад ва муштарӣ паёме мегирад, ки транзаксия аз ҷониби система қабул шудааст, ( 2) пуштибон маълумотро бо суръати дар конфигуратсия муайяншуда аз навбат мехонад; транзаксияро оғоз мекунад ва маълумотро дар мағозаи вазъият нав мекунад.
Акнун шумо метавонед вақти сохтмонро зиёд кунед ва иқтидори блокро ба қадри дилхоҳатон зиёд кунед, таъхирҳоро аз корбар пинҳон кунед.

Воситаҳои дигар

Дар ин ҷо дар бораи занҷир чизе гуфта нашудааст, зеро одатан дар он чизе барои оптимизатсия вуҷуд надорад. Рамзи занҷир бояд то ҳадди имкон содда ва бехатар бошад - ин ҳама чизест, ки аз он талаб карда мешавад. Чаҳорчӯба ба мо барои содда ва бехатар навиштани рамзи занҷир кӯмак мекунад. CSKit аз S7 Techlab ва анализатори статикӣ зинда кардан ^CC.

Илова бар ин, дастаи мо як қатор утилитҳоро таҳия мекунад, то кор бо Fabric содда ва ҷолиб бошад: муҳаққиқи blockchain, утилита барои аз нав танзимкунии автоматии шабака (илова кардан / хориҷ кардани ташкилотҳо, гиреҳҳои RAFT), утилита барои лағви шаҳодатнома ва хориҷ кардани шахсият. Агар шумо хоҳед, ки саҳм гузоред, хуш омадед.

хулоса

Ин равиш иваз кардани Hyperledger Fabric-ро бо Quorum, дигар шабакаҳои хусусии Ethereum (PoA ё ҳатто PoW) осон мекунад, интиқоли воқеиро ба таври назаррас коҳиш медиҳад, аммо дар айни замон UX-и муқаррариро нигоҳ медорад (ҳам барои корбарон дар браузер ва ҳам аз ҷониби системаҳои ҳамгирошуда). ). Ҳангоми иваз кардани матоъ бо Ethereum дар нақша, танҳо мантиқи хидмати такрорӣ/декораторро аз коркарди низоъҳои MVCC ба афзоиши атомӣ ва дубора фиристодан тағир додан лозим аст. Буферӣ ва нигаҳдории вазъ имкон дод, ки вақти вокуниш аз вақти ташаккули блок ҷудо карда шавад. Акнун шумо метавонед ҳазорҳо гиреҳҳои фармоишро илова кунед ва натарсед, ки блокҳо зуд-зуд ташаккул меёбанд ва хидмати фармоиширо бор кунед.

Умуман, ин ҳама чизест, ки ман мехостам мубодила кунам. Ман шод хоҳам шуд, агар он ба касе дар кори онҳо кӯмак кунад.

Манбаъ: will.com

Илова Эзоҳ