IPFS-InterPlanetary File System ; فایل سیستم بین سیاره ای

فایل سیستم بین سیاره ای یا IPFS چیست ؟!فرض کنید که شما یک سری فایل رو باید از یک سرور که توی آمریکا هست دانلود کنید ، ترافیک شما باید از چندین هاب رد بشه تا به شما برسه این باعث میشه که سرعت شما تا حد امکان پایین بیاد و همچنین ترافیک زیادی مصرف میشه تا به شما برسه مثلا اگه فایل شما یک فایل ویدیویی با حجم 100 مگابایت باشه و ترافیک شما از 8 هاب عبور کنه (8 * 100) ترافیک استفاده شده تا خود شما 800 مگابایت میشه و اگه این فایل رو 5 نفر دیگه هم از سرور دانلود کنند (5 * 800) ترافیک استفاده شده 4000 مگابایت میشه !! پس راه حل چیه ؟ ما هم سرعت بیشتر نیاز داریم و هم باید مصرف ترافیک کمتر بشه ؛اینجا CDN ها وارد شدن CDN سروری هست که توی سرتا سرتا جهان قرار دادن تا کاربران به محتوای مورد نیازشون با سرعت بیشتری دست پیدا کنند ، یعنی فرض کنید همین سایت ویرگول به جای این که سرورهاش فقط توی ایران باشن ، توی کشور های دیگه مثل آمریکا ، آلمان ، فرانسه و ژاپن هم باشن این طوری وقتی کسی توی آمریکا صفحه ای از ویرگول باز میکنه ، سریعا اون صفحه باز میشه چون نیاز نیست اطلاعات از سرورهای ایران تا کلاینت توی آمریکا برن ؛ این کار همون Decentralized یا غیر متمرکز کردن شبکه هستمسیر ارتباط من تا سایت ویرگولشبکه توزیع شده ، شبکه غیر متمرکز ، شبکه متمرکزخوب اما IPFS و Distributed کردن محتوا مشکل فقط به سرعت و ترافیک مصرف شده نیست بلکه مشکلاتی هست که خود آدم ها به وجود میارن مثل ساسنوری که خود دولت ها برای دسترسی کاربران به محتوای مورد نظرشون ایجاد میکنند ، برای مثال کشور خودمون توی ماه آبان سال 98 برای تقریبا یک هفته دسترسی مارو به اینترنت قطع کرد !! و یا سایت های بلاک شده نمونه از این دست مشکل هستند، و یا مشکلات امنیتی مثل حمله MITM و یا sniff شدن داده ها.When We Use Networkراه حل این مشکلات فقط توزیع کردن محتوا نیست بلکه نیاز به پروتکل هایی برای Encryption , Naming , Routing و . . . داریم ؛خوب همه این کار هارو IPFS انجام میده . هم رمزنگاری میکنه ، و هم با پروتکل IPNS یک چیزی مثل دامین رو براتون فراهم میکنه . شما برای استفاده از وب از پروتکل HTTP استفاده میکنید تا دیتا به دست شما برسه , IPFS هم جای پروتکل HTTP شما رو میگیره تا دیتا رو به شما برسونه یعنی به جای یک سرور شما دیتا رو از سیستم هایی که دیتا رو کامل دارند دانلود میکنید ، در HTTP شما برای دریافت یک محتوا از آدرس استفاده میکنید اما IPFS از خود همون محتوا برای دسترسی به دیتا استفاده میکنه یعنی به جای آدرس شما یک HASH از اون دیتا رو در اختیار دارید که کار همون آدرس رو میکنه یعنی دقیقا شما دنبال خود محتوا میروید تا سرور ؛ و همچنین پیدا میکنید که کدام سرور یا کلاینت محتوا رو داره ؛ اینم بگم که هش فایل از جمع چندین هش دیگه درست میشه مثلا SHA256 و SHA1 که به هش نهایی درست شده CID میگن .در IPFS یک قانوی هست که میگه : من با Peer های Peer خودم هم Peer میشم ! این یعنی مثلا من با یک نفر Peer شدم که خودش 10 عدد Peer دیگه داره این طوری من با Peer های اونم Peer میشم (امید وارم این جمله سخت رو خوب گفته باشم ) ؛برای اجرا شدن این قانون چندتا Bootstrap وجود داره که مارو به بقیه متصل میکنه.خوب فرض کنید شما یک محتوایی رو درخواست میکنید ، IPFS از Peer ها میپرسه که این دیتا کجاست و هر Peer که نزدیک تر باشه به شما ، شما محتوا رو ازش دانلود میکنید ؛ و یک چیز خیلی جالبی که داره حالت Mesh هست که درواقع دیتایی که شما دارید به یک Node ارسال میشه و از یک Node دیگه دریافت میشه البته این ماژول ها هنوز کاملا پیاده سازی نشده و به صورت پیش فرص در IPFS فعال نیست و درصورتی کار میکنه که خودتون Node رو تنظم کنید ؛ البته بیشتر به Proxy شبیه هستاین تصویر عملکرد Mesh رو نمایش میدهیکی از جالب ترین کار هایی که IPFS میکنه اینه که شما میتونید فایلتون رو روی پروتکل HTTP هم مشاهده کنید ، درسته که فایل توی شبکه IPFS هست ولی IPFS این اجازه رو میده که بدون داشتن کلاینت خود IPFS هم بتونید از محتوا استفاده کنید ، مثل این لینک : https://ipfs.io/ipfs/QmNejhr4gWKGA7bNW94BaoEtXFxFjhp6mjNh7Tpxmm8kG3این لینک همیشه در دسترس هست هم از طریق IPFS و هم از HTTP ، من برای آپلود این فایل به جای استفاده از خود IPFS از سایت pinata.cloud استفاده کردم این سایت تا الان فایل های با حجم 1 گیگ رو رایگان توی شبکه IPFS قرار میده ، برای دسترسی به محتوای لینک از طریق خود IPFS فقط کافیه هش رو داخل برنامه IPFS کپی کنید QmNejhr4gWKGA7bNW94BaoEtXFxFjhp6mjNh7Tpxmm8kG3ممنون که این پست رو مطالعه کردین ، امیدوارم که به خوبی مسئله رو توضیح داده باشم اگه جایی متوجه خطای من شدین ، لطف میکنید اگه کامنت کیند :) ممنون میشم اگه نظربدین :)