Berapa banyak TPS pada blockchain anda?

Soalan kegemaran tentang mana-mana sistem yang diedarkan daripada orang bukan teknikal ialah "Berapa banyak tps pada blockchain anda?" Walau bagaimanapun, bilangan yang diberikan sebagai jawapan biasanya mempunyai sedikit persamaan dengan perkara yang ingin didengari oleh penyoal. Malah, dia ingin bertanya "adakah blockchain anda sesuai dengan keperluan perniagaan saya," dan keperluan ini bukan satu nombor, tetapi banyak syarat - berikut adalah toleransi kesalahan rangkaian, keperluan akhir, saiz, sifat transaksi dan banyak parameter lain. Jadi jawapan kepada soalan "berapa banyak tps" tidak mungkin mudah, dan hampir tidak pernah lengkap. Sistem teragih dengan puluhan atau ratusan nod yang melakukan pengiraan yang agak rumit boleh berada dalam sejumlah besar keadaan berbeza yang berkaitan dengan keadaan rangkaian, kandungan blokchain, kegagalan teknikal, masalah ekonomi, serangan ke atas rangkaian dan banyak sebab lain . Peringkat di mana masalah prestasi mungkin berbeza daripada perkhidmatan tradisional, dan pelayan rangkaian blok adalah perkhidmatan rangkaian yang menggabungkan fungsi pangkalan data, pelayan web dan klien torrent, yang menjadikannya sangat kompleks dari segi profil beban pada semua subsistem : pemproses, ingatan, rangkaian, storan

Kebetulan rangkaian terdesentralisasi dan blockchain adalah perisian yang agak khusus dan luar biasa untuk pembangun perisian terpusat. Oleh itu, saya ingin menyerlahkan aspek penting prestasi dan kemampanan rangkaian terdesentralisasi, pendekatan untuk mengukurnya dan mencari kesesakan. Kami akan melihat pelbagai isu prestasi yang mengehadkan kelajuan menyediakan perkhidmatan kepada pengguna blockchain dan perhatikan ciri ciri perisian jenis ini.

Peringkat permintaan perkhidmatan oleh pelanggan blockchain

Untuk bercakap secara jujur ​​tentang kualiti perkhidmatan yang lebih atau kurang kompleks, anda perlu mengambil kira bukan sahaja nilai purata, tetapi juga maksimum/minimum, median, persentil. Secara teorinya, kita boleh bercakap tentang 1000 tps dalam beberapa blockchain, tetapi jika 900 transaksi diselesaikan dengan kelajuan yang sangat besar, dan 100 "terperangkap" selama beberapa saat, maka purata masa yang dikumpul ke atas semua transaksi bukanlah metrik yang benar-benar adil untuk pelanggan. yang saya tidak dapat menyelesaikan transaksi dalam beberapa saat. "Lubang" sementara yang disebabkan oleh pusingan konsensus yang terlepas atau pemisahan rangkaian boleh merosakkan perkhidmatan yang telah menunjukkan prestasi cemerlang di bangku ujian.

Untuk mengenal pasti kesesakan sedemikian, adalah perlu untuk mempunyai pemahaman yang baik tentang peringkat di mana rantaian blok sebenar mungkin menghadapi kesukaran untuk melayani pengguna. Mari kita terangkan kitaran penghantaran dan pemprosesan transaksi, serta mendapatkan keadaan baharu blokchain, yang mana pelanggan boleh mengesahkan bahawa transaksinya telah diproses dan diambil kira.

  1. urus niaga terbentuk pada pelanggan
  2. transaksi ditandatangani pada pelanggan
  3. pelanggan memilih salah satu nod dan menghantar transaksinya kepadanya
  4. pelanggan melanggan kemas kini kepada pangkalan data keadaan nod, menunggu keputusan transaksinya muncul
  5. nod mengedarkan transaksi melalui rangkaian p2p
  6. beberapa atau satu BP (pengeluar blok) memproses transaksi terkumpul, mengemas kini pangkalan data negeri
  7. BP membentuk blok baharu selepas memproses bilangan transaksi yang diperlukan
  8. BP mengedarkan blok baharu melalui rangkaian p2p
  9. blok baharu dihantar ke nod yang sedang diakses oleh pelanggan
  10. nod mengemas kini pangkalan data keadaan
  11. nod melihat kemas kini mengenai pelanggan dan menghantar pemberitahuan transaksi kepadanya

Sekarang mari kita lihat lebih dekat pada peringkat ini dan huraikan isu prestasi yang berpotensi pada setiap peringkat. Tidak seperti sistem berpusat, kami juga akan mempertimbangkan pelaksanaan kod pada klien rangkaian. Selalunya, apabila mengukur TPS, masa pemprosesan transaksi dikumpul dari nod, dan bukan dari pelanggan - ini tidak adil sepenuhnya. Pelanggan tidak peduli seberapa cepat nod memproses transaksinya; perkara yang paling penting baginya ialah saat maklumat yang boleh dipercayai tentang transaksi ini termasuk dalam rantaian blok menjadi tersedia untuknya. Metrik inilah yang pada asasnya adalah masa pelaksanaan transaksi. Ini bermakna bahawa pelanggan yang berbeza, malah menghantar transaksi yang sama, boleh menerima masa yang sama sekali berbeza, yang bergantung pada saluran, beban dan kedekatan nod, dsb. Oleh itu, adalah perlu untuk mengukur masa ini pada pelanggan, kerana ini adalah parameter yang perlu dioptimumkan.

Menyediakan transaksi di sisi pelanggan

Mari kita mulakan dengan dua mata pertama: transaksi dibentuk dan ditandatangani oleh pelanggan. Anehnya, ini juga boleh menjadi hambatan prestasi blockchain dari sudut pandangan pelanggan. Ini adalah luar biasa untuk perkhidmatan terpusat, yang mengambil alih semua pengiraan dan operasi dengan data, dan pelanggan hanya menyediakan permintaan ringkas yang boleh meminta sejumlah besar data atau pengiraan, mendapatkan hasil siap sedia. Dalam blok blok, kod pelanggan menjadi lebih dan lebih berkuasa, dan teras blok blok menjadi lebih ringan, dan tugas pengkomputeran besar-besaran biasanya dipindahkan ke perisian klien. Dalam rantaian blok, terdapat pelanggan yang boleh menyediakan satu transaksi untuk masa yang agak lama (saya bercakap tentang pelbagai bukti merkle, bukti ringkas, tandatangan ambang dan operasi kompleks lain di sisi pelanggan). Contoh yang baik bagi pengesahan dalam rantaian yang mudah dan penyediaan berat bagi transaksi pada pelanggan ialah bukti keahlian dalam senarai berdasarkan Merkle-tree, di sini artikel.

Juga, jangan lupa bahawa kod pelanggan tidak hanya menghantar urus niaga ke rantaian blok, tetapi terlebih dahulu menanyakan keadaan rantaian blok - dan aktiviti ini boleh menjejaskan kesesakan rangkaian dan nod rantaian blok. Jadi, apabila mengambil ukuran, adalah munasabah untuk mencontohi tingkah laku kod pelanggan selengkap mungkin. Walaupun dalam blockchain anda terdapat pelanggan ringan biasa yang meletakkan tandatangan digital biasa pada transaksi paling mudah untuk memindahkan beberapa aset, setiap tahun masih terdapat lebih banyak pengiraan besar pada pelanggan, algoritma kripto semakin kuat, dan bahagian pemprosesan ini boleh berubah menjadi kesesakan yang ketara pada masa hadapan. Oleh itu, berhati-hati dan jangan terlepas situasi apabila, dalam transaksi yang berlangsung selama 3.5s, 2.5s dibelanjakan untuk menyediakan dan menandatangani transaksi, dan 1.0s untuk menghantarnya ke rangkaian dan menunggu jawapan. Untuk menilai risiko kesesakan ini, anda perlu mengumpul metrik daripada mesin pelanggan, dan bukan hanya dari nod blockchain.

Menghantar transaksi dan memantau statusnya

Langkah seterusnya ialah menghantar transaksi ke nod blockchain yang dipilih dan menerima status menerimanya ke dalam kumpulan transaksi. Peringkat ini serupa dengan akses pangkalan data biasa; nod mesti merekodkan transaksi dalam kumpulan dan mula mengedarkan maklumat mengenainya melalui rangkaian p2p. Pendekatan untuk menilai prestasi di sini adalah serupa dengan menilai prestasi perkhidmatan mikro API Web tradisional, dan urus niaga itu sendiri dalam rantaian blok boleh dikemas kini dan menukar statusnya secara aktif. Secara umum, mengemas kini maklumat transaksi pada beberapa blok blok boleh berlaku beberapa kali, contohnya apabila bertukar antara garpu rantai atau apabila BP mengumumkan niat mereka untuk memasukkan transaksi dalam blok. Had pada saiz kumpulan ini dan bilangan urus niaga di dalamnya boleh menjejaskan prestasi rantaian blok. Jika kolam urus niaga diisi dengan saiz maksimum yang mungkin, atau tidak muat dalam RAM, prestasi rangkaian boleh menurun dengan mendadak. Rantaian sekat tidak mempunyai cara terpusat untuk melindungi daripada banjir mesej sampah, dan jika blokchain menyokong urus niaga volum tinggi dan yuran yang rendah, ini boleh menyebabkan kumpulan urus niaga melimpahβ€”sebuah lagi kesesakan prestasi yang berpotensi.

Dalam blockchain, pelanggan menghantar transaksi ke mana-mana nod blockchain yang dia suka, hash transaksi biasanya diketahui oleh pelanggan sebelum menghantar, jadi apa yang dia perlu lakukan ialah mencapai sambungan dan, selepas penghantaran, tunggu sehingga blockchain berubah. keadaannya, membolehkan transaksinya. Ambil perhatian bahawa dengan mengukur "tps" anda boleh mendapatkan hasil yang sama sekali berbeza untuk kaedah yang berbeza untuk menyambung ke nod blockchain. Ini boleh menjadi RPC HTTP biasa atau WebSocket yang membolehkan anda melaksanakan corak "langganan". Dalam kes kedua, pelanggan akan menerima pemberitahuan lebih awal, dan nod akan membelanjakan lebih sedikit sumber (terutamanya memori dan trafik) pada respons tentang status transaksi. Oleh itu, apabila mengukur "tps" adalah perlu untuk mengambil kira cara pelanggan menyambung ke nod. Oleh itu, untuk menilai risiko kesesakan ini, blok penanda aras mesti dapat mencontohi pelanggan dengan kedua-dua permintaan WebSocket dan HTTP RPC, dalam perkadaran yang sepadan dengan rangkaian sebenar, serta mengubah sifat urus niaga dan saiznya.

Untuk menilai risiko kesesakan ini, anda juga perlu mengumpul metrik daripada mesin pelanggan, dan bukan hanya dari nod blockchain.

Penghantaran transaksi dan blok melalui rangkaian p2p

Dalam rantaian blok, rangkaian peer-to-peer (p2p) digunakan untuk memindahkan transaksi dan blok antara peserta. Transaksi merebak ke seluruh rangkaian, bermula dari salah satu nod, sehingga mereka mencapai pengeluar blok rakan sebaya, yang membungkus transaksi ke dalam blok dan, menggunakan p2p yang sama, mengedarkan blok baharu ke semua nod rangkaian. Asas kebanyakan rangkaian p2p moden adalah pelbagai pengubahsuaian protokol Kademlia. di sini ialah ringkasan yang baik tentang protokol ini, dan di sini - artikel dengan pelbagai ukuran dalam rangkaian BitTorrent, dari mana seseorang boleh memahami bahawa rangkaian jenis ini lebih kompleks dan kurang boleh diramalkan daripada rangkaian perkhidmatan terpusat yang dikonfigurasikan tegar. Juga, di sini artikel tentang mengukur pelbagai metrik menarik untuk nod Ethereum.

Ringkasnya, setiap rakan dalam rangkaian tersebut mengekalkan senarai dinamiknya sendiri bagi rakan lain yang mana ia meminta blok maklumat yang ditangani oleh kandungan. Apabila rakan sebaya menerima permintaan, ia sama ada memberikan maklumat yang diperlukan atau menghantar permintaan kepada rakan semu rawak seterusnya daripada senarai, dan setelah menerima respons, ia menyampaikannya kepada peminta dan menyimpannya untuk seketika, memberikan ini blok maklumat lebih awal pada kali seterusnya. Oleh itu, maklumat popular berakhir dalam sejumlah besar cache sebilangan besar rakan sebaya, dan maklumat yang tidak popular digantikan secara beransur-ansur. Rakan sebaya menyimpan rekod tentang siapa yang telah memindahkan berapa banyak maklumat kepada siapa, dan rangkaian cuba merangsang pengedar aktif dengan meningkatkan penilaian mereka dan memberikan mereka tahap perkhidmatan yang lebih tinggi, secara automatik mengalihkan peserta yang tidak aktif daripada senarai rakan sebaya.

Jadi, transaksi kini perlu diedarkan ke seluruh rangkaian supaya pengeluar blok dapat melihatnya dan memasukkannya ke dalam blok. Nod secara aktif "mengedarkan" transaksi baharu kepada semua orang dan mendengar rangkaian, menunggu blok dalam indeks yang mana transaksi yang diperlukan akan muncul untuk memberitahu pelanggan yang menunggu. Masa yang diambil oleh rangkaian untuk memindahkan maklumat tentang transaksi dan blok baharu antara satu sama lain dalam rangkaian p2p bergantung pada sebilangan besar faktor: bilangan nod jujur ​​yang bekerja berdekatan (dari sudut pandangan rangkaian), "warm- up” daripada cache nod ini, saiz blok, urus niaga, sifat perubahan, geografi rangkaian, bilangan nod dan banyak faktor lain. Pengukuran kompleks metrik prestasi dalam rangkaian sedemikian adalah perkara yang rumit; adalah perlu untuk menilai masa pemprosesan permintaan secara serentak pada kedua-dua pelanggan dan rakan sebaya (nod rantaian blok). Masalah dalam mana-mana mekanisme p2p, pengusiran dan caching data yang salah, pengurusan senarai rakan aktif yang tidak berkesan, dan banyak faktor lain boleh menyebabkan kelewatan yang menjejaskan kecekapan keseluruhan rangkaian secara keseluruhan, dan kesesakan ini adalah yang paling sukar untuk dianalisis , ujian dan tafsiran keputusan.

Pemprosesan rantaian blok dan pengemaskinian pangkalan data negeri

Bahagian paling penting dalam rantaian blok ialah algoritma konsensus, aplikasinya kepada blok baharu yang diterima daripada rangkaian dan pemprosesan transaksi dengan merekodkan keputusan dalam pangkalan data negeri. Menambah blok baharu pada rantai dan kemudian memilih rantai utama harus berfungsi secepat mungkin. Walau bagaimanapun, dalam kehidupan sebenar, "sepatutnya" tidak bermaksud "berfungsi", dan seseorang boleh, sebagai contoh, bayangkan situasi di mana dua rantaian bersaing yang lama sentiasa bertukar antara mereka sendiri, menukar metadata beribu-ribu transaksi dalam kumpulan pada setiap suis , dan sentiasa melancarkan pangkalan data negeri. Peringkat ini, dari segi mentakrifkan kesesakan, adalah lebih mudah daripada lapisan rangkaian p2p, kerana pelaksanaan urus niaga dan algoritma konsensus adalah deterministik, dan lebih mudah untuk mengukur apa-apa di sini.
Perkara utama adalah untuk tidak mengelirukan kemerosotan rawak dalam prestasi peringkat ini dengan masalah rangkaian - nod lebih perlahan dalam menyampaikan blok dan maklumat mengenai rantai utama, dan untuk pelanggan luaran ini mungkin kelihatan seperti rangkaian yang perlahan, walaupun masalahnya terletak pada tempat yang sama sekali berbeza.

Untuk mengoptimumkan prestasi pada peringkat ini, adalah berguna untuk mengumpul dan memantau metrik daripada nod itu sendiri, dan memasukkan di dalamnya yang berkaitan dengan mengemas kini pangkalan data negeri: bilangan blok yang diproses pada nod, saiznya, bilangan urus niaga, bilangan suis antara garpu rantai, bilangan blok tidak sah , masa operasi mesin maya, masa komit data, dsb. Ini akan menghalang masalah rangkaian daripada dikelirukan dengan ralat dalam algoritma pemprosesan rantai.

Transaksi pemprosesan mesin maya boleh menjadi sumber maklumat yang berguna yang boleh mengoptimumkan operasi blockchain. Bilangan peruntukan memori, bilangan arahan baca/tulis dan metrik lain yang berkaitan dengan kecekapan pelaksanaan kod kontrak boleh memberikan banyak maklumat berguna kepada pembangun. Pada masa yang sama, kontrak pintar ialah program, yang bermaksud secara teori mereka boleh menggunakan mana-mana sumber: cpu/memori/rangkaian/storan, jadi pemprosesan transaksi adalah peringkat yang agak tidak menentu, yang, di samping itu, banyak berubah apabila bergerak antara versi dan apabila menukar kod kontrak. Oleh itu, metrik yang berkaitan dengan pemprosesan transaksi juga diperlukan untuk mengoptimumkan prestasi blockchain dengan berkesan.

Penerimaan oleh pelanggan pemberitahuan tentang kemasukan transaksi dalam rantaian blok

Ini adalah peringkat akhir pelanggan blockchain yang menerima perkhidmatan; berbanding dengan peringkat lain, tidak ada kos overhed yang besar, tetapi masih berbaloi untuk mempertimbangkan kemungkinan pelanggan menerima respons yang banyak daripada nod (contohnya, kontrak pintar mengembalikan susunan data). Walau apa pun, perkara ini adalah yang paling penting bagi orang yang bertanya soalan "berapa banyak tps dalam blockchain anda?", kerana Pada masa ini, masa menerima perkhidmatan direkodkan.

Di tempat ini, sentiasa ada penghantaran masa sepenuh masa yang perlu diluangkan oleh pelanggan menunggu jawapan daripada blokchain; kali ini pengguna akan menunggu pengesahan dalam permohonannya, dan ia adalah pengoptimumannya. tugas utama pemaju.

Kesimpulan

Hasilnya, kami boleh menerangkan jenis operasi yang dilakukan pada blok blok dan membahagikannya kepada beberapa kategori:

  1. transformasi kriptografi, pembinaan bukti
  2. rangkaian peer-to-peer, transaksi dan replikasi blok
  3. pemprosesan transaksi, pelaksanaan kontrak pintar
  4. menggunakan perubahan dalam blockchain pada pangkalan data negeri, mengemas kini data pada transaksi dan blok
  5. permintaan baca sahaja untuk menyatakan pangkalan data, API nod blockchain, perkhidmatan langganan

Secara umum, keperluan teknikal untuk nod blockchain moden adalah sangat serius - CPU pantas untuk kriptografi, sejumlah besar RAM untuk menyimpan dan mengakses pangkalan data negeri dengan cepat, interaksi rangkaian menggunakan sejumlah besar sambungan terbuka serentak, dan storan yang besar. Keperluan tinggi sedemikian dan banyaknya jenis operasi yang berbeza tidak dapat dielakkan membawa kepada fakta bahawa nod mungkin tidak mempunyai sumber yang mencukupi, dan kemudian mana-mana peringkat yang dibincangkan di atas boleh menjadi satu lagi halangan untuk prestasi rangkaian keseluruhan.

Apabila mereka bentuk dan menilai prestasi blockchain, anda perlu mengambil kira semua perkara ini. Untuk melakukan ini, anda perlu mengumpul dan menganalisis metrik secara serentak daripada pelanggan dan nod rangkaian, mencari korelasi antara mereka, menganggarkan masa yang diperlukan untuk menyediakan perkhidmatan kepada pelanggan, mengambil kira semua sumber utama: cpu/memori/rangkaian/storan , memahami cara ia digunakan dan mempengaruhi satu sama lain. Semua ini menjadikan membandingkan kelajuan rantaian blok yang berbeza dalam bentuk "berapa banyak TPS" tugas yang sangat tidak berterima kasih, kerana terdapat sejumlah besar konfigurasi dan keadaan yang berbeza. Dalam sistem berpusat yang besar, kumpulan beratus-ratus pelayan, masalah ini juga kompleks dan juga memerlukan pengumpulan sejumlah besar metrik yang berbeza, tetapi dalam rantaian blok, disebabkan oleh rangkaian p2p, kontrak pemprosesan mesin maya, ekonomi dalaman, bilangan darjah kebebasan adalah lebih besar, yang menjadikan ujian walaupun pada beberapa pelayan, ia tidak menunjukkan dan hanya menunjukkan nilai yang sangat anggaran yang hampir tidak mempunyai kaitan dengan realiti.

Oleh itu, apabila membangun dalam teras blok, untuk menilai prestasi dan menjawab soalan "adakah ia bertambah baik berbanding masa lalu?" kami menggunakan perisian yang agak kompleks yang mengatur pelancaran blokchain dengan berpuluh-puluh nod dan secara automatik melancarkan penanda aras dan mengumpul metrik ; tanpa maklumat ini adalah amat sukar untuk menyahpepijat protokol yang berfungsi dengan berbilang peserta.

Oleh itu, apabila anda menerima soalan "berapa banyak TPS dalam blokchain anda?", tawarkan teman bicara anda minum teh dan tanya sama ada dia bersedia untuk melihat sedozen graf dan juga mendengar ketiga-tiga kotak masalah prestasi blockchain dan cadangan anda untuk menyelesaikan mereka...

Sumber: www.habr.com

Tambah komen