برنامه نویسی را از صفر شروع کنید!
استاد آزاد
برنامه نویسی را از صفر شروع کنید!
این سوالات اکثر کسانی هست که می خواهند وارد دوره Microservice شوند. با دیدن این ویدئو از مهندس آزاد مدرس دوره های معماری آموزشگاه تحلیل داده , به جواب تمام سوالات فوق می رسید.
بصورت مختصر، معماری میکروسرویس رویکردی برای توسعه یک برنامه بصورت مجموعه ای از
سرویس های کوچک است که هر سرویس وظیفه خود را انجام می دهد و با مکانیسم های سبک
ارتباط برقرار می کند. این سرویس ها بگونه ای ساخته می شوند که متناسب با قابلیت
های تجاری سیستم باشند و امکان توسعه مستقل بوسیله موتورهای توسعه کاملا خودکار را
داشته باشند.
هر یک از این سرویس ها دارای ویژگی های زیر هستند :
برای شرح هر چه بهتر میکروسرویس می توان آن را با سیستم یکپارچه مقایسه کرد :
یک سیستم یکپارچه بصورت یک تک واحد ساخته می شود. برنامه های سازمانی اغلب دارای سه
بخش اصلی client-side user interface، database و server-side application هستند.
application درخواست های HTTP را مدیریت می کند، منطق برنامه را اجرا می کند، داده
های موجود در پایگاه داده را بازیابی و بروزرسانی می کند، و دستورات HTML را برای
ارسال به مرورگر انتخاب و جمع آوری می کند. اما نکته قابل توجه این است که
Server-side application یک monolith (سیستم یکپارچه) است و برای اعمال هر تغییری
در سیستم باید ورژن جدیدی از Server-side application ساخته و توسعه داده شود.
در چنین سرور یکپارچه ای که یک روش معمول برای ساخت چنین سیستم هایی است، تمام منطق
مورد نیاز برای مدیریت یک درخواست طی یک پردازش واحد اتفاق می افتد و این امکان را
برای شما فراهم می کند که زبان مورد نظر خود را برای تقسیم برنامه به کلاس، توابع و
namespaceها بکار بگیرید.
برنامه های monolithic (یکپارچه) می توانند نتیجه موفقیت آمیزی داشته باشند، اما
این برنامه ها با توجه به افزایش روز افزون برنامه های توسعه داده شده بر روی سیستم
ابری ممکن است برای کاربران نا امید کننده باشند.
در برنامه های یکپارچه، چرخه های تغییر به یکدیگر وابسته هستند، اعمال تغییر به بخش
کوچکی از یک برنامه نیازمند بازسازی و توسعه مجدد کل برنامه است. علاوه بر این، حفظ
ساختار ماژولار در گذر زمان سخت است و امکان ایجاد تغییر تنها به بخشی از برنامه را
سخت تر می کند.
این نا امیدی ها منجر به پیدایش معماری میکروسرویس شد: یعنی ساخت برنامه ها بصورت
مجموعه ای از سرویس ها. علاوه بر این مسئله که میکرو سرویس ها می توانند بصورت
مستقل توسعه داده و مقیاس گذاری شوند، هر سرویس دارای مرز خاصی است که این امکان را
فراهم می کند که سرویس های مختلف با زبان های مختلف نوشته شوند و حتی توسط تیم های
متفاوت نیز مدیریت شوند. این نکته نیز قابل ذکر است که مقیاس پذیری در واقع تقسیم
وظایف یک کامپیوتر به وظایف کوچکتر است و عملکرد سیستم بر اساس پردازش مؤثر این
وظایف سنجیده می شود.
از آنجا که در میکروسرویس ها هر سرویس در محدوده مشخصی قرار گرفته و اجرا می شود، پس می توان هر سرویس را در محدوده مخصوص به آن ویرایش کرد، بدون اینکه برای دیگر سرویس ها مشکلی ایجاد شود. این مسئله مدت زمان از کار افتادگی سیستم را به صفر می رساند و عیب یابی در سیستم را آسان می کند؛ علاوه بر این اگر در سیستم مشکلی تشخیص داده شود، نمی تواند باعث قطعی سیستم شود و امکان اعمال تغییرات در سیستم و بروز رسانی آن بصورت پیوسته و ایمن را فراهم می کند.
با توجه به اینکه معماری میکروسرویس به شما کمک می کند با سرعت بازار حرکت کنید، این امکان را برای شما فراهم می کند که سرعت توسعه و قابلیت اطمینان برنامه را به حداکثر برسانید.
از آنجا که میکروسرویس ها امکان بروزرسانی و تست سریع برنامه ها را برای شما فراهم می کنند، به شما کمک می کنند که خود را سریعتر با تغییر شرایط بازار وفق داده و محصولات خود را ارتقا دهید؛ زیرا میکروسرویس ها باعث می شوند برنامه نویسان بدون اینکه نگران ایجاد مشکل در دیگر سرویس ها باشند، بتوانند تغییرات مورد نیاز خود را در سرویس های مورد نظر اعمال کنند.
میکروسرویس ها توسعه دهندگان را قادر به ساخت محصولات نرم افزاری با کیفیت بالا می سازند. با توجه به اینکه میکروسرویس ها از مجموعه ای از سرویس های مجزا تشکیل شده اند، برنامه نویسان می توانند برنامه نویسی هر سرویس را بوسیله زبانی انجام دهند که بهترین بازخورد را نسبت به عملکرد آن سرویس می تواند داشته باشد. علاوه بر این، بهینه سازی نرم افزار با استفاده از بهینه سازی سرویس های تشکیل دهنده آن بصورت مجزا می تواند به شما کمک کند که کیفیت محصولات خود را ارتقا دهید.
بسیاری از برنامه های سازمانی بدلیل معماری مورد استفاده در برنامه های نرم افزاری خود، با افزایش هزینه های زیرساختاری مواجه هستند. از آنجا که اعمال تغییر در یک بخش از سیستم های یکپارچه بر دیگر بخش های آن نیز تاثیر می گذارد، پس ایجاد تغییر در این سیستم ها می تواند هزینه بالایی بهمراه داشته باشد. علاوه بر این، توسعه دهندگان و متخصصان نیز برای برطرف کردن عوارض جانبی تغییرات باید زحمت بیشتری را متحمل شوند. هر چه بروزرسانی بیشتر باشد، سیستم یکپارچه بزرگتر شده و زمان و منابع بیشتری را برای اعمال تغییرات در آینده نیاز خواهیم داشت.
در این بخش به معرفی کامل معماری های یکپارچه و میکروسرویس می پردازیم و با توجه به مزایا و معایب هر معماری، علت بکارگیری میکروسرویس ها در برنامه های مختلف را مورد بررسی قرار می دهیم.
آگاهی راجع به این مسئله که میکروسرویس ها می توانند در طراحی برنامه، اجرا
و عملکرد آن انقلابی ایجاد کنند، بسیار خوب است اما دانستن چگونگی طراحی و
ساخت یک میکروسرویس نیز ضروری است.
برای طراحی میکروسرویس ها رویکردهای متفاوتی وجود دارد که از جمله آنها می
توان به رویکرد Domain Driven Design یا همان DDD اشاره کرد.
DDD رویکردی برای توسعه نرم افزار است که اساس توسعه نرم افزار را بر ساخت
یک domain model قرار می دهد که باید درک درستی از فرایندها و قوانین یک
domain داشته باشد. DDD در واقع ساختاری از قواعد و اصول طراحی را برای
ساخت برنامه هایی با domainهای پیچیده ارائه می دهد.
زمان آن رسیده است که به یکی از مهم ترین الگوهای معماری میکروسرویس یعنی
ارتباط داخلی میان میکروسرویس ها بپردازیم.
ایجاد ارتباط در ساخت برنامه های یکپارچه کار دشواری بود. در برنامه های
یکپارچه باید ارتباط میان جدول های دیتابیس با دقت طراحی می شد و نگاشت با
مدل های آبجکت صورت می گرفت.
اما در میکروسرویس ها، برنامه را به چندین سرویس جداگانه تقسیم کرده ایم و
این باعث ایجاد یک مش پیرامون هر سرویس می شود تا بتوان سرویس ها را به
یکدیگر مرتبط کرد.
بسیاری از معمارهای کامپیوتر ارتباط داخلی میان میکروسرویس ها را به دو
دسته synchronous و asynchronous تقسیم کرده اند که در این فصل بصورت مفصل
به آنها می پردازیم.
داده ها نیاز اولیه هر نرم افزاری هستند. بنابراین، مدیریت کارآمد و مؤثر
داده ها می تواند باعث موفقیت یا شکست یک تجارت شود.
برای برنامه های تازه ساخته شده باید اطمینان حاصل کنید که داده ها در زمان
درست در اختیار کاربر قرار می گیرند. سیستم های یکپارچه برای مدیریت پیچیده
داده ها شناخته شده هستند، اما در مقابل معماری میکروسرویس تصویر متفاوتی
از مدیریت داده ها را به نمایش می گذارد.
در این فصل، الگوهای مدیریت داده زیر را برای این سبک از معماری را مورد
بررسی قرار می دهیم.
تا به اینجا فواید بکارگیری میکروسرویس ها بر همه ما آشکار شده است، اما باید به این نکته نیز اشاره کرد
که استفاده از میکروسرویس ها برخی دشواری های چشمگیر را هم برای برنامه نویسان نرم افزار و هم مهندسین
فعال در حوزه تست نرم افزار بهمراه دارد.
بعبارت دیگر برخی ملاحضات مهم وجود دارند که مهندسین پیش از شروع تست میکروسرویس ها باید در نظر داشته
باشند.
از آنجا که خواهان تست نرم افزار بصورت بهینه هستیم، نیازمند ترکیبی از روش های مختلف تست می باشیم. با
توجه به اینکه میکروسرویس ها از بخش های کوچک و سرویس های مختلف تشکیل شده اند، سهم روش های مختلف تست
در این سبک از معماری نسبت به معماری یکپارچه متفاوت است.
بطور کلی توصیه می شود که استراتژی تست مورد نظر، تعداد زیادی Unit Test، سپس integration test و پس از
آن end to end test را شامل شود.
در این بخش به شرح مفصل تست میکروسرویس ها می پردازیم.
یکی از بزرگترین چالش های میکروسرویس ها، logging & monitoring هر میکروسرویس است و این مسئله ناشی از
ساختار توزیعی توسعه میکروسرویس ها در ابعاد اینترنت است.
دنبال کردن تراکنش های end-to-end بوسیله ایجاد ارتباط میان لاگ های صادر شده توسط میکروسرویس های
مختلف، دشوار است.
در این بخش به شرح اهمیت logging & monitoring در میکروسرویس ها می پردازیم و برخی تکنولوژی ها و راه حل
های موجود برای logging & monitoring در میکروسرویس ها را مورد بررسی قرار می دهیم.
از جمله مزایا بسیار مهم معماری میکروسرویس می توان به چرخه های آزادسازی سریع اشار کرد؛ اما بدون وجود
ابزارهای مناسب CI/CD نمی توان به این چرخه های سریع دست یافت.
هدف اصلی CI که مخفف Continuous integration است ایجاد یک روش خودکار و مؤثر برای اعمال تغییرات، ساخت و
تست برنامه هاست و CD که مخفف Continuous delivery است پس از CI اتفاق می افتد و باعث انتشار خودکار
تغییرات اعمال شده به زیرساختارهای انتخاب شده می شود.
از جمله تکنولوژی هایی که برای ساخت میکروسرویس ها استفاده می شود، پلتفرم Docker است.
Docker پلتفرمی باز برای توسعه، انتقال و راه اندازی برنامه هاست و این امکان را برای شما فراهم می کند
که برنامه های خود را از زیرساختار جدا کرده و نرم افزار را سریعتر انتقال و تحویل دهید. با استفاده از
Docker می توانید تاخیر میان مرحله کدنویسی و راه اندازی محصول را کاهش دهید.
هنرجویان عزیز، مدرک آموزشگاه تحلیل داده، مدرک رسمی از سازمان فنی و حرفهای میباشد. دانشجویان پس از پایان دوره با ارائه پروژه کاربردی خود به آموزشگاه و پس از تایید استاد دوره گواهی پایان دوره خود را دریافت مینمایند.
مشاهده نمونه مدرکاستاد آزاد
Advanced Distributed Systems Design using SOA & DDD
Rahyab Rayaneh Gostar
CTO
April 2021 - Present (6 months)
Sekhavat F.C.I.
Technical Team Lead
2016 - Present (5 years)
Tehran Province, Iran
Core Banking, Accounting, Banking, Treasury
DDD, CQRS, ESB, WPF, WF
Tahlildadeh Institute
Lecturer
October 2019 - Present (2 years)
Enterprise Architecture , Domain Driven Design, CQRS
Noyan System
Technical Team Lead
January 2015 - June 2016 (1 year 6 months)
Company belongs to SAMAN financial group
Faraconesh Corporation
Senior Software Developer
April 2011 - December 2014 (3 years 9 months)
SimplyDesk
Senior Software Developer
September 2013 - September 2014 (1 year 1 month)
SimplyDesk is a cloud based ITIL v3 service desk.
Request for a demo at http://www.simplydesk.com and you are able to see the application live on the web
HonoPardaz
Web Developer
September 2009 - January 2011 (1 year 5 months)
Azad University (IAU)