یک سوال مورد علاقه در مورد هر سیستم توزیع شده از یک شخص غیر فنی این است که "چند tps در بلاک چین شما وجود دارد؟" با این حال، عددی که در پاسخ داده میشود، معمولاً با آنچه سؤالکننده دوست دارد بشنود، اشتراک چندانی ندارد. در واقع، او میخواست بپرسد «آیا بلاکچین شما با نیازهای کسبوکار من مطابقت دارد؟» و این الزامات یک عدد نیستند، بلکه شرایط بسیاری هستند - در اینجا تحمل خطا، الزامات نهایی، اندازهها، ماهیت تراکنشها و بسیاری از پارامترهای دیگر وجود دارد. بنابراین، پاسخ به سوال "چند tps" بعید است ساده باشد، و تقریبا هرگز کامل نیست. یک سیستم توزیعشده با دهها یا صدها گره که محاسبات کاملاً پیچیده را انجام میدهند، میتواند در تعداد زیادی از حالتهای مختلف مرتبط با وضعیت شبکه، محتویات بلاک چین، خرابیهای فنی، مشکلات اقتصادی، حملات به شبکه و بسیاری از دلایل دیگر باشد. . مراحلی که در آن مشکلات عملکرد ممکن است با خدمات سنتی متفاوت است و سرور شبکه بلاک چین یک سرویس شبکه است که عملکرد یک پایگاه داده، وب سرور و کلاینت تورنت را ترکیب می کند که آن را از نظر نمایه بار در همه زیرسیستم ها بسیار پیچیده می کند. : پردازنده، حافظه، شبکه، ذخیره سازی
اتفاقاً شبکههای غیرمتمرکز و بلاک چینها نرمافزاری کاملاً خاص و غیرعادی برای توسعهدهندگان نرمافزار متمرکز هستند. بنابراین، من می خواهم جنبه های مهم عملکرد و پایداری شبکه های غیرمتمرکز، رویکردهای اندازه گیری آنها و یافتن گلوگاه ها را برجسته کنم. ما به مسائل مختلف عملکردی که سرعت ارائه خدمات به کاربران بلاک چین را محدود میکند نگاه میکنیم و ویژگیهای مشخصه این نوع نرمافزار را یادداشت میکنیم.
مراحل درخواست خدمات توسط مشتری بلاک چین
برای اینکه صادقانه در مورد کیفیت هر سرویس کم و بیش پیچیده صحبت کنید، باید نه تنها مقادیر متوسط، بلکه حداکثر/حداقل، میانه ها، صدک ها را نیز در نظر بگیرید. از نظر تئوری، ما میتوانیم در مورد 1000 تراکنش در برخی از زنجیرههای بلوکی صحبت کنیم، اما اگر 900 تراکنش با سرعت فوقالعاده انجام شود، و 100 تراکنش برای چند ثانیه گیر کرده باشد، میانگین زمان جمعآوریشده روی همه تراکنشها معیار کاملاً منصفانهای برای یک مشتری نیست. که من نتوانستم معامله را در چند ثانیه انجام دهم. «حفرههای» موقت ناشی از دورهای اجماع از دست رفته یا تقسیمبندی شبکه میتواند خدماتی را که عملکرد عالی را در میزهای آزمایشی نشان داده است، تا حد زیادی خراب کند.
برای شناسایی چنین تنگناهایی، لازم است درک خوبی از مراحلی که در آن یک بلاک چین واقعی ممکن است در ارائه خدمات به کاربران با مشکل مواجه شود، داشته باشیم. بیایید چرخه تحویل و پردازش یک تراکنش و همچنین به دست آوردن وضعیت جدیدی از بلاک چین را شرح دهیم، که از طریق آن مشتری می تواند تأیید کند که تراکنش او پردازش و حساب شده است.
- معامله بر روی مشتری شکل می گیرد
- معامله بر روی مشتری امضا شده است
- مشتری یکی از گره ها را انتخاب کرده و تراکنش خود را به آن ارسال می کند
- مشتری مشترک بهروزرسانیهای پایگاه داده وضعیت گره میشود و منتظر میماند تا نتایج تراکنش آن ظاهر شود
- گره تراکنش را روی شبکه p2p توزیع می کند
- چندین یا یک BP (تولیدکننده بلوک) تراکنش های انباشته شده را پردازش می کند و پایگاه داده ایالتی را به روز می کند
- BP پس از پردازش تعداد مورد نیاز تراکنش، یک بلوک جدید تشکیل می دهد
- BP یک بلوک جدید را روی شبکه p2p توزیع می کند
- بلوک جدید به گره ای که مشتری به آن دسترسی دارد تحویل داده می شود
- گره پایگاه داده وضعیت را به روز می کند
- گره به روز رسانی مربوط به مشتری را می بیند و یک اعلان تراکنش برای او ارسال می کند
حال بیایید نگاهی دقیقتر به این مراحل بیندازیم و مشکلات بالقوه عملکرد در هر مرحله را شرح دهیم. برخلاف سیستم های متمرکز، ما اجرای کد را در کلاینت های شبکه نیز در نظر خواهیم گرفت. اغلب، هنگام اندازه گیری TPS، زمان پردازش تراکنش از گره ها جمع آوری می شود و نه از مشتری - این کاملاً منصفانه نیست. مشتری اهمیتی نمی دهد که گره با چه سرعتی تراکنش خود را پردازش می کند، مهمترین چیز برای او لحظه ای است که اطلاعات قابل اعتماد در مورد این تراکنش موجود در بلاک چین در دسترس او قرار می گیرد. این معیار اساساً زمان اجرای تراکنش است. این بدان معنی است که مشتریان مختلف، حتی با ارسال یک تراکنش، می توانند زمان های کاملا متفاوتی را دریافت کنند که به کانال، بار و نزدیکی گره و غیره بستگی دارد. بنابراین کاملاً ضروری است که این زمان بر روی مشتریان اندازه گیری شود، زیرا این پارامتری است که باید بهینه شود.
آماده سازی معامله در سمت مشتری
بیایید با دو نکته اول شروع کنیم: معامله توسط مشتری تشکیل و امضا می شود. به اندازه کافی عجیب، این می تواند از دیدگاه مشتری نیز گلوگاه عملکرد بلاک چین باشد. این برای سرویس های متمرکز غیرمعمول است، که تمام محاسبات و عملیات را با داده ها به عهده می گیرند و مشتری به سادگی یک درخواست کوتاه آماده می کند که می تواند حجم زیادی از داده ها یا محاسبات را درخواست کند و نتیجه آماده را به دست آورد. در بلاک چین، کد مشتری بیشتر و بیشتر قدرتمند می شود، و هسته بلاک چین بیشتر و سبک تر می شود و معمولاً وظایف محاسباتی عظیم به نرم افزار مشتری منتقل می شود. در بلاک چین، مشتریانی وجود دارند که می توانند یک تراکنش را برای مدت طولانی آماده کنند (من در مورد اثبات های مختلف merkle، اثبات های مختصر، امضاهای آستانه و سایر عملیات پیچیده در سمت مشتری صحبت می کنم). یک مثال خوب از تأیید آسان زنجیره ای و آماده سازی سنگین تراکنش روی مشتری، اثبات عضویت در لیستی بر اساس Merkle-tree است، در اینجا
همچنین فراموش نکنید که کد کلاینت به سادگی تراکنش ها را به بلاکچین ارسال نمی کند، بلکه ابتدا وضعیت بلاک چین را پرس و جو می کند - و این فعالیت می تواند بر ازدحام شبکه و گره های بلاک چین تأثیر بگذارد. بنابراین، هنگام اندازه گیری، منطقی است که رفتار کد مشتری را تا حد امکان به طور کامل تقلید کنیم. حتی اگر در بلاک چین شما مشتریان سبک معمولی وجود داشته باشند که امضای دیجیتالی معمولی را روی سادهترین تراکنش برای انتقال دارایی قرار میدهند، هر سال هنوز محاسبات گستردهتری روی مشتری انجام میشود، الگوریتمهای رمزنگاری قویتر میشوند و این بخش از پردازش میتواند در آینده به یک گلوگاه مهم تبدیل شود. بنابراین مراقب باشید و شرایطی را از دست ندهید که در یک تراکنش به مدت 3.5 ثانیه، 2.5 ثانیه صرف تهیه و امضای تراکنش و 1.0 ثانیه برای ارسال آن به شبکه و منتظر پاسخ می شود. برای ارزیابی خطرات این تنگنا، باید معیارها را از ماشین های مشتری جمع آوری کنید، نه فقط از گره های بلاک چین.
ارسال تراکنش و نظارت بر وضعیت آن
مرحله بعدی ارسال تراکنش به گره بلاک چین انتخابی و دریافت وضعیت پذیرش آن در استخر تراکنش است. این مرحله مشابه یک دسترسی معمولی به پایگاه داده است؛ گره باید تراکنش را در Pool ثبت کند و شروع به توزیع اطلاعات در مورد آن از طریق شبکه p2p کند. رویکرد ارزیابی عملکرد در اینجا مشابه ارزیابی عملکرد میکروسرویسهای Web API سنتی است و خود تراکنشها در بلاک چین میتوانند بهروزرسانی شوند و به طور فعال وضعیت خود را تغییر دهند. به طور کلی، بهروزرسانی اطلاعات تراکنشها در برخی بلاکچینها میتواند چندین بار اتفاق بیفتد، برای مثال هنگام جابجایی بین فورکهای زنجیرهای یا زمانی که BP قصد خود را برای گنجاندن تراکنش در یک بلوک اعلام میکند. محدودیت در اندازه این استخر و تعداد تراکنش ها در آن می تواند بر عملکرد بلاک چین تأثیر بگذارد. اگر مخزن تراکنش به حداکثر اندازه ممکن پر شود، یا در RAM قرار نگیرد، عملکرد شبکه به شدت کاهش می یابد. بلاک چین ها ابزار متمرکزی برای محافظت در برابر سیل پیام های ناخواسته ندارند، و اگر بلاک چین از تراکنش های با حجم بالا و کارمزدهای پایین پشتیبانی کند، این می تواند باعث سرریز شدن مخزن تراکنش شود که یکی دیگر از گلوگاه های عملکرد بالقوه است.
در بلاک چین ها، مشتری تراکنش را به هر گره بلاک چینی که دوست دارد ارسال می کند، هش تراکنش معمولا قبل از ارسال برای مشتری مشخص است، بنابراین تنها کاری که او باید انجام دهد این است که به اتصال دست یابد و پس از انتقال، منتظر تغییر بلاک چین باشد. وضعیت آن، امکان معامله او را فراهم می کند. توجه داشته باشید که با اندازهگیری tps میتوانید نتایج کاملاً متفاوتی را برای روشهای مختلف اتصال به یک گره بلاک چین دریافت کنید. این می تواند یک HTTP RPC معمولی یا یک WebSocket باشد که به شما امکان می دهد الگوی "اشتراک" را پیاده سازی کنید. در حالت دوم، مشتری زودتر یک اعلان دریافت می کند و گره منابع کمتری (عمدتاً حافظه و ترافیک) را برای پاسخ های مربوط به وضعیت تراکنش صرف می کند. بنابراین هنگام اندازه گیری "tps" باید نحوه اتصال کلاینت ها به گره ها را در نظر گرفت. بنابراین، برای ارزیابی ریسکهای این گلوگاه، بلاکچین معیار باید بتواند مشتریان را با درخواستهای WebSocket و HTTP RPC به نسبتهای مربوط به شبکههای واقعی شبیهسازی کند و همچنین ماهیت تراکنشها و اندازه آنها را تغییر دهد.
برای ارزیابی خطرات این تنگنا، شما همچنین باید معیارها را از ماشین های مشتری جمع آوری کنید، نه فقط از گره های بلاک چین.
انتقال تراکنش ها و بلوک ها از طریق شبکه p2p
در بلاک چین ها، شبکه همتا به همتا (p2p) برای انتقال تراکنش ها و بلاک ها بین شرکت کنندگان استفاده می شود. تراکنشها در سراسر شبکه پخش میشوند، از یکی از گرهها شروع میشوند، تا زمانی که به تولیدکنندگان بلوکهای همتا میرسند، که تراکنشها را در بلوکها بستهبندی میکنند و با استفاده از همان p2p، بلوکهای جدید را در تمام گرههای شبکه توزیع میکنند. اساس اکثر شبکه های مدرن p2p تغییرات مختلف پروتکل Kademlia است.
به طور خلاصه، هر همتا در چنین شبکههایی فهرست پویای خود را از همتایان دیگر حفظ میکند که از آن بلوکهایی از اطلاعات را درخواست میکند که توسط محتوا آدرسدهی میشوند. هنگامی که یک همتا درخواستی را دریافت می کند، یا اطلاعات لازم را می دهد یا درخواست را به همتای شبه تصادفی بعدی از لیست ارسال می کند و پس از دریافت پاسخ، آن را به درخواست کننده ارسال می کند و برای مدتی آن را در حافظه پنهان نگه می دارد و این را می دهد. دفعه بعد بلوک اطلاعات زودتر بنابراین، اطلاعات محبوب در تعداد زیادی از حافظه پنهان تعداد زیادی از همتایان به پایان می رسد و اطلاعات نامطلوب به تدریج جایگزین می شوند. همتایان سوابق خود را از اینکه چه کسی چه مقدار اطلاعات را به چه کسی منتقل کرده است نگه میدارد، و شبکه سعی میکند با افزایش رتبهبندیهای آنها و ارائه سطح بالاتری از خدمات، توزیعکنندگان فعال را تحریک کند، و بهطور خودکار شرکتکنندگان غیرفعال را از لیستهای همتا جابجا میکند.
بنابراین، اکنون تراکنش باید در سراسر شبکه توزیع شود تا تولیدکنندگان بلاک بتوانند آن را ببینند و آن را در بلوک قرار دهند. گره به طور فعال یک تراکنش جدید را بین همه "توزیع" می کند و به شبکه گوش می دهد و منتظر بلوکی است که در فهرست آن تراکنش مورد نیاز ظاهر می شود تا به مشتری منتظر اطلاع دهد. مدت زمانی که شبکه طول می کشد تا اطلاعات مربوط به تراکنش ها و بلوک های جدید در شبکه های p2p را به یکدیگر منتقل کند به عوامل بسیار زیادی بستگی دارد: تعداد گره های صادقی که در نزدیکی کار می کنند (از دیدگاه شبکه)، "گرم- از حافظه پنهان این گره ها، اندازه بلوک ها، تراکنش ها، ماهیت تغییرات، جغرافیای شبکه، تعداد گره ها و بسیاری عوامل دیگر. اندازهگیریهای پیچیده معیارهای عملکرد در چنین شبکههایی موضوع پیچیدهای است؛ لازم است به طور همزمان زمان پردازش درخواست را هم در مشتریان و هم برای همتایان (گرههای بلاک چین) ارزیابی کرد. مشکلات در هر یک از مکانیسمهای p2p، حذف و ذخیرهسازی نادرست دادهها، مدیریت ناکارآمد لیستهای همتاهای فعال و بسیاری از عوامل دیگر میتواند باعث تاخیرهایی شود که کارایی کل شبکه را تحت تأثیر قرار میدهد و تحلیل این تنگنا دشوارترین است. ، آزمایش و تفسیر نتایج.
پردازش بلاک چین و به روز رسانی پایگاه داده دولتی
مهمترین بخش بلاک چین، الگوریتم اجماع، کاربرد آن برای بلوک های جدید دریافتی از شبکه و پردازش تراکنش ها با ثبت نتایج در پایگاه داده دولتی است. افزودن یک بلوک جدید به زنجیره و سپس انتخاب زنجیره اصلی باید در سریع ترین زمان ممکن عمل کند. با این حال، در زندگی واقعی، "باید" به معنای "کار می کند" نیست، و برای مثال می توان وضعیتی را تصور کرد که در آن دو زنجیره طولانی رقابتی دائماً بین خود تغییر می کنند و ابرداده هزاران تراکنش در استخر را در هر سوئیچ تغییر می دهند. و به طور مداوم پایگاه داده دولت را به عقب برگرداند. این مرحله از نظر تعریف Bottleneck ساده تر از لایه شبکه p2p است، زیرا اجرای تراکنش و الگوریتم اجماع کاملاً قطعی هستند و اندازه گیری هر چیزی در اینجا آسان تر است.
نکته اصلی این است که تخریب تصادفی در عملکرد این مرحله را با مشکلات شبکه اشتباه نگیرید - گره ها در ارائه بلوک ها و اطلاعات در مورد زنجیره اصلی کندتر هستند و برای یک مشتری خارجی ممکن است شبیه یک شبکه کند به نظر برسد، اگرچه مشکل در این است. یک مکان کاملا متفاوت
برای بهینهسازی عملکرد در این مرحله، جمعآوری و نظارت بر معیارها از خود گرهها، و درج آنهایی که مربوط به بهروزرسانی پایگاه داده وضعیت هستند، مفید است: تعداد بلوکهای پردازش شده روی گره، اندازه آنها، تعداد تراکنشها، تعداد سوئیچ ها بین فورک های زنجیره ای، تعداد بلوک های نامعتبر، زمان کارکرد ماشین مجازی، زمان انجام داده ها و غیره. این از اشتباه گرفتن مشکلات شبکه با خطاهای الگوریتم های پردازش زنجیره ای جلوگیری می کند.
تراکنش های پردازش ماشین مجازی می تواند منبع مفیدی از اطلاعات باشد که می تواند عملکرد بلاک چین را بهینه کند. تعداد تخصیص حافظه، تعداد دستورالعمل های خواندن/نوشتن و سایر معیارهای مربوط به کارایی اجرای کد قرارداد می تواند اطلاعات مفید زیادی را در اختیار توسعه دهندگان قرار دهد. در عین حال، قراردادهای هوشمند برنامه هستند، به این معنی که در تئوری آنها می توانند هر یک از منابع را مصرف کنند: cpu / حافظه / شبکه / ذخیره سازی، بنابراین پردازش تراکنش یک مرحله نسبتا نامشخص است، که علاوه بر این، هنگام جابجایی بین نسخه ها به شدت تغییر می کند. و هنگام تغییر کدهای قرارداد. بنابراین، معیارهای مربوط به پردازش تراکنش نیز برای بهینه سازی موثر عملکرد بلاک چین مورد نیاز است.
دریافت اعلان در مورد گنجاندن تراکنش در بلاکچین توسط مشتری
این مرحله نهایی مشتری بلاک چین است که سرویس را دریافت می کند؛ در مقایسه با سایر مراحل، هزینه های سربار زیادی وجود ندارد، اما هنوز هم ارزش دارد که مشتری یک پاسخ گسترده از گره دریافت کند (به عنوان مثال، یک قرارداد هوشمند). بازگرداندن آرایه ای از داده ها). در هر صورت، این نکته برای کسی که این سوال را مطرح کرده است که "چند tps در بلاک چین شما وجود دارد؟" بسیار مهم است، زیرا در این لحظه زمان دریافت سرویس ثبت می شود.
در این مکان، همیشه یک ارسال تمام زمانی وجود دارد که مشتری باید در انتظار پاسخ از بلاک چین بگذراند؛ این زمان است که کاربر منتظر تایید در برنامه خود می ماند و این بهینه سازی آن است که وظیفه اصلی توسعه دهندگان
نتیجه
در نتیجه، میتوان انواع عملیاتهای انجامشده بر روی بلاکچینها را توصیف کرد و آنها را به چند دسته تقسیم کرد:
- تحولات رمزنگاری، ساخت اثبات
- شبکه های همتا به همتا، تراکنش و تکرار بلوک
- پردازش تراکنش، اجرای قراردادهای هوشمند
- اعمال تغییرات در بلاک چین در پایگاه داده دولتی، به روز رسانی داده ها در مورد تراکنش ها و بلوک ها
- درخواست های فقط خواندنی برای وضعیت پایگاه داده، API گره بلاک چین، خدمات اشتراک
به طور کلی، الزامات فنی برای گره های بلاک چین مدرن بسیار جدی است - پردازنده های سریع برای رمزنگاری، مقدار زیادی رم برای ذخیره و دسترسی سریع به پایگاه داده وضعیت، تعامل شبکه با استفاده از تعداد زیادی اتصال باز به طور همزمان و فضای ذخیره سازی بزرگ. چنین الزامات بالا و فراوانی انواع مختلف عملیات ناگزیر به این واقعیت منجر می شود که گره ها ممکن است منابع کافی نداشته باشند و سپس هر یک از مراحل مورد بحث در بالا می تواند به گلوگاه دیگری برای عملکرد کلی شبکه تبدیل شود.
هنگام طراحی و ارزیابی عملکرد بلاک چین، باید همه این نکات را در نظر بگیرید. برای انجام این کار، شما باید معیارها را به طور همزمان از مشتریان و گره های شبکه جمع آوری و تجزیه و تحلیل کنید، به دنبال همبستگی بین آنها باشید، زمان لازم برای ارائه خدمات به مشتریان را تخمین بزنید، تمام منابع اصلی را در نظر بگیرید: cpu / حافظه / شبکه / ذخیره سازی ، نحوه استفاده و تأثیر آنها بر یکدیگر را درک کنید. همه اینها باعث میشود که مقایسه سرعت بلاکچینهای مختلف در قالب «چند TPS» یک کار بسیار بیتفاوت باشد، زیرا تعداد زیادی پیکربندی و حالتهای مختلف وجود دارد. در سیستمهای متمرکز بزرگ، خوشههایی متشکل از صدها سرور، این مشکلات نیز پیچیده هستند و همچنین مستلزم جمعآوری تعداد زیادی معیار مختلف هستند، اما در بلاک چینها به دلیل شبکههای p2p، قراردادهای پردازش ماشینهای مجازی، اقتصاد داخلی، تعداد درجهها آزادی بسیار بیشتر است، که باعث می شود تست حتی در چندین سرور انجام شود، غیر شاخص است و فقط مقادیر بسیار تقریبی را نشان می دهد که تقریباً هیچ ارتباطی با واقعیت ندارند.
بنابراین، هنگام توسعه در هسته بلاک چین، برای ارزیابی عملکرد و پاسخ به این سوال "آیا نسبت به دفعه قبل بهبود یافته است؟" از نرم افزار کاملا پیچیده ای استفاده می کنیم که راه اندازی یک بلاک چین را با ده ها گره هماهنگ می کند و به طور خودکار یک معیار راه اندازی می کند و معیارها را جمع آوری می کند. بدون این اطلاعات، اشکال زدایی پروتکل هایی که با چندین شرکت کننده کار می کنند بسیار دشوار است.
بنابراین، هنگامی که سؤال "چند TPS در بلاک چین شما وجود دارد؟" را دریافت کردید، به طرف مقابلتان چای بدهید و از او بپرسید که آیا او آماده است تا به ده ها نمودار نگاه کند و همچنین به هر سه جعبه مشکلات عملکرد بلاک چین و پیشنهادات شما گوش دهد. حل کردن آنها ...
منبع: www.habr.com