РаспрСдСлСнный рССстр для колСсных ΠΏΠ°Ρ€: ΠΎΠΏΡ‹Ρ‚ с Hyperledger Fabric

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π Π Π” КП (распрСдСлСнный рССстр Π΄Π°Π½Π½Ρ‹Ρ… для контроля ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° колСсных ΠΏΠ°Ρ€). Π—Π΄Π΅ΡΡŒ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ нашСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² условиях ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ. По большСй части я Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Hyperledger Fabric, Π½ΠΎ описанный здСсь ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ экстраполирован Π½Π° любой permissioned Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½. ΠšΠΎΠ½Π΅Ρ‡Π½Π°Ρ Ρ†Π΅Π»ΡŒ Π½Π°ΡˆΠΈΡ… ΠΈΠ·Ρ‹ΡΠΊΠ°Π½ΠΈΠΉβ€Š β€” β€ŠΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½-Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ Π±Ρ‹Π»ΠΎ приятно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π½Π΅ слишком тяТСло ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

Π—Π΄Π΅ΡΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΉ, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ здСсь Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΠ²Π΅Ρ‰Π°Ρ‚ΡŒΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρƒ мСня Π½Π΅Ρ‚). Π― просто Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своим скромным ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Β«Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎΒ» ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Ρ‡ΡƒΠΆΠΎΠΌ ΠΎΠΏΡ‹Ρ‚Π΅ принятия Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² коммСнтариях.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Ρ‹ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ

БСгодня усилия ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, Π° Π½Π΅ Π±ΠΎΠΌΠ±ΠΎΠΉ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ дСйствия Π² красивой ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ΅. ΠšΠ°Π½Π°Π»Ρ‹ состояний, optimistic rollup, plasma ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, станут ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΡΡ‚ΡŒΡŽ. Когда-Π½ΠΈΠ±ΡƒΠ΄ΡŒ. А Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, TON снова ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ запуск Π½Π° ΠΏΠΎΠ»Π³ΠΎΠ΄Π°, Π° очСрСдная Plasma Group ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ своё сущСствованиС. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Ρ€ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ roadmap ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° Π½ΠΎΡ‡ΡŒ блСстящиС white papers, Π½ΠΎ здСсь ΠΈ сСйчас Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ. Get shit done.

Π—Π°Π΄Π°Ρ‡Π°, поставлСнная ΠΏΠ΅Ρ€Π΅Π΄ нашСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, выглядит Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ Ρ‚Π°ΠΊ: Π΅ΡΡ‚ΡŒ мноТСство ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‰Π΅Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… тысяч, Π½Π΅ ΠΆΠ΅Π»Π°ΡŽΡ‰Π΅Π΅ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π½Π° Π΄ΠΎΠ²Π΅Ρ€ΠΈΠΈ; Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° DLT Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ПК Π±Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚ Π½Π΅ Ρ…ΡƒΠΆΠ΅ Π»ΡŽΠ±Ρ‹Ρ… Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… систСм ΡƒΡ‡Π΅Ρ‚Π°. ВСхнология, лСТащая Π² основС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½Π° свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Ρ… манипуляций с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ β€” ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому здСсь Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½.

Π›ΠΎΠ·ΡƒΠ½Π³ΠΈ ΠΈΠ· whitepapers ΠΈ БМИ ΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ очСрСдная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² сСкунду. Π§Ρ‚ΠΎ ΠΆΠ΅ Π½Π° самом Π΄Π΅Π»Π΅?

Mainnet Ethereum сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ~30 tps. Π£ΠΆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° этого Π΅Π³ΠΎ слоТно Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ сколько-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΉ для ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π½ΡƒΠΆΠ΄ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½. Π‘Ρ€Π΅Π΄ΠΈ permissioned-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ извСстны Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ 2000 tps (Quorum) ΠΈΠ»ΠΈ 3000 tps (Hyperledger Fabric, Π² ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‡ΡƒΡ‚ΡŒ мСньшС, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ проводился Π½Π° старом consensus engine). Π‘Ρ‹Π»Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Fabric, давшая Π½Π΅ самыС ΠΏΠ»ΠΎΡ…ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, 20000 tps, Π½ΠΎ ΠΏΠΎΠΊΠ° это лишь акадСмичСскиС изыскания, ΠΆΠ΄ΡƒΡ‰ΠΈΠ΅ своСй ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Вряд Π»ΠΈ корпорация, которая ΠΌΠΎΠΆΠ΅Ρ‚ сСбС ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π» Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΈΡ€ΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ показатСлями. Но ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² throughput, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ latency.

Latency

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΎ Π΅Ρ‘ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ утвСрТдСния систСмой зависит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ скорости прохоТдСния сообщСния Ρ‡Π΅Ρ€Π΅Π· всС этапы Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΉ ΠΈ упорядочивания, Π½ΠΎ ΠΈ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² формирования Π±Π»ΠΎΠΊΠ°. Π”Π°ΠΆΠ΅ Ссли наш Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ позволяСт Π½Π°ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 1000000 tps, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈ этом 10 ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 488 Мб, станСт Π»ΠΈ Π½Π°ΠΌ Π»Π΅Π³Ρ‡Π΅?

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ Π½Π° ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Hyperledger Fabric, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π½Π° Ρ‡Ρ‚ΠΎ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ врСмя ΠΈ ΠΊΠ°ΠΊ это соотносится с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ формирования Π±Π»ΠΎΠΊΠ°.

РаспрСдСлСнный рССстр для колСсных ΠΏΠ°Ρ€: ΠΎΠΏΡ‹Ρ‚ с Hyperledger Fabric
взято ΠΎΡ‚ΡΡŽΠ΄Π°: hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#swimlane

(1) ΠšΠ»ΠΈΠ΅Π½Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, отправляСт Π½Π° endorsing peers, послСдниС ΡΠΈΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ (ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ измСнСния, вносимыС Ρ‡Π΅ΠΉΠ½ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС, Π½ΠΎ Π½Π΅ коммитят Π² Π»Π΅Π΄ΠΆΠ΅Ρ€) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ RWSetβ€Š β€” β€ŠΠΈΠΌΠ΅Π½Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, вСрсии ΠΈ значСния, взятыС ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² CouchDB, (2) endorsers ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ подписанный RWSet, (3) ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π»ΠΈΠ±ΠΎ провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ подписСй всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠΈΡ€ΠΎΠ² (endorsers), Π° ΠΏΠΎΡ‚ΠΎΠΌ отправляСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π½Π° ordering service, Π»ΠΈΠ±ΠΎ отправляСт Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° всС Ρ€Π°Π²Π½ΠΎ состоится ΠΏΠΎΠ·ΠΆΠ΅), ordering service Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊ ΠΈ (4) отправляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° всС ΠΏΠΈΡ€Ρ‹, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ endorsers; ΠΏΠΈΡ€Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ соотвСтствиС вСрсий ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² read set вСрсиям Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ подписСй всСх endorsers ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† коммитят Π±Π»ΠΎΠΊ.

Но это Π΅Ρ‰Ρ‘ Π½Π΅ всё. Π—Π° словами Β«ΠΎΡ€Π΄Π΅Ρ€Π΅Ρ€ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΒ» скрываСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ упорядочиваниС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π½ΠΎ ΠΈ 3 ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сСтСвых запроса ΠΎΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΊ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°ΠΌ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ: Π»ΠΈΠ΄Π΅Ρ€ добавляСт сообщСниС Π² Π»ΠΎΠ³, отправляСт Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°ΠΌ, послСдниС Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π² свой Π»ΠΎΠ³, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π»ΠΈΠ΄Π΅Ρ€Ρƒ, Π»ΠΈΠ΄Π΅Ρ€ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ сообщСниС, отправляСт ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°ΠΌ, Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ коммитят. Π§Π΅ΠΌ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ врСмя формирования Π±Π»ΠΎΠΊΠ°, Ρ‚Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ придСтся ordering service ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ консСнсус. Π’ Hyperledger Fabric Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° формирования Π±Π»ΠΎΠΊΠ°: BatchTimeoutβ€Š β€” врСмя формирования Π±Π»ΠΎΠΊΠ° ΠΈ BatchSize β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° (количСство Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ самого Π±Π»ΠΎΠΊΠ° Π² Π±Π°ΠΉΡ‚Π°Ρ…). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² достигаСт Π»ΠΈΠΌΠΈΡ‚Π°, выпускаСтся Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ. Π§Π΅ΠΌ большС Π½ΠΎΠ΄ ΠΎΡ€Π΄Π΅Ρ€Π΅Ρ€ΠΎΠ², Ρ‚Π΅ΠΌ дольшС это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ BatchTimeout ΠΈ BatchSize. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ RWSet’Ρ‹ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС ΠΌΡ‹ сдСлаСм Π±Π»ΠΎΠΊ, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ MVCC-ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ BatchTimeout катастрофичСски Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΡƒΠ΅Ρ‚ UX. МнС каТСтся Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠΉ ΠΈ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ схСма для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ оТидания Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π»ΠΎΠΊΠ° ΠΈ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ возмоТности отслСТивания статуса Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Π§Π΅ΠΌ большС врСмя формирования ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ°, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°. Одно ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ прямо Π½Π΅ слСдуСт, ΠΎΠ΄Π½Π°ΠΊΠΎ слСдуСт Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ установлСниС консСнсуса Π² RAFT Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π΅Ρ… сСтСвых запросов ΠΎΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΊ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°ΠΌ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π§Π΅ΠΌ большС Π½ΠΎΠ΄ ΠΎΡ€Π΄Π΅Ρ€ΠΎΠ², Ρ‚Π΅ΠΌ дольшС это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ. Π§Π΅ΠΌ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ врСмя формирования Π±Π»ΠΎΠΊΠ°, Ρ‚Π΅ΠΌ большС Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΠΉ. Как ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ врСмя формирования ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ°, Π½Π΅ увСличивая врСмя оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° систСмы для ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ MVCC-ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ большим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±Π»ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ RWSet’Ρ‹ с ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ вСрсиСй. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½-сСти, это Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π΅ΠΊΠ΅Π½Π΄, ΠΈ я имСю Π² Π²ΠΈΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ) Π½ΡƒΠΆΠ΅Π½ Ρ…Π΅Π½Π΄Π»Π΅Ρ€ MVCC-ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ сСрвисом, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π°Π΄ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ с Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ retry.

Retry ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ стратСгиСй, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° latency Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… retry, Π»ΠΈΠ±ΠΎ постоянный. Π‘ оглядкой Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ взаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с систСмой асинхронным, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ ΠΆΠ΄Π°Π» 15, 30 ΠΈΠ»ΠΈ 10000000 сСкунд, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ установим Π² качСствС BatchTimeout. Но ΠΏΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ измСнСния, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, записаны/Π½Π΅ записаны Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½.
Для хранСния статуса Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π°ΠΌΡ‹ΠΉ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” β€ŠCouchDB ΠΈΠ·-Π·Π° удобства использования: Ρƒ Π±Π°Π·Ρ‹ Π΅ΡΡ‚ΡŒ UI ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, REST API, для Π½Π΅Ρ‘ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ просто ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ инстансС CouchDB, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Fabric для хранСния своСго world state. Нам Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°.

{
Β Status string // Бтатус Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ: "pending", "done", "failed"
Β TxID: string // ID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
Β Error: string // optional, сообщСниС ΠΎΠ± ошибкС
}

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ записываСтся Π² Π±Π°Π·Ρƒ Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΠΈΡ€Ρ‹, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ возвращаСтся ID сущности (этот ΠΆΠ΅ ID ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΊΠ»ΡŽΡ‡Π°), Ссли это опСрация создания Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ поля Status, TxID ΠΈ Error ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ поступлСния Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΏΠΈΡ€ΠΎΠ².

РаспрСдСлСнный рССстр для колСсных ΠΏΠ°Ρ€: ΠΎΠΏΡ‹Ρ‚ с Hyperledger Fabric

Π’ этой схСмС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΆΠ΄Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΆΠ΅ Π½Π°ΠΊΠΎΠ½Π΅Ρ† сформируСтся Π±Π»ΠΎΠΊ, наблюдая крутящССся колСсико Π½Π° экранС 10 сСкунд, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΠΈΠΊ систСмы ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠœΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ BoltDB для хранСния статусов Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π½Π΅ хочСтся Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° сСтСвоС взаимодСйствиС с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоящим сСрвСром Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ³Π΄Π° это взаимодСйствиС происходит ΠΏΠΎ plain text ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Ρ‹ CouchDB для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ описанной Π²Ρ‹ΡˆΠ΅ схСмы ΠΈΠ»ΠΈ просто для хранСния world state, Π² любом случаС ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ способ хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² CouchDB. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² CouchDB Ρ€Π°Π·ΠΌΠ΅Ρ€ b-tree ΡƒΠ·Π»ΠΎΠ² Ρ€Π°Π²Π΅Π½ 1279 Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎ сильно мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сСктора Π½Π° дискС, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΊΠ°ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ пСрСбалансировка Π΄Π΅Ρ€Π΅Π²Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ большС физичСских ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ диску. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ соотвСтствуСт стандарту Advanced Format ΠΈ составляСт 4 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°. Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ btree_chunk_size Ρ€Π°Π²Π½Ρ‹ΠΌ 4096 Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ CouchDB. Для BoltDB Ρ‚Π°ΠΊΠΎΠ΅ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π½Π΅ трСбуСтся.

Backpressure: bufferΒ strategy

Но сообщСний ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ. Π‘ΠΎΠ»ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ систСма способна ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, раздСляя рСсурсы с дСсятком Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвисов ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Ρ… Π½Π° схСмС β€” ΠΈ всС это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π·ΠΎΡ‚ΠΊΠ°Π·Π½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… запуск Intellij Idea Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»ΠΎΠΌ ΠΊΡ€Π°ΠΉΠ½Π΅ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π°Π·Π½ΠΎΠΉ пропускной способности ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΡ…ΡΡ систСм, ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠ΅Ρ€Π° ΠΈ ΠΊΠΎΠ½ΡΡŒΡŽΠΌΠ΅Ρ€Π°, Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Dropping: ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ способны ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ X Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π·Π° T сСкунд. ВсС запросы, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ этот Π»ΠΈΠΌΠΈΡ‚, ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ довольно просто, Π½ΠΎ ΠΏΡ€ΠΎ UX Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±Ρ‹Ρ‚ΡŒ.

Controlling: Ρƒ ΠΊΠΎΠ½ΡΡŒΡŽΠΌΠ΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ интСрфСйс, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Π² зависимости ΠΎΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ смоТСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ tps ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠ΅Ρ€Π°. НСплохо, Π½ΠΎ это Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ этот интСрфСйс. Для нас это Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Π² пСрспСктивС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ Π² большоС количСство Π΄Π°Π²Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… систСм.

Buffering: вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ…ΠΈΡ‰Ρ€ΡΡ‚ΡŒΡΡ Π² сопротивлСнии Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, это Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠΏΡ‹Ρ‚. Π‘ΡƒΡ„Π΅Ρ€ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π² RabbitMQ.

РаспрСдСлСнный рССстр для колСсных ΠΏΠ°Ρ€: ΠΎΠΏΡ‹Ρ‚ с Hyperledger Fabric

Π’ схСму добавилось Π΄Π²Π° Π½ΠΎΠ²Ρ‹Ρ… дСйствия: (1) послС поступлСния запроса Π½Π° API Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ кладСтся сообщСниС с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ транзакция принята систСмой, (2) Π±Π΅ΠΊΠ΅Π½Π΄ с Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ; ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΈ обновляСт Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ статусов.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ врСмя формирования ΠΈ Π²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠ° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, насколько захочСтся, скрывая Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты

Π—Π΄Π΅ΡΡŒ Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ сказано ΠΏΡ€ΠΎ Ρ‡Π΅ΠΉΠ½ΠΊΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅Ρ‡Π΅Π³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π§Π΅ΠΉΠ½ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ максимально простым ΠΈ бСзопасным β€” это всё, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ Π½Π΅Π³ΠΎ трСбуСтся. ΠŸΠΈΡΠ°Ρ‚ΡŒ Ρ‡Π΅ΠΉΠ½ΠΊΠΎΠ΄ просто ΠΈ бСзопасно Π½Π°ΠΌ сильно ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π‘Π‘Kit ΠΎΡ‚ S7 Techlab ΠΈ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ revive^CC.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, наша ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Fabric простой ΠΈ приятной: Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ эксплорСр, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для автоматичСского измСнСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСти (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ, Π½ΠΎΠ΄ RAFT), ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для ΠΎΡ‚Π·Ρ‹Π²Π° сСртификатов ΠΈ удалСния identity. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти свой Π²ΠΊΠ»Π°Π΄ β€” welcome.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Hyperledger Fabric Π½Π° Quorum, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ Ethereum сСти (PoA ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ PoW), сущСствСнно ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ UX (ΠΊΠ°ΠΊ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Ρ‚Π°ΠΊ ΠΈ со стороны ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… систСм). ΠŸΡ€ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ Fabric Π½Π° Ethereum Π² схСмС Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠ³ΠΈΠΊΡƒ retry-сСрвиса/Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° c ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ MVCC-ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π½Π° Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΉ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ nonce ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ. БуфСризация ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ статусов ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ ΠΎΡ‚Π²ΡΠ·Π°Ρ‚ΡŒ врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ формирования Π±Π»ΠΎΠΊΠ°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ тысячи Π½ΠΎΠ΄ ΠΎΡ€Π΄Π΅Ρ€ΠΎΠ² ΠΈ Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ слишком часто ΠΈ Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ ordering service.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ, это всё, Ρ‡Π΅ΠΌ я Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ. Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄, Ссли это ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com