<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مجتبی مرادی</title>
        <link>https://virgool.io/feed/@m_43936264</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 17:09:21</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1335847/avatar/atV186.jpeg?height=120&amp;width=120</url>
            <title>مجتبی مرادی</title>
            <link>https://virgool.io/@m_43936264</link>
        </image>

                    <item>
                <title>آشنایی با مفاهیم و ابزار Static Code Analysis</title>
                <link>https://virgool.io/@m_43936264/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85-%D9%88-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-static-code-analysis-uhia83fohxrl</link>
                <description>تجزیه و تحلیل استاتیک به تیم های توسعه ای که تحت فشار هستند کمک می کند. نسخه های با کیفیت باید به موقع تحویل داده می شد. استانداردهای کدگذاری و انطباق باید رعایت شود. و اشتباهات یک گزینه نیستند.به همین دلیل است که تیم های توسعه از ابزارهای تحلیل استاتیک استفاده می کنند. در اینجا، تجزیه و تحلیل استاتیک و مزایای استفاده از ابزار تجزیه و تحلیل کد استاتیک را مورد بحث قرار می دهیم.تجزیه و تحلیل استاتیکتجزیه و تحلیل استاتیک که به آن تحلیل کد استاتیک نیز می گویند، فرآیند تجزیه و تحلیل یک برنامه کامپیوتری برای یافتن مشکلات موجود در آن بدون اجرای واقعی آن است. به طور کلی، تجزیه و تحلیل استاتیک بر روی کد منبع برنامه با ابزارهایی انجام می شود که برنامه را به یک درخت نحو انتزاعی(AST) تبدیل می کند تا ساختار کد را درک کند و سپس مشکلات را در آن پیدا کند.این نوع تجزیه و تحلیل نقاط ضعف در کد منبع را که ممکن است منجر به آسیب‌پذیری شود، برطرف می‌کند. البته، این امر ممکن است از طریق بررسی کدهای دستی نیز حاصل شود. اما استفاده از ابزارهای خودکار بسیار مؤثرتر است.تجزیه و تحلیل استاتیک معمولاً برای مطابقت با دستورالعمل های کدگذاری - مانند MISRA استفاده می شود. و اغلب برای انطباق با استانداردهای صنعتی - مانند ISO 26262 استفاده می شود.تجزیه و تحلیل استاتیک چه نوع مشکلاتی را می تواند پیدا کند؟تجزیه و تحلیل استاتیک یک ابزار قدرتمند برای اطمینان از کیفیت و استحکام نرم افزار است و می تواند تعدادی از مسائل را قبل از اجرا در کد پیدا کند. برخی از این دسته از مسائل عبارتند از:آسیب پذیری های امنیتی بالقوهخطرات باگ و ضد الگوهانقض دستورالعمل های سبک کدمسائل مربوط به عملکردکد مرده یا استفاده نشدهتحلیل کد ایستا در کدام مرحله انجام می شود؟تجزیه و تحلیل کد استاتیک در اوایل توسعه، قبل از شروع تست نرم افزار انجام می شود. برای سازمان‌هایی که DevOps را تمرین می‌کنند، تجزیه و تحلیل کد استاتیک همچنین با ایجاد یک حلقه بازخورد خودکار از DevOps پشتیبانی می کند. توسعه دهندگان زودتر متوجه می شوند که آیا مشکلی در کد آنها وجود دارد. و رفع این مشکلات آسان تر خواهد بود.تفاوت بین تجزیه و تحلیل استاتیک و تحلیل پویا چیست؟هر دو نوع عیوب را تشخیص می دهند. تفاوت بزرگ در جایی است که آنها نقص هایی را در چرخه عمر توسعه پیدا می کنند. تجزیه و تحلیل استاتیک، قبل از اجرای یک برنامه، نقص ها را شناسایی می کند (به عنوان مثال، بین کدگذاری و تست واحد). تجزیه و تحلیل کد پویا پس از اجرای یک برنامه (به عنوان مثال، در طول آزمایش واحد) نقص ها را شناسایی می کند. با این حال، برخی از خطاهای کدگذاری ممکن است در طول آزمایش واحد ظاهر نشوند. بنابراین، ایراداتی وجود دارد که آزمایش پویا ممکن است آن‌ها را که تجزیه و تحلیل کد استاتیک می‌تواند پیدا کند، از دست بدهد.مزایای ابزارهای تحلیل استاتیک چیست؟چندین مزیت از ابزارهای تجزیه و تحلیل کد استاتیک وجود دارد - به خصوص اگر نیاز به رعایت استانداردهای صنعتی دارید. بهترین ابزارهای تحلیل کد استاتیک سرعت، عمق و دقت را ارائه می دهند.سرعتزمان می برد تا توسعه دهندگان به بررسی کد دستی بپردازند. ابزارهای خودکار بسیار سریعتر هستند. بررسی کد استاتیک مشکلات را در مراحل اولیه برطرف می کند. و دقیقاً محل خطا را در کد مشخص می کند. بنابراین، شما قادر خواهید بود این خطاها را سریعتر برطرف کنید. بعلاوه، رفع خطاهای کدنویسی که قبلاً پیدا شده اند هزینه کمتری دارند.عمقآزمایش نمی تواند تمام مسیرهای اجرای کد ممکن را پوشش دهد. اما یک تحلیلگر کد استاتیک می تواند. در حین کار بر روی ساخت، کد را بررسی می کند. بر اساس قوانینی که اعمال کرده اید، تجزیه و تحلیل عمیقی از جایی که ممکن است مشکلات احتمالی در کد شما وجود داشته باشد، دریافت خواهید کرد.دقتبررسی کد دستی مستعد خطاهای انسانی است. ابزارهای خودکار نیستند. آنها هر خط کد را اسکن می کنند تا مشکلات احتمالی را شناسایی کنند. این به شما کمک می کند تا مطمئن شوید که کد با بالاترین کیفیت وجود دارد - قبل از شروع آزمایش. از این گذشته، هنگامی که شما از یک استاندارد کدنویسی پیروی می کنید، کیفیت بسیار مهم است.چگونه یک ابزار تحلیل کد استاتیک انتخاب کنیم؟در اینجا چند نکته وجود دارد که باید هنگام تصمیم گیری اینکه کدام ابزار برای شما مناسب است در نظر بگیرید.زبان برنامه نویسیآنالایزرها برای بسیاری از زبان های برنامه نویسی مختلف طراحی شده اند. بنابراین، مهم است که ابزاری را انتخاب کنید که از زبان شما پشتیبانی کند.استانداردهایکی از کاربردهای اصلی آنالایزرهای استاتیک، رعایت استانداردها است. بنابراین، اگر در یک صنعت تنظیم شده هستید که به استاندارد کدنویسی نیاز دارد، باید مطمئن شوید که ابزار شما از آن استاندارد پشتیبانی می کند.ابزارابزار SonarQubeابزار SonarQube یکی از محبوب‌ترین ابزارهای تحلیل کد استاتیک است. این یک پلت فرم منبع باز برای بازرسی مداوم کیفیت کد است و بررسی های خودکار را از طریق تجزیه و تحلیل کد استاتیک انجام می دهد. علاوه بر این، می‌تواند باگ‌ها، بوهای کد و بسیاری از آسیب‌پذیری‌های امنیتی دیگر را شناسایی و گزارش کند.ویژگی های بیشتری:ابزار SonarQube با چندین پلتفرم از جمله GitHub، Azure DevOps، Bitbucket، GitLab، Docker Support، و IDE های کدنویسی مانند Eclipse، Visual Studio و غیره ادغام می شود. کد ویژوال استودیو و IntelliJ IDEA.همچنین از بیش از 25 زبان برنامه نویسی قابل توجه، از جمله C#، Python، Cobol، PHP و Java پشتیبانی می کند.این ابزار به توسعه‌دهندگان کمک می‌کند تا با اجتناب از باگ‌ها یا رفتارهای تعریف‌نشده، نقض‌ها یا حملات، و کاهش به‌روزرسانی کد، و افزایش سرعت توسعه، یک حمله سه جانبه به کد خود را مشاهده کنند.توسعه‌دهندگان می‌توانند به راحتی با خطاها و نادیده‌گیری‌های خود مقابله کنند، زیرا اشتباهات بر اساس شدت طبقه‌بندی می‌شوند، با استانداردهای کدگذاری امن (به عنوان مثال، CERT، MISRA و CWE) نقشه‌برداری می‌شوند، کاملاً مستند هستند و به طور کلی منجر به اجرای بهترین شیوه‌ها و بهبود کدنویسی می‌شوند.همچنین کدهای تکراری، استانداردهای کدگذاری ضعیف، تست های واحد، پوشش کد، پیچیدگی کد و نظرات را گزارش می دهد.اگرچه اکثر کاربران و حتی سازمان‌ها از نسخه رایگان SonarQube خوشحال خواهند شد، اما می‌توانند از میان چند نسخه پولی دیگر این نرم‌افزار که دارای ویژگی‌ها و قابلیت‌های پیشرفته هستند، انتخاب کنند.نسخه های مختلف SonarQube را میتوان به صورت رایگان استفاده کرد.ابزار Checkmarx SAST CxSASTبا Checkmarx، ما یک بازیگر پیشرو دیگر در بازار ابزار تحلیل کد استاتیک داریم. محصول آن - CxSAST - یک ابزار تجزیه و تحلیل استاتیک، انعطاف‌پذیر و دقیق در سطح سازمانی است.می تواند صدها آسیب پذیری امنیتی را در هر کدی شناسایی کند. توسط DevOps و تیم‌های امنیتی برای اسکن کدهای اولیه در SDLC برای شناسایی آسیب‌پذیری‌ها، مسائل مربوط به انطباق و مشکلات منطق تجاری استفاده می‌شود - و همچنین توصیه‌هایی در مورد نحوه حل آنها ارائه می‌دهد.ویژگی های بیشتری:ابزار Checkmarx می تواند به راحتی در IDE ها، سرورها و خطوط لوله CI/CD ادغام شود، به این معنی که می تواند آسیب پذیری های امنیتی را در کدهای کامپایل شده (DAST) و منبع (SAST) شناسایی کند. همچنین با بیش از 25 زبان و فریمورک سازگار است.با ادامه رشد برنامه‌ها، به راحتی مقیاس‌پذیر می‌شود و به تیم‌های DevOps اجازه می‌دهد تا بدون نگرانی در مورد کدهای قدیمی‌تر، روی بخش‌های جدیدتر برنامه خود تمرکز کنند.توسعه دهندگان می توانند اسکن های افزایشی سریع و دقیق را هر زمان که نیاز داشته باشند، بدون اتلاف وقت روی کدهایی که قبلاً بررسی شده است، اجرا کنند.دارای پرس و جوهای قابل تنظیم برای رسیدگی حتی منحصر به فردترین کدها، بینش عملی برای اشکال زدایی سریعتر، و یک رابط کاربری وب ساده برای رفع مشکلات ردیابی.ویژگی Best Fix Location این ابزار به توسعه‌دهندگان اجازه می‌دهد تا آسیب‌پذیری‌های متعدد را در یک نقطه از کد برطرف کنند – آن‌ها می‌توانند به راحتی متوجه شوند که همه باگ‌ها کجا هستند و به سرعت آن‌ها را برطرف کنند.نسخه ی آزمایشی Checkmarx SAST (CxSAST) را میتوان به صورت رایگان امتحان کرد.ابزار Synopsis Coverityبا Synopsis Coverity Static Analysis، توسعه‌دهندگان می‌توانند مشتاقانه منتظر یافتن و رفع سریع اشکالات در کد خود باشند. Coverity نقایص مهم کیفیت نرم افزار و آسیب پذیری های امنیتی در کد و هرگونه نقص در استانداردهای انطباق صنعت را شناسایی می کند.این ابزاری با کاربری آسان، دقیق و مقیاس‌پذیر است که باگ‌ها را در مراحل اولیه SDLC برطرف می‌کند.ویژگی های بیشتری:به لطف افزونه Code Sight IDE، Coverity به توسعه دهندگان این امکان را می دهد تا هنگام نوشتن کد خود، مشکلات امنیتی یا کیفیت را در زمان واقعی پیدا کرده و برطرف کنند.توسعه‌دهندگان همچنین از آنالیزهای بی‌درنگ، دقیق و تدریجی برخوردار هستند که به‌طور یکپارچه در پس‌زمینه اجرا می‌شوند. همچنین به آنها نشان داده می شود که چگونه مشکلات را برطرف کرده و کد خود را از داخل IDE خود ایمن کنند.ابزار در حال اجرا به زمین برخورد می کند زیرا می تواند بلافاصله شروع به شناسایی و رفع اشکالات در خارج از جعبه کند - بدون نیاز به تنظیم.از طریق API های REST به خوبی با خطوط لوله DevOps ادغام می شود و یکپارچه سازی مداوم (CI) و مدیریت پیکربندی نرم افزار (SCM) را ارائه می دهد.همچنین، این ابزار یک نمایه ریسک انباشته متمرکز از کل پورتفولیوهای برنامه را ارائه می دهد، در حالی که API ها امکان صادرات نتایج به سایر ابزارهای گزارش ریسک را فراهم می کنند.توسعه‌دهندگان می‌توانند آسیب‌پذیری‌های شناسایی‌شده را بر اساس دسته‌بندی فیلتر کنند، آسیب‌پذیری‌ها را بر اساس اهمیت آن‌ها اولویت‌بندی کنند، و انطباق با سیاست‌های امنیتی را در میان تیم‌ها و پروژه‌ها مدیریت کنند.آنها همچنین می‌توانند به گزارش‌های روند، یا حتی گزارش‌هایی که سطوح شدت را در زمان‌های مختلف نشان می‌دهند، دسترسی داشته باشند تا اطلاعات مربوط به وضعیت امنیتی پروژه‌ها را تجزیه و تحلیل کنند. این گزارش‌ها را می‌توان برای اثبات انطباق در زمان ممیزی صادر کرد.نسخه ی آزمایشی Coverity را میتوان به صورت رایگان امتحان کرد.معرفی شرکت‌ها در این حوزه در ایرانمتاسفانه شرکت‌های زیادی نیستند که به طور مشخص تجزیه و تحلیل ایستا را انجام دهند. اما تا جایی که بنده مطلع هستم شرکت تست ایران  تجزیه و تحلیل را برای برنامه‌های ما ارائه می‌دهد.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://www.whitehatsec.com/glossary/content/static-analysissqmtest.irhttps://www.perforce.com/blog/sca/what-static-analysishttps://www.comparitech.com/net-admin/best-static-code-analysis-tools/</description>
                <category>مجتبی مرادی</category>
                <author>مجتبی مرادی</author>
                <pubDate>Tue, 21 Dec 2021 13:51:33 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با Software Monitoring و ابزار‌های آن</title>
                <link>https://virgool.io/@m_43936264/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-software-monitoring-%D9%88-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-%D9%87%D8%A7%DB%8C-%D8%A2%D9%86-ztedvrldrc8p</link>
                <description>مقدمهدر این پست قصد داریم که با مفهوم Monitoring ، مزایای آن، اهمیت آن و شرکت‌هایی که در ایران این خدمات را محیا می‌کنند، صحبت کنیم. همچنین در این پست قصد داریم که ابزارهای موجود و معروف در این زمینه را معرفی کینم.نرم افزار مانیتورینگ به چه معناست؟نرم افزار مانیتورینگ عملیات و فعالیت های کاربران، برنامه های کاربردی و خدمات شبکه را در رایانه یا سیستم های سازمانی مشاهده و ردیابی می کند. این نوع نرم افزار راهی برای نظارت بر فرآیندهای کلی که بر روی یک سیستم محاسباتی انجام می شود، فراهم می کند و خدمات گزارش دهی را به مدیر سیستم یا شبکه ارائه می‌دهد. نرم افزار مانیتورینگ با نام نرم افزار نظارت کامپیوتری نیز شناخته می شود.هدف از نرم افزار مانیتورینگ چیست؟نرم افزار مانیتورینگ عملکرد بالا را برای نرم افزار شما تضمین می کند. نظارت مداوم بر سیستم به شما امکان می‌دهد عملکرد و در دسترس بودن برنامه های نرم افزاری را مدیریت کنید. این منجر به زمان پاسخگویی سریع، بهبود فرآیندهای محاسباتی و رضایت مشتریان می شود. به خصوص تجربه کاربر نهایی دیجیتال یکی از اهداف اصلی هنگام برخورد با تعاملات واقعی کاربر و معاملات تجاری است. چرا استفاده از نرم افزار مانیتورینگ سیستم توصیه می‌شود؟هنگامی که شما یک سیستم یا یک زیرساخت کامل را مدیریت می کنید، باید اطمینان حاصل کنید که سرویس های مختلف عناصر سیستم به خوبی اجرا می شوند تا خدمات IT شما ادامه یابد. دلیل اصلی این است که هنگام استفاده از هر نرم افزاری، بسیاری از کاربران به محض بروز مشکل عملکرد متوجه آن می شوند. آنها باید به سرعت آن را حل کنند و علت آن را پیدا کنند. نرم افزار نظارت بر سیستم به حل این مشکلات کمک می کند، که ممکن است منجر به شکست قابل توجهی در سیستم شود.در زیر برخی از دلایل مهم برای استفاده از نرم افزار نظارت بر سیستم ذکر شده است:برای نظارت بر فعالیت های برنامه های کاربردی سیستم و هاست ها، هم On-premiseو هم Cloud.برای کنترل عملکرد عناصر سیستم به عنوان پشته برنامه.برای یافتن علت اصلی مشکلات عملکرد در هر نرم افزار.نظارت در زمان واقعی برای تشخیص خطاها و خرابی های سرویس قبل از ایجاد هر گونه تأثیری.برای نظارت بر سرورها، دستگاه های شبکه، عملکرد رابط و ظرفیت پیوند شبکه.نحوه کار نرم‌ افزار مانیتورینگنرم افزار مانیتورینگ در درجه اول نوعی نرم افزار امنیتی و نظارتی است که بر روی یک سیستم یا شبکه شرکتی نصب می شود. این می تواند یک برنامه مستقل باشد یا به عنوان بخشی از نرم افزار یا سخت افزار فایروال، نرم افزار آنتی ویروس یا مجموعه نرم افزار امنیت اطلاعات عمل کند. به طور کلی، نرم افزار نظارت، تمام ترافیک شبکه ورودی/خروجی، فرآیندها و تعاملات کاربر، و فعالیت های برنامه را ثبت و ثبت می کند. این شامل قوانین، امضاها، رویدادها و ترجیحات خاصی است که حالت ها و فعالیت های عادی و غیرعادی سیستم را توصیف می کند. همچنین در صورت شناسایی هرگونه تخلف یا نقضی که منجر به رفتار غیرعادی سیستم، فعالیت کاربر یا جریان شبکه شود، به مدیر هشدار می دهد. علاوه بر این، چنین نرم افزاری برای جاسوسی از کارمندان یا فعالیت های کاربران در یک شبکه شرکتی نیز استفاده می شود.مزایاقابل ذکر است، برای جلوگیری از مشکلات سیستم و کمک به تصمیم گیری آگاهانه برای عملکرد ثابت، بهتر است به زیرساخت خود را کاملاً دید داشته باشید.مزایای استفاده از نرم افزار مانیتورینگ سیستم در زیر ذکر شده است:توانمندسازی بینش ها و گزارش های داده محور یک سازمان برای تصمیم گیری بهتر.برای جلوگیری از فاجعه و افزایش بهره وری و همچنین کارایی، مشکلات را زود تشخیص دهید.به کاربران اجازه دهید با آگاهی از نحوه تعامل یک سیستم با سیستم دیگر، برای ارتقای فناوری اطلاعات آماده، برنامه ریزی و بودجه بندی کنند.نظارت از راه دور به صرفه جویی در زمان و به حداقل رساندن اختلالات کمک می کند.با نگهداری پیشگیرانه از خرابی و زیان کسب و کار جلوگیری می کند.ابزارابزار SolarWinds Server and Application Monitorقیمت گذاری سرور و مانیتور برنامهSolarWinds: SolarWinds  یک طرح قیمت گذاری مبتنی بر قیمت را ارائه می دهد که از 2995 دلار شروع می شود و یک دوره آزمایشی رایگان 30 روزه دارد. شما باید با توجه به نیاز خود درخواست قیمت دهید.SolarWinds نظارت جامع سرور را ساده، سبک، با استفاده آسان و در عین حال به اندازه کافی قدرتمند برای مدیریت شرایط پیچیده ساخته است. علاوه بر این، نظارت بر عملکرد برنامه برای بیش از 1200 برنامه و سیستم کار می کند.با این حال، SolarWinds انواع مختلفی از راه حل ها را ارائه می دهد، از جمله امنیت فناوری اطلاعات، عملیات فناوری اطلاعات، مدیریت پایگاه داده، راه حل شبکه، مدیریت زیرساخت، راه حل Azure Cloud، راه حلOffice 365، مقیاس پذیری، راه حلCISCO، و بسیاری دیگر.با SolarWinds، می‌توانید در چند دقیقه شروع به کار کنید، نظارت بر سرور را سفارشی کنید، و وابستگی‌های برنامه را تجسم کنید.امکانات:مانیتورینگ Active Directory، نظارت بر سرور بدون عامل، نظارت Apache Cassandra، و نظارت بر زمان پاسخگویی برنامه و سرور.نقشه وابستگی برنامه، ابزارهای نظارتAWS، نظارتAzure IaaS، نظارتPaas و نظارت بر عملکرد Azure.مانیتورینگ UCS Cisco، مدیریت سرور CentOS، مانیتورینگ Citrix برای XenApp و XenDesktop، مدیریت و نظارت سرور Dell.مدیریت عملکرد سرور DNS، مانیتورینگ Docker، کنترل کننده دامنه، نظارت بر فایل‌ها، نظارت بر ایمیل، و نظارت بر عملکردGlassfish.ابزار eG Innovationsاین نرم‌افزار مناسبترین مورد برای مشاغل کوچک تا بزرگ، سازمان های دولتی و ارائه دهندگان خدمات مدیریت است.قیمت گذاری eG Innovations :eG Innovations با گزینه های قیمت گذاری مختلفی مانند Easy Evaluation (Cloud Deployed)، Perpetual License (On-premise)، اشتراک(On-premise)، SaaS (Cloud Deployed) و خدمات حسابرسی عملکرد (On-premise یا) در دسترس است. ابر). می توانید یک آزمایش رایگان برای طرح ارزیابی آسان شروع کنید.eG Innovations یک راه حل جامع نظارت بر عملکرد برنامه و زیرساخت فناوری اطلاعات را ارائه می دهد. شما قادر خواهید بود بر هر لایه و هر لایه از محیط IT خود نظارت داشته باشید. دارای تخصص داخلی، KPI، تجزیه و تحلیل، گزارش‌ها و یادگیری ماشینی برای شناسایی و تشخیص خودکار مشکلات است.قابل استقرار به عنوان راه حلSaaS یا راه حل داخلی، eG Enterprise دارای یک مدل استقرار و مجوز جهانی ساده است که استقرار آن را ساده و بسیار مقرون به صرفه می کند.امکانات:نوآوری‌های eG دید عملکردی سرتاسری را فراهم می‌کنند.پوشش بسیار گسترده ای دارد و می تواند بیش از 200 فناوری کاربردی، بیش از 20 دستگاه ذخیره سازی، بیش از 10 سیستم عامل و بیش از 10 پلت فرم مجازی سازی را نظارت کند. محیط های ابری رایج نیز پشتیبانی می شوند.قابلیت های نظارت عمیق مجازی سازی را تعبیه می کند. نظارت درونی/خارجی ماشین‌های مجازی، نمای 360 درجه‌ای از عملکرد ماشین‌های مجازی را فراهم می‌کند، نظارت بر سیستم و عیب‌یابی را ساده‌تر می‌کند.گزینه های نظارت عامل و بدون عامل در دسترس هستند.نماهای مدل لایه ساده نظارت بر سیستم ها و پشته های ناهمگن را آسان می کند.ابزار NinjaOne (قبلاً NinjaRMM)بهترین ابزار برای  ارائه دهندگان خدمات مدیریت شده (MSP)، مشاغل خدمات فناوری اطلاعات، و شرکت های کوچک و متوسط ​​/ شرکت های متوسط ​​با بخش های کوچک فناوری اطلاعات است.قیمت گذاری NinjaOne :NinjaOne یک آزمایش رایگان از محصول خود ارائه می دهد. قیمت نینجا بر اساس هر دستگاه و بر اساس ویژگی های مورد نیاز است.ابزار NinjaOne نرم افزار مدیریت نقطه پایانی بصری را برای ارائه دهندگان خدمات مدیریت شده (MSP) و متخصصان فناوری اطلاعات فراهم می کند تا به طور فعال مسائل IT را از هر کجا مدیریت کنند.با Ninja، مجموعه کاملی از ابزارها را برای نظارت، مدیریت، ایمن سازی و بهبود همه دستگاه های شبکه، ویندوز، ایستگاه های کاری مک، لپ تاپ ها و سرورها بدون در نظر گرفتن موقعیت مکانی آنها دریافت می کنید.امکانات:سلامت و بهره وری تمام ایستگاه های کاری ویندوز و MacOS، لپ تاپ ها و سرورهای خود را کنترل کنید.موجودی کامل سخت افزار و نرم افزار را دریافت کنید.از راه دور همه دستگاه های خود را بدون ایجاد وقفه در کاربران نهایی از طریق مجموعه ای قوی از ابزارهای راه دور مدیریت کنید.به طور خودکار وصله سیستم عامل و برنامه های شخص ثالث برای دستگاه های Windows و MacOS.استقرار، پیکربندی و مدیریت دستگاه ها را با اتوماسیون قدرتمند فناوری اطلاعات استاندارد کنید.به طور مستقیم کنترل دستگاه های با دسترسی از راه دور را در دست بگیرید.ابزار Zabbix قیمت: Zabbix یک نرم افزار رایگان و منبع باز بدون محدودیت یا هزینه پنهان است. اگر می خواهید از Zabbixدر زمینه تجاری استفاده کنید، باید مقداری هزینه کنید.ابزار Zabbix یک نرم‌افزار رایگان و منبع باز است که تحت GNU(مجوز عمومی عمومی) نسخه 2 منتشر شده است. اگر از Zabbix برای اهداف تجاری استفاده می‌کنید، ممکن است از شما مودبانه بخواهند تا سطحی از پشتیبانی تجاری را خریداری کنید.ابزار Zabbix یک مجموعه متریک هوشمند و بسیار خودکار با تشخیص پیشرفته مشکل و هشدار و اصلاح هوشمند دارد. بهترین بخش این است که آنها راه حل هایی را برای انواع صنایع ارائه می دهند. علاوه بر این، آنها مشتریان قدردانی دارند.امکانات:معیارها را از هر دستگاه، سیستم و برنامه‌ای از طریق روش‌های جمع‌آوری چند متریک جمع‌آوری می‌کند.تشخیص مشکل با آستانه های هوشمند تعریف شده با گزینه های انعطاف پذیری بالا، سطوح امنیتی متعدد و تشخیص ناهنجاری.تجسم در یک صفحه  شامل داشبوردهای مبتنی بر ویجت، نمودارها، نقشه ها و موارد دیگر.اطلاع رسانی و رفع مشکل در صورت بروز هرگونه مشکل یا مشکل و همچنین حفاظت از داده ها در تمامی سطوح.استقرار بدون دردسر با صرفه جویی در وقت شما، استفاده از قالب های خارج از جعبه و مقیاس بندی بدون هیچ محدودیتی.معرفی شرکت‌ها در این حوزه در ایرانشرکت پدید آوران رویای سریع ارتباطات(نت نگار)شرکت پدید آوران رویای سریع ارتباطات در سال 89 با هدف ایجاد بستر مناسب و ارائه راحل های مبتنی بر سیستم ها و متدهای دنیا IT مطرح و در سال 90 به صورت رسمی به ثبت رسید. این مجموعه تلاش می کند با ارائه مشاوره علمی و انجام اقدامات مناسب در جهت امکان سنجی واحد های کارفرمایان , راه حل های مناسب و مقرون به صرفه ای را برای کاهش هزینه ها و افزایش راه های تبلیغاتی توسط بستر مناسب وب به کارفرمایان ارائه کند. یکی از خدماتی که این شرکت ارائه می‌کند خدمات مانیتورینگ است.شرکت سدیدآفرینقابلیت‌های عمده نرم افزار Zabbix موجب گردید که ظرف مدت زمانی کوتاه توجه بسیاری از ایرانیان به سوی این سیستم مانیتورینگ منحصر به فرد و موفق جلب گردد. با این حال در دو دهه اخیر عدم وجود آموزش مناسب و امکانات قابل پشتیبانی حوزه مانیتورینگ در ایران دغدغه زیادی را برای کاربران این حوزه به وجود آورد. به همین دلیل شرکت سدیدآفرین به عنوان پیشتاز در عرصه مانیتورینگ ایران و نزدیک به ۱۱ سال تجربه در زمینه مانیتورینگ، از سال ۱۳۹۰به عنوان اولین و تنها نمایندگی رسمی شرکت زبیکس در ایران به ارائه خدمت مشغول است. شرکت سدید آفرین تمامی خدمات این نرم افزار پایش را به کاربران ایرانی علاقمند عرضه می‌دارد.شرکت میهن مانیتورشرکت میهن مانیتور نیز خدمات مانیتورینگ را در سطح‌های مختلف ارائه می‌دهد.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://www.softwaretestinghelp.com/system-monitoring-software/https://www.dynatrace.com/monitoring/resources/monitoring-software/?utm_source=google&amp;utm_medium=cpc&amp;utm_term=monitoring%20software&amp;utm_campaign=benelux-application-performance-management&amp;utm_content=none&amp;gclid=Cj0KCQiA8ICOBhDmARIsAEGI6o1_18-23337iWJHx3HeyDDbqQ8vJZvsLxF9l4KNR3J4Vmiru43odrUaAuDREALw_wcB&amp;gclsrc=aw.dshttps://www.techopedia.com/definition/4313/monitoring-softwarehttps://netnegar.io/support/contactushttps://sadidafarin.ir/zabbix-network-monitoring-softwarehttps://mihanmonitor.com/</description>
                <category>مجتبی مرادی</category>
                <author>مجتبی مرادی</author>
                <pubDate>Tue, 21 Dec 2021 11:55:48 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با LOG MANAGEMENT</title>
                <link>https://virgool.io/@m_43936264/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-log-management-bwzudgj0wd7q</link>
                <description>مقدمهدر این پست قصد داریم که با مفهوم LOG MANAGEMENT، مزایا و معایب آن، اهمیت آن  و شرکت‌هایی که در ایران این خدمات را محیا می‌کنند، صحبت کنیم. همچنین در این پست قصد داریم که ابزارهای موجود و معروف در این زمینه را معرفی کینم.لاگ(LOG) چیست؟در دنیای محاسبات، لاگ فایلی است که هر بار که رویدادهای خاصی در سیستم شما رخ می دهد، به طور خودکار تولید می شود. فایل‌های گزارش معمولاً دارای مهر زمانی هستند و ممکن است عملاً هر چیزی را که در پشت صحنه در سیستم‌عامل‌ها یا برنامه‌های نرم‌افزاری اتفاق می‌افتد ضبط کنند. به طور خلاصه، آنها هر چیزی را که سرور، شبکه، سیستم‌عامل یا برنامه فکر می‌کند برای پیگیری مهم است، ضبط می‌کنند. گزارش‌ها می‌توانند انواع رویدادها را از جمله پیام‌ها و تراکنش‌هایی که بین کاربران مختلف رخ می‌دهد، آنچه در حین پشتیبان‌گیری اتفاق افتاده، خطاهایی که اجرای برنامه را متوقف کرده است یا فایل‌هایی که توسط کاربران از یک وب‌سایت درخواست شده است، مستند کنند.انواع مختلفی از گزارش وجود دارد: برخی از آنها را می توان توسط انسان باز کرد و خواند، در حالی که برخی دیگر برای اهداف ممیزی نگهداری می شوند که توسط انسان قابل خواندن نیستند. گزارش‌های حسابرسی، گزارش‌های تراکنش، گزارش‌های رویداد، گزارش‌های خطا، گزارش‌های پیام تنها نمونه‌هایی از فایل‌های گزارش مختلف هستند - هر کدام هدف متفاوتی را دنبال می‌کنند. آنها در طیف گسترده ای از پسوندها، مانند .log، .txt یا پسوندهای اختصاصی مختلف وجود دارند. بسته به پسوند و خوانایی، می توان آنها را با یک ویرایشگر متن استاندارد (مانند Notepad) یا برنامه پردازش کلمه (OpenOffice یا (Microsoft Word) باز کرد یا ممکن است نیاز به باز کردن برنامه های خاصی داشته باشد.ابزارهای مدیریت لاگ مانندGraylog را می توان برای ورود گزارش های دریافتی از برنامه ها یا سیستم های مختلف، مشاهده آنها و استخراج داده های مفید از آنها استفاده کرد.مدیریت لاگ چیست؟مدیریت لاگ یک اصطلاح جامع است که تمام فعالیت‌ها و فرآیندهای مورد استفاده برای تولید، جمع‌آوری، متمرکز کردن، تجزیه، انتقال، ذخیره، بایگانی و دفع حجم عظیمی از داده‌های لاگ تولید شده توسط رایانه را توصیف می‌کند. ابزارهای مدیریت لاگ برای رسیدگی به تمام لاگ‌ های تولید شده توسط برنامه‌ها، سیستم‌ها، شبکه‌ها، نرم‌افزارها یا کاربران و برخورد با آنها به هر نحوی که به بهترین وجه با نیازهای یک سازمان یا سازمان سازگار باشد، استفاده می‌شود. مدیریت لاگ یک موضوع محبوب نه تنها در بین مدیران سیستم و SecOps بلکه در بین توسعه دهندگان است. این به این دلیل است که استفاده از لاگ‌ها برای اهداف امنیتی، بهبود عملکرد یا فقط عیب‌یابی در بسیاری از بخش‌های فناوری اطلاعات و نقش‌های شغلی گسترده است، و ما درباره چرایی و چگونگی آن بحث خواهیم کرد. بنابراین، دقیقاً چه چیزی تحت مدیریت ورود به سیستم قرار می گیرد؟طبق ویکی‌پدیا، می‌توانیم این فیلد را به شش بخش تقسیم کنیم:مجموعه لاگاولین قدم در مدیریت لاگ ، تعیین نحوه جمع آوری داده های لاگ و محل ذخیره آن است. لاگ ‌های شما داده‌ها را از بخش‌های مختلف محیط فناوری اطلاعات جمع‌آوری می‌کنند: سیستم‌عامل، فایروال‌ها، سرورها، سوئیچ‌ها، روترها، و غیره. وقتی صحبت از ذخیره‌سازی به میان می‌آید، سیستم‌های امنیتی مانند فایروال و سیستم‌های تشخیص نفوذ از نظر حجم داده‌ها بیشترین تقاضا را دارند. آن ها تولید می کنند. این سیستم‌ها معمولاً ده‌ها EPS (رویداد در ثانیه) تولید می‌کنند که به یک جمع‌آوری گزارش نیاز دارد که بتواند مقدار متناظری از گزارش‌ها را مدیریت کند.اگر از راه حل مدیریت لاگ برای جمع آوری لاگ استفاده می کنید، می توانید نوع اطلاعاتی را که می خواهید جمع آوری کنید پیکربندی کنید. بهترین روش این است که تنظیمات مجموعه لاگ هر دستگاه را سفارشی کنید تا داده های اضافی را کنار بگذارید و اطمینان حاصل کنید که تمام اطلاعات مرتبط را جمع آوری می کنید. این رویکرد مینیمالیستی است که عملکرد و کارایی را بهبود می بخشد. راه دیگر برای نزدیک شدن به جمع‌آوری لاگ، استفاده از یک استراتژی حداکثری و جمع‌آوری تمام اطلاعات ممکن است تا بعداً توسط یک ابزار مدیریت لاگ، مرتب‌سازی و تجزیه و تحلیل شود. این روش معایب زیادی دارد، اما می توان آنها را به دو مورد کاهش داد: هزینه و کارایی. ذخیره حجم زیادی از داده ها هزینه زیادی دارد و همچنین برای انجام این کار به نیروی کار بیشتری نیاز خواهید داشت. هنگامی که در مورد کارایی صحبت می شود، داشتن مجموعه داده های بسیار بزرگ ذخیره شده به صورت آنلاین باعث کاهش عملکرد کلی می شود.تجمیع لاگ متمرکزتجمیع لاگ متمرکز فرآیندی است که در آن همه لاگ‌ها بدون توجه به منبع آنها در یک مکان جمع‌آوری می‌شوند. همانطور که قبلا ذکر شد، حجم داده ها یکی از بزرگترین چالش ها در این فرآیند است، اما مسائل مهم دیگری نیز وجود دارد که باید در نظر گرفته شود. مثلاً بحث صحت وجود دارد. مانند هر اطلاعات جمع آوری شده، داده های لاگ ممکن است دقیق نباشند. حتی اگر سیستم مدیریت لاگ شما بتواند حجم زیادی از داده ها را مدیریت کند، آنچه اهمیت دارد سرعت تولید این داده ها است. ابزارهای مدیریت لاگ باید بتوانند با این سرعت همگام شوند، به همین دلیل است که EPS یک ابزار چیزی است که باید هنگام انتخاب آن در نظر بگیرید.در نهایت، هیچ لاگی با فرمت یکپارچه وجود ندارد که در هنگام جمع‌آوری گزارش‌ها از منابع مختلف، چالش ایجاد می‌کند. فرآیند نرمال‌سازی تمام گزارش‌های دریافتی را می‌گیرد و آنها را به یک خروجی مشترک تبدیل می‌کند تا اطلاعات درون لاگ‌ها راحت‌تر تجزیه و تحلیل شوند.ذخیره سازی و نگهداری طولانی مدت لاگگام بعدی در مدیریت لاگ، ذخیره و نگهداری لاگ طولانی مدت است. سوال اصلی در این مرحله این است که چه مدت باید لاگ ها را ذخیره کنید. در حالی که آسان‌ترین راه برای ذخیره‌سازی لاگ‌ها برای مدت نامحدود است تا در صورت نیاز بتوانید داده‌های قدیمی را بازیابی کنید، ذخیره این مقدار داده بسیار پرهزینه خواهد بود، امن‌ترین راه برای انجام این کار پیروی از بهترین شیوه‌ها و مقررات صنعت است. در صورت نیاز به بررسی، داده های لاگ را حداقل برای یک سال ذخیره می کند.چرخش logچرخش لاگ با تغییر نام خودکار، تغییر اندازه، جابجایی یا حذف فایل‌های لاگ که خیلی بزرگ یا خیلی قدیمی هستند، به رفع مشکلات در مرحله قبل کمک می‌کند. می‌توانید فاصله زمانی را انتخاب کنید که پس از آن لاگ حذف شود، برای صرفه‌جویی در فضا فشرده شود، یا به مکان دیگری ایمیل شود. به این ترتیب، فضای ذخیره سازی جدیدی برای فایل های لاگ جدیدتر باز می شود.تجزیه و تحلیل لاگتجزیه و تحلیل لاگ بدون شک یکی از مهمترین بخش های مدیریت لاگ است زیرا جمع آوری و ذخیره داده های لاگ هیچ معنایی ندارد اگر بخواهید از آن استفاده نکنید. ابزارهای مدیریت لاگ فرآیند تجزیه و تحلیل داده های لاگ را خودکار و ساده می کنند و راه های پیشرفته ای برای ارائه یافته های شما ارائه می دهند. گزارش تجزیه و تحلیل از نمودارها، نمودارها و سایر تصاویر برای تأکید بر همبستگی ها و شباهت های بین رویدادها و داده ها استفاده می کند و تشخیص مسائل و ردیابی علل آنها را آسان تر می کند. موارد استفاده برتر برای تجزیه و تحلیل گزارش شامل انطباق، امنیت، عیب یابی و بهبود عملکرد است.جستجو لاگ و گزارشابزارهای مدیریت لاگ با داشتن رویکرد جمع آوری متمرکز و گزینه های جستجوی پیشرفته، جستجو لاگ وگزارش را تسهیل می کنند. با در نظر گرفتن حجم فایل‌های لاگ ، درک اینکه چرا ویژگی‌های جستجو تأثیر زیادی بر کیفیت مدیریت لاگ دارند، دشوار نیست. جستجوی پیشرفته به شما امکان می‌دهد به گزارش‌های ساختاریافته و بدون ساختار نگاه کنید و اطلاعاتی در مورد رویدادهای خاصی جمع‌آوری کنید که به تعیین علت اصلی کمک می‌کند. راه‌حل‌های مدیریت لاگ مجهز به ابزارهایی برای داده‌کاوی هستند که در میان حجم‌های داده‌های لاگ برای کشف الگوهایی که در غیر این صورت پنهان باقی می‌مانند، می‌گردند. این گزارش را بهبود می بخشد، که خلاصه نهایی جستجو و تجزیه و تحلیل انجام شده، ارائه اعداد و ویژگی های بصری است که داستانی را در مورد داده های گزارش شما بیان می کند. این به ویژه در صورتی مفید است که باید یافته های خود را به کسی ارائه دهید که سابقه فنی ندارد و می خواهید اهمیت داده ها را به طور کامل درک کند.چرا مدیریت لاگ مهم است؟استفاده از یک رویکرد سیستماتیک برای لاگ های شما مزایای زیادی دارد که برخی از مهم ترین آنها عبارتند از:ذخیره سازی یکپارچهیکی از مزیت‌های اصلی مدیریت لاگ در ذخیره‌سازی یکپارچه نهفته است، که وقتی در مورد تجمیع لاگ‌های متمرکز صحبت کردیم درباره آن صحبت کردیم. داشتن همه لاگ‌هادر یک مکان، هر تحلیلی را بسیار ساده‌تر می‌کند، اما مزیت واقعی ذخیره‌سازی یکپارچه افزایش امنیت سیستم شماست. از آنجایی که این زمینه ای است که فاصله زمانی بین اولین تهدید تا زمانی که شما اقدامی انجام می دهید می تواند تفاوت را ایجاد کند، ذخیره اطلاعات لاگ مهم در کنار هم کل فرآیند را سرعت می بخشد. ثبت متمرکز همچنین به معنای داشتن داده های لاگ استاندارد است، که در زمان جستجوی اطلاعات در لاگ ها از منابع مختلف در زمان صرفه جویی می کند.مانیتورینگ سیستم و هشدارهاابزارهای مدیریت لاگ، هشدارهای زمان واقعی قابل تنظیمی را ارائه می دهند که به شما امکان می دهد به محض بروز مشکل واکنش نشان دهید، که در موارد نقض امنیتی و نفوذ که هر ثانیه می تواند به معنای آسیب بیشتر به سیستم توسط مهاجم باشد، ضروری است. این بدان معنی است که SIEM خود را از واکنشی به فعالانه تغییر دهید و توانایی‌های شکار تهدید خود را ارتقا دهید.تنظیمات مانیتورینگ را می توان برای ردیابی مجموعه ای سفارشی از رویدادها تنظیم کرد که برای امنیت و عیب یابی مفید است. می‌توانید این فیلترها را تغییر دهید تا فقط در مورد رویدادهای دارای اولویت بالا مطلع شوید تا با اعلان‌ها، ایمیل‌ها و/یا پیام‌های متنی بمباران نشوید.امنیت بهبود یافتهبه لطف نظارت و هشدارهای 24 ساعته و بلادرنگ سیستم، محیط فناوری اطلاعات شما در برابر حملات هکرها ایمن تر خواهد بود. با انتخاب دقیق رویدادهایی که باید ثبت شوند، می توانید امنیت را حتی بیشتر تقویت کنید. به عنوان مثال، Windows Security Log یکی از اهداف مورد علاقه هکرها برای حمله است، زیرا آنها سعی می کنند ردیابی های خود را بپوشانند و حضور خود را با تغییر این لاگ پنهان کنند.با ورود به سیستم و نظارت بر رویدادهای ورود و خروج در لاگ امنیتی ویندوز، می توانید هر رفتار مشکوکی را قبل از اینکه خیلی دیر شود شناسایی کنید.عیب یابی بهترمدیریت لاگ به شما کنترل بهتری بر محیط IT خود و بینش بهتری نسبت به فرآیندهایی که در ماشین‌ها و دستگاه‌های جانبی شما انجام می‌شود، می‌دهد. یکی از رایج ترین موارد استفاده از لاگ رویداد برای تشخیص مشکلات، عیب یابی شبکه است. هشدارهای بلادرنگ به طور قابل توجهی زمان مورد نیاز برای شناسایی و رسیدگی به یک مشکل را کاهش می دهد، اما قدرت واقعی ابزارهای مدیریت لاگ در تجزیه و تحلیل لاگ‌ها نهفته است. حجم زیادی از داده‌های ذخیره‌شده در لاگ‌ها در معرض جستجو و تجزیه و تحلیل سفارشی قرار می‌گیرند، که بازآفرینی جدول زمانی رویدادهای مشکل‌ساز، کشف ارتباط با رویدادهای دیگر و مشخص کردن منبع مشکل را آسان‌تر می‌کند.تجزیه فایل لاگتجزیه فرآیند تقسیم داده ها به قطعات کوچکتر اطلاعات برای ذخیره سازی و دستکاری آسان تر است. از آنجایی که هر فایل لاگ از قطعات مختلف داده تشکیل شده است، هدف تجزیه فایل لاگ شناسایی ساختارهای مشابه و امکان گروه بندی اطلاعات بر اساس آن ساختارها است. به عنوان مثال، شناسایی تمام مهرهای زمانی در یک فایل گزارش و جمع‌آوری گزارش‌ها از یک بازه زمانی خاص، یا ردیابی فعالیت یک کاربر فقط.تجزیه و تحلیل داده هابا ظهور علم داده، شرکت ها شروع به درک این موضوع کردند که داده هایی که ذخیره می کنند ممکن است حاوی اطلاعات ارزشمندی باشد. تجزیه و تحلیل داده ها شامل چندین فرآیند مانند پاکسازی و تبدیل داده ها با هدف ایجاد مدل داده ای است که می تواند رفتار خاصی را پیش بینی کند، به تصمیم گیری های تجاری کمک کند یا اطلاعات جدیدی ارائه دهد. به عنوان مثال، تجزیه و تحلیل گزارش‌های مشتریان یک کسب‌وکار می‌تواند رفتار خاصی را پیش‌بینی کند (به عنوان مثال: مشتریان به احتمال زیاد در روز جمعه خرید می‌کنند)، به تصمیم‌گیری تجاری کمک می‌کند (تصمیم به هدف قرار دادن نوع متفاوتی از مخاطبان در کمپین بازاریابی بعدی)، یا اطلاعات جدیدی ارائه دهید (به عنوان مثال: اکثر خریداران خانم های 20-40 ساله هستند).معرفی ابزار مدیریت لاگابزار Sematext Logsابزار Sematext Logs یک ابزار مدیریت لاگ است که API Elasticsearch، بخشی از راه حل نظارت کامل پشته Sematext Cloud را در معرض دید قرار می دهد. می توانید داده ها را با استفاده از syslog یا هر ابزاری که با Elasticsearch کار می کند، مانند Logstash یا Filebeat ارسال کنید. تجسم را می توان با Kibana یا رابط کاربری بومی Sematext Logs انجام داد. اگر راه حل خود میزبانی را ترجیح می دهید، Sematext Logs نیز از طریق Sematext Enterprise، سرویس داخلی در دسترس است.کشف خودکار گزارش‌ها و سرویس‌های Sematext به شما امکان می‌دهد به طور خودکار نظارت بر گزارش‌ها و ارسال آن‌ها را از فایل‌های گزارش و کانتینرها مستقیماً از طریق رابط کاربری آغاز کنید.ویژگی های کلیدی:بدون عامل هر ارسال کننده گزارش یا کتابخانه ای که با syslog یا Elasticsearch کار می کند با Sematext Logs کار می کند.دسترسی به API Elasticsearch فراتر از فهرست‌بندی: می‌توانید جستجوها را اجرا کنید، داده‌ها را صادر کنید، الگوهای سفارشی ایجاد کنید، و...ویژگی های اضافی در بالای پشته ELK در دسترس است، مانند کنترل دسترسی مبتنی بر نقش، هشدار، و تشخیص ناهنجاریقیمت گذاری:رایگان: 500 مگابایت در روزبرنامه های پولی از 50 دلار در ماه شروع می شود (1 گیگابایت در روز، نگهداری 1 هفته)مزایا:میزبانی کامل تمام انعطاف پذیری پشته ELK را بدون نیاز به مدیریت/مقیاس Elasticsearch دریافت کنیدادغام با سایر اجزای Sematext Cloud، مانند نظارت بر زیرساخت و تجربه. برای مثال، می‌توانید داشبوردهایی با ویجت‌های هر مؤلفه‌ای داشته باشید، بنابراین می‌توانید ببینید کدام خطا باعث افزایش ناگهانی CPU شده است.قیمت مناسب مصرف در بالای طرح &quot;پایه&quot; به طور میانگین محاسبه می شود. برای مثال، اگر ارزان‌ترین طرح پولی (50 دلار در ماه، پشتیبانی از 1 گیگابایت در روز) و ارسال 60 گیگابایت در ماه (به طور متوسط ​​2 گیگابایت در روز) را داشته باشید، در نهایت 100 دلار پرداخت می‌کنید.بیش از حد قابل تنظیممی‌توانید انتخاب کنید که Sematext چه زمانی لاگ‌ها را نمی‌پذیرد تا هزینه‌های خود را کنترل کنیدمعایب:در حال حاضر، Sematext Logs فقط syslog و JSON را در سمت سرور تجزیه می کند. تجزیه سفارشی باید در ارسال کننده گزارش انجام شودشما نمی توانید Kibana و ویجت های بومی UI را در یک داشبورد ترکیب کنیدابزار Splunkابزار Splunk یکی از اولین ابزارهای متمرکز کننده لاگ تجاری و محبوب ترین است. استقرار معمولی در محل است (Splunk Enterprise)، اگرچه به عنوان یک سرویس نیز ارائه می شود (Splunk Cloud). شما می توانید هر دو لاگ و متریک را به Splunk ارسال کنید و آنها را با هم تجزیه و تحلیل کنید.ویژگی های کلیدی:زبان پرس و جو قدرتمند برای جستجو و تجزیه و تحلیلاستخراج میدان زمان جستجو (فراتر از تجزیه در زمان مصرف)به‌طور خودکار داده‌هایی که اغلب به آنها دسترسی پیدا می‌کند به ذخیره‌سازی سریع و داده‌هایی که به‌ندرت به آن‌ها دسترسی دارند را به ذخیره‌سازی کند منتقل می‌کند.قیمت گذاری:رایگان: 500 مگابایت داده در روزبرنامه‌های پولی در صورت درخواست در دسترس هستند، اما سؤالات متداول نشان می‌دهد که آنها از 150 دلار در ماه برای 1 گیگابایت شروع می‌شوند.مزایا:بالغ و دارای ویژگی های غنیفشرده سازی داده خوب برای اکثر موارد استفاده لاگ‌های مربوط و معیارهای در یک جامعایب:گرانپرس و جوهای آهسته برای بازه های زمانی طولانی تر نسبت به ابزارهای متمرکز بر نظارت برای ذخیره معیارها کارآمدتر استابزار Sumo Logicابزار Sumo Logic یک نرم افزار مدیریت لاگ است که در آن می توانید گزارش ها و معیارها را ذخیره کنید. بیشتر شبیه به Sematext Cloud است تا Splunk، به این معنا که معیارها و گزارش‌ها را می‌توان به‌عنوان موجودیت‌های جداگانه مشاهده کرد (و برای آن پرداخت کرد. مانند Splunk، یک سینتکس جستجوی قدرتمندی دارد که می توانید عملیات را به روشی مشابه لوله های یونیکس تعریف کنید.ویژگی های کلیدی:زبان پرس و جو قدرتمندامکان تشخیص الگوهای رایج لاگ ها (LogReduce)امکان تشخیص روندها برای الگوهای گزارش (LogCompare)مدیریت متمرکز نمایندگانقیمت گذاری:رایگان: 500 مگابایت در روزبرنامه‌های پولی از 324 دلار در ماه شروع می‌شود برای 3 گیگابایت در روز و فضای ذخیره‌سازی 10 روزه (30 گیگابایت)مزایا:راه اندازی آسان عاملعملکرد پرس و جو و تجسم خوبسازگار با Spike (مانند Sematext Cloud، مصرف به طور متوسط ​​برای یک ماه انجام می شود)معایب:در محل موجود نیستبرخی از کاربران از عملکرد (مثلاً درخواست داده‌های زیاد) و تأخیر (یعنی تأخیر بین ارسال گزارش و مشاهده آن در جستجو) شکایت دارند.بدون پشتیبانی بیش از حد: برای یک سهمیه بزرگتر (یا یک طرح سفارشی) به یک طرح بالاتر نیاز دارید.معرفی شرکت‌ها در این حوزه در ایرانشرکت آتینشرکت دانش بنیان آتین آتیه اندیش، مستقر در پارک علم و فناوری دانشگاه تهران، در سال 1396 فعالیت خود را به طور تخصصی درحوزه ارائه خدمات احراز هویت آغاز کرد. این شرکت با بررسی نمونه های مشابه خارجی و بر اساس نیازهای داخلی کشور درحوزه احراز هویت، اقدام به توسعه سامانه مدیریت هویت و دسترسی نموده است. تیم فنی آتین از فارغ التحصیلان دانشگاه های برتر کشور در حوزه نرم افزار و امنیت اطلاعات و با پشتوانه سابقه چندین ساله در حوزه احراز هویت و کنترل دسترسی تشکیل شده است. یکی از محصولات این شرکت مدیریت لاگ است.شرکت داده کاوان تصمیم یارشرکت داده کاوان تصمیم یار در زمینه ارائه، مشاوره و آموزش خدمات نرم افزاری به سازمان‌های دولتی و خصوصی فعالیت می‌نماید. شرکت داده کاوان تصمیم یار خدمات مختلف نرم افزاری ارائه می‌دهد که یکی از آنها راه‌ اندازی مدیریت لاگ است.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://sematext.com/blog/best-log-management-tools/https://www.graylog.org/post/what-is-log-management-a-complete-logging-guidehttps://searchitoperations.techtarget.com/definition/log-managementhttps://stackify.com/best-log-management-tools/</description>
                <category>مجتبی مرادی</category>
                <author>مجتبی مرادی</author>
                <pubDate>Tue, 21 Dec 2021 09:51:27 +0330</pubDate>
            </item>
                    <item>
                <title>مقدمه‌ایی بر Continuous Delivery</title>
                <link>https://virgool.io/@m_43936264/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D8%A7%DB%8C%DB%8C-%D8%A8%D8%B1-continuous-delivery-vyodhrcgsvc3</link>
                <description>مقدمهدر این پست قصد داریم که مفهوم Continuous Delivery، مزایا و معایب آن،ارتباط آن با DevOps، ابزار های موجود در این زمینه و شرکت‌هایی که در ایران این خدمات را محیا می‌کنند را معرفی کنیم.تحویل مداوم (Continuous Delivery)تحویل مداوم (Continuous Delivery) اصطلاحی است که در سال 2010 و پس از گفتگوهایی در مورد Continuous Integration به وجود آمد. در سال 2006، مارتین فاولر از تمرین Continuous Integration کد توسعه‌دهنده در پایگاه‌های کد به روشی خودکار، کارآمد و به خوبی آزمایش‌شده برای کاهش خطاها و تسریع توسعه نرم‌افزار حمایت کرد.کتابی با عنوان Continuous Delivery توسط Jez Humble و David Farley تکنیک‌ها را به کل چرخه عمر توسعه نرم‌افزار گسترش داد، به‌ویژه در مورد قرار دادن کد در محیط‌های تولید بحث کرد. در این کتاب، ژز هامبل و دیوید فارلی، تحویل مستمر را به عنوان &quot;عملی برای اطمینان از اینکه نرم افزار همیشه آماده استقرار است&quot; تعریف می کنند. به عبارت دیگر، Continuous Integration تحویل مداوم (CD) یک رویکرد مهندسی نرم‌افزار است که در آن تیم‌ها نرم‌افزار را در چرخه‌های کوتاه تولید می‌کنند و اطمینان حاصل می‌کنند که نرم‌افزار را می‌توان به طور قابل اعتماد در هر زمان منتشر کرد و هنگام انتشار نرم‌افزار، بدون انجام دستی این کار را انجام داد. این تغییرات شامل انواع مختلفی از جمله ویژگی‌های جدید، تغییرات پیکربندی، رفع اشکال‌ها و آزمایش‌ها است.بیایید این عمل را با جزئیات بیشتر توضیح دهیم.تحویل مداوم به توسعه‌دهندگان اجازه می‌دهد تا آزمایش‌های فراتر از آزمایش‌های واحد را به‌طور خودکار انجام دهند تا بتوانند به‌روزرسانی‌های برنامه را در ابعاد مختلف قبل از استقرار برای مشتریان تأیید کنند. این تست ها ممکن است شامل تست UI، تست بار، تست یکپارچه سازی، تست قابلیت اطمینان API و غیره باشد. این به توسعه‌دهندگان کمک می‌کند تا به‌روزرسانی‌ها را به‌طور کامل‌تر اعتبارسنجی کنند و مشکلات را کشف کنند. با استفاده از فضای ابری، ایجاد خودکار و تکثیر چندین محیط برای آزمایش، که قبلاً انجام آن در محل دشوار بود، آسان و مقرون به صرفه است.در اینجا یک سوال مهم مطرح می‌شود:                                                          چرا Continuous Delivery ؟اغلب فرض بر این است که اگر می‌خواهیم نرم‌افزار را به دفعات بیشتری مستقر کنیم، باید سطوح پایین‌تری از ثبات و قابلیت اطمینان را در سیستم‌های خود بپذیریم. در واقع، تحقیقات بررسی شده نشان می دهد که اینطور نیست که تیم های با عملکرد بالا به طور مداوم خدمات را سریعتر و قابل اطمینان تر از رقبای کم عملکرد خود ارائه می دهند. این امر حتی در حوزه های بسیار تحت نظارت مانند خدمات مالی و دولتی نیز صادق است. این قابلیت، مزیت رقابتیباورنکردنی را برای سازمان هایی که مایل به سرمایه گذاری هستند، فراهم می کند.ارتباط با DevOpsتحویل مداوم و DevOps از نظر معانی مشابه هستند و اغلب با هم ترکیب می شوند، اما آنها دو مفهوم متفاوت هستند. DevOps دامنه وسیع تری دارد، و حول محور تغییرات فرهنگی، به ویژه همکاری تیم های مختلف درگیر در تحویل نرم افزار (توسعه دهندگان، عملیات، تضمین کیفیت، مدیریت، و غیره)، و همچنین خودکارسازی فرآیندها در تحویل نرم افزار متمرکز است. با DevOps، توسعه‌دهندگان، معمولاً در یک محیط توسعه استاندارد کدنویسی می‌کنند، از نزدیک با آزمایش‌کنندگان و تیم‌های عملیات فناوری اطلاعات کار می‌کنند تا سرعت ساخت نرم‌افزار، تعهد کد، آزمایش واحد و انتشار را بدون از دست دادن قابلیت اطمینان، سرعت بخشند. از سوی دیگر، تحویل مستمر رویکردی برای خودکارسازی جنبه تحویل است و بر گردآوری فرآیندهای مختلف و اجرای سریعتر و مکرر آنها تمرکز دارد. بنابراین، DevOpsمی تواند محصول تحویل مداوم باشد و CDمستقیماً به DevOps جریان می یابد .نتیجه اصلی اجرای DevOps یک خط لوله CI/CD است که توسط تیم های توسعه و عملیاتی که با یکدیگر با استفاده از یک روش چابک کار می کنند پشتیبانی می شود.تحویل مداوم در مقابل یکپارچه سازی مداومیکپارچه سازی مداوم (CI) یک فرآیند خودکار برای یکپارچه سازی مداوم تغییرات توسعه نرم افزار است. فرآیندهای CI ساخت، آزمایش و اعتبارسنجی کد منبع را خودکار می کنند. با کار کردن با قابلیت‌های CI، تیم‌های توسعه‌دهنده چرخه‌های انتشار کد خود را تسریع می‌کنند، و این امر باعث می‌شود که با چرخه‌های طولانی توسعه ویژگی‌ها و چالش‌های ناشی از آن، مانند تداخل ادغام و کد شکسته، کمتر مواجه شوند. بنابراین، CI در مورد ادغام ویژگی های جدید و تغییرات کد در یک آرتیفکت است. در یک گردش کار توسعه معمولی، یک توسعه دهنده:کدها را بنویسیدکد را با استفاده از سیستم کنترل نسخه / ابزار مدیریت پیکربندی بررسی می کنداین پایگاه کد جدید یک فرآیند ساخت را طی می کنداین سازه در یک مصنوع بسته بندی شده استو سپس، مصنوع در یک مخزن ذخیره می شود.هدف CI تولید یک آرتیفکت بسته بندی شده است که آماده استقرار بر روی سرور یا ماشین است. نمونه ای از آرتیفکت می تواند یک  فایل WAR/JAR یا هر کد بسته بندی شده اجرایی دیگری باشد. بنابراین، فعالیت های CI یک الزام برای CDاست.تحویل مداوم در مقابل استقرار مداومبا تحویل مداوم، هر تغییر کد ساخته می‌شود، آزمایش می‌شود و سپس به یک محیط آزمایش یا مرحله‌بندی غیرتولیدی هدایت می‌شود. ممکن است چندین مرحله آزمایش موازی قبل از استقرار تولید وجود داشته باشد. تفاوت بین تحویل مداوم و استقرار مداوم وجود تأییدیه دستی برای به روز رسانی به تولید است. با استقرار مداوم، تولید به طور خودکار و بدون تأیید صریح اتفاق می افتد.تحویل مداوم کل فرآیند انتشار نرم افزار را خودکار می کند. هر تجدیدنظری که انجام می شود یک جریان خودکار را راه اندازی می کند که به روز رسانی را ایجاد، آزمایش و سپس مرحله بندی می کند. تصمیم نهایی برای استقرار در یک محیط تولید زنده توسط توسعه دهنده انجام می شود.تحویل مستمر چگونه با CI/CD مرتبط است؟تحویل مداوم بخشی از CI/CD را تشکیل می دهد، روشی برای ارائه مکرر نرم افزار با خودکارسازی برخی از مراحل توسعه برنامه است. مزایای تحویل مداومفرآیند انتشار نرم افزار را خودکار می‌کندانتشار قابل اعتماد  خطرات مرتبط با انتشار به طور قابل توجهی کاهش یافته است و روند انتشار قابل اعتمادتر شده است. با CD، فرآیند استقرار و اسکریپت ها قبل از استقرار تا تولید به طور مکرر آزمایش می شوند. بنابراین، بیشتر خطاها در فرآیند استقرار و اسکریپت ها قبلاً کشف شده اند. با انتشار بیشتر، تعداد تغییرات کد در هر نسخه کاهش می یابد. این امر یافتن و رفع هر گونه مشکلی را که رخ می دهد آسان تر می کند و زمان تأثیر آنها را کاهش می دهد.زمان تسریع به بازار CD به سازمان اجازه می دهد ارزش تجاری ذاتی در نسخه های نرم افزار جدید را سریعتر به مشتریان ارائه دهد. این قابلیت به شرکت کمک می کند تا یک قدم جلوتر از رقبا باقی بماند.کیفیت بالاتر  وقتی توسعه‌دهندگان ابزارهای خودکاری دارند که در عرض چند دقیقه رگرسیون‌ها را کشف می‌کنند، تیم‌ها آزاد می‌شوند تا تلاش خود را بر روی تحقیقات کاربر و فعالیت‌های تست سطح بالاتر مانند تست اکتشافی، تست قابلیت استفاده مجدد، تست عملکرد و امنیت متمرکز کنند. با ایجاد یک خط لوله استقرار، این فعالیت ها می توانند به طور مداوم در طول فرآیند تحویل انجام شوند و اطمینان حاصل شود که از ابتدا کیفیت در محصولات و خدمات تعبیه شده است.هزینه های پایین تر  هر محصول یا خدمات نرم افزاری موفقی در طول عمر خود به طور قابل توجهی تکامل می یابد. با سرمایه‌گذاری در ساخت، آزمایش، استقرار و اتوماسیون محیطی، ما با حذف بسیاری از هزینه‌های ثابت مرتبط با فرآیند انتشار، هزینه ایجاد و ارائه تغییرات تدریجی در نرم‌افزار را به‌طور قابل ملاحظه‌ای کاهش می‌دهیم.ساخت محصول مناسب  انتشارات مکرر به تیم های توسعه برنامه اجازه می دهد بازخورد کاربر را سریعتر دریافت کنند. این به آنها امکان می دهد فقط روی ویژگی های مفید کار کنند. اگر متوجه شوند که یک ویژگی مفید نیست، تلاش بیشتری برای آن نمی کنند. این به آنها کمک می کند محصول مناسبی بسازند.بهبود بهره وری توسعه دهندگان  علاوه بر این، هنگامی که ما به دفعات بیشتری منتشر می کنیم، تیم های تحویل نرم افزار می توانند فعالانه تر با کاربران درگیر شوند، یاد بگیرند که کدام ایده ها کار می کنند و کدام نه، و نتایج کاری را که انجام داده اند، از نزدیک ببینند. با حذف فعالیت‌های دردناک کم‌ارزش مرتبط با تحویل نرم‌افزار، می‌توانیم روی چیزی که بیشتر به آن اهمیت می‌دهیم تمرکز کنیم که به طور مداوم کاربران خود را خوشحال می‌کند.پیدا کردن و رفع اشکالات سریعترتیم شما می‌تواند با آزمایش‌های مکرر و جامع‌تر، باگ‌ها را زودتر قبل از اینکه بعداً به مشکلات بزرگ‌تری تبدیل شوند، کشف و برطرف کند. تحویل مداوم به شما امکان می‌دهد تا انواع تست‌های اضافی را بر روی کد خود آسان‌تر انجام دهید زیرا کل فرآیند خودکار شده است.به روز رسانی ها را سریعتر تحویل دهیدتحویل مستمر به تیم شما کمک می‌کند تا به‌روزرسانی‌ها را سریع‌تر و بیشتر به مشتریان ارائه دهد.بهبود رضایت مشتری  سطح بالاتری از رضایت مشتری به دست می آید.چالش های موجود در تحویل مستمرتست مداومایجاد تعادل بین کیفیت و تحویل آسان نیست. بسیاری از ویژگی‌های جدید یا تغییرات کد می‌توانند بدون آزمایش باقی بمانند، زمانی که تیم زمان یا منابع کمی دارد. تحویل مداوم بستگی به قابلیت های آزمایش و تأیید دارد. تست‌های خودکار می‌توانند در اندازه‌گیری و درک عملکرد مفید باشند، به‌ویژه زمانی که در محیط‌های تولیدی اجرا می‌شوند.اسکریپت هافایل های اسکریپت مجموعه ای از دستورات هستند. در حالی که اسکریپت ها برای خودکارسازی سریع مفید هستند، اغلب برای خطوط لوله تحویل مستمر مقیاس یا ساده نمی شوند. اسکریپت خط لوله شما می تواند منجر به مشکلات پیکربندی، دانش قبیله ای که نمی تواند برای تیم های دیگر به اشتراک گذاشته شود، و خطوط لوله شکننده که در برابر تغییر مقاوم هستند منجر شود.امنیتپیاده‌سازی خط لوله CI/CD که سطح امنیت را تضمین می‌کند، زمانی که راه‌حل CD از راه‌حل‌های مدیریت کلیدی خارج از جعبه پشتیبانی نمی‌کند، می‌تواند چالش‌برانگیز باشد. حاکمیت و انطباق یک گام به سوی تضمین امنیت خدمات در خط لوله CI/CD است.ترجیحات مشتری  برخی از مشتریان به روز رسانی مداوم سیستم های خود را نمی خواهند.محدودیت‌های دامنه  در برخی حوزه‌ها، مانند مخابرات و پزشکی، مقررات نیاز به آزمایش گسترده قبل از ورود نسخه‌های جدید به فاز عملیاتی دارند.تفاوت در محیط هامحیط های مختلف مورد استفاده در توسعه، آزمایش و تولید می تواند منجر به لغزش مسائل ناشناخته به محیط تولید شود.آزمایش‌هایی که به اوراکل انسانی نیاز دارندهمه ویژگی‌های کیفیت را نمی‌توان با اتوماسیون تأیید کرد. این ویژگی‌ها به انسان‌ها در حلقه نیاز دارند و خط لوله تحویل را کاهش می‌دهند.ابزار‌ابزارهای مختلفی وجود دارد که به انجام تمام یا بخشی از این فرآیند کمک می کند. این ابزارها بخشی از خط لوله استقرار هستند که شامل تحویل مداوم است. در ادامه چندین مورد ابزار کاربردی و معروف در این حوزه را معرفی میکنیم.ابزار CircleCIابزار CircleCI که مورد اعتماد شرکت‌های معروفی مانند Stitch Fix و Spotify است، یک ابزار تحویل مداوم است که به‌طور یکپارچه با برنامه‌ها و سرویس‌های موجود، مانندAzure و Slack ادغام می‌شود. همچنین با فرآیند یکپارچه سازی مداوم شما یکپارچه می شود و به محض اینکه کد را به مخزن خود میبرید یک خط لوله ایجاد می کند. CircleCI به راحتی باGitHub و دیگر مخازن ادغام می شود.  CircleCI بیشترین محبوبیت را در بین مشاغل کوچک و متوسط ​​دارد. برای این منظور، قابلیت های آن قابل تنظیم و مقیاس پذیر است تا متناسب با صنعت و اندازه شما باشد. به عنوان مثال، مشتریان این امکان را دارند که در فضای ابری CircleCI یا در زیرساخت خود میزبانی کنند. در هر صورت، کاربران CircleCI نیز می توانند از ایمن بودن کدشان مطمئن باشند. برای صرفه جویی در زمان، CircleCI دارای تنظیمات قابل استفاده مجدد و اشتراک گذاری به عنوان کد و داشبورد، CircleCI Insights است. از طریق این ابزار، کاربران می توانند بر بهینه سازی خط لوله و ساخت پروژه از نظر وضعیت، مدت زمان و نتایج آزمایش نظارت کنند. البته توجه داشته باشید که داشبورد Insights در زمان واقعی نیست. مشاهده تغییرات ممکن است تا 24 ساعت طول بکشد.ابزار CloudBeesابزار CloudBees CD یک ابزار تحویل مداوم است که مجموعه ای چشمگیر از داشبوردهای قابل تنظیم را ارائه می دهد، به طوری که می‌توانید داده ها را از زوایای مختلف مشاهده کنید. CloudBees CD که در بین مشاغل متوسط و شرکت های بزرگتر محبوب است، داده های بلادرنگ را در مورد وضعیت استقرار، فرکانس، توان عملیاتی و مدت زمان ارائه می دهد. اگر مشکلی پیش بیاید، قابلیت های نظارت آن از طریق داشبورد Workload Insights امکان بازگشت آسان را فراهم می کند.برای اهداف آزمایشی، CloudBeesCD به شما امکان می‌دهد در محیط‌های تولید مانند آزمایش کنید تا پیش‌نمایش تغییرات را دریافت کنید و نتایج آزمایش را در مرکز فرمان انتشار آن مشاهده کنید.ابزار Jenkinsابزار Jenkins که عمدتاً در شرکت‌های متوسط استفاده می‌شود، به‌عنوان یک سرور CI در دسترس است یا می‌تواند برای پشتیبانی و خودکارسازی فرآیند CD شما نیز گسترش یابد. در واقع، کاربران از نحوه خودکارسازی و ساده سازی فرآیند CI/CD لذت می برند. جنکینز با طیف گسترده ای از ابزارهای خارجی ادغام می شود، اما مراقب خزش و سازگاری ابزار باشید.ادغام Jenkins با بسیاری از ابزارهای خارجی می تواند منجر به مشکلات ارتقاء شود. علاوه بر این، مطمئن شوید که جنکینز از نسخه ابزارهای خارجی که استفاده می کنید پشتیبانی می کند. اشکال اصلی جنکینز این است که تجربه کاربری آن به اندازه برخی ابزارهای موجود در بازار خوشایند یا شهودی نیست.ابزار Harnessابزار Harness یک ماژول تحویل مداوم به عنوان یک سرویس (CDaaS) است که از یادگیری ماشین برای ساده کردن SDLC به روشی امن، قابل پیش‌بینی و پایدار استفاده می‌کند. این شامل لاگ ها و داشبوردهای کاربر پسند است که با تجسم خط لوله کامل شده است تا بر کل فرآیند CI/CD نظارت داشته باشد. کاربران می توانند زمان تحویل، تغییر نرخ شکست و موارد دیگر را ارزیابی کنند. Harness همچنین دارای یک ابزار نظارت است که امکان بازگشت آسان را در صورت لزوم فراهم می کند. کاربران هارنس که عمدتاً در مشاغل و شرکت‌های متوسط استفاده می‌شود، از این که به مهندسان کنترل بیشتری بر ساخت‌های خود می‌دهد، قدردانی می‌کنند.ابزار GitLabابزار GitLab یک پلت فرم DevOps است که بر روی منبع باز در یک برنامه واحد برای زنجیره ابزار ساده تر و کنترل متمرکز بر SDLC ساخته شده است. GitLab پس از اینکه توسعه دهندگان کد را به مخزن با آزمایش، ایمن سازی و نظارت خودکار کد به مخزن متعهد کردند، کارهای سنگین را انجام می دهد. این هاب یک مرحله‌ای و کاربرپسند گردش کار را بهینه می‌کند و برای ساخت‌های مشترکی که نه تنها توسعه‌دهندگان، بلکه مدیران و طراحان می‌توانند در آن مشارکت کنند، مفید است. با توجه به بسیاری از ویژگی‌های GitLab در پلتفرم آن، شرکت شما می‌تواند به راحتی وارد ویژگی‌ها شود، اما کاربران آن از آسانی استفاده از آن لذت می‌برند.معرفی شرکت های ایرانی که در این حوزهشرکت لاراهاستبرای بسیاری از برنامه نویسان و متخصصین Devops، ارائه محصول به صورت دوره ای از اهمیت ویژه ای برخوردار است.  در لاراهاست با ارائه سرویس Continuous Delivery، به این نیاز کاربران پاسخ داده تا بتوانند محصول خود را در سریع ترین زمان ممکن به محیط های Staging, Production برسانند.شرکت ابرزساین شرکت نیز سرویس Continuous delivery را برای ما فراهم می‌کند.شرکت ابرآروان«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://continuousdelivery.com/https://www.redhat.com/en/topics/devops/what-is-continuous-deliveryhttps://aws.amazon.com/devops/continuous-delivery/https://devops.com/the-state-of-continuous-delivery-in-2021/https://en.wikipedia.org/wiki/Continuous_deliveryhttps://www.synopsys.com/glossary/what-is-continuous-delivery.htmlhttps://harness.io/blog/what-is-continuous-delivery/https://www.cioinsight.com/it-strategy/top-continuous-delivery-tools-for-2021/#Top-Continuous-Delivery-Toolshttp://lara-host.ir/continuous-delivery/https://xaas.ir/https://www.arvancloud.com/fa</description>
                <category>مجتبی مرادی</category>
                <author>مجتبی مرادی</author>
                <pubDate>Tue, 21 Dec 2021 08:03:55 +0330</pubDate>
            </item>
                    <item>
                <title>مقدمه‌ایی بر API Gateway</title>
                <link>https://virgool.io/@m_43936264/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D8%A7%DB%8C%DB%8C-%D8%A8%D8%B1-api-gateway-on5ghjupvflt</link>
                <description>مقدمهدر این پست قصد داریم که مفهوم API Gateway، مزایا و معایب آن، معرفی یک الگو، ابزار های موجود در این زمینه و شرکت‌هایی که در ایران این خدمات را محیا می‌کنند را معرفی کنیم.میکروسرویس‌هاطبق تعریف گارتنر: ”میکروسرویس یک مؤلفه کاربردی، محصور سازی شده، با حداقل وابستگی(Coupling) که قابل استقرار و مقیاس پذیر مستقل است.“ هدف میکرو سرویس‌ها تجزیه  برنامه به میکروسرویس‌ها/ماژول‌های با حداقل وابستگی به یکدیگر است. برخلاف برنامه‌های کاربردی یکپارچه که در آن ماژول‌ها به‌شدت به یکدیگر وابسته شده‌اند و به عنوان یک تکه ماژول بزرگ و منفرد مستقر می‌شوند. میکروسرویس‌ها به دلایل زیر مفید خواهند بود:· هر میکروسرویس را می توان مستقل از خدمات دیگر میکروسرویس‌ها در برنامه مستقر، ارتقا، مقیاس، نگهداری و راه‌اندازی مجدد کرد.· توسعه چابک و استقرار چابک با یک تیم متقابل عملکردی مستقل.· انعطاف پذیری در استفاده از فناوری ها و مقیاس پذیری.· سرویس‌های مختلف با پیوند آزاد بر اساس نیازهای خاص خود مستقر می‌شوند که در آن هر سرویس دارای مدلAPI دقیق خود برای ارائه خدمات به مشتریان مختلف (وب، موبایل وAPIهای دیگر) است.ارتباطات در میکروسرویس هابیایید با یک مثال ارزش API Gateway را مشخص کنیم.بیایید تصور کنیم که در حال ساخت یک فروشگاه آنلاین هستید که از الگوی معماری Microservice استفاده می کند و صفحه جزئیات محصول را پیاده سازی می کنید. شما باید چندین نسخه از رابط کاربری جزئیات محصول را توسعه دهید:رابط کاربری مبتنی برHTML5/JavaScript برای مرورگرهای دسکتاپ و موبایل HTML توسط یک برنامه وب سمت سرور تولید می شود.کلاینت های بومی اندروید و آیفون (این کلاینت ها از طریق API های REST با سرور تعامل دارند)علاوه بر این، فروشگاه آنلاین باید جزئیات محصول را از طریق یک REST API برای استفاده توسط برنامه‌های شخص ثالث فراهم کند. رابط کاربری جزئیات محصول می تواند اطلاعات زیادی را در مورد یک محصول نمایش دهد.به عنوان مثال، صفحه جزئیات Amazon.com برای نمایش کتاب POJOs in Action: به صورت زیر است:اطلاعات اولیه کتاب مانند عنوان، نویسنده، قیمت و غیره.سابقه خرید شما برای کتابدسترسیگزینه های خریدموارد دیگری که اغلب با این کتاب خریداری می شوندسایر اقلام خریداری شده توسط مشتریانی که این کتاب را خریده اندنظرات مشتریانرتبه بندی فروشندگان …از آنجایی که فروشگاه آنلاین از الگوی معماری Microservice استفاده می کند، داده های جزئیات محصول در چندین سرویس پخش می شود. مثلا،خدمات اطلاعات محصول - اطلاعات اولیه در مورد محصول مانند عنوان، نویسندهخدمات قیمت گذاری - قیمت محصولخدمات سفارش - سابقه خرید برای محصولخدمات موجودی - در دسترس بودن محصولخدمات بررسی - نظرات مشتریان …در نتیجه، کدی که جزئیات محصول را نمایش می‌دهد باید اطلاعاتی را از همه این خدمات دریافت کند.در اینجا یک سوال به وجود می‌آید:                    چگونه مشتریان یک برنامه مبتنی بر میکروسرویس به خدمات فردی دسترسی دارند؟در حالی که فکر می کنیم مشتری مستقیماً با هر یک از میکروسرویس های مستقر شده ارتباط برقرار می کند، چالش های زیر باید در نظر گرفته شود:1- در مواردی که میکروسرویس APIهای ریز دانه را در معرض دید مشتری قرار می دهد، مشتری باید از هر میکروسرویس درخواست کند. در یک صفحه معمولی، ممکن است برای انجام درخواست، چندین سفر رفت و برگشت سرور مورد نیاز باشد. به عنوان مثال، همانطور که در بالا توضیح داده شد، مشتری که به جزئیات یک محصول نیاز دارد، باید داده‌ها را از خدمات متعدد واکشی کند.2- پروتکل ارتباطی متنوع (مانند gRpc، thrift، REST، AMQP و غیره) موجود در میکروسرویس‌ها، پذیرش همه آن پروتکل‌ها را برای مشتری چالش برانگیز و حجیم می‌کند.3- عملکردهای دروازه مشترک (مانند احراز هویت، مجوز، ورود به سیستم) باید در هر میکروسرویس پیاده سازی شود.4- ایجاد تغییرات در میکروسرویس ها بدون ایجاد اختلال در اتصال مشتری مشکل خواهد بود. به عنوان مثال هنگام ادغام یا تقسیم سرویس‌های ریز، ممکن است نیاز به کدگذاری مجدد بخش مشتری باشد.5- عملکرد شبکه برای انواع مختلف مشتریان متفاوت است. به عنوان مثال، یک شبکه تلفن همراه به طور معمول بسیار کندتر است و تاخیر بسیار بالاتری نسبت به یک شبکه غیر همراه دارد. و البته، هر WAN بسیار کندتر از یک LANاست. این بدان معناست که یک کلاینت تلفن همراه بومی از شبکه ای استفاده می کند که ویژگی های عملکردی بسیار متفاوتی نسبت به LANمورد استفاده توسط یک برنامه وب سمت سرور دارد. برنامه وب سمت سرور می‌تواند چندین درخواست برای سرویس‌های پشتیبان ارائه دهد بدون اینکه تأثیری بر تجربه کاربر داشته باشد، در حالی که به عنوان یک مشتری تلفن همراه فقط می‌تواند تعداد کمی را انجام دهد.6- تعداد نمونه های سرویس و مکان آنها (میزبان + پورت) به صورت پویا تغییر می کند.7- پارتیشن بندی به خدمات می تواند در طول زمان تغییر کند و باید از مشتریان پنهان شود.راه حل چالش‌های مطرح شده توسط API Gateway برطرف می‌شود.معرفی API Gatewayیک API Gateway لایه‌ایی است که در مقابل یک API(رابط برنامه‌نویسی کاربردی) قرار می‌گیرد و یک نقطه ورودی برای APIهای Back-end و میکروسرویس‌های تعریف شده (که می‌توانند داخلی و خارجی باشند) است.API مخفف Application Program Interface است. مجموعه ای از دستورالعمل ها، پروتکل ها و ابزارها برای ساخت برنامه های نرم افزاری است و نحوه تعامل اجزای نرم افزار را مشخص می کند.در جلوی API ها، دروازه به عنوان محافظ عمل می کند، امنیت را اعمال می کند و مقیاس پذیری و در دسترس بودن بالا را تضمین می کند. به بیان ساده، API Gateway تمام درخواست‌های API را از مشتری دریافت می‌کند، تعیین می‌کند که کدام سرویس‌ها مورد نیاز هستند، و آنها را در یک تجربه یکپارچه و یکپارچه برای کاربر ترکیب می‌کند. API Gateway  همچنین مسئول مسیریابی درخواست، ترکیب و ترجمه پروتکل است. تمام درخواست های ارسال شده توسط مشتری از طریق دروازهAPI انجام می شود. پس از آن، API Gateway درخواست ها را به میکروسرویس مناسب هدایت می کند. API Gateway درخواست را به یکی از دو روش زیر رسیدگی می کند:1- درخواست ها را به سرویس مربوطه روت یا پروکسی کرد.2-گسترش(Fan out) یک درخواست به چندین سرویس.یک API Gatewayمی تواند برای هر مشتری یک API سفارشی ارائه کند. همچنین بین دو پروتکل مانند HTTP، WebSockets و پروتکل های Web-Unfriendly که به صورت داخلی استفاده می شوند، ترجمه می شود.به عنوان مثال نمونه محبوب API Gateway Netflix API Gatewayاست. خدمات پخش Netflixدر صدها نوع مختلف دستگاه مانند تلویزیون، ست تاپ باکس، گوشی های هوشمند، تبلت ها و غیره در دسترس است. این سرویس تلاش می کند یک API یک اندازه برای سرویس پخش خود ارائه دهد.همانطور که گفته شد، برای رسیدگی به چالش های ذکر شده در بالا، یک لایه اضافی (API Gateway) معرفی شده است که بین مشتری و سرور قرار می گیرد و به عنوان یک درخواست مسیریابی پروکسی معکوس از مشتری به سرور عمل می کند.به طور خلاصه، دقیقاً به عنوان مدیریت API عمل می کند، اما مهم است که مدیریت API را با API Gateway اشتباه نگیرید.Microservice API Gatewayقابلیت های API Gatewayمسیریابیگیت‌وی با احاطه کردن سیستم زیربنایی و جدا شدن از مشتریان، یک نقطه ورودی واحد را برای مشتری فراهم می‌کند تا با سیستم میکروسرویس ارتباط برقرار کند.احراز هویت و مجوزادغام کشف خدماتذخیره پاسخسیاست ها، قطع کننده مدار و QoSمحدود کردن نرختعادل بارثبت، ردیابی، همبستگیهدرها، رشته های پرس و جو و تبدیل ادعاهالیست سفید IPثبت متمرکز (شناسه تراکنش در سرورها، ثبت خطا)ارائه دهنده هویت، احراز هویت و مجوزامنیتترکیب و پردازش APIمدیریت سهمیه های دسترسینظارت بر سلامت APIنسخه سازیمزایای API Gatewayمهمترین مزیت API Gateway این است که ساختار داخلی برنامه را محصور می کند.به جای فراخوانی سرویس خاص، مشتری مستقیماً با دروازه API صحبت می کند.این تعداد رفت و برگشت بین مشتری و برنامه را کاهش می دهد.کد مشتری را ساده می کند.تلاش‌های کدنویسی را کاهش می‌دهد، برنامه را کارآمدتر می‌کند، خطاها را به طور همزمان کاهش می‌دهد.برای هر نوع کلاینت یک API خاص ارائه می کند.پشتیبانی از DevOps و Serverlessچگونه یک دروازه APIاز DevOps و محیط های بدون سرور پشتیبانی می کنددر سازمان‌هایی که از رویکرد DevOps پیروی می‌کنند، توسعه‌دهندگان از میکروسرویس‌ها برای ساخت و استقرار برنامه‌ها به روشی سریع و تکراری استفاده می‌کنند. API ها یکی از رایج ترین راه های ارتباط میکروسرویس ها هستند. علاوه بر این، توسعه ابر، از جمله مدل بدون سرور، به APIها برای تامین زیرساخت بستگی دارد. شما می توانید توابع بدون سرور را مستقر کرده و با استفاده از یک API Gateway مدیریت کنید. به طور کلی، همانطور که یکپارچگی و اتصال به یکدیگر مهم تر می شوند، APIها نیز اهمیت بیشتری پیدا می کنند. و با افزایش پیچیدگی APIو افزایش استفاده، ارزش دروازه API نیز افزایش می یابد.معایب API Gatewayنیاز به قوانین مسیریابی دارد.احتمال یک نقطه شکست وجود دارد.خطر پیچیدگی به دلیل همه قوانین API در یک مکان است.الگوی Backend for Frontend (BFF)این یک تغییر از الگوی API Gatewayاست. به جای یک نقطه ورودی واحد برای مشتریان، چندین دروازه را بر اساس مشتری ارائه می دهد. هدف این است که APIهای متناسب با نیازهای مشتری را ارائه دهیم و بسیاری از نفخ های ناشی از ساخت APIهای عمومی برای همه مشتریان را از بین ببریم.الگوی Backend For Frontend (BFF) اما سوال اصلی اینجاست که به چند BFFنیاز داریم؟مفهوم اصلی BFF توسعه پشتیبان‌های خاص برای هر تجربه کاربری است. دستورالعمل فیل کالکادو «یک تجربه، یک BFF» است. اگر الزامات در بین کلاینت‌ها (کلاینت IOS، کلاینت اندروید، مرورگر وب و غیره) به طور قابل توجهی متفاوت باشد و زمان بازاریابی یک پروکسی یا API مشکل ساز شود، BFFها راه حل خوبی هستند. همچنین باید توجه داشت که طراحی پیچیده تر نیاز به یک راه اندازی پیچیده دارد.ابزارابزار Apigee: ابزار Apigee یکی از ابزارهای مدیریت API برتر است که برای هر برنامه کاربردی، سیستم ضبط و اینترنت اشیا قابل استفاده است. این راه حل نرم افزاری به شما امکان طراحی، ایمن سازی، تجزیه و تحلیل و مقیاس بندی API ها را می‌دهد. برای گفتن بیشتر، Apigee  شما را قادر می سازد API های خود را به طور کامل کنترل کنید و نحوه عملکرد سیستم را نظارت کنید.از جمله ویژگی های Apigee:ابزار Apigee  در ارائه راه حل ها در قالب یک پروکسی، عامل یا ترکیبی کمک می کند.برای توسعه، Apigee  استفاده از داده ها و ابزارها را با هدف ساخت برنامه های جدید مبتنی بر ابر ساده می کند.توسعه دهندگان می توانند برنامه های کاربردی را به تنهایی ایجاد و ارائه کنند.کمک به اندازه گیری و ردیابی. این ابزار تجزیه و تحلیل هایی را بر روی ترافیک API ارائه می دهد که به تنظیم و نظارت بر علائم مهم اثربخشی مانند KPI کمک می کند.در Apigee چهار طرح قیمت گذاری را ارائه می دهد - Evaluation، Standard، Enterprise و Enterprise Plus. طرح ارزیابی بدون هزینه است.ابزار MuleSoft: ابزار MuleSoft یکی دیگر از ابزارهای درجه یک مدیریت API برای یکپارچه سازی برنامه ها است. همچنین مدیریت و ساخت APIهای عالی را ارائه می دهد. به علاوه، از همان ابتدا راه حل هایی را برای ایجاد یک شبکه برنامه پیشنهاد می کند.چنین راهکارهایی به شما در مدیریت کاربران و تحلیل ترافیک دریافتی کمک می کند. آنها همچنین شامل سیاست هایی هستند که امنیت API را ارتقا می دهد و سیستم شما را از حملات سایبری جلوگیری می کند.برخی از ویژگی های اساسی آن عبارتند از:پلتفرم یکپارچه APIبه ایجاد انجمنی کمک می‌کند که بتوانید از آن برای تشویق مشارکت کنندگان و همکاری با توسعه دهندگان دیگر استفاده کنیدابزار MuleSoft یک گزینه آزمایشی رایگان را پیشنهاد می کند تا بتوانید ابزارها را کاوش کرده و آنها را در محل کار مشاهده کنید. در میان قیمت گذاری پیشنهادی، طرح طلا، پلاتین و تیتانیوم وجود دارد.ابزار Knogابزار Kong از راه‌حل‌های سراسری برای شرکت‌هایی که بر حل مشکلات برنامه کاربردی تمرکز دارند، پشتیبانی می‌کند. ابزار Kong Gateway و Kong Enterpriseمی توانند به شما در کنترل و مدیریت API ها کمک کنند. آخرین مورد نیز یک ابزار منبع باز است.برخی از ویژگی های Kong عبارتند از: مدیریت تیم ها و محیط توسعه یکپارچهمجموعه ای از افزونه ها که قابلیت های ابزار را گسترش می دهند.مقیاس پذیری، چیزی که به ویژه برای سازمان هایی با حجم کاری قوی مهم است.می توانید Kong Gateway را به صورت رایگان دانلود کنید. برای نسخه Enterprise، می توانید یک نسخه آزمایشی نرم افزار رایگان درخواست کنید.شرکت های ایرانی ارائه دهنده خدمات در حوزه API Gatewayشرکت وصلپلتفرم مدیریت API سورنا توسعه‌دهندگان را قادر می‌سازد تا برنامه‌هایی مرتبط با سامانه‌های داخلی سازمان/سرویس‌دهنده طراحی و پیاده‌سازی نمایند. همچنین APIها در تکنولوژی‌های مختلف نظیر اینترنت اشیا، رایانش ابری و داده‌های حجیم نقشی کلیدی را ایفا می‌نماید. پلتفرم مدیریت API سورنا پایداری، امنیت و پشتیبانی ویژهای ارائه می‌کند تا شرکت‌های طرف ثالث، همکاران، شرکا و حتی توسعه‌دهندگان آزاد بتوانند با آسودگی خیال و اطمینان از آنها استفاده نمایند.شرکت درسااین شرکت نیز یکی از شرکت‌هایی است که سرویس API Gateway ابری را ارائه می‌دهد.جمله‌ی پایانییک API بی فایده است مگر اینکه با کیفیت ثابت ارائه شود. یک Gateway برای کمک به اطمینان از عملکرد عالی، در دسترس بودن بالا و مقیاس پذیری الاستیک API ها از طریق امکان دادن به شرکت ها برای شروع تحویل با خدمات پشتیبانی یکسان، از جمله مدیریت ترافیک، تحول و یکپارچه سازی سیستم، حیاتی است.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://www.axway.com/en/products/api-management/gatewayhttps://www.redhat.com/en/topics/api/what-does-an-api-gateway-do#support-for-devops-and-serverless-environmentshttps://microservices.io/patterns/apigateway.htmlhttps://www.javatpoint.com/introduction-to-api-gatewayshttps://blog.devgenius.io/microservices-design-api-gateway-pattern-980e8d02bdd5https://www.softwaretestinghelp.com/api-management-tools/https://medium.com/young-app-platform/top-10-api-gateways-for-api-management-to-try-in-2020-2488d03c0952https://dorsacloud.com/http://vasl.ir/platform/api-management/</description>
                <category>مجتبی مرادی</category>
                <author>مجتبی مرادی</author>
                <pubDate>Mon, 20 Dec 2021 09:45:00 +0330</pubDate>
            </item>
                    <item>
                <title>مقدمه‌ای بر الگوی MVVM</title>
                <link>https://virgool.io/@m_43936264/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D8%A7%DB%8C-%D8%A8%D8%B1-%D8%A7%D9%84%DA%AF%D9%88%DB%8C-mvvm-zw3pl3j9nii2</link>
                <description>هدف از این پست ارائه مقدمه ای بر الگویModel -View-ViewModel (MVVM) است.الگوی MVVMالگوی MVVM گونه‌ای از الگوی طراحی مدل ارائه  شده توسطمارتین فاولر است که توسط معماران مایکروسافت کن کوپر و تد پیترز به طور خاص برای ساده کردن برنامه‌نویسی رویداد محور رابط‌های کاربری اختراع شد. این الگو درWindows Presentation Foundation (WPF) وSilverlight گنجانده شد. جان گاسمن، یکی از معماران WPF و Silverlight مایکروسافت، MVVM را در وبلاگ خود در سال 2005 معرفی کرد.این الگو بعدها مثل MVC به دنیای وب پا گذاشت و استفاده از اون بین فریم‌ورک‌های جاوا اسکریپت رایج شد. این الگو از سه بخش تشکیل شده است:                                                              Model - View - ViewModelاین سه بخش، برنامه‌ی ما رو به سه بخش اصلی تقسیم می‌کند. این سه بخش را میتوان به صورت جدا توسعه داد تا وابستگی بین آن‌ها به حداقل برسد.اجزای الگوی MVVMمدل (Model)مدل چیزی است که از آن به عنوان شی دامنه یاد می‌کنیم. مدل نشان دهنده داده ها و یا اطلاعات واقعی است که ما با آن سروکار داریم. نمونه‌ای از یک مدل ممکن است یک مخاطب (شامل نام، شماره تلفن، آدرس و غیره) باشد. در واقع مدل، اشیاء تجاری هستند که داده ها و رفتار دامنه برنامه را محصور می‌کنند و به سادگی داده ها را نگه می دارند.نکته کلیدی که باید با مدل به خاطر بسپارید این است که اطلاعات را در خود نگه می دارد، اما رفتارها یا خدماتی را که اطلاعات را دستکاری می کنند، نگه نمی دارد. مسئولیتی در قبال قالب بندی متن برای زیبا به نظر رسیدن روی صفحه، یا واکشی فهرستی از آیتم ها از یک سرور راه دور نیست. منطق کسب و کار معمولاً جدا از مدل نگهداری می شود و در کلاس های دیگری که بر روی مدل عمل می کنند، محصور می‌شود. این همیشه درست نیست: به عنوان مثال، برخی از مدل ها ممکن است دارای اعتبار سنجی باشند.اغلب تمیز نگه داشتن یک مدل یک چالش است. مدل یک بازنمایی واقعی از «دنیای واقعی» است. به عنوان مثال، یک رکورد تماس ممکن است حاوی آخرین تاریخ اصلاح و هویت کاربر اصلاح کننده و یک شناسه منحصر به فرد (پایگاه داده یا اطلاعات پایدار) باشد. تاریخ اصلاح شده هیچ معنای واقعی برای یک تماس در دنیای واقعی ندارد، بلکه تابعی از نحوه استفاده، ردیابی و تداوم مدل در سیستم است.در اینجا یک مدل نمونه برای نگهداری اطلاعات تماس آمده است:namespace MVVMExample {
public class ContactModel : INotifyPropertyChanged
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
RaisePropertyChanged(&amp;quotFirstName&amp;quot);
RaisePropertyChanged(&amp;quotFullName&amp;quot);
}
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set
{
_lastName = value;
RaisePropertyChanged(&amp;quotLastName&amp;quot);
RaisePropertyChanged(&amp;quotFullName&amp;quot);
}
}
public string FullName
{
get { return string.Format(&amp;quot{0} {1}&amp;quot, FirstName, LastName); }
}
private string _phoneNumber;
public string PhoneNumber
{
get { return _phoneNumber; }
set
{
_phoneNumber = value;
RaisePropertyChanged(&amp;quotPhoneNumber&amp;quot);
}
}
protected void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public override bool Equals(object obj)
{
return obj is ContactModel &amp;&amp; ((ContactModel) obj).FullName.Equals(FullName);
}
public override int GetHashCode()
{
return FullName.GetHashCode();
}
}
}نما (ٰView)نما چیزی است که اکثر ما با آن آشنا هستیم و مانند الگوهای model-view-controller (MVC) وModel-view-presenter (MVP)، نما ساختار، طرح‌بندی، و ظاهر چیزی است که کاربر روی صفحه می‌بیند و  تنها چیزی است که کاربر نهایی واقعاً با آن تعامل دارد. مثلا فرم‌ها، دکمه‌ها، متن‌ها و ... . اینکه اطلاعات مدل چگونه و به چه سبکی نمایش داده شوند، وظیفه View هست. نما برای ارائه بیشتر این داده‌ها آزادی خاصی را می طلبد. برای مثال، یک تاریخ ممکن است به تعداد ثانیه از نیمه شب اول ژانویه 1970 (زمان یونیکس) روی مدل ذخیره شود. با این حال، به کاربر نهایی، نام ماه، تاریخ و سال در منطقه زمانی محلی آنها ارائه می شود. یک نما همچنین می تواند رفتارهای مرتبط با خود داشته باشد، مانند پذیرش ورودی کاربر. نمای ورودی (فشردن کلید، حرکات ماوس، حرکات لمسی و غیره) را مدیریت می کند که در نهایت ویژگی های مدل را دستکاری می کند. به طور خلاصه نما، داده های قالب بندی شده است که کاربر می بیند.در MVVM، View فعال است. برخلاف یک نمای غیرفعال که هیچ دانشی از مدل ندارد و به طور کامل توسط یک کنترل کننده/ ارائه کننده دستکاری می شود، نما در MVVM شامل رفتارها، رویدادها و اتصالات داده است که در نهایت نیاز به دانش مدل و نمای مدل اساسی دارد. در حالی که این رویدادها و رفتارها ممکن است به ویژگی‌ها، فراخوانی‌های متد و دستورات نگاشت شوند، اما view همچنان مسئول رسیدگی به رویدادهای خود است و این را به طور کامل به viewmodel نمی‌سپارد.نکته ای که باید در مورد نما به خاطر بسپارید این است که مسئول حفظ وضعیت خود نیست. در عوض، این را با viewmodelهمگام می‌کند.در اینجا یک نمای نمونه وجود دارد که به صورت XAMLبیان شده است:&lt;UserControl x:Class=&amp;quotMVVMExample.DetailView&amp;quot
xmlns=&amp;quothttp://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot
xmlns:x=&amp;quothttp://schemas.microsoft.com/winfx/2006/xaml&amp;quot&gt;
&lt;Grid x:Name=&amp;quotLayoutRoot&amp;quot Background=&amp;quotWhite&amp;quot DataContext=&amp;quot{Binding CurrentContact}&amp;quot&gt;
&lt;Grid.RowDefinitions&gt;
&lt;RowDefinition/&gt;
&lt;RowDefinition/&gt;
&lt;/Grid.RowDefinitions&gt;
&lt;Grid.ColumnDefinitions&gt;
&lt;ColumnDefinition/&gt;
&lt;ColumnDefinition/&gt;
&lt;/Grid.ColumnDefinitions&gt;
&lt;TextBlock Text=&amp;quotName:&amp;quot HorizontalAlignment=&amp;quotRight&amp;quot Margin=&amp;quot5&amp;quot/&gt;
&lt;TextBlock Text=&amp;quot{Binding FullName}&amp;quot HorizontalAlignment=&amp;quotLeft&amp;quot Margin=&amp;quot5&amp;quot
Grid.Column=&amp;quot1&amp;quot/&gt;
&lt;TextBlock Text=&amp;quotPhone:&amp;quot HorizontalAlignment=&amp;quotRight&amp;quot Margin=&amp;quot5&amp;quot Grid.Row=&amp;quot1&amp;quot/&gt;
&lt;TextBlock Text=&amp;quot{Binding PhoneNumber}&amp;quot HorizontalAlignment=&amp;quotLeft&amp;quot Margin=&amp;quot5&amp;quot
Grid.Row=&amp;quot1&amp;quot Grid.Column=&amp;quot1&amp;quot/&gt;
&lt;/Grid&gt;
&lt;/UserControl&gt;توجه داشته باشید که اتصالات مختلف نقاط همگام سازی با viewmodel هستند.کنترل کننده/ارائه کننده ( ViewModel ) بخش viewmodel یک انتزاع از نما است که ویژگی ها و دستورات عمومی را نشان می دهد. به جای کنترل‌کننده الگوی MVC یا ارائه‌دهنده الگوی MVP، MVVM دارای یک Binder  است که ارتباط بین view و ویژگی‌های محدود آن در مدل viewرا خودکار می‌کند.این بخش یک بخش کلیدی از سه گانه است زیرا Presentation Separation یا مفهوم جدا نگه داشتن تفاوت های نما از مدل را معرفی می‌کند. به جای اینکه Model از دیدگاه کاربر نسبت به تاریخ آگاه شود، به طوری که تاریخ را به فرمت نمایش تبدیل کند، Model به سادگی داده ها را نگه می دارد، viewبه سادگی تاریخ فرمت شده را نگه می دارد و کنترل کننده به عنوان رابط بین این دو عمل می کند. کنترلر ممکن است ورودی را از viewبگیرد و آن را روی Model قرار دهد، یا ممکن است با یک سرویس تعامل داشته باشد تا Model را بازیابی کند، سپس آن را ترجمه کرده و آن را در view قرار دهد. به بیان ساده‌تر، viewmodel تبدیل‌کننده اطلاعات هست. می‌تواند اطلاعات را طوری به view تحویل دهد که view می‌خواهد. همچنین اطلاعات رو طوری به Model تحویل دهد که Model می‌خواهد.viewmodel همچنین روش‌ها، دستورات و سایر نقاطی را نشان می‌دهد که به حفظ وضعیت نما کمک می‌کند، مدل را به عنوان نتیجه اقدامات روی نما دستکاری می‌کند، و رویدادهایی را در خود نمای ایجاد می‌کند.در اینجا یک نمونه viewmodel ممکن است به نظر برسد. ما یک کلاس BaseINPC(برای«INotifyPropertyChanged») ایجاد کرده‌ایم که روشی برای بالا بردن رویداد تغییر ویژگی را آسان می‌کند.namespace MVVMExample
{
public class ContactViewModel : BaseINPC
{
public ContactViewModel()
{
Contacts = new ObservableCollection&lt;ContactModel&gt;();
Service = new Service();
Service.GetContacts(_PopulateContacts);
Delete = new DeleteCommand(Service,()=&gt;CanDelete,contact =&gt;{
CurrentContact = null;
Service.GetContacts(_PopulateContacts);
});
}
private void _PopulateContacts(IEnumerable&gt;ContactModel&gt; contacts){
Contacts.Clear();
foreach(var contact in contacts){
Contacts.Add(contact);
}}
public IService Service { get; set; }
public bool CanDelete{
get { return _currentContact != null; }
}
public ObservableCollection&lt;ContactModel&gt; Contacts { get; set; }
public DeleteCommand Delete { get; set; }
private ContactModel _currentContact;
public ContactModel CurrentContact{
get { return _currentContact; }
set{
_currentContact = value;
RaisePropertyChanged(&amp;quotCurrentContact&amp;quot);
RaisePropertyChanged(&amp;quotCanDelete&amp;quot);
Delete.RaiseCanExecuteChanged();}
}
}
}این viewmodel بدیهی است که برای مدیریت لیستی از مخاطبین طراحی شده است.همانطور که گفتیم، view و viewmodel از طریق data-binding، فراخوانی روش، ویژگی ها، رویدادها و پیام ها با هم ارتباط برقرار می‌کنند.اتصال داده (Data Binding)ارتباط بین بخش ظاهر برنامه و منطق برنامه توسط تکنیکی به اسم Data Binding انجام می شود. این ارتباط زنده و فعال هست. یعنی برای مثال اطلاعاتی از مدل در نما در حال نمایش هست (مثلا نام کاربری). وقتی تغییری توی اطلاعات مدل صورت میگیرد، این تغییر بطور خودکار در نما اعمال می شود و قابل دیدن هست و دیگر لازم نیست بطور دستی این کار را انجام داد. دو نوع Data Binding وجود دارد: یک طرفه و دو طرفهیک طرفه: وقتی اطلاعات مدل تغییر می‌کند، بصورت خودکار اطلاعاتی که نما دارد نمایش میدهد و هم تغییر می‌کند. دو طرفه: توی این روش وقتی اطلاعات نمایشی در نما  تغییر کند، اطلاعات مدل بصورت خودکار و آنی هم تغییر پیدا می‌کند.نما و ViewModel در ViewModel نه تنها مدل‌ها، بلکه ویژگی‌های دیگر (مانند اطلاعات وضعیت و...) و دستورات را در معرض نمایش می‌گذارد. View رویدادهای UI خود را مدیریت می کند، سپس آنها را از طریق دستورات به ViewModel نگاشت می کندمدل‌ها و ویژگی‌ها در ViewModel  از طریق Databinding دو طرفه از نما به‌روزرسانی می‌شوند.مدل و ViewModel بخش ViewModel ممکن است مدل را مستقیماً یا خصوصیات مربوط به مدل را برای اتصال داده در معرض نمایش قرار دهد. ViewModel می‌تواند دارای رابط‌هایی برای سرویس‌ها، داده‌های پیکربندی و غیره باشد تا ویژگی‌هایی را که در معرض دید قرار می‌دهد واکشی و دستکاری کند.چه چیزی MVVMنیست؟ الگو MVVM یک چارچوب کامل نیست. یک الگو است و ممکن است بخشی از یک چارچوب باشد، اما تنها بخشی از راه حل کلی برای معماری برنامه شما است. به اتفاقاتی که در سرور شما می‌افتد یا نحوه چیدمان سرویس‌های شما اهمیتی نمی‌دهد. این کار جداسازی نگرانی‌ها را انجام می دهد که خوب است.MVVM قرار نیست سرعت شما را کاهش دهد! همه الگوها و چارچوب های جدید با یک منحنی یادگیری همراه هستند. شما باید بپذیرید که توسعه دهندگان شما باید الگو را یاد بگیرند و درک کنند، اما نباید بپذیرید که کل فرآیند شما ناگهان طولانی تر شود یا به تاخیر بیفتد. این الگو زمانی مفید است که توسعه را تسریع کند، ثبات و عملکرد را بهبود بخشد، خطر را کاهش دهد و غیره. هنگامی که توسعه را کند می کند، مشکلاتی را ایجاد می کند و ممکن است بخواهید در رویکرد خود تجدید نظر کنید.مزایا MVVM:قابلیت نگهداری:جداسازی کامل انواع مختلف کدها، ایجاد تغییرات بدون نگرانی را آسان‌تر کند.این بدان معناست که می توانید چابک بمانید و به سرعت به سمت نسخه های جدید حرکت کنید.توسعه پذیری:گاهی اوقات با قابلیت نگهداری همپوشانی دارد، زیرا مرزهای جداسازی تمیز و کدهای دانه دانه بیشتر است.شما شانس بیشتری برای استفاده مجدد هر یک از آن قطعات دارید.همچنین این قابلیت را دارد که قطعات کد جدیدی را جایگزین یا اضافه کند که کارهای مشابهی را در مکان های مناسب در معماری انجام می دهند.ارتباط شفاف:viewmodel یک رابط شفاف برای کنترل‌کننده viewارائه می‌کند که از آن برای پر کردن لایه viewو تعامل با لایه مدل استفاده می‌کند که منجر به یک ارتباط شفاف بین لایه‌های برنامه شما می‌شود.معایب MVVM:برخی از مردم فکر می کنند که برای رابط های کاربری ساده، MVVMمی تواند بیش از حد باشد.در موارد بزرگتر، طراحی ViewModelممکن است سخت باشد.هنگامی که پیوندهای پیچیده داده ای داریم، اشکال زدایی کمی دشوار خواهد بود.تفاوت MVVM و MVC:کنترلر MVC کنترل جریان اطلاعات بین مدل و نما را به عهده دارد. درMVC  یک نما می‌تواند بصورت مستقیم اطلاعات مدل را بخواند و نمایش دهد. اما در الگوی MVVM  مدل و نما هیچ شناختی از یکدیگر ندارند. ViewModel برخلاف کنترلر MVC، یک کنترلر نیست. بلکه نقش یک پل بین مدل و نما رو به عهده دارد. یک رابط بین اطلاعات مدل و اطلاعات نما است و توسط تکنیکی به اسم Data Binding که بطور مستقیم با هم در ارتباط هستند. توسط تکنیک Data Binding ، مدل و نما بصورت خودکار و آسان از تغییرات با خبر می‌شوند.فریمورک‌های الگوی MVVM:در این بخش، ما در مورد کیت‌های ابزار MVVM یا چارچوب‌های موجود بحث خواهیم کرد. همچنین می توانید از این فریم ورک ها استفاده کنید تا مجبور نباشید یک سری کدهای تکراری برای پیاده سازی الگوی MVVM خودتان بنویسید. در اینجا برخی از محبوب ترین فریم ورک ها آمده است:Prism:Prism راهنمایی هایی را در قالب نمونه ها و مستندات ارائه می دهد که به شما کمک می کند به راحتی برنامه های دسکتاپ Windows Presentation Foundation غنی، انعطاف پذیر و با قابلیت نگهداری آسان طراحی و بسازید.  Prism از الگوهای طراحی استفاده می کند که اصول مهم طراحی معماری مانند جداسازی نگرانی ها و اتصال سست را در بر می گیرد. Prism به شما کمک می کند تا برنامه هایی را با استفاده از مؤلفه هایی بسازید که می توانند به طور مستقل تکامل یابند، اما می توانند به راحتی و به طور یکپارچه در برنامه کلی ادغام شوند.این نوع برنامه ها به عنوان برنامه های کاربردی ترکیبی شناخته می شوند.MVVM Light:MVVM Light توسط Laurent Bugnion تولید می‌شود و به شما کمک می‌کند نمای خود را از مدل خود جدا کنید، که برنامه‌هایی را ایجاد می‌کند که تمیزتر و نگهداری و گسترش آن آسان‌تر است.همچنین برنامه های قابل آزمایش ایجاد می کند و به شما امکان می دهد یک لایه رابط کاربری بسیار نازک تری داشته باشید (که آزمایش خودکار آن دشوارتر است).این جعبه ابزار تأکید ویژه‌ای بر باز کردن و ویرایش رابط کاربری در Blendدارد، از جمله ایجاد داده‌های زمان طراحی برای اینکه کاربران Blendبتوانند هنگام کار با کنترل‌های داده، چیزی را ببینند.Caliburn Micro:این یک چارچوب منبع باز کوچک دیگر است که به شما کمک می کند الگوی MVVMرا پیاده سازی کنید و همچنین از تعدادی چیزهای خارج از جعبه پشتیبانی می کند. Caliburn Micro یک چارچوب کوچک و در عین حال قدرتمند است که برای ساخت برنامه‌های کاربردی در تمامی پلتفرم‌های XAMLطراحی شده است.با پشتیبانی قوی از MVVM و سایر الگوهای رابط کاربری اثبات شده، Caliburn Microشما را قادر می‌سازد تا راه‌حل خود را سریع بسازید، بدون اینکه نیازی به قربانی کردن کیفیت کد یا آزمایش‌پذیری باشد.SilverlightFX:اهداف اعلام شده برای این فریم ورک عبارتند از فعال کردن مشخصات اجمالی واسط های کاربر، امکان تفکیک آسان تر دیدگاه و کد، و ارائه یک چارچوب ناب است.nRoute:یکی دیگر از چارچوب‌های MVVM، این کتابخانه برای «فرمان‌های معکوس» منحصربه‌فرد است که اجازه می‌دهد دستورات اتصال به رویدادها در view را انجام دهد، نه اینکه view به سادگی دستورات را به viewmodel ارسال کند.سایر فریمورک‌هایی الگو‌ی MVVM به عبارت زیر است:· MicroModels· .NET Community Toolkit· DevExpress MVVM· DotVVM open source project· MVVMLight Toolkit· Jellyfish· ReactiveUI· Mugen MVVM Toolkit· Uno Platform - Open Source· Rascl· MvvmCross· FreshMvvm· Angular· Aurelia· Durandal· Ember.js· Ext JS· Knockout.js· Omi.js· Oracle JET· Reactjs· Svelte· Vue.js· Xamlccنتیجه‌گیریهمانطور که مشاهده کردید MVVM یک پترن هست. یعنی الگویی برای اینکه برنامه‌ای ساختار یافته‌تر داشته باشیم. امیدوارم یاد گرفته باشید که چرا MVVMیکی از الگو‌های طراحی محبوب است.در پایان این «این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://www.raywenderlich.com/34-design-patterns-by-tutorials-mvvmhttps://www.geeksforgeeks.org/introduction-to-model-view-view-model-mvvm/https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodelhttps://www.wintellect.com/model-view-viewmodel-mvvm-explained/https://www.tutorialspoint.com/mvvm/mvvm_introduction.htm</description>
                <category>مجتبی مرادی</category>
                <author>مجتبی مرادی</author>
                <pubDate>Thu, 09 Dec 2021 01:22:35 +0330</pubDate>
            </item>
                    <item>
                <title>مستندسازی معماری نرم‌افزار با استفاده از مدل C4</title>
                <link>https://virgool.io/@m_43936264/%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%B3%D8%A7%D8%B2%DB%8C-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%85%D8%AF%D9%84-c4-nvvb985ievik</link>
                <description>معرفی مستند سازی C4شاید تا به الان کلمه‌ معماری نرم‌افزار را نشنیده باشید. هر نرم‌افزار یک معماری ساده یا پیچیده دارد. به طور خلاصه معماری نرم‌افزار یک سیستم، مجموعه‌ایی از ساختار‌هایی است که کمک می‌کنند تا درباره سیستم استدلال کنیم و حرف بزنیم. اگر به معماری نرم‌افزار توجهی نداشته باشیم تغییر سیستم بسیار سخت و حتی غیرممکن می‌شود. امروزه با توجه به گستردگی و تنوع نیاز‌های مردم، نیازمندی‌ها با سرعت بیشتری تغییر پیدا می‌کند و یک سیستم را ملزم به تغییرپذیری می‌کند. بنابراین یک معماری خوب یکی از مهمترین جنبه های تولید نرم‌افزار است.یکی از ویژگی‌های معماری خوب این است که یک دید و فهم مشترک را، به افراد مختلف پروژه و حتی ذینفعان نرم‌افزار ارائه دهد و این دید برای تمام افراد قابل درک باشد و روی آن تفاهم داشته باشند. به دلیل تغییر کردن نیازمندی‌ها و حتی عوض شدن افراد تیم توسعه، بهتر است که این فهم مشترک مستند شود.نمودارها یکی از راه‌های مستند سازی هستند اما نه هر نموداری! نمودارهای مبهم و غیراصولی نه تنها به افراد کمکی نخواهند کرد، بلکه منجر به سوء تفاهم می‌شود که می‌تواند سرعت یک تیم خوب را کند کند. مستندسازی معماری نرم‌افزار باید به گونه ای باشد که برای همه قابل درک باشد. استانداردهایی مانند UML یا ArchiMate وجود دارد، اما آنها محدودیت‌هایی دارند، به خصوص زمانی که می خواهیم از دیدگاه‌های مختلف به سیستم خود نگاه کنیم. علاوه بر آن افراد بدون پیشینه فنی یا حتی برنامه نویسان بدون آموزش قبلی، با دیدن این نمودارها احساس راحتی نخواهند کرد و نمادها را درک نمی کنند.یک راه حل پیشنهاد شده برای حل این مشکل، مدل C4 است که در ادامه به آن میپردازیم.شکل 1 مستند سازی
مدل C4 چیست؟مدل C4 توسط یک معمار نرم‌افزار به اسم سیمون براون بین سال‌های 2006 تا 2011 بر پایه زبان مدل‌سازی واحد (UML) و مدل نمای معماری 4+1 ایجاد شد.کلمه C4 مخفف کلمات: مفاهیم سیستم (Context)، کانتینر‌ها(Container)، مؤلفه‌ها(Components)  و کد(Code) است. هر یک از این کلمات دیدگاهی از سیستم را به ما نشان داده و هرکدام مخاطبان خاص خود را دارد. درواقع مانند یک نقشه جغرافیایی از یک منطقه با بزرگنمایی‌های متفاوت است.شکل 2 دیدگاه‌های مطرح شده و سلسله مراتب بزرگنمایی را نشان می‌دهد. در بالاترین سطح، سیستم مد نظر و افراد و سیستم‌هایی که با آن در ارتباط است را نشان می‌دهد. در سطح بعدی روی سیستم بزرگنمایی انجام داده که در آن مجموعه‌ایی از کانتینرهاست (کانتینر یک اپلیکیشن یا پایگاه داده است در واقع چیزی برای اجرای کد است). در سطح بعد یکی از کانتینرها را بزرگنمایی کرده که شامل مجموعه‌ایی از مؤلفه‌هاست و هر مؤلفه هم مجموعه ایی از کد است.شکل 2 مدل C4
سطوح مدل C4همانطور که گفته شد مدل C4 از 4 کلمه تشکیل شده است که هر کدام یک سطح از این مدل را تشکیل می‌دهد.در ادامه این 4 سطح را معرفی می‌کنیم و برای هر کدام یک مثال واحد (سیستم بانکداری اینترنتی) را ارائه می‌دهیم.سطح اول: مفاهیم سیستم (Context Diagram)بالاترین سطح انتزاع این نمودار است. در این نمودار سیستم مورد نظر مانند جعبه‌ایی در مرکز قرار می‌گیرد و کاربران و سایر سیستم‌ها با آن در تعامل هستند. در این سطح به جزئیات سطح پایینی مانند فناوری‌ها و ... اهمیتی نمی‌دهیم و بیشتر بر روی افرادی که از سیستم استفاده می‌کنند و سیستم‌هایی که با سیستم مورد نظر در تعامل است، تمرکز دارد.مخاطبان این نمودار همه افراد، با هر سطح دانش و تجربه‌ایی چه خارج چه داخل تیم توسعه است. شکل 3 نمودار سطح 1 یک سیستم بانکداری اینترنتی را نشان می‌دهد که یک گروهی از افراد برای استفاده از خدمات بانکداری اینترنتی مانند پرداخت قبوض، انتقال وجه و... از آن استفاده می‌کنند. در این نمودار برای اینکه سیستم ما اطلاعات مشتری خود را داشته باشد و از آن استفاده کند، از سیستم Mainframe‌ استفاده می‌کند. همچنین این سامانه با سامانه ایمیل در ارتباط بوده به مشتریان خود ایمیل را ارسال می‌کند. در این نمودار جعبه‌ایی که به رنگ آبی وجود دارد سیستم مد نظر ما است و جعبه‌های خاکستری سیستم‌هایی است که با سیستم مد نظر ما در ارتباط هستند.شکل3 Context Diagram
اکنون به راحتی می توانیم ببینیم که با کدام سیستم کار می‌کنیم و کاربران اصلی ما چه کسانی هستند.سطح دوم: کانتینرها (Container diagram)وقتی روی سیستم مورد نظر خود بزرگنمایی کنیم با کانتینرها مواجه می‌شویم. یک کانتینر ساختاری است مانند یک برنامه وب سمت سرور، برنامه دسکتاپ، برنامه تلفن همراه، شمای پایگاه داده، سیستم فایل، و ... . در اصل، یک کانتینر یک واحد قابل اجرا و قابل استقرار جداگانه است که کد را اجرا می‌کند. کانتینرها با API هایی با یکدیگر ارتباط برقرار می‌کنند و به طور مستقیم وابسته نیستند. در این نمودار بعضی از فناوری‌ها مانند پروتکل‌هایی که هر کانتینر برای برقراری ارتباط استفاده می‌کند، صحبت می‌شود. شکل 4، نمودار کانتینر سیستم بانکداری اینترنتی را نشان می‌دهد. داخل جعبه خط چین کانتینرهایی مانند اپلیکیشن تلفن همراه، برنامه وب سمت سرور، پایگاه داده، API سمت سرور و... آمده است. در این نمودار فناوری استفاده شده در کانتینرها و تکنولوژی ارتباط کانتینرها با یکدیگر و چگونگی تعامل این کانتینر با سایر سیستم‌ها و کاربران نیز قابل مشاهده است.مخاطبان این نمودار افراد دارای تجربه‌ی فنی داخل و خارج تیم توسعه نرم افزار مانند معماران نرم‌افزار یا توسعه دهندگان است.شکل4 Container Diagram
سطح سوم: مؤلفه (Components Diagram)نمودار مؤلفه، یک کانتینر را جداگانه بزرگ‌نمایی می‌کند تا اجزای داخل آن و تعاملات آن‌ را نشان دهد. نمودار مؤلفه نشان می‌دهد که چگونه یک کانتینر از تعدادی مؤلفه تشکیل شده است. مسئولیت و جزئیات سطح پایین برای هر مؤلفه نیز مشخص می‌شود. شکل 5، مؤلفه‌های کانتینر API سیستم بانکداری اینترنتی را نشان می‌دهد.مخاطبان این نمودار معماران و توسعه‌دهنگان نرم‌افزار هستند تا به کمک آن بتوانند به صورت تخصصی و فنی درباره‌ی راه‌حل و ارتباطات، اطلاعات کسب کنند.شکل5 Component Diagram
سطح چهارم: کدکد پایین‌ترین سطح است و زیاد مستند سازی این بخش توصیه نمی‌شود. زیرا این بخش دائما در حال تغییر است ولی اگر واقعا به آن نیاز بود میتوان روی مؤلفه‌ مورد نیاز بزرگنمایی کرد، تا نحوه پیاده‌سازی آن مشخص شود. اگر واقعاً می‌خواهید یا نیاز دارید، می‌توانید یک مؤلفه را بزرگنمایی کنید تا نحوه پیاده‌سازی آن مؤلفه را نشان دهید. برای نمودار این بخش می‌توان از نمودار‌های UML مانند نمودار کلاس استفاده کرد. شکل 6 نحوه پیاده سازی و کلاس‌های مؤلفه MainframeBankingSystemFacade را نشان می‌دهد.شکل6 Code  Diagram
نشانه گذاریبرای ایجاد نمودار‌های مدل C4، هیچ گونه نشانه گذاری و محدودیتی وجود ندارد ولی توصیه می‌شود که از نماد‌های واحد نمودارهای UML استفاده شود ولی این تنها یک توصیه است و ما هیچ محدودیتی نداریم. مهم این است که بتوانیم مفهوم را به درستی و به سادگی هرچه تمامتر منتقل کنیم.علاوه بر این آقای برآون توصیه‌های دیگری هم برای نشانه گذاری می‌کند:هر نمودار باید عنوان مناسب داشته باشد.هر نمودار باید دارای کلید باشد تا نماد‌های مورد استفاده شده را توضیح دهد.کلمات اختصاری به کار رفته باید برای همگان قابل درک باشد.هر عنصر باید توصیف کوتاهی داشته باشد.فناوری هر کانتینر و مؤلفه باید مشخص باشد.هر خط و پیکان باید یکطرفه باشد.هر خط باید توضیحاتی داشته باشد.هر خط رابطه بین کانتینرها باید شامل فناوری ارتباط بین آن‌ها باشد.پیکان‌ها به صورت خط چین نمایش داده شود.ابزارابزار‌های تحت وب زیادی برای طراحی مدل C4 وجود دارد مانند draw.io و gliffy.com که در هر کدام با فعال کردن افزونه c4 میتوان به طراحی نمودار‌های سطح‌های مختلف پرداخت.شکل7 نمونه‌ایی از طراحی در سایت Gliffy
علاوه بر این ابزار‌های تحت وب، ابزار متن باز c4-plantUML نیز وجود دارد.شکل8 نمونه‌ایی از طراحی c4-plantUML
لازم به ذکر است که برای رسم نمودار‌های مدلC4، لزومی به استفاده‌ از ابزار نیست و می‌توان با استفاده از کاغذ یا تخته وایت برد این نمودار‌ها را به صورت دستی ترسیم کرد.در پایانمدل C4 یکی از ساده‌ترین روش‌های مستندسازی معماری نرم‌افزار است. به کمک این مدل می‌توان با سطوح مختلف سیستم ارتباط برقرار کرد و سناریوهای مختلف را برای کاربران مختلف تشریح کرد.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»مراجعhttps://www.youtube.com/watch?v=x2-rSnhpw0ghttps://www.youtube.com/watch?v=Ym9nhVZs89ohttps://www.infoq.com/articles/C4-architecture-model/https://en.wikipedia.org/wiki/C4_modelhttps://betterprogramming.pub/modeling-software-architecture-with-c4-243eb1f240c7https://www.ibm.com/garage/method/practices/code/c4-model-for-software-architecture/https://www.diagrams.net/blog/c4-modellinghttps://www.gliffy.com/blog/c4-modelhttps://github.com/plantuml-stdlib/C4-PlantUMLhttps://www.c4model.com</description>
                <category>مجتبی مرادی</category>
                <author>مجتبی مرادی</author>
                <pubDate>Wed, 17 Nov 2021 11:36:12 +0330</pubDate>
            </item>
            </channel>
</rss>