یک لغت برای مطالب زیاد اما کم عمق، "پُرگویی" است. این لغت به معنای گفتن زیاد بدون گفتن چیز خاصی است. مطالب پُرگویی معمولاً حاوی اطلاعات تکراری، کلیشهای، یا سطحی هستند و به مخاطب کمکی نمیکنند تا دانش یا دیدگاه خود را در مورد موضوع گسترش دهد.
هنگامی که برنامههای وب یا نرمافزاری میسازیم، دائماً به دنبال راههایی برای بهبود کد خود و استفاده از ابزارهای بهتر برای بهدست آوردن بهترین تجربه، عملکرد و بسیاری چیزهای دیگر هستیم، نه تنها در سمت مشتری نهایی، بلکه در فرآیند توسعه و استقرار.
موضوعات موردنظر در این پُرگویی:
من تو این صفحه میخوام خدمتتون پُرگویی کنم . البته به نظرم میتونه برای دوستانی که دید کمی نسبت به حوزه مهندسی نرم افزار و معماری نرم افزار دارند مفید باشه .
Modular Monolithic Architecture
در ابتدا معماری مونولیتیک
در معماری مونولیتیک، کل برنامه به عنوان یک سیستم واحد طراحی و توسعه یافته است. این بدان معناست که تمام کد برنامه در یک پایگاه کد نگهداری می شود و همه اجزای برنامه به شدت با هم ادغام شده اند.
معماری ماژولار
در معماری ماژولار، برنامه به عنوان مجموعه ای از ماژول های مستقل طراحی و توسعه یافته است. هر ماژول یک عملکرد خاص را انجام می دهد و از طریق رابط های تعریف شده به خوبی با ماژول های دیگر ارتباط برقرار می کند.
سفر طراحی معماری
در طول دهههای توسعه نرمافزار، رویکردها و الگوهای زیادی تکامل یافتهاند که همه آنها مزایا و چالشهای خاص خود را دارند.
و اما
یک رویکرد ترکیبی است که ویژگیهای هر دو معماری مونولیتیک و ماژولار را در خود جای داده است. این رویکرد سعی میکند تعادلی بین سادگی و انعطافپذیری ایجاد کند.
در معماری ماژولار - مونولیتیک، برنامه به عنوان یک سیستم واحد طراحی شده و توسعه یافته است، اما اجزای برنامه به صورت ماژولهای مستقل سازماندهی و پخش شدهاند. این بدان معناست که هر ماژول یک عملکرد خاص را انجام می دهد و از طریق رابطهای تعریف شده به خوبی با ماژول های دیگر ارتباط برقرار می کند.
ماژولار - مونولیتیک مزایای زیادی مانند موارد زیر را داراست:
منطق کسب و کار را کپسوله کنید.
مزیت اصلی ماژولار - مونولیتیک این است که منطق کسب و کار در ماژول ها محصور شده است و قابلیت استفاده مجدد را امکان پذیر می کند، در حالی که داده ها ثابت می مانند و الگوهای ارتباطی ساده هستند.
کدهای قابل استفاده مجدد، به راحتی قابل بازگردانی هستند .
برای تیم های توسعه نرم افزاری بزرگ، توسعه اجزای ماژولار یک برنامه کاربردی، قابلیت استفاده مجدد را افزایش می دهد. این منجر به توسعه سریعتر و سازگارتر می شود. همچنین تغییر یک ماژول روی ماژول های دیگر تاثیر کمتری دارد یا می تواند هیچ تاثیری نداشته باشد.
وابستگی های سازمان یافته بهتر میشوند.
با معماری ماژولار - مونولیتیک، وابستگی های برنامه بیشتر سازماندهی شده و قابل مشاهده خواهند بود. این به توسعه دهندگان کمک می کند تا به راحتی ارزیابی کنند که کدام بخش از برنامه به کدام وابستگی نیاز دارد.
پیچیدگی کمتری نسبت به معماری Microservices دارد.
مدیریت ماژولار - مونولیتیک به جای صدها ریزسرویس آسانتر است، زیرا ماژولار - مونولیتیک با زیرساخت های اساسی و هزینه های عملیاتی پایین همراه است.
برای تیم ها بهتر است.
کار کردن روی قسمت های مختلف کد برای توسعه دهندگان آسان تر است. همانطور که به یاد دارید که مشکل از تیم های تجاری است که باید برای ویژگی های جدید چابک باشند. بنابراین با معماری ماژولار - مونولیتیک، میتوانیم تیمهای توسعهدهنده خود را به طور مؤثر تقسیم کنیم و الزامات تجاری را با حداقل تأثیر بر یکدیگر پیادهسازی کنیم.
ماژولار - مونولیتیک، همچنین دارای اشکالاتی مانند:
نمی توان فناوری را متنوع کرد.
ماژولار - مونولیتیک همه مزایای میکروسرویس ها را ارائه نمی دهند. اگر به تنوع در فناوری و انتخاب زبان نیاز دارید، نمیتوانید با معماری ماژولار - مونولیتیک این کار را انجام دهید. این نوع پشته های فناوری چند زبانه نمی توانند با معماری ماژولار - مونولیتیک استفاده شوند.
نمی تواند مقیاس و استقرار مستقل داشته باشد.
از آنجایی که برنامه یک سیستم واحد است،قطعات جدا از هم نمیتوانند مقیاس پذیر باشند یا مانند میکروسرویسها به طور مستقل مستقر شوند. و این نوع برنامهها به دلیل محدودیتهای مقیاسپذیری و همچنین مشکلات عملکردی، باید به معماری میکروسرویس رو کنند.
سخنان پایانی این بخش
ما در مورد مزایا و معایب معماری ماژولار - مونولیتیک بحث کرده یم، اما می خواهم حقیقتی را بیان کنم که از همه مهمتر است . هنگام ساخت و یا طراحی نرم افزار، هیچ فرمولی یا قانون محکم و سریع الجوابی وجود ندارد که برای یک مورد استفاده(USECASE) X، ما نیاز به انتخاب یک معماری Y داشته باشیم.
همیشه قاعده اهم و مهم وجود دارد و شما باید آنچه را که برای مورد استفاده (USECASE) شما بهترین است انتخاب کنید. من Stackoverflow.com را مثال میزنم. این سایت با معماری مونولیتیک شروع شد و هنوز هم مونولیتیک است، با 4 میلیارد درخواست در ماه، 3000 req/s پیک و 800M کوئری SQL در روز، 8500/s پیک. در چنین مقیاسی، مونولیتیک بودن برای آنها کار می کند. و این یک نمونه جالب و قابل تفکر است.
AWS (Amazon Web Services)
آم . AWS یا Amazon Web Services یک سرویس ابر مبتنی بر وب است که توسط شرکت آمازون ارائه میشود. این سرویس طیف گستردهای از خدمات را در اختیار کاربران قرار میدهد، از جمله فضای ذخیرهسازی، محاسبه، شبکه، پایگاه داده، هوش مصنوعی، اینترنت اشیا و موارد دیگر.
آم . AWS در سال 2002 به عنوان پروژه داخلی در آمازون آغاز شد و در سال 2006 به عموم مردم عرضه شد. از آن زمان به بعد ، AWS به یکی از سریعترین رشد دهنده های فناوری در جهان تبدیل شده است و به صدها هزار مشتری در سراسر جهان خدمات ارائه می دهد.
آم . AWS یک سرویس پُرگویی است، یعنی به کاربران این امکان را میدهد تا منابع مورد نیاز خود را فقط به میزان استفادهشان خریداری کنند. این امر باعث میشود که AWS برای کسبوکارهای کوچک و متوسط بسیار مقرونبهصرفه باشد.
آم . AWS طیف گستردهای از خدمات را در اختیار کاربران قرار میدهد که میتوان از آنها برای راهاندازی و مدیریت انواع مختلف برنامهها و وبسایتها استفاده کرد. برخی از محبوبترین خدمات AWS عبارتند از:
API-first Approach
رویکرد API-first یک روش توسعه نرمافزار است که در آن ابتدا APIهای نرمافزار طراحی میشوند و سپس سایر اجزای نرمافزار، مانند رابط کاربری، بر اساس آن APIها طراحی میشوند. این رویکرد مزایای متعددی دارد، از جمله:
مراحل توسعه نرمافزار با رویکرد API-first به شرح زیر است:
رویکرد API-first برای توسعه نرمافزارهای مبتنی بر وب، نرمافزارهای سرویسمحور و نرمافزارهای موبایل بسیار مناسب است. این رویکرد میتواند باعث افزایش کیفیت، انعطافپذیری و مقیاسپذیری نرمافزار شود.
NoSQL Databases
پایگاه دادههای NoSQL، یک نوع پایگاه داده است که از مدلهای دادهای غیرروابطی مانند اشیاء، جفت کلید-مقدار، یا نمودارها استفاده میکند. این پایگاه دادهها در مقابل پایگاه دادههای رابطهای سنتی هستند که از مدل دادهای رابطهای استفاده میکنند.
پایگاه دادههای NoSQL برای کاربردهایی که نیاز به مقیاسپذیری، عملکرد بالا، یا انعطافپذیری بالایی دارند، مناسب هستند. این پایگاه دادهها میتوانند برای ذخیرهسازی انواع مختلف دادهها، از جمله دادههای متنی، دادههای عددی، و دادههای ساختاریافته و غیرساختاریافته، استفاده شوند.
پایگاه دادههای NoSQL را میتوان بر اساس مدل دادهای که از آن استفاده میکنند، طبقهبندی کرد. برخی از مدلهای دادهای NoSQL عبارتند از:
برخی از پایگاه دادههای NoSQL محبوب که شاید عبارتند از:
Serverless Architecture
معماری Serverless یا رایانش بدون سرور یک مدل پردازش ابری است که در آن توسعهدهندگان میتوانند بدون نیاز به مدیریت سرور، کد خود را اجرا کنند. در این مدل، سرورها توسط ارائهدهنده خدمات ابری مدیریت میشوند و هزینهها تنها بر اساس استفاده از منابع محاسباتی محاسبه میشوند.
معماری Serverless از دو مفهوم اصلی تشکیل شده است:
معماری Serverless مزایای زیر را دارد:
معماری Serverless برای برنامههایی که از منابع محاسباتی زیادی استفاده نمیکنند یا نیاز به مقیاسپذیری آسان دارند، مناسب است. به عنوان مثال، برنامههای زیر میتوانند از معماری سرورلس استفاده کنند:
برخی از ارائهدهندگان خدمات ابری که از معماری Serverless پشتیبانی میکنند عبارتند از:
Domain Driven Design
طراحی دامنه محور (DDD) یک رویکرد طراحی نرمافزار است که تمرکز اصلی آن، مدل کردن نرمافزاری است که دامنه نرمافزار با دانش دریافتی از متخصصان آن دامنه، مطابقت داشته باشد. در این رویکرد طراحی، ساختار و زبان کد نرمافزار (نام کلاسها، نام متدها، نام متغیرهای کلاس) باید با دامنه کسب و کار مطابق داشته باشد.
آم . DDD توسط اریک ایوانز در کتاب خود با همین عنوان که در سال ۲۰۰۳ منتشر شد، ابداع شدهاست. ایوانز معتقد است که DDD یک رویکرد ضروری برای توسعه نرمافزار در دامنههای پیچیده است.
آم . DDD شامل مجموعهای از مفاهیم و تکنیکها است که میتوانند برای بهبود کیفیت نرمافزار، افزایش قابلیت نگهداری آن و تسهیل همکاری بین توسعهدهندگان و متخصصان دامنه استفاده شوند.
مزایای DDD
آم . DDD میتواند مزایای متعددی را برای توسعه نرمافزار به همراه داشته باشد، از جمله:
مفاهیم اصلی DDD
آم . DDD شامل مجموعهای از مفاهیم اصلی است که میتوانند برای توسعه نرمافزار در دامنههای پیچیده استفاده شوند. برخی از این مفاهیم عبارتند از:
تکنیکهای DDD
آم . DDD همچنین شامل مجموعهای از تکنیکها است که میتوانند برای پیادهسازی مفاهیم اصلی آن استفاده شوند. برخی از این تکنیکها عبارتند از:
Hexagonal architecture
در معماری شش ضلعی، نرم افزار به یک شش ضلعی و چندین پورت تقسیم می شود. شش ضلعی هسته نرم افزار است و پورت ها نقاط اتصال بین شش ضلعی و دنیای خارج هستند.
شش ضلعی نماد یکپارچه سازی است. همه چیز در داخل شش ضلعی یکپارچه است و از تغییرات دنیای خارج جدا است.
پورت ها نماد انعطاف پذیری هستند. هر پورت می تواند به هر چیزی در دنیای خارج متصل شود.
در یک استعاره عامیانه، می توان گفت که شش ضلعی یک لانه زنبوری است. لانه زنبوری یک ساختار محکم و یکپارچه است که از تغییرات محیطی محافظت می کند. زنبورها می توانند از لانه زنبوری برای حمل و نقل غذا، تولید عسل و پرورش فرزندان خود استفاده کنند.
در مورد نرم افزار، شش ضلعی می تواند برای حمل و نقل داده ها، ارائه خدمات و اجرای منطق تجاری استفاده شود.
خلاصه اینکه ، معماری شش ضلعی یک الگو برای طراحی نرم افزار است که بر یکپارچه سازی، انعطاف پذیری و مقاومت تأکید دارد.
Event Sourcing
آم . Event Sourcing یک الگوریتم معماری نرم افزاره که در آن، تمام تغییراتی که در یک سیستم رخ میده، به صورت رویداد ثبت میشن. این رویدادها میتونن هر چیزی باشن، از یک تغییر ساده در مقدار یک فیلد تا یک اتفاق مهم مثل ثبت سفارش یا پرداخت پول.
فرض کن که داریم یک سیستم فروشگاه اینترنتی میسازیم. در این سیستم، هر بار که یک کاربر محصولی رو سفارش میده، یک رویداد سفارش ثبت میشه. این رویداد شامل اطلاعاتی مثل شناسه کاربر، شناسه محصول، تعداد محصولات و ... هست.
در سیستمهای سنتی، معمولاً فقط آخرین وضعیت سیستم ذخیره میشه. یعنی اگر بخوایم ببینیم که در تاریخ فلان، فلان کاربر چه محصولاتی رو سفارش داده، باید تمام تغییراتی که از آن تاریخ تا الان در سیستم رخ داده رو دنبال کنیم.
اما در Event Sourcing، تمام تغییراتی که در سیستم رخ میده، ذخیره میشن. بنابراین، برای اینکه ببینیم در تاریخ فلان، فلان کاربر چه محصولاتی رو سفارش داده، فقط کافیه رویدادها رو از ابتدای تاریخ تا تاریخ مورد نظر بخونیم.
آم . Event Sourcing مزایای زیادی داره. از جمله این مزایا میشه به موارد زیر اشاره کرد:
البته Event Sourcing معایبی هم داره. از جمله این معایب میشه به موارد زیر اشاره کرد:
در کل، Event Sourcing یک الگوریتم معماری نرم افزاره که مزایای زیادی داره. اما پیادهسازیش نیاز به دانش و تجربه کافی داره.
حالا میخوام یه مثال عامیانه از Event Sourcing بزنم. فرض کن که داری یه دفترچه خاطرات داری و هر روز یه اتفاقی که افتاده رو توش مینویسی. وقتی میخوای ببینی که در تاریخ فلان، فلان اتفاقی افتاده، فقط کافیه دفترچه خاطرات رو از اول بخونی.
آم . Event Sourcing هم همینطوره. تمام تغییراتی که در سیستم رخ میده، میشه به عنوان یه اتفاق در نظر گرفت. بنابراین، Event Sourcing شبیه یه دفترچه خاطرات برای سیستم نرم افزاریه.
Low code platforms
آم . Low code platforms یه جور نرمافزاریه که به آدمها کمک میکنه بدون اینکه کدنویسی بلد باشن، نرمافزار بسازن. این نرمافزارها با یه رابط کاربری گرافیکی (GUI) کار میکنن و به آدمها اجازه میدن که اجزای نرمافزار رو مثل لوپ، شرط، دکمه و ... رو به هم وصل کنن و نرمافزار رو بسازن.
فرض کن که میخوای یه سایت فروشگاهی بسازی. بدون استفاده از Low code platforms، باید کدهای زیادی بنویسی تا سایت رو بسازن. ولی با استفاده از Low code platforms، فقط کافیه که اجزای سایت رو مثل لوپ، شرط، دکمه و ... رو به هم وصل کنی و سایت رو بسازی.
آم . Low code platforms مزایای زیادی داره. اول اینکه، ساخت نرمافزار رو برای آدمهایی که کدنویسی بلد نیستن، آسون میکنه. دوم اینکه، زمان و هزینه ساخت نرمافزار رو کاهش میده. سوم اینکه، انعطافپذیری نرمافزار رو افزایش میده.
آم . Low code platforms در حال حاضر داره خیلی محبوب میشه. شرکتهای بزرگ و کوچک زیادی از Low code platforms استفاده میکنن.
حالا یه مثال عامیانه از استفاده از Low code platforms بزنم. فرض کن که تو یه فروشگاه اینترنتی کار میکنی. میخوای یه قابلیت جدید به فروشگاه اضافه کنی. مثلاً میخوای یه بخش نظرات برای محصولات اضافه کنی. بدون استفاده از Low code platforms، باید کدهای زیادی بنویسی تا این قابلیت رو اضافه کنی. ولی با استفاده از Low code platforms، فقط کافیه که یه سری اجزا رو به هم وصل کنی و قابلیت نظرات رو اضافه کنی.
آم . Low code platforms یه ابزار قدرتمندیه که میتونه به همه کمک کنه تا نرمافزار بسازن. اگر کدنویسی بلد نیستی، Low code platforms یه گزینه عالی برای ساخت نرمافزاره.
Business Process Management Systems (BPMS)
آم . BPMS مخفف Business Process Management Systems هست که میشه گفت یه نرم افزاره که به سازمان ها کمک میکنه فرآیندهای کاری خودشون رو بهتر مدیریت کنن.
فرض کن یه شرکتی داره یه محصولی رو تولید میکنه. از سفارش مشتری تا تحویل محصول، یه سری فرآیند هست که باید طی بشه. این فرآیندها شامل کارهایی مثل ثبت سفارش، تولید محصول، بسته بندی و ارسال محصول هستن.
حالا فرض کن که شرکت از BPMS استفاده میکنه. این نرم افزار به شرکت کمک میکنه تا این فرآیندها رو به صورت دقیق و قابل پیش بینی مدلسازی کنه. یعنی مشخص میکنه که هر کار توسط چه کسی و در چه زمانی باید انجام بشه.
استفاده از BPMS یه سری مزایا داره. اول اینکه باعث میشه فرآیندها به صورت موثرتری انجام بشن. یعنی زمان کمتری صرف میشن و خطاها کمتر میشن. دوم اینکه باعث میشه شرکت دید بهتری نسبت به فرآیندهاش داشته باشه. یعنی میتونه نقاط ضعف فرآیندها رو شناسایی کنه و اونها رو بهبود بده.
حالا بیا یه مثال از BPMS توی زندگی روزمره بزنم. فرض کن که تو یه تاکسی سوار شدی. راننده تاکسی از نرم افزار BPMS استفاده میکنه. این نرم افزار به راننده کمک میکنه تا مسیر رو به صورت بهینه طی کنه و از ترافیک دوری کنه. همچنین به راننده کمک میکنه تا اطلاعات تماس مشتری رو به صورت خودکار ثبت کنه.
خلاصه اینکه BPMS یه ابزار مفید برای سازمان ها و کسب و کارهاست که میتونه به بهبود فرآیندهای کاری و افزایش بهره وری کمک کنه.
چند تا مثال دیگه از کاربرد BPMS:
در کل، BPMS یه ابزار قدرتمنده که میتونه به سازمان ها کمک کنه تا فرآیندهای کاری خودشون رو بهینه و موثرتر کنن.
Message Queue (such as Kafka and RabbitMQ)
فرض کن یه برنامه داری که هر چند وقت یه بار یه پیامی رو به یه برنامه دیگه میفرسته. مثلا یه برنامه که وضعیت دمای هوا رو در شهر تهران جمع آوری میکنه و هر چند دقیقه یه بار این اطلاعات رو به یه برنامه دیگه که وضعیت هوا رو در همه شهرهای ایران نشون میده، میفرسته.
حالا فرض کن که اون برنامه دیگه، یه برنامه بزرگ و پیچیده باشه که همزمان با دریافت پیام های زیادی از برنامه های مختلف سر و کار داره. اگه برنامه اول پیام رو مستقیما به برنامه دوم بفرسته، ممکنه که برنامه دوم در لحظه دریافت پیام، مشغول انجام کار دیگه ای باشه و پیام رو دریافت نکنه. یا ممکنه که برنامه دوم ظرفیت لازم برای دریافت پیام رو نداشته باشه.
در این حالت، میشه از Message Queue استفاده کرد. Message Queue یه برنامه واسطه هست که پیام های برنامه اول رو دریافت میکنه و اونها رو در صفی نگه میداره. بعدا، برنامه دوم میتونه به Message Queue مراجعه کنه و پیام های مورد نیاز خودش رو از صف دریافت کنه.
آم . Message Queue مزایای زیادی داره. یکی از مزایای اصلی اون اینه که باعث افزایش کارایی برنامه میشه. چون برنامه اول دیگه لازم نیست نگران این باشه که پیامش رو درست دریافت میکنه یا نه. همچنین، Message Queue باعث افزایش انعطاف پذیری برنامه میشه. چون برنامه دوم میتونه در هر زمان و مکانی به Message Queue مراجعه کنه و پیام مورد نیاز خودش رو دریافت کنه.
در زبان عامیانه، Message Queue رو میشه یه جعبه پستی تصور کرد. برنامه اول پیامش رو توی جعبه پستی میذاره و برنامه دوم میره از جعبه پستی پیام رو برمیداره.
بعضی از Message Queue های معروف عبارتند از:
آم . Kafka یه Message Queue محبوب برای پردازش داده های جریانی هست. RabbitMQ یه Message Queue محبوب برای برنامه های کاربردی هست. Amazon SQS و Azure Queue Storage Message Queue های ابری هستن که توسط شرکت های آمازون و مایکروسافت ارائه میشن.
Container orchestration (such as Kubernetes)
فرض کن که تو یه رستوران بزرگ داری که توش یه عالمه ظرف و وسایل مختلف داری. حالا فرض کن که تو میخوای یه غذای جدید درست کنی که نیاز به یه سری از این ظرفها و وسایل داره. اگه خودت بری و هر کدوم از این ظرفها و وسایل رو یکییکی پیدا کنی و کنار هم بذار، کار خیلی سخت و زمانبری میشه. حالا اگه یه آدم دیگه رو بگیری که بهت کمک کنه، کار کمی راحتتر میشه. ولی بازم کار خیلی دقیق و منظمی نیست.
حالا فرض کن که یه سیستم کامپیوتری داشته باشی که این کار رو برای تو انجام بده. این سیستم کامپیوتری میدونه که کدوم ظرفها و وسایل برای درست کردن غذای مورد نظرت لازمه. این سیستم میتونه به صورت خودکار این ظرفها و وسایل رو پیدا کنه و کنار هم بذاره. این سیستم همچنین میتونه تعداد این ظرفها و وسایل رو متناسب با تعداد غذای مورد نظرت تنظیم کنه.
آم . Container orchestration هم دقیقاً همین کار رو انجام میده. این سیستم کامپیوتری میدونه که کدوم containerها برای درست کردن یه برنامه یا سرویس مورد نیازه. این سیستم میتونه به صورت خودکار این containerها رو روی سرورها یا کامپیوترها پخش کنه و تعدادشون رو متناسب با نیاز برنامه یا سرویس تنظیم کنه.
به زبان عامیانه، Container orchestration یه سیستم کامپیوتری هست که کار مدیریت containerها رو برای ما آسونتر میکنه. این سیستم میتونه کارهای زیر رو انجام بده:
آم . Container orchestration برای توسعهدهندگان و تیمهای عملیاتی خیلی مفید هست. این سیستم میتونه کار توسعه و نگهداری برنامهها و سرویسها رو خیلی سادهتر کنه.
یه مثال از کاربرد Container orchestration اینه که فرض کن که شما یه وبسایت دارید که تعداد بازدیدکنندگانش خیلی زیاده. اگه شما به صورت دستی containerها رو برای این وبسایت راهاندازی کنید، کار خیلی سخت و زمانبری میشه. ولی اگه از Container orchestration استفاده کنید، این سیستم به صورت خودکار containerها رو برای شما راهاندازی میکنه و تعدادشون رو متناسب با تعداد بازدیدکنندگان تنظیم میکنه.
یه مثال دیگه از کاربرد Container orchestration اینه که فرض کن که شما یه برنامهٔ پردازش داده دارید که نیاز به منابع زیادی داره. اگه شما به صورت دستی containerها رو برای این برنامه راهاندازی کنید، ممکنه که منابع کافی برای این برنامه فراهم نباشه. ولی اگه از Container orchestration استفاده کنید، این سیستم به صورت خودکار منابع مورد نیاز برنامه رو برای شما فراهم میکنه.
در کل، Container orchestration یه ابزار قدرتمند هست که میتونه کار توسعه و نگهداری برنامهها و سرویسها رو خیلی سادهتر کنه.
Log Management Tools (such as ELK)
ابزارهای مدیریت لاگ، مثل ELK، مثل یک اتاق نگهبانی برای سیستمهای کامپیوتری هستند. این اتاق نگهبانی، لاگهایی که از سیستمهای مختلف تولید میشن رو جمع میکنه و اونا رو نگه میداره.
لاگها، گزارشهایی از فعالیتهای سیستمها هستند. به عنوان مثال، لاگهای سیستمعامل، گزارشهایی از فعالیتهای کاربران، برنامهها و سختافزارها هستند. لاگهای برنامههای کاربردی، گزارشهایی از فعالیتهای کاربران و برنامهها هستند. لاگهای شبکه، گزارشهایی از فعالیتهای شبکه هستند.
ابزارهای مدیریت لاگ، این لاگها رو جمع میکنن و اونا رو ذخیره میکنن. این کار به مدیران سیستم کمک میکنه تا فعالیتهای سیستمها رو نظارت کنن و مشکلات احتمالی رو شناسایی کنن.
فرض کن که یک کاربر سعی کنه به سیستمهای شبکهی سازمان شما نفوذ کنه. ابزار مدیریت لاگ، این فعالیت رو در لاگهای شبکه ثبت میکنه. مدیر سیستم میتونه با استفاده از ابزار مدیریت لاگ، این لاگ رو بررسی کنه و متوجه بشه که یک کاربر سعی داشته به سیستمها نفوذ کنه.
ابزارهای مدیریت لاگ، کاربردهای مختلفی دارند. از جمله کاربردهای این ابزارها میتونیم به موارد زیر اشاره کنیم:
ابزارهای مدیریت لاگ، ابزارهای مهمی هستند که میتونن به مدیران سیستم کمک کنن تا سیستمها رو بهطور موثرتری مدیریت کنن.
حالا بیایید کمی دربارهی ELK صحبت کنیم. ELK یک مجموعهی نرمافزاری رایگان و متنباز برای مدیریت لاگ است. این مجموعهی نرمافزاری از سه ابزار زیر تشکیل شده است:
آم . ELK یک ابزار قدرتمند و انعطافپذیر است که میتونه برای انواع مختلفی از سیستمها استفاده بشه. این ابزار برای مدیران سیستمهای کوچک و متوسط تا سازمانهای بزرگ مناسب است.
Monitoring tools (such as Prometheus)
مانیتورینگ ابزاریه که بهت میگه سیستمت چطور کار میکنه.
فرض کن یه ماشین داری. مانیتورینگ مثل اینه که یه سنسور روی ماشینت نصب کنی که دمای موتور، سرعت چرخها، میزان بنزین و چیزای دیگه رو اندازه بگیره. با این اطلاعات میتونی ببینی که ماشینت چطور کار میکنه و اگه مشکلی پیش اومد، سریع متوجه بشی.
مانیتورینگ در سیستمهای کامپیوتری هم همین کارو میکنه. بهطور کلی، مانیتورینگ دو تا هدف داره:
آم . Prometheus یه ابزار مانیتورینگ متنباز و محبوبه. Prometheus از چیزی به اسم "متریک" برای جمعآوری اطلاعات استفاده میکنه. متریک یه عدده که وضعیت یه چیز رو نشون میده. مثلاً دمای موتور یه متریکه.
آم . Prometheus از طریق HTTP با منابع مختلف ارتباط برقرار میکنه و اطلاعاتشون رو جمعآوری میکنه. این منابع میتونن یه سرور، یه برنامه، یه دیتابیس یا هر چیز دیگهای باشن.
آم . Prometheus اطلاعات جمعآوریشده رو در یه پایگاه داده ذخیره میکنه. این پایگاه داده رو میتونی از طریق وبسایت Prometheus یا از طریق API Prometheus بررسی کنی.
آم . Prometheus برای سیستمهای بومی ابری خیلی مناسبه. سیستمهای بومی ابری معمولاً پویا و پیچیده هستن و مانیتورینگشون کار سختیه. Prometheus بهخاطر انعطافپذیری و سهولت استفاده، برای این سیستمها خیلی مناسبه.
اگر میخوای سیستمت رو بهطور موثر مانیتور کنی، Prometheus یه گزینه عالیه. Prometheus متنباز و رایگانه و یادگیریش هم خیلی راحته.
چند تا مثال از کاربردهای Prometheus:
در کل، Prometheus یه ابزار مانیتورینگ قدرتمند و انعطافپذیره که میتونه بهت کمک کنه سیستمت رو بهطور موثر مانیتور کنی.
Static Code Analysis (such as SonarQube)
تحلیل کد ایستا (Static Code Analysis) یه روشه که بدون اجرای کد، مشکلات احتمالی رو توی کد شناسایی میکنه. این مشکلات میتونه شامل باگها، آسیبپذیریها، و مشکلات امنیتی باشه.
آم . SonarQube یکی از ابزارهای تحلیل کد ایستاست که از محبوبیت زیادی برخورداره. این ابزار میتونه کد رو به زبانهای مختلف، از جمله جاوا، سی++، سی#، و جاوا اسکریپت، بررسی کنه.
نحوه کار تحلیل کد ایستا به این صورته که:
گزارش تحلیل کد ایستا میتونه شامل موارد زیر باشه:
تحلیل کد ایستا میتونه مزایای زیادی داشته باشه، از جمله:
در حالت عامیانه، تحلیل کد ایستا مثل اینه که شما یه ساختمان رو قبل از ساختش از نظر استحکام و ایمنی بررسی کنید. اگر مشکلی توی ساختمان باشه، میتونید قبل از اینکه هزینههای زیادی بکنید، مشکل رو برطرف کنید.
آم . SonarQube مثل یه مهندس ناظره که به شما کمک میکنه تا کیفیت ساختمان رو بررسی کنید. این ابزار میتونه مشکلات احتمالی رو به شما هشدار بده تا بتونید قبل از اینکه مشکل بزرگی پیش بیاد، اون رو برطرف کنید.
تحلیل کد ایستا یه ابزار ارزشمند برای توسعهدهندگان نرمافزاره. این ابزار میتونه به شما کمک کنه تا نرمافزاری با کیفیت و ایمن تولید کنید.
آم . بالاخره تموم شد . حدود 6 هفته به طول انجامید . این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.