در صورت تمایل به آموزش برنامه نویسی بلاک چین پکیج آموزش برنامه نویسی بلاک چین را ملاحظه نمایید.
در این مقاله به معرفی Hyperledger Caliper که ابزاری برای اندازه گیری عملکرد بلاک چین مب باشد می پردازیم.
فناوری بلاک چین روز به روز توجه بیشتری را به خود جلب می کند، اما هیچ راهی وجود ندارد که بتوانید عملکرد پلتفرم های مختلف بلاک چین را قبل از ایجاد راه حل برای مشکل کسب و کار خود آزمایش کنید. برای در نظر گرفتن این موضوع، جامعه Hyperledger ابزاری به نام Hyperledger Caliper ارائه کرده است که می تواند برای اندازه گیری عملکرد بلاک چین استفاده شود.
Hyperledger Caliper چیست؟
Caliper یک چارچوب معیار عملکرد بلاک چین است که به کاربران اجازه می دهد راه حل های مختلف بلاک چین را با موارد استفاده از پیش تعریف شده آزمایش کنند و مجموعه ای از نتایج تست عملکرد را دریافت کنند.
شاخص های عملکرد پشتیبانی شده
میزان موفقیت
تراکنش/خواندن ورودی
تاخیر تراکنش/خواندن (حداقل، حداکثر، متوسط، صدک)
مصرف منابع (CPU، حافظه، IO شبکه،…..)
معماری
Adaptation Layer
Adaptation Layer برای ادغام سیستم بلاک چین موجود در چارچوب Caliper استفاده میشود. هر آداپتور NBI Blockchain Caliper را با استفاده از SDK بومی بلاک چین یا RESTful API پیادهسازی میکند.
Interface و Core Layer
لایه Interface & Core توابع اصلی را پیاده سازی می کند و رابط های محدود شمال را برای برنامه های کاربردی بالا فراهم می کند. چهار نوع NBI ارائه شده است:
- Blockchain operating interfaces ( رابط های عملیاتی بلاک چین): شامل عملیات هایی مانند استقرار قراردادهای هوشمند در بلاک چین باطن، فراخوانی قراردادها، درخواست وضعیت ها از دفتر کل و غیره است.
- Resource Monitor ( مانیتور منابع): شامل عملیاتی برای راهاندازی/توقف یک مانیتور و واکشی وضعیت مصرف منابع سیستم بلاکچین پشتیبان، از جمله CPU، حافظه، IO شبکه و غیره است. دو نوع مانیتور در حال حاضر ارائه شده است، یکی تماشای کانتینر محلی/ریموت docker و دیگری تماشای فرآیندهای محلی است.
- Performance Analyzer (تجزیه و تحلیل عملکرد): شامل عملیات برای خواندن آمار عملکرد از پیش تعریف شده (شامل TPS، تاخیر، نسبت موفقیت و غیره) و چاپ نتایج معیار است. معیارهای کلیدی هنگام فراخوانی NBI های بلاک چین ثبت می شوند، به عنوان مثال. زمان ایجاد شده و زمان تعهد معامله، نتیجه معامله و غیره
- Report Generator: شامل عملیاتی برای تولید گزارش تست فرمت HTML است
Application Layer
لایه برنامه شامل تست های پیاده سازی شده برای سناریوهای بلاک چین معمولی است. هر آزمایش دارای یک فایل پیکربندی است که شبکه بلاک چین باطن را تعریف می کند و آرگومان های آزمایشی را مشخص می کند.
یک موتور بنچمارک پیشفرض برای کمک به توسعهدهندگان برای درک چارچوب و اجرای سریع تست خود پیادهسازی شده است. توسعه دهندگان می توانند مستقیماً از NBI برای اجرای آزمایش خود بدون چارچوب استفاده کنند.
Benchmark Engine
Master
Master یک جریان تست پیش فرض را اجرا می کند که شامل سه مرحله است:
1. مرحله آماده سازی
در این مرحله، استاد یک شی بلاک چین داخلی را با فایل پیکربندی بلاک چین ایجاد و مقداردهی اولیه می کند، قراردادهای هوشمند را همانطور که در پیکربندی مشخص شده است مستقر می کند و یک شی مانیتور را برای نظارت بر مصرف منابع سیستم بلاک چین باطن راه اندازی می کند.
2. مرحله تست
Master یک حلقه را برای انجام آزمایشات مطابق با فایل پیکربندی معیار راه اندازی می کند. وظایف با توجه به حجم کاری تعریف شده تولید و به مشتریان اختصاص داده می شود. بازگشت آمار عملکرد توسط مشتریان برای تجزیه و تحلیل بعدی ذخیره می شود.
3. مرحله گزارش
آمار تمام مشتریان هر دور آزمون تجزیه و تحلیل می شود و یک گزارش با فرمت HTML به صورت خودکار تولید می شود.
مشتریان
از جمله مشتریان عبارتند از:
مشتریان محلی
در این حالت، Master از ماژول کلاستر Node.js برای جدا کردن چندین مشتری محلی برای انجام آزمایش واقعی استفاده می کند.
مشتریان zookeeper
در این حالت، چندین مشتری zookeeper به طور مستقل راه اندازی می شوند. مشتری zookeeper پس از راهاندازی، خود را ثبت میکند و کارهای آزمایشی را تماشا میکند. پس از آزمایش، یک znode که حاوی نتایج آمار عملکرد است ایجاد می شود.
فرمت گزارش نمونه Caliper
Configuration File ( فایل پیکربندی)
دو نوع فایل پیکربندی استفاده می شود. یکی فایل پیکربندی بنچمارک است که معیار را به عنوان حجم کار تعریف می کند.
مورد دیگر فایل پیکربندی بلاک چین است که اطلاعات لازم را برای کمک به تعامل با SUT مشخص می کند.
در زیر یک نمونه فایل پیکربندی معیار آورده شده است:
{
// blockchain defines the type of backend blockchain system and the configuration file for the adaptor to recognize the backend blockchain network with which to interact.
"blockchain": {
"type": "fabric",
"config": "./fabric.json"
},
//defines commands which will be called at particular phases of the test
"command" : {
"start": "docker-compose -f ../../network/fabric/simplenetwork/docker-compose.yaml up -d",
"end" : "docker-compose -f ../../network/fabric/simplenetwork/docker-compose.yaml down;docker rm $(docker ps -aq)"
},
// defines the metadata of the test, as well as multiple test rounds with specified workload
"test": {
"name": "simple",
"description" : "This is an example benchmark for caliper",
"clients": {
"type": "local",
"number": 5
},
"rounds": [{
"label" : "open",
"txNumber" : [5000, 5000, 5000],
"rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 100}}, {"type": "fixed-rate", "opts": {"tps" : 200}}, {"type": "fixed-rate", "opts": {"tps" : 300}}],
"arguments": { "money": 10000 },
"callback" : "benchmark/simple/open.js"
},
{
"label" : "query",
"txNumber" : [5000, 5000],
"rateControl" : [{"type": "fixed-rate", "opts": {"tps" : 300}}, {"type": "fixed-rate", "opts": {"tps" : 400}}],
"callback" : "benchmark/simple/query.js"
}]
},
// defines the type of resource monitors and monitored objects, as well as the time interval for the monitoring.
"monitor": {
"type": ["docker", "process"],
"docker":{
"name": ["peer0.org1.example.com", "http://192.168.1.100:2375/orderer.example.com"]
},
"process": [
{
"command" : "node",
"arguments" : "local-client.js",
"multiOutput" : "avg"
}
],
"interval": 1
}
}
پیش نیازها:
مطمئن شوید که ابزارهای زیر نصب شده اند.”
NodeJS 8.X
گره gyp
داکر
Docker-compose
git clone https://github.com/hyperledger/caliper.git
npm install را در پوشه caliber اجرا کنید تا وابستگی ها را به صورت محلی نصب کنید.
SDK های بلاک چین را نصب کنید
Fabic
اجرا npm نصب grpc@1.10.1 fabric-ca-client fabric-client در پوشه root
Sawtooth
نصب وابستگی ها:
npm نصب پروتکل- buffers
با استفاده از مخزن، sdk جاوا اسکریپت sawtooth را نصب کنید
npm را اجرا کنید sawtooth-sdk را در پوشه ریشه نصب کنید
Iroha
کتابخانه Iroha را نصب کنید
npm نصب -no-save iroha-lib@0.1.7 در پوشه ریشه Caliper
Composer
وابستگی ها را نصب کنید
فایل اصلی package.json را بهروزرسانی کنید تا ماژولهای Compsoer و Fabic مورد نیاز را شامل شود و متعاقباً نصب npm را اجرا کنید.
اجرای معیار
تمام معیارهای از پیش تعریف شده را می توان در پوشه benchmark یافت.
برای شروع benchmark خود، فقط این را در پوشه root اجرا کنید
node benchmark/simple/main.js -c yourconfig.json -n yournetwork.json
-c : فایل پیکربندی معیار را مشخص کنید، در صورت عدم استفاده از config.json به عنوان پیش فرض استفاده می شود.
-n: فایل پیکربندی شبکه بلاک چین تحت آزمایش را مشخص کنید. در صورت عدم استفاده، آدرس فایل باید در فایل پیکربندی معیار مشخص شود.
توجه داشته باشید:
همچنین می توانید از اسکریپت های npm برای اجرای benchmark استفاده کنید.
لیست اجرا npm
> caliper@0.1.0 list /home/hurf/caliper
> node ./scripts/list.js
معیارهای موجود:
drm
ساده
یک benchmark با فایل های پیکربندی خاص اجرا کنید:
npm test — — simple -c ./benchmark/simple/config.json -n ./benchmark/simple/fabric.json
> caliper@0.1.0 test /home/hurf/caliper
> node ./scripts/test.js "simple" "-c" "./benchmark/simple/config.json" "-n" "./benchmark/simple/fabric.json"
......
اجرای معیار با مشتریان توزیع شده
1. سرویس ZooKeeper را راه اندازی کنید
2. با اجرای node ./src/comm/client/zoo-client.js zookeeper-server یا npm startclient — — zookeeper-server کلاینت ها را بر روی ماشین های هدف به طور جداگانه راه اندازی کنید.
به عنوان مثال،
$ npm startclient را اجرا کنید — 10.229.42.159:2181
> caliper@0.1.0 startclient /home/hurf/caliper
> node ./src/comm/client/zoo-client.js "10.229.42.159:2181"
Connected to ZooKeeper
Created client node:/caliper/clients/client_1514532063571_0000000006
Created receiving queue at:/caliper/client_1514532063571_0000000006_in
Created sending queue at:/caliper/client_1514532063571_0000000006_out
Waiting for messages at:/caliper/client_1514532063571_0000000006_in......
3. تنظیمات نوع کلاینت را در فایل پیکربندی به zookeeper تغییر دهید
به عنوان مثال،
"clients": {
"type": "zookeeper",
"zoo" : {
"server": "10.229.42.159:2181",
"clientsPerHost": 5
}
}
4. معیار را روی هر دستگاهی به طور معمول راه اندازی کنید.
توجه داشته باشید:
Zookeeper برای ثبت نام مشتریان و تبادل پیام استفاده می شود. یک کلاینت راه اندازی شده یک znode جدید در زیر /caliber/clients/ اضافه می کند. benchmark دایرکتوری را بررسی می کند تا بفهمد چه تعداد مشتری وجود دارد و وظایفی را برای هر مشتری با توجه به حجم کاری تعیین می کند.
هیچ هماهنگ سازی زمانی خودکار بین مشتریان وجود ندارد. شما باید به صورت دستی زمان را بین ماشین های هدف همگام کنید، برای مثال با استفاده از ‘ntpdate’.
فایل پیکربندی بلاک چین باید در ماشین هایی که کلاینت را اجرا می کنند وجود داشته باشد و مسیر نسبی (نسبت به پوشه کولیس) فایل باید یکسان باشد. تمام فایل های ارجاع شده در پیکربندی نیز باید وجود داشته باشند.
پیشنهاد مطالعه: آموزش هایپرلجر فابریک قسمت 1 و آموزش هایپرلجر فابریک قسمت 2
benchmakrs خود را بنویسید
Caliper مجموعهای از nodejs NBI (رابطهای کران شمالی) را برای برنامههای کاربردی برای تعامل با سیستم بلاک چین فراهم میکند. src/comm/blockchain.js را بررسی کنید تا در مورد NBI اطلاعات کسب کنید.
آداپتورهای متعددی برای ترجمه NBI به پروتکلهای زنجیره بلوکی مختلف پیادهسازی میشوند. بنابراین توسعه دهندگان می توانند یک بار یک بنچمارک بنویسند و آن را با سیستم های مختلف بلاک چین اجرا کنند.
به طور کلی، برای نوشتن یک معیار کالیبر جدید، باید:
برای سیستم هایی که می خواهید آزمایش کنید قراردادهای هوشمند بنویسید
یک جریان آزمایشی با استفاده از NBI های کالیبر بنویسید. Caliper یک موتور معیار پیشفرض را ارائه میکند که قابل اتصال و تنظیم است تا آزمایشهای جدید را به راحتی ادغام کند.