برنامه نویسی توزیع شده

سیستم های توزیع شده چیست ؟ تعریف، انواع و مزایا به زبان ساده فرادرس مجله‌

این الگوهای تک گره‌ای شامل چند محفظه شدیدا به هم وابسته هستند که روی یک ماشین میزبان اجرا میشوند. پس از سالها استفاده از برنامه نویسی شی‌گرا، الگوهای طراحی ظهور کردند و مستند شدند. این الگوها برخی از مسائل و مشکلات رایج در برنامه نویسی را طبقه‌بندی و مشخص کردند و رویکردهای کلی برای حل آنها ارائه دادند. چون به برنامه نویسان کم تجربه تر امکان نوشتن کدهای بهتر و خوش ساخت‌تر را میدادند و توسعه کتابخانه های قابل استفاده مجدد را ممکن میکردند که با استفاده از آنهای کدهای قابل اتکاتر، سریعتر تولید می‌شدند. تشخیص مشکلات عملکرد و اشکال زدایی در یک سیستم توزیع شده به دلیل ماهیت توزیع شده ذاتی اجزای پیچیده است.

توی اولین صفحه، حتماً گزینه Add Python to PATH رو فعال کن (خیلی مهمه!). بعد از اون، گزینه Install Now رو بزن و منتظر باش تا فرآیند نصب کامل بشه. اگه با تایپ دستور بالا پیامی مثل “Python is not recognized” دریافت کردی، یعنی پایتون روی سیستم‌ت نصب نیست یا مسیر (PATH) اون درست تنظیم نشده. در معماری مبتنی بر رویداد، فرآیندها از طریق پخش رویدادها ارتباط برقرار میکنند که به طور اختیاری داده ها را نیز حمل میکنند. معماری های مرکز داده ها بر اساس این ایده تکامل یافته اند که فرآیندها از طریق یک مخزن (فعال یا غیرفعال) مشترک ارتباط برقرار میکنند. این نظر، با معماری سرویس گرا که در آن، سایت ها دستیابی به لایه های مختلف را از طریق مجموعه ای از وب سرویس ها پیشنهاد میکنند، قوت پیدا کرد.

تعامل بین این اجزای چالش های مربوط به هماهنگی، ثبات داده ها و کارایی ارتباطات را معرفی می‌کند. به طور خلاصه، استفاده از هوش مصنوعی در میکروسرویس‌ ها اهمیت زیادی دارد زیرا باعث افزایش قدرت تصمیم‌ گیری، بهبود امنیت، بهبود تجربه کاربری، اتوماسیون و خودکارسازی و پیشرفت تحقیقات و توسعه در حوزه میکروسرویس‌ ها می ‌شود. اولین نمونه از «سیستم‌های توزیع شده»، به دهه ۵۰ (۷۰ میلادی)، یعنی همزمان با پیدایش «اِتِرنت» (Ethernet) و ظهور «شبکه‌های محلی» (Local Area Networks) باز می‌گردد. برای نخستین بار بود که کامپیوترها می‌توانستند تا پیام‌هایی را به دیگر سیستم‌ها به‌واسطه «آدرس آی‌پی» (IP address) محلی، ارسال کنند. شبکه‌های «نظیر به نظیر» (Peer-to-peer | P2P)، توسعه و تکامل یافتند و «پست الکترونیکی» (E-mail) و به‌دنبال آن «اینترنت»، همان‌طور که با آن آشنا هستیم، همچنان بزرگترین و نمونه رو به رشد سیستم‌های توزیع شده است.

علاوه بر این، اگر یکی از سرورها دچار مشکل شود، بخش‌های دیگر فروشگاه همچنان فعال و قادر به ادامه کار خواهند بود. گرچه این واسط مفید است، یک واسط غنی تر می‌تواند منفعت بیشتری به توسعه‌دهندگان و اپراتورها بدهد. با پشتیبانی از وب سرورهای HTTP در تقریبا تمام زبانهای مدرن برنامه نویسی و پشتیبانی وسیع برای فرمت داده‌هایی شبیه json ، بسیار ساده خواهد بود که یک api مدیریتی بر مبنای http داشته باشیم. این واسط می‌تواند با داشتن محفظه ای که به اضافه کارکردهای اصلی خود، یک وب سرور درونی هم داشته باشد، پیاده سازی شود. در اواخر دهه ۸۰ و اوایل دهه ۹۰، برنامه‌نویسی شی‌گرا، توسعه نرم افزار را به کلی متحول کرد و باعث فراگیر شدن رویکرد ساخت برنامه ها به شکل مجموعه ای از مولفه های مستقل از هم شد.

علاوه بر این، لایه اتصال شامل پروتکل های امنیتی برای احراز هویت (Authentication) کاربران و منابع است. لایه اتصال (Connectivity Layer)، شامل پروتکل های ارتباطی برای پشتیبانی از تراکنش های شبکه ای است که بهره وری از چندین منبع را ممکن میسازد. به عنوان مثال، پروتکل ها نیاز به انتقال داده ها بین منابع، یا دستیابی به منابع از مکان راه دور دارند. در این مقاله تلاش شده با بهره‌گیری از روش کمی خوشه‌بندی میانگین فازی، روش کیفی تحلیل گفتمان را به روشی آمیخته (کیفی- کمی) توسعه داد. بدین منظور تعاملات نهادی سیاست‌گذاری علم و فناوری در ایران به عنوان یک مطالعۀ موردی بررسی شده است.

سیستم توزیع شده باز، سیستمی است که سرویس را بر اساس قوانین استانداردی ارائه میکند که نحو (Syntax) و معنای آن سرویس ها را توصیف میکند. البته سعی میکنیم در آینده و در صورت نیاز کاربران این موضوع را نیز به طور کامل و مفصل مورد بررسی قرار دهیم. برای بررسی کلی این موضوع می بایست در ابتدا بررسی کنیم که چه نوع شفافیت هایی در سیستم توزیع شده وجود دارد و پس از آن بایستی به این پرسش عمومی بپردازیم که آیا همیشه نیاز به شفافیت وجود دارد یا خیر. دو مولفه اصلی در سیستم فایل های توزیع شده  Location Transparency و Redundancy است. با وجود این دو، اگر خرابی پیش آید به راحتی دسترسی به دیتاها فراهم می‌شود.

با استفاده از فریمورک‌ های جاوا مانند Spring Boot، می ‌توانید به راحتی سرویس ‌های جاوا را به صورت میکروسرویس طراحی و پیاده ‌سازی کنید. برنامه‌های کاربردی رایج، معمولاً از پایگاه داده توزیع شده استفاده می‌کنند و باید از ماهیت «همگن» (Homogenous) یا «ناهمگن» (Heterogenous) بودن سیستم پایگاه داده توزیع شده، آگاهی داشته باشند. در «پایگاه داده توزیع شده همگن»، تمام سیستم‌ها، شامل «سیستم مدیریت پایگاه داده» (Database Management System | DBMS) و «مدل داده‌ای» یکسانی هستند. مدیریت و بهبود عملکرد این نوع سیستم‌ها، با افزودن گره‌ها و «مکان‌های» (Locations) جدید فرایند ساده‌تری دارد. در مقابل، «پایگاه داده توزیع شده ناهمگن»، امکانِ وجود مدل‌های داده‌ای متعدد و DBMS گوناگون را فراهم می‌کند.

پیاده‌سازی و مدیریت سیستم‌های توزیع شده پیچیده‌تر از سیستم‌های متمرکزه. باید به هماهنگی بین کامپیوترهای مختلف توجه کنی و مطمئن بشی که همه چیز به درستی کار می‌کنه. فرض کن یه اپلیکیشن داری که کاربران زیادی داره و باید داده‌های زیادی رو ذخیره کنه. به جای اینکه همه داده‌ها رو روی یه سرور ذخیره کنی و نگران پر شدن ظرفیت اون باشی، می‌تونی از سیستم‌های توزیع شده استفاده کنی و داده‌ها رو بین چندین سرور تقسیم کنی. این کار باعث می‌شه تا اگه یکی از سرورها خراب شد، داده‌ها روی بقیه سرورها موجود باشه و مشکلی پیش نیاد. دنیای تکنولوژی به این سرعت و پیشرفت نمی‌رسید و احتمالاً هنوز درگیر حل مشکلات ساده و ابتدایی بودیم.

«هوش مصنوعی» توزیع شده، راهی برای بهره‌مندی از «پردازش موازی» و «قدرت محاسباتی» در مقیاس بزرگ، برای یادگیری و پردازش دیتاست‌های بسیار بزرگ با به‌کارگیری چندین سیستم مستقل، محسوب می‌شود. سیستم‌های توزیع‌شده کنونی، به‌نحوی تکامل یافته‌اند که شامل فرآیندهای مستقلی باشند. فرایندهایی‌که ممکن است روی یک کامپیوتر (از نظر فیزیکی) اجرا شوند، اما با تبادل پیام، با یکدیگر تعامل داشته باشند. سیستم های توزیع شده را می‌توان به‌عنوان «مجموعه‌ای از کامپیوترها» در نظر گرفت که با هم کار می‌کنند تا از دید کاربر نهایی به‌عنوان یک کامپیوتر به نظر بیایند. تمامی دستگاه‌های توزیع شده دارای «وضعیتی مشترک» (Shared State) هستند و به‌صورت همزمان کار می‌کنند. در صورت خرابی هر کدام از این دستگاه‌ها، آسیبی متوجه کل سیستم نمی‌شود که اصطلاحاً به آن «Fail Independently» می‌گویند.

به عنوان مثال، در یک سیستم پستی، با عمل های ساده و پایه ای ارسال، دریافت و باز ارسال مواجه هستیم؛ اما در یک سیستم حسابداری ممکن است عمل های پایه ای کاملا متفاوتی به چشم بخورد. در عمل، عملیات روی پایگاه داده معمولاً در قالب تراکنش (Transaction) انجام میشود. ایده اصلی آن بود که یا تمام درخواست ها اجرا شود و یا هیچ یک از آنها. این آموزش بیش از ۳ سال قبل ارسال شده و اکنون در لیست به‌روزرسانی‌های سایت قرار دارد. اگر پیشنهاد یا انتقادی برای بهبود آموزش دارید، خوشحال می‌شیم به ما اطلاع بدهید.

بله، در این دوره مفاهیم امنیتی مرتبط با میکروسرویس‌ها مانند احراز هویت، کنترل دسترسی و جلوگیری از نفوذ آموزش داده می‌شود. اگر در طول دوره Microservice به مشکل برخورد کنم چه کاری باید انجام دهم؟ می‌توانید با تیم پشتیبانی خانه لینوکس ایران تماس بگیرید تا راهنمایی‌های لازم را دریافت کنید. آیا دوره Microservice شامل آزمون‌های عملیاتی و پروژه های تمرینی است؟ بله، آزمون‌های عملیاتی در طول دوره میکروسرویس برای سنجش پیشرفت شما وجود دارد. در این بخش می‌خواهیم برخی از پرسش‌های متداول در مورد «سیستم‌های توزیع شده» را به‌همراه پاسخ‌های متناظرشان، با هم مرور کنیم. در ادامه، برخی از موارد استفاده از سیستم های توزیع شده را فهرست کرده‌ایم. شبکه‌های تلفنی و «تلفن‌همراه» نیز نمونه‌هایی از شبکه‌های توزیع شده محسوب می‌شوند.

در معماری «۳ لایه» (Three-tier)، نیازی نیست که کلاینت‌ها، هوشمندی خاصی داشته باشند و برای انجام پردازش و تصمیم‌گیری می‌توانند به لایه‌ای میانی متکی باشند. لایه میانی را می‌توان عاملی نامید که «درخواست‌هایی» (Requests) را از کلاینت دریافت، داده‌ها را پردازش و سپس آن را به سرورها ارسال می‌کند. لازم به ذکر است که این درخواست‌ها می‌توانند «بدون حالت» (Stateless) باشند. برای درک بهتر این موضوع، انواع معماری سیستم‌های توزیع‌شده به‌همراه مزایا و معایب هر یک را در ادامه، بیان کرده‌ایم. سیستم‌های «بلادرنگ» (Real-Time) توزیع‌شده (هم به‌صورت محلی و هم به‌صورت سراسری)، به‌وسیله صنایع متعدد و گوناگونی مورد استفاده قرار می‌گیرند.

اما سؤال اصلی این است که آموزش برنامه نویسی را از کجا باید شروع کنیم ؟ این مقاله به شما کمک می‌کند تا مسیر شروع برنامه‌نویسی را پیدا کنید و ابزارها و زبان‌های مناسب را بشناسید. یک راه جایگزین برای اتصال کتابخانه انتخاب رهبر به برنامه، استفاده از محفظه انتخاب رهبر است. مجموعه‌ای از محفظه های انتخاب رهبر هر کدام با یک نسخه از برنامه که نیاز به انتخاب رهبر دارد، متصل است و می‌توانند از بین خودشان رهبر انتخاب کنند. می‌توانند یک API ساده HTTP روی ماشین محلی برای هر محفظه برنامه کاربردی که نیاز به انتخاب رهبر دارد ارائه دهند (مثلا becomeLeader ,renewLeadership …). مقیاس پذیری یک نگرانی اساسی در سیستم های توزیع شده در مقیاس بزرگ است و توسعه دهندگان اغلب با انتخاب بین مقیاس افقی و عمودی روبرو هستند. مقیاس افقی شامل اضافه کردن ماشین های بیشتر به یک سیستم توزیع شده است، در حالی که مقیاس عمودی شامل افزایش ظرفیت ماشین های موجود است.

بدون سیستم‌های توزیع شده، شرکت‌های بزرگ مثل گوگل و فیس‌بوک نمی‌تونستن به این سرعت و کارایی که الان دارن برسن. مثلاً گوگل با استفاده از سیستم‌های توزیع شده، می‌تونه میلیاردها جستجو رو در چند ثانیه انجام بده و نتایج دقیقی رو به کاربران نمایش بده. بدون این سیستم‌ها، مدیریت این حجم از داده‌ها و درخواست‌ها تقریباً غیرممکن بود. هدف این مقاله اینه که بهت کمک کنه بدون هیچ‌گونه پیچیدگی، پایتون رو نصب کنی و به راحتی وارد دنیای برنامه‌نویسی بشی. پس اگه دنبال یه راهنمای نصب پایتون ساده و سریع هستی، این مقاله دقیقاً همون چیزیه که دنبالش بودی. میتوان گفت که برای سیستم های توزیع شده، این معماری به اندازه معماری های لایه این و مبتنی بر شیء اهمیت دارد.

این مشکلات می‌توانند دلایل مختلفی داشته باشند و برای هر سیستم‌عامل متفاوت باشند. Termux یک ترمینال شبیه‌سازی‌شده برای اندروید است که به شما اجازه می‌دهد محیط لینوکس را روی گوشی خود داشته باشید. این برنامه قدرتمند و رایگان است و می‌توانید از آن برای نصب و اجرای برنامه‌های مختلف از جمله پایتون استفاده کنید. این معماری نرم افزار با معماری سیستم سرویس گیرنده – سرویس دهنده تطبیق دارد که قبلاً در مورد آن بحث کرده ایم. سایت‌های معتبری مانند freeCodeCamp و W3Schools منابع رایگانی برای یادگیری برنامه‌نویسی فراهم کرده‌اند.

از نصب پایتون روی ویندوز، مک، اندروید، تا حتی iOS، تمام مراحل را به‌صورت گام‌به‌گام توضیح دادیم تا بدون هیچ سردرگمی بتوانید این زبان محبوب برنامه‌نویسی را روی دستگاه خود راه‌اندازی کنید. اما همانطور که میدانید، شفافیت توزیع نیازمند توازن بین کارایی، تحمل عیب، سهولت برنامه نویسی و … است. چون فقط یک راه حل وجود ندارد که نیازمندی های مربوط به تمام کاربردهای توزیع شده ممکن را برآورده کند، پژوهشگران، این ایده را که تنها یک سیستم میتواند 90% از تمام موارد ممکن را پوشش دهد، رد کردند. سیستم های توزیع شده، اغلب قطعات پیچیده ای هستند که قطعات در چندین ماشین پراکنده هستند. جهت مهار کردن پیچیدگی آنها، این سیستم ها باید به طور مناسب سازمان دهی شوند.

اگر با AWS آشنایی داشته باشید مطمئنا از دیاگرام بالا سر در می‌آورید و می‌دانید کارها به چه شکلی پیش می‌رود. اما در هر صورت، در دیاگرام زیر ما سرویس‌های متنوعی مانند AWS Lambda، DynamoDB، SQS و... به عنوان مثال در سیستم های بانکداری، یکی از اصول مهم، قانون حفاظت از پول است. پس از هر نقل و انتقال داخلی، مقدار وجه موجود در بانک باید معادل مقدار آن پیش از انتقال باشد. اما در صورت مخدوش شدن این اصول در حین تراکنش، حتی به صورت لحظه ای، این اشکال از دید دنیای بیرون کاملاً مخفی خواهد ماند.

اما محفظه‌ها پتانسیل آن را دارند که چیزی فراتر از تنها یک ابزار بهتر برای استقرار باشند. ما معتقدیم که تقدیر آنها این است که معادل اشیا در سیستمهای شی گرا باشند و بوسیله آنها امکان توسعه الگوهای سیستمهای توزیع‌شده فراهم آید. سیستم های توزیع شده در مقیاس بزرگ شامل هماهنگی و تعامل اجزای متعدد در مکان های مختلف فیزیکی است. ویژگی هایی مانند مقیاس پذیری، تحمل خطا و در دسترس بودن بالا اصول طراحی آنها را تعریف می‌کند. درک ویژگی های اساسی سیستم های توزیع شده زمینه را برای بررسی چالش های برنامه نویسی مرتبط فراهم می‌کند.

میکروسرویس ‌ها معماری تفکیک پذیری را ترویج می ‌دهند و با استفاده از آن ‌ها، بخش ‌های مختلف سیستم به صورت مستقل قابل توسعه و بروزرسانی هستند. این امر به توسعه‌دهندگان اجازه می ‌دهد که فقط روی بخش‌ های مورد نیاز تغییرات را اعمال کنند و تأثیر کوچکتری روی بخش‌ های دیگر سیستم داشته باشند. «سیستم توزیع شده» (Distributed Systems) که با نام «رایانش توزیع شده» نیز شناخته می‌شود، مجموعه‌ای متشکل از اجزای مستقل از هم است که بر روی کامپیوترهای متعددی قرار گرفته‌اند. این اجزا، به منظور دستیابی به اهدافی مشترک، در قالب تبادل پیام‌، با یکدیگر تعامل دارند. بدین ترتیب «سیستم های توزیع شده»، در نظر کاربرِ نهایی به‌عنوان «رابط» یا کامپیوتری واحد، ظاهر می‌شوند.

شبکه‌ها برای توزیع محاسبات میان نودهای مختلف بهم متصل استفاده می‌شوند. اما قبل از اینکه به صورت کلی با چنین ساختاری آشنا شویم نیاز است بدانید که سه دسته کلی برای اپلیکیشن‌های توزیع یافته یا توزیع شده وجود دارد که در ادامه با هرکدام آن‌ها آشنایی پیدا خواهیم کرد. عملیات ممکن است بسته به نوع پیاده سازی، فراخوانی های سیستم، روال های کتابخانه ای یا بلوک هایی از دستورات برنامه نویسی باشند. در این مطلب سعی شد به طور کلی به بررسی تعریف و اهداف سیستم های توزیع شده بپردازیم. در قسمت اهداف سیستم های توزیع شده، به دلیل آنکه هر مورد به طور مجزا بحثی طولانی را شامل میشوند، به طور مختصر به بررسی آنها پرداختیم. سیستم توزیع شده ای که قادر است خودش را طوری به کاربران و کاربردها ارائه کند که گویی فقط یک سیستم کامپیوتری است، شفاف (Transparent) نام دارد.

بلاک چین و سیستم های غیرمتمرکز پارادایم های جدیدی را برای ساخت برنامه های توزیع شده در مقیاس بزرگ معرفی می‌کنند. چالش های برنامه نویسی سیستم های غیرمتمرکز شامل طراحی الگوریتم های اجماع، مدیریت دفتر کل توزیع شده و رسیدگی به تعادل بین غیرمتمرکز سازی و مقیاس پذیری است. مدیریت هویت و کنترل دسترسی در گره های توزیع شده نیاز به توجه دقیق دارد. توسعه دهندگان در طراحی و اجرای راه حل های مدیریت هویت و دسترسی توزیع شده با چالش هایی روبرو هستند که دسترسی امن و بدون درز به منابع را فراهم می‌کند در حالی که از دسترسی غیرمجاز و نقض داده ها جلوگیری می‌کند. از آنجا که سیستم های توزیع شده اغلب شامل پردازش و ذخیره سازی داده های حساس هستند، اطمینان از انطباق با مقررات حریم خصوصی داده ها به یک چالش تبدیل می‌شود.

با یادگیری Python، می‌توانید پروژه‌های واقعی بسازید و به سرعت مهارت‌های خود را تقویت کنید. وظایف با اولویت بالاتر باید حتی در صورتی که خوشه فوق اشباع باشد هم اجرایشان تضمین شده باشد. این تضمین با خارج کردن وظایف کم اهمیت تر در حال اجرا انجام می‌شود که باید منتظر بمانند که دوباره منابع در اختیارشان قرار بگیرد. محاسبات لبه یک روند در حال ظهور است که چشم انداز سیستم های توزیع شده در مقیاس بزرگ را تغییر می‌دهد. در دنیای مدرن نرم‌افزار و سیستم‌های اطلاعاتی، سیستم‌های توزیع‌شده به عنوان زیرساخت‌هایی برای ارائه خدمات به‌صورت مقیاس‌پذیر و مقاوم در برابر خطا شناخته می‌شوند.

سازمان سیستم های توزیع شده تا حد زیادی به قطعات نرم افزاری مربوط میشود که سیستم را به وجود می آورند. معمولاً منابع، شامل سرویس دهنده های محاسباتی (از جمله ابرکامپیوترها که توسط کامپیوترهای خوشه ای پیاده سازی شده اند)، امکانات ذخیره سازی و بانک های اطلاعاتی است. بسیاری از سازمان‌‌ها و شرکت‌‌ها به دنبال یافتن راه‌کارهایی برای ایجاد فرآیندهای منظم و رسمی مدیریت پروژه هستند که منجر به نظم‌دهی هر چه بیشتر سازمان در انجام پروژه‌های جاری در قالب زمان، بودجه و سطح کیفی مورد نظر می‌شود. شرح وظایف و اهداف متنوع و گوناگونی را می‌توان بر اساس نیاز‌ها و ویژگی‌های سازمان، از راه‌اندازی و استقرار دفتر مدیریت پروژه انتظار داشت. مهم‌ترین انتظاری که از دفتر مدیریت پروژه سازمان می‌رود، ایجاد فرآیندهای منظم و یکپارچه مدیریت پروژه در قالب ساختار واحد مدیریت پروژه می‌باشد.

همانطور که در خط تولید، هر ایستگاه مسئول یک وظیفه خاص است، همین امر در مورد میکروسرویس ها نیز صدق می کند. هر ایستگاه و میکروسرویس در مسئولیت های خود "متخصص" هستند، بنابراین کارایی، ثبات و کیفیت را در گردش کار و خروجی ها ارتقا می دهند. این ویژگی شبیه به یک نرم افزار یکپارچه است که همه وظایف را در یک فرآیند کلی انجام می دهد. در میکروسرویس های جاوا، مقیاس کوچک و جداسازی نسبی آن ‌ها از یکدیگر می‌تواند منجر به بسیاری از مزایای اضافی مانند تعمیر و نگهداری آسان‌تر، بهبود بهره‌ وری، تحمل خطای بیشتر، همسویی بهتر تجاری و موارد دیگر شود. همین ویژگی دلیل خوبی برای چرایی ساختن و استفاده از میکروسرویس ها است.


برنامه نویسی یاسان