1. یکی از مزیتها و چالشهایی را که هنگام استفاده از میکروسرویسها با آنها روبهرو شدهاید شرح دهید
میکروسرویسها از نظر بهکارگیری فناوریها متنوع هستند. بهطوری که امکان استفاده از کتابخانهها، پایگاههای داده و چارچوبهای مختلف را ارائه میکنند. از آنجایی که میکروسرویسها به یکدیگر وابسته هستند، باید با یکدیگر مرتبط باشند که این روند برقراری ارتباط یکی از چالشهای بزرگ توسعهدهندگان است.
2. کدام ویژگی میکروسرویسها باعث استقبال زیاد از آنها شده است؟
میکروسرویسها، مدیریت غیرمتمرکز بر دادهها، پیادهسازی کارآمد دوآپس، استقلال فنی، توزیع خدمات بر اساس قابلیتهای تجاری، انتزاعی کردن پیچیدگیهای عملکردی مولفهها و ارائه مولفههای متعدد با ویژگی استقرار منفرد را ارائه میدهند.
3. میکروسرویسها را به زبان ساده توضیح دهید
میکروسرویس یا معماری میکروسرویس یک برنامه کاربردی بزرگ را به سرویسهای مستقل کوچکی شبیه به لانه زنبور میشکند. این کار با هدف توسعه یک برنامه همسو با اهداف تجاری انجام میشود. به بیان دقیقتر، در تعامل با اهداف تجاری، ساختاری شبیه به لانه زنبوری ترسیم میشود که مدل یا همان برنامه کاربردی بر مبنای آن توسعه پیدا کرده و مستقر میشود. فرآیند طراحی با توسعه یک ماژول کوچک آغاز میشود و بهتدریج یک ساختار بزرگ را پدید میآورد. فرآیند توسعه و کنار هم قرار دادن ماژولها درست همانند ساخت لانه زنبور است. هر سلول مستقل است، اما با سلولهای دیگر همبستگی دارد. بنابراین آسیب به یک سلول بر کل ساختار تاثیر نمیگذارد. شکل ۱ معماری ساده میکروسرویسها را نشان میدهد.
شکل 1
4. ویژگیهای اصلی میکروسرویس چیست؟
برخی از ویژگیهای اصلی میکروسرویسها در شکل ۲ نشان داده شدهاند. توضیح اجمالی ویژگیهای فوق بهشرح زیر است:
- جداسازی: در یک سیستم، سرویسها تا حد زیادی از هم جدا میشوند. از اینرو، امکان اعمال تغییر، مقیاسبندی یا افزودن و حذف قابلیتها به برنامه وجود دارد.
- مولفهسازی: میکروسرویسها بهعنوان مولفههای مستقلی در نظر گرفته میشوند که بهراحتی میتوان آنها را ارتقاء داد.
- قابلیتهای تجاری: میکروسرویسها الگوی سادهای دارند، بهطوری که هر سرویس تنها یک کار مشخص را انجام میدهد.
- استقلال تیم: هر توسعهدهنده مستقل از دیگری کار میکند. در نتیجه، امکان تعریف یک جدول زمانی برای کامل کردن یک پروژه در زمان مقرر وجود دارد.
- تحویل مداوم: انتشار مکرر ماژولهای کاربردی از طریق خودکارسازی نظاممند، توسعه، آزمایش و تایید کیفیت کدها را امکانپذیر میکند.
- مسئولیت: میکروسرویسها برنامههای کاربردی را بهعنوان یک پروژه متمرکز تعریف نمیکنند. در مقابل، برنامهها را بهعنوان محصولاتی متشکل از مولفههای مختلف تعریف میکنند که هر یک مسئولیت انجام کار مشخصی را بر عهده دارند.
- حاکمیت غیرمتمرکز: انتخاب ابزار، متناسب با اهداف تجاری انجام میشود. توسعهدهندگان میتوانند بهترین ابزارها را برای حل مشکلات خود انتخاب کنند.
- چابکی: میکروسرویسها توسعه سریع یا همان چابک را تسهیل میکنند. علاوه بر این، امکان توسعه و استقرار سریع ویژگیهای جدید و حذف آنها در هر زمان را بهوجود میآورند.
شکل 2
5. مولفههای اصلی میکروسرویسها چیست؟
برخی از مولفههای اصلی میکروسرویسها بهشرح زیر هستند:
- کانتینرها، خوشهبندی و ارکستراسیون.
- زیرساخت بهعنوان کد (IaC).
- زیرساخت ابری.
- دروازه API.
- کانالهای برقراری ارتباط سرویسها.
- تحویل و استقرار مداوم سرویسها.
6. مزایا و معایب میکروسرویس چیستند؟
از مزایای میکروسرویسها به موارد زیر باید اشاره کرد:
- ماژول مستقر و استقرار مستقل.
- مدیریت مستقل سرویسها.
- امکان استقرار سرویسها روی چند سرور با هدف بهبود عملکرد.
- آزمایش سادهتر هر سرویس بهدلیل وجود وابستگیهای کمتر.
- مقیاسپذیری و چابکی بیشتر.
- سهولت در اشکالزدایی و نگهداری.
- تعامل بهتر توسعهدهندگان و کاربران تجاری.
- تعریف تیمهای توسعه با نفرات کمتر.
از معایب معماری فوق به موارد زیر باید اشاره کرد:
- بهدلیل پیچیدگی معماری، آزمایش و نظارت دشوارتر است.
- سازمانها برای استفاده از این معماری باید فرهنگ سازمانی خود را تغییر دهند.
- برنامهریزی، قبل از استفاده از معماری فوق ضروری است.
- در مقایسه با معماری نرمافزاری یکپارچه گرانتر است.
- چالشهای امنیتی خاص خود را دارد.
- مدیریت بر طیف گستردهای از سرویسها سخت است.
- به مکانیزمهای کارآمدی برای حفظ ارتباط سرویسها نیاز است.
7. سه ابزار متداول مورد استفاده برای میکروسرویسها را نام ببرید
سه ابزار رایجی که بیشتر تیمهای توسعه برای میکروسرویسها استفاده میکنند، بهشرح زیر هستند:
- Wiremock
- Docker
- Hystrix
8. معماری میکروسرویسها به چه صورتی کار میکند؟
معماری میکروسرویس در شکل ۳ نشان داده شده است. مولفههای نشاندادهشده در شکل بهشرح زیر هستند:
- Client: اشاره به افرادی دارد که درخواستهایی را از دستگاههای مختلف ارسال میکنند.
- Identity Provider: هویت کاربر یا مشتری را تایید کرده و توکنهای امنیتی صادر میکند.
- API Gateway: به درخواستهای کاربران رسیدگی میکند.
- Static Content: شامل محتوای ایستای سیستم است.
- Management: عملکرد سرویسها روی گرهها را متعادلسازی کرده و خرابیها را شناسایی میکند.
- Service Discovery: راهکار کشف مسیرهای ارتباطی بین میکروسرویسها را نشان میدهد.
- CDN: شامل شبکه توزیعشده از سرورهای پروکسی و مراکز دادهای است که میزبان دادهها هستند.
- Remote Service: دسترسی از راه دور به دادهها یا اطلاعات موجود در کامپیوترها و دستگاههای شبکه را فراهم میکند.
شکل 3
9. تفاوت بین معماری یکپارچه، سرویسگرا و میکروسرویس را شرح دهید
شکل ۴ معماری سه پارادایم یکپارچه، سرویسگرا و میکروسرویس را نشان میدهد.
شکل 4
- معماری یکپارچه: شبیه به یک ظرف بزرگ است که در آن تمام مولفههای نرمافزاری یک برنامه بهشکل یکپارچه در کنار هم قرار گرفتهاند. در معماری فوق، برنامههای کاربردی بهعنوان یک سیستم بزرگ ساخته میشوند و کد پایه دارند.
- معماری سرویسگرا: مجموعهای از سرویسها است که با یکدیگر در تعامل هستند. بسته به ماهیت ارتباط، میتواند تبادل داده ساده باشد یا میتواند شامل چند سرویس باشد که برخی از فعالیتها را هماهنگ میکند.
- معماری میکروسرویس: شامل ساختار یک برنامه کاربردی در قالب مجموعهای از سرویسهای کوچک و مستقل است که بر مبنای یک منطق تجاری توسعه پیدا کردهاند. ماژولها میتوانند بهطور مستقل مستقر شوند و از ویژگی مقیاسپذیری به بهترین شکل پشتیبانی کنند. بهطوری که در نهایت پاسخگوی اهداف تجاری باشند. این سرویسها از طریق پروتکلهای استاندارد با یکدیگر ارتباط برقرار میکنند.
10. Spring Cloud و Spring Boot را توضیح دهید
- Spring Cloud در حوزه میکروسرویسها، ابزاری است که قابلیت ادغام با سیستمهای خارجی را فراهم میکند. ابزار فوق، یک چارچوب سبکوزن است که برای توسعه سریع برنامهها طراحی شده است. بهدلیل ارائه یک مکانیزم ارتباطی قدرتمند برای حجم کمی از دادهها، بهشکل گستردهای در معماری میکروسرویسها مورد استفاده قرار میگیرد. برخی از ویژگیهای کاربردی چارچوب فوق در شکل ۵ نشان داده شدهاند.
- Spring Boot یک چارچوب منبعباز و مبتنی بر جاوا است که پلتفرمی در اختیار توسعهدهندگان قرار میدهد که بر مبنای آن میتوانند برنامههای Spring مستقل و سطح بالا ایجاد کنند. علاوه بر کاهش زمان توسعه و افزایش بهرهوری، ترکیب نحوی سادهای دارد که یادگیری آنرا ساده میکند.
شکل 5
11. توضیح دهید که چگونه میتوانید ویژگیهای پیشفرض پروژههای Boot Spring را لغو کنید؟
با مشخص کردن خصلتها (Attributes) در فایل application.properties، میتوان ویژگیهای پیشفرض Spring را نادیده گرفت. بهطور مثال، در برنامههای Spring MVC باید یک پسوند و پیشوند مشخص کنید. میتوانید این کار را با افزودن ویژگیهای فهرستشده زیر در فایل application.properties انجام دهید.
- برای پسوند – spring.mvc.view.suffix: .jsp
- برای پیشوند – spring.mvc.view.prefix: /WEB-INF/
12. بهطور کلی Spring Clouds چه مسائلی را حل میکنند؟
بهطور کلی، مشکلات زیر را میتوان با Spring Clouds حل کرد:
- مشکلات پیچیده ناشی از سیستمهای توزیعشده: مشکلاتی که مرتبط با شبکه، زمان تاخیر، پهنای باند و مسائل امنیتی هستند.
- مسائل مربوط به کشف سرویس: مکانیزم کشف سرویس به فرآیندها و سرویسها اجازه میدهد با یکدیگر در یک خوشه ارتباط برقرار کرده و فرآیند مکانیابی را بهشکل دقیقی انجام دهند.
- مشکلات افزونگی: سیستمهای توزیعشده اغلب با معضل افزونگی روبهرو هستند.
- مسائل مربوط به متعادلسازی بار: توزیع بارهای کاری بین منابع محاسباتی متعدد از جمله خوشهها، واحدهای پردازش مرکزی و لینکهای شبکه را بهینه میکند.
- مشکلات عملکردی را کاهش میدهد: مشکلات عملکردی ناشی از سربارهای مختلف عملیاتی را کاهش میدهد.
13. منظور از Cohesion و Coupling چیست؟
- جفت (Coupling): در حالت کلی، به رابطه بین ماژولهای نرمافزاری A و B اشاره دارد و اینکه یک ماژول چقدر به ماژول دیگر وابستگی دارد یا با آن تعامل دارد. جفت کردن به سه حالت اصلی تقسیم میشود، ماژولها میتوانند کاملا جفت شوند (بسیار وابسته)، نیمهجفت باشند یا از یکدیگر جدا باشند. بهترین نوع جفت کردن، Coupling Shell نام دارد که مبتنی بر رابطها است.
- انسجام (Cohesion): به رابطه بین دو یا چند بخش یک ماژول اشاره دارد که هدف یکسانی را دنبال میکند. بهطور کلی، یک ماژول با پیوستگی بالا میتواند وظیفه مشخصی را بدون نیاز به ارتباط با ماژولهای دیگر انجام دهد. انسجام بالا به این معنا است که ماژولها بهترین عملکرد را ارائه میدهند. شکل ۶ این موضوع را نشان میدهد.
شکل 6
14. منظور از Bounded Context چیست؟
- Bounded Context که ترجمه آن «زمینه محدود» میشود، یک الگوی طراحی مرکزی مبتنی بر اصل طراحی-دامنه-محور DDD سرنام
- Domain-Driven Design است که به همکاری بین مدلها اشاره دارد. DDD مدلهای بزرگ را به زمینههای متعدد تقسیم میکند تا مدیریتپذیرتر شوند. علاوه بر این، رابطه بین مدلها را نشان میدهد. مفهوم فوق، رویکرد شیءگرایی برای توسعه خدمات مرتبط با مدل دادهای ارائه میکند و یکپارچگی و تغییرپذیری مدل دادهای را تضمین میکند (شکل 7).
شکل 7
15. مشخصات اساسی طراحی میکروسرویس را توضیح دهید
بهطور کلی، معماری میکروسرویس و نرمافزارهایی که بر مبنای این پارادایم توسعه پیدا میکنند، ویژگیهای مشترکی دارند که از مهمترین آنها به موارد زیر باید اشاره کرد:
- توسعه بر اساس قابلیتهای تجاری: سرویسها بر اساس قابلیتهای تجاری تقسیم و سازماندهی میشوند.
- کار تیمی: برنامهنویسان در قالب تیم روی یک محصول کار میکنند. به بیان دقیقتر، همگی به دنبال هدف مشترکی هستند.
- چارچوبهای پیامرسان ضروری: معماری میکروسرویس بر چارچوبهای پیامرسان کاربردی تاکید دارد، بهطوری که بر پذیرش مفهوم تمرکززدایی و حذف سرویسهای متمرکز تاکید دارد.
- پاسخگویی صریح: تیمهای توسعه نسبت به تمام جنبههای نرمافزاری که تولید میکنند پاسخگو هستند.
- مدیریت غیرمتمرکز دادهها: میکروسرویسها به هر سرویس اجازه میدهند تا دادههای خود را جداگانه مدیریت کند.
- زیرساخت خودکار: سیستمها کامل هستند و هر یک از ماژولهای آنها بهشکل مستقل قابلیت استقرار دارند.
- طراحی برای مقابله با شکست: بهدلیل نوع معماری خاص، برنامههای مبتنی بر میکروسرویسها در برابر شکستها آستانه تحمل بالایی دارند.
16. در هنگام استفاده از میکروسرویسها چه چالشهایی وجود دارد؟
چالشهایی که یک برنامهنویس در هنگام استفاده از میکروسرویسها با آنها روبهرو میشود، ممکن است عملکردی یا فنی باشند.
چالشهای عملکردی بهشرح زیر هستند:
- نیاز به زیرساختهای سنگین.
- نیاز به سرمایهگذاری قابل توجه.
- نیاز به برنامهریزی بیشازحد برای مدیریت یا مدیریت سربارهای عملیاتی.
چالشهای فنی بهشرح زیر هستند:
- میکروسرویسها همیشه به یکدیگر وابسته هستند؛ بنابراین، باید با یکدیگر ارتباط برقرار کنند.
- به منابع سیستمی قابل توجهی نیاز دارد، زیرا مبتنی بر الگوی توزیعشده است.
- اگر از معماری میکروسرویس استفاده میکنید، باید آمادگی لازم برای رسیدگی به مشکل سربار عملیات را داشته باشید.
- برای پشتیبانی از میکروسرویسهای توزیعشده ناهمگن، به متخصصان ماهر نیاز دارید.
- بهدلیل تعدد ماژولهای کوچک، خودکارسازی دشوار است. به همین دلیل، هر مولفه باید بهشکل جداگانه ساخته، مستقر شده و زیر نظر قرار بگیرد.
- مدیریت و پیکربندی مولفههای مستقر در محیطهای مختلف کار سختی است.
- فرآیند اشکالزدایی، آزمایش و گاهیاوقات استقرار همه سرویسها پیچیده میشود.
17. PACT در میکروسرویسها را توضیح دهید
PACT یک ابزار منبعباز است که به ارائهدهندگان سرویسها و مصرفکنندگان اجازه میدهد تا ارتباطات را بهشکل مجزا مطابق با خطمشیهایی در مورد قابلیت اطمینان و یکپارچهسازی میکروسرویسها آزمایش کنند. همچنین، از زبانها و چارچوبهای مختلفی مثل Ruby، Java، Scala، .NET، JavaScript و Swift/Objective-C پشتیبانی میکند.
18. نحوه ارتباط میکروسرویسهای مستقل با یکدیگر را توضیح دهید.
ارتباط بین میکروسرویسها میتواند از طریق کانالهای زیر برقرار شود:
- HTTP/REST با JSON در ارتباط با الگوی درخواست-پاسخ.
- سوکتهای وب برای پخش جریانی.
- یک برنامه کارگزار یا سرور که از الگوریتمهای مسیریابی پیشرفته استفاده میکند.
- RabbitMQ ،Nats ،Kafka و غیره که میتوان بهعنوان کارگزار پیام از آنها استفاده کرد. هر کدام برای مدیریت نوع خاصی از پیامهای معنایی ساخته شدهاند. همچنین، میتوانید از Space Cloud برای خودکارسازی کل عملیات بکاند استفاده کنید.
19. Client Certificates به چه معنایی است؟
گواهی کاربر، نوعی گواهی دیجیتال است که بهطور کلی به سیستمهای سرویسگیرنده اجازه میدهد تا درخواستهای خود برای سرورهای راه دور را تایید کنند. در بسیاری از طرحهای احراز هویت متقابل، گواهی کلاینت، نقش کلیدی در ارائه یک مکانیزم هویت قدرتمند سمت درخواستکننده دارد.
20. CDC را توضیح دهید
همانگونه که از نامش پیدا است، قرارداد مبتنی بر مصرفکننده (Consumer-Driven Contract)، توافقی بین مصرفکنندگان و ارائهدهندگان خدمات در خصوص قالب دادههای ارسالشده میان آنها و سازگاری کانالهای ارتباطی است که سرویسها از آنها استفاده میکنند. به بیان دقیقتر، الگویی است که برای توسعه میکروسرویسها استفاده میشود تا بتوان آنها را بهطور موثر توسط سیستمهای مختلف مورد استفاده قرار داد.
21. چند شرکت معروف که از معماری میکروسرویس استفاده میکنند را نام ببرید
تقریبا بیشتر وبسایتهای بزرگ معماری میکروسرویسها را جایگزین معماری یکپارچه کردهاند که از مهمترین آنها باید به توییتر، نتفلیکس، آمازون و غیره اشاره کرد.
22. نظارت معنایی (Semantic Monitoring) به چه معنا است؟
نظارت معنایی به تستهای خودکار و نظارت بر برنامههای کاربردی برای شناسایی خطاها در فرآیندهای تجاری اشاره دارد. بهطوری که توسعهدهندگان دید عمیقتری نسبت به دسترسپذیری سرویسها، عملکرد کلی برنامه پیدا میکنند که نقش مهمی در شناسایی مشکلات، رفع آنها و بهبود عملکرد دارد.
23. نظارت مستمر را توضیح دهید
نظارت مستمر شامل شناسایی مسائل مربوط به انطباق و ریسک در محیط عملیاتی است. بهطوری که شامل نظارت بر افراد، فرآیندها و سیستمهای زیربنایی است که از عملیات تجاری پشتیبانی میکنند.
24. Domain driven design به چه معنا است؟
طراحی دامنهمحور، یک سبک معماری مبتنی بر رویکردها و اصول طراحی تحلیلی شیءگرا است. در معماری فوق، دامنه کسبوکار بهدقت در نرمافزار مدلسازی میشود، بدون توجه به اینکه سیستم واقعا چگونه کار میکند (شکل 8). در ادامه، از طریق متصل کردن مولفهها به یکدیگر، نرمافزار کاربردی ساخته شده و فرآیند توسعه سیستمهای پیچیده تسهیل میشود. بهطور کلی طراحی دامنهمحور روی سه اصل، مهم زیر تاکید دارد.
- روی حوزه اصلی و منطق دامنه تمرکز کنید.
- مدلهای دامنه را برای یافتن طرحهای پیچیده تجزیهوتحلیل کنید.
- برای بهبود مدل برنامه و رسیدگی به مسائل نوظهور دامنه، با کارشناسان حوزه شبکه ارتباط نزدیک داشته باشید.
شکل 8
25. OAuth را توضیح دهید
بهطور کلی، پروتکل مجوز باز OAuth به کاربران امکان میدهد از طریق مکانیزمهای شناسایی قدرتمند، هویت خود را برای ارائهدهندگان خدمات شخص ثالث اثبات کنند. با استفاده از پروتکل فوق، میتوانید از طریق برنامههای کلاینت مبتنی بر پروتکل HTTP به سرویسهای شخص ثالث مثل گیتهاب، فیسبوک و غیره دسترسی داشته باشید. همچنین، با استفاده از آن میتوانید منابع یک سایت را با سایت دیگری بهشکل سادهای بهاشتراک قرار دهید.
26. تراکنش توزیعشده چه مشکلی دارد؟
تراکنشهای توزیعشده، یک رویکرد قدیمی در معماری میکروسرویس هستند که توسعهدهنده را با مشکلات مقیاسپذیری شدید روبهرو میکنند. تراکنشها به چندین سرویس توزیع میشوند که برای تکمیل تراکنش به ترتیب فراخوانی میشوند. بهدلیل وجود ماژولهای زیاد، پیچیدگی را افزایش و برنامه را مستعد خرابی میکنند.
27. اهمیت گزارشها و داشبوردها در میکروسرویسها را توضیح دهید
نظارت بر یک سیستم شامل استفاده از گزارشها و داشبوردها میشود. گزارشها و داشبوردها در موارد زیر به شما کمک میکنند:
- تعیین کنید کدام میکروسرویس از کدام منابع پشتیبانی میکند.
- هر زمان که تغییراتی در مولفهها ایجاد میشود یا روی میدهد، تعیین کنید کدام سرویسها تحت تأثیر قرار میگیرند.
- دسترسی به اسناد را در صورت نیاز آسان کنید.
- نسخههای مختلف یک مولفه نصبشده را بررسی کنید.
- سطح انطباق و پختگی مولفهها را تعیین کنید.
28. توسعهدهندگان به چه تستهایی برای میکروسرویسها دسترسی دارند؟
از آنجایی که در یک پروژه نرمافزاری، میکروسرویسهای مختلفی با یکدیگر در ارتباط هستند، فرآیند آزمایش میکروسرویسها هنگام کار پیچیده و سخت است. در نتیجه، آزمونها باید بر مبنای سطوحشان طبقهبندی شوند (شکل 9).
شکل 9
- تستهای سطح پایین: تستهای سطح پایین، تستهایی هستند که با فناوری سروکار دارند، مانند تستهای واحد و تستهای عملکرد. این یک فرآیند کاملا خودکار است.
- تستهای سطح میانی: با هدف بررسی قابلیت اطمینان و دسترسی ، بعد از تستهای سطح پایین و قبل از تستهای سطح بالا انجام میشوند.
- تستهای سطح بالا: تستهای سطح بالا به ذینفعان کمک میکنند تا ویژگیهای نهایی نرم افزار را درک و تایید کنند.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟