<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سپهر اویسی</title>
        <link>https://virgool.io/feed/@m_46678530</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 18:30:02</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1340802/avatar/CkIGGL.jpg?height=120&amp;width=120</url>
            <title>سپهر اویسی</title>
            <link>https://virgool.io/@m_46678530</link>
        </image>

                    <item>
                <title>معرفی و موارد استفاده Enterprise Service Bus</title>
                <link>https://virgool.io/@m_46678530/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%88-%D9%85%D9%88%D8%A7%D8%B1%D8%AF-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-enterprise-service-bus-rxvf9yyyxhom</link>
                <description>یکی از مشکلات مشترک فناوری اطلاعات اکثر سازمان ها در کشور، بحث عدم یکپارچگی سرویس‌های نرم افزاری و بانک‌های اطلاعاتی است. حتی تحقیقات نشان می‌دهد شرکت‌های بزرگ جهانی، بالاترین اولویت کاری اکثر آنها &quot;یکپارچه سازی و سرویس گرایی&quot; بوده است. برای انجام یکپارچه سازی تاکنون چندین روش و فناوری در طی سالها توسعه یافته است که کامل ترین و جدیدترین آنها گذرگاه سرویس سازمانی (ESB)  است. در این پست سعی خواهیم کرد که با مفاهیم اصلی این حوزه آشنا شویم و همچنین با ابزارهای موجود در صنعت بیشتر آشنا شویم.گذرگاه سرویس سازمانی (ESB) چیست؟کلمه ESB مخفف Enterprise Service Bus و به معنی گذرگاه سرویس سازمانی است. گذرگاه سرویس سازمانی یک میان افزار است که برای ادغام سیستم‌ها و برنامه‌های مختلف سازمان استفاده می‌شود و جایگزین ارتباط نقطه به نقطه وب سرویس‌های سازمان می‌شود.  در واقع گذرگاه سرویس سازمانی رویکردی در معماری نرم‌افزار است. گذرگاه سرویس سازمانی یک لایه انتزاعی است، که به عنوان یک مترجم سراسری در حوزه وب سرویس‌ها عمل می‌کند و  برقراری ارتباط بین چندین سیستم را ممکن می‌سازد دارد که با زبان متفاوت صحبت می‌کنند. هنگامی که یک سیستم پیامی برای انتقال دارد، ESB این پیام را ترجمه کرده و به گیرنده مورد نیاز انتقال می‌کند. گذرگاه خدمات سازمانی به طور چشمگیری فرآیند یکپارچه‌سازی چندین محیط و سیستم  ناهمگن را ساده می‌کند. یک ESB برای ادغام برنامه‌های کاربردی مختلف با یکدیگر بر روی زیرساخت‌های «باس مانند» طراحی شده است. نمودار زیر یک معماری معمولی ESB را نشان می‌دهد که در آن چندین سیستم و برنامه از طریق یک لوله پیام رسانی متمرکز (Bus) یکپارچه شده‌اند. هر سیستم یکپارچه ممکن است به عنوان نقش تولید کننده یا مصرف کننده (یا هر دو) عمل کند.قابلیت‌های گذرگاه سرویس سازمانیمحصولات مختلف ESB با مجموعه‌ای از قابلیت‌های خاص در بازار موجود است و از نظر ویژگی‌ها و عملکردها با یکدیگر متفاوت هستند. با این حال، برخی از اصول اولیه یکسان دارند، و برخی توانایی‌ها واقعاً به هر ESB نسبت داده می‌شوند که هسته اصلی هر محصولی از این قبیل است. در زیر برخی از قابلیت‌های مهم ESB آورده شده است:مسیریابی:این ESBها به عنوان میان افزار هوشمند با قابلیت انجام اقدامات خاص و تصمیم گیری مسیریابی به سیستم‌ها و برنامه‌های یکپارچه بر اساس معیارهای مسیریابی یا منطق پیاده سازی شده در سطح ESB عمل می‌کنند. هنگامی که داده‌ها توسط یک سیستم تولیدکننده تولید می‌شود و به ESB ارسال می‌شود، مسئولیت ESB اجرای منطق مسیریابی بر اساس معیارهای خاص و مسیریابی پیام‌ها به مصرف کنندگان متصل مورد نظر است.تنظیم و ارکستراسیون:لایه ESB همچنین مسئول ارائه عملکرد ارکستراسیون است که در آن از چندین سرویس برای دستیابی به یک کار انبوه/ترکیبی استفاده می‌کند. برای مثال، یک ESB می‌تواند از خدمات ماژول‌ها/برنامه‌های مختلف بانکی در یک محیط بانکی استفاده کند و خدمات ترکیبی را بر اساس نیازهای تجاری ارائه دهد.ترجمههر سیستم یکپارچه به زبان خود صحبت می‌کند و قالب‌های خود را دارند، که ممکن است لزوماً مشابه سیستم یکپارچه دیگری نباشد. این مسئولیت ESB است که تمام تبدیل‌ها و ترجمه‌های ضروری بین قالب‌های داده و مشخصات مختلف را انجام دهد تا اطمینان حاصل شود که سیستم‌ها می‌توانند به درستی یکدیگر را درک کنند.میانجیگریهمچنین نقش میانجی را ایفا می‌کند که در آن می‌توان سیاست‌های میانجی‌گری خاصی را در جریان ورودی/خروجی اعمال کرد، و پیام‌ها ممکن است بر اساس نیازهای تجاری، قبل از اینکه به سیستم‌های مصرف‌کننده تحویل داده شوند، سفارشی‌سازی شوند.کارکرد ESB چگونه است؟جایگاه ESB (گذرگاه خدمات سازمانی) در معماری زیر ساخت سازمان بدین صورت است که بعنوان یک واسط، بین وب سرویس‌های سازمان و سرویس گیرندگان قرار می‌گیرد (سرویس گیرندگان می‌تواند داخل یا خارج سازمان باشند) و از ارتباط دو به دو که عامل بسیاری از مشکلات است جلوگیری می‌کند. البته این جداسازی به معنای دور کردن سامانه‌ها از حالت یکپارچه نیست و اتفاقاً ESB باعث تسهیل فرآیند یکپارچه‌سازی سامانه‌ها و مستحکم ‌سازی معماری سازمان می‌شود. پس از استقرار ESB یا همان گذرگاه سرویس‌های سازمانی، فراخوانی کلیه وب سرویس‌ها و سرویس گیرندگان از طریق ESB انجام می‌شود و کلیه درخواست‌ها به ESB زده می‌شود و ESB درخواست‌ها را به منبع انتقال داده و پاسخ  آنها را پس از دریافت به سرویس گیرندگان تحویل می‌دهد.این ESB‌ها برای ساده‌سازی آشفتگی‌هایی ساخته شده‌اند که ممکن است زمانی که فرمت‌های مختلف، از سرویس‌ها و برنامه‌ها می‌خواهند با یکدیگر ادغام شوند، ایجاد می‌شود. با این حال، سوال این است که ESB دقیقا چگونه کار می کند؟کانال خدمات سازمانی مجموعه‌ای از سوئیچ‌ها است که پیام مستقیمی را در یک مسیر خاص بین برنامه و/یا اجزا ارسال می‌کند.هر سازمانی یک خط مشی تجاری خاص دارد که تعیین می‌کند ESB این پیام‌ها را در کدام مسیر طی خواهد کرد.چه مشتری باشد یا یک فرآیند تجاری، هر چیزی که به یک ESB متصل است مستقیماً با یکدیگر ارتباط برقرار نمی‌کند، و از طریق خود ESB ارتباط برقرار می‌کنند.  با اتصال مشتریان و خدمات از طریق ESB، یک شرکت فقط باید به دنبال خدمات در یک مکان واحد، یعنی ESB باشد. حتی اگر یک فرآیند تجاری سرورها را تغییر دهد، تنها کاری که باید انجام شود پیکربندی مجدد ESB است و شرکت همچنان می‌تواند از طریق ESB به سرویس دسترسی داشته باشد.همچنین گذرگاه سرویس سازمانی به عنوان یک مدیر تراکنش کار می‌کند، به این معنی که تراکنش‌های توزیع شده‌ای را که چندین سرویس با آنها درگیر هستند، هماهنگ می‌کند. هنگامی که بسیاری از فرآیندها و خدمات مختلف تجاری باید در یک تراکنش با هم کار کنند، معمولاً به پیکربندی برای هماهنگ کردن تراکنش نیاز است. با این حال، از طریق ESB، دیگر لازم نیست. این شرکت می تواند به ESB دسترسی داشته باشد تا تراکنش را به راحتی انجام دهد.گذرگاه سرویس سازمانی همچنین به عنوان یک مدیر امنیتی کار می‌کند و فرآیندهایی مانند احراز هویت و مجوز را متمرکز می‌کند. صرف نظر از اینکه یک فرآیند تجاری در یک برنامه دارای احراز هویت یا مجوز است، ESB می‌تواند تنظیمات خود را به گونه‌ای تنظیم کند که در رابط سرویسی که در معرض دید مشتریانی قرار می‌گیرد که از آن استفاده می‌کنند، نیاز باشد.روش دیگری که ESB ها کار می‌کنند، به عنوان یک پروکسی سرویس است. به عنوان مثال، اگر یک برنامه کاربردی یک سرویس Java RMI را در معرض دید قرار دهد، اما بقیه شبکه بر روی دات نت اجرا شود، بنابراین نمی‌تواند مستقیماً سرویس RMI را فراخوانی کند. با استفاده از ESB، یک شرکت می‌تواند به راحتی یک سرویس پروکسی را در جاوا پیاده سازی کند که می‌تواند یک سرویس RMI را فراخوانی کند. سپس یک رابط وب سرویس، مانند SOAP و WSDL را از طریق ESB در معرض برنامه‌های NET قرار می‌دهد.چالش‌های ESB چیست؟در حالی که بر اساس تمام مواردی که در بالا به آن پرداختیم، در مورد قدرت ESB در هر سازمانی بسیار متقاعد شده‌ایم، ولی نمی‌توانیم چالش‌های مرتبط را نادیده بگیریم و همچنین هیچ چیز خوبی در این دنیا بدون خطرات و معایب بالقوه به دست نمی‌آید. ESB به‌عنوان یک میان‌افزار با تمامی طرف‌های یکپارچه که برای جریان‌های یکپارچه‌سازی به شدت به آن تکیه می‌کنند، می‌تواند خود به یک نقطه شکست یا گلوگاه تبدیل شود. مسائل مربوط به عملکرد لایه ESB می‌تواند مستقیماً بر عملکردهای تجاری بسیاری از سیستم ها و برنامه‌های یکپارچه تأثیر بگذارد. با این حال، این نوع چالش را می‌توان از طریق استقرار خوشه‌ای و توزیع‌شده لایه ESB با تنظیم عملکرد، نظارت و مدیریت مناسب این لایه کاهش داد و برطرف کرد. با وجود ESB در وسط بسیاری از سیستم‌های یکپارچه، ریسک رگرسیون نیز ارزش بررسی دارد زیرا هر گونه ارتقاء، به‌روزرسانی، تغییر یا سفارشی‌سازی در این لایه می‌تواند اثرات موجی بالقوه و پیامدهای عملکردی برای بسیاری از سیستم‌های یکپارچه داشته باشد. گذرگاه سرویس سازمانی اختصاصی باشد یا متن باز؟عوامل متعددی در این تصمیم دخیل هستند، از هزینه‌ها و مقیاس‌پذیری گرفته تا فروشندگان نرم‌افزار. سوال اصلی که شرکت‌ها باید از خود بپرسند این است که آیا می خواهند با یک ESB اختصاصی یا منبع باز استفاده کنند. هر دو فوایدی دارند، اما معایبی نیز دارند.اختصاصییک ESB اختصاصی‌ برای شرکت‌هایی که خواهان استفاده ساده‌تر و ثبات در محصول هستند، بسیار منطقی است. برخی از ویژگی های ESB اختصاصی عبارتند از:عملکرد: یک ESB اختصاصی، طیف وسیعی از ویژگی‌های یکپارچه‌سازی و همچنین فهرست گسترده‌ای از ابزارها مانند BAM، EDA و CEP را ارائه می دهند.نگهداری: ابزارهای مدیریت و نظارتی که برای یک ESB اختصاصی در دسترس هستند، سطحی از ثبات و عملکرد را ارائه می‌کنند که قابل مقایسه نیست.متن بازاز سوی دیگر، ESB های منبع باز نیز مزایا و ویژگی های زیادی را ارائه می‌دهند. از سهولت نصب تا جامعه موجود متن باز، بزرگترین مزیت‌های ESB منبع باز عبارتند از:هزینه: هزینه یک ESB منبع باز می‌تواند به طور تصاعدی کمتر از یک ESB اختصاصی باشد.انعطاف بالا: از آنجایی که یک ESB منبع باز نسبت به فروشنده ناشناس است، شرکت‌ها انعطاف بیشتری برای کار در پلتفرم‌های مختلف دارند.بنابراین، در حالی که ESB های اختصاصی و منبع باز هر کدام نقاط قوت خود را دارند، چند اشکال نیز وجود دارد. ESB های اختصاصی می‌توانند گران تر باشند و همچنین نصب آنها دشوارتر است. در همین حال، ESB های منبع باز می‌توانند برای ادغام در میان ارائه دهندگان مختلف در یک سناریوی ترکیب و تطبیق مشکل باشند، و همچنین به مهارت و زمان بیشتری برای آزمایش، مدیریت و حفظ نیاز دارند.گذرگاه سرویس سازمانی برای چه شرکت‌های مناسب است ؟سازمان‌ها برای ارائه خدمات خود به صورت آنلاین از وب سرویس استفاده می‌کنند. وقتی تعداد وب سرویس‌ها کم است یا اهمیت آنها زیاد نیست بروز نقص فنی مشکل زیادی بوجود نمی‌آورد اما مشکلات اصلی زمانی بوجود می‌آید کهتعداد وب سرویس‌ها زیاد می شود مثل بانک‌ها | موسسات مالیتعداد زیر مجموعه های داخلی سازمان زیاد می‌شود مثل وزارت نفت | وزارت ارتباطاتوب سرویس اهمیت استراتژیک دارد مثل بورس | سازمان هواپیمایی کشوری | ستاد انتخاباتسازمان از طریق وب سرویس کسب درآمد فراوان لحظه ای دارد مثل همراه اول | ایرانسلارتباط مستمر وب سرویس بین منبع و سرویس گیرنده مهم می باشد مثل دفتر مرکزی فروشگاه های زنجیره ای با فروشگاه‌ها | گمرکنتیجهیک گذرگاه سرویس سازمانی ممکن است پیچیده و دشوار به نظر برسد، اما همچنان یک ابزار بسیار مفید در یک سازمان است. ترکیب یک تعریف واقعا مختصر از آنچه که ESB انجام می‌دهد در چند جمله دشوار است، زیرا ابزاری گسترده است که مزایای متعددی را ارائه می‌دهد. با این حال، علیرغم برخی اشکالات، برای تسهیل شفافیت و به اشتراک گذاری خدمات و فرآیندها در سراسر یک سازمان خیلی مفید است. و جداسازی خدمات تجاری از اجرای سرویس بسیار مفید هستند. در نهایت، شرکت‌هایی که ESB را انتخاب می‌کنند باید مطمئن باشند که تمام اهداف ضروری آنها را بررسی می‌کند یا در معرض خطر از دست دادن انعطاف‌پذیری که یک ESB وعده داده است، هستند.گذرگاهای سرویس سازمانی فعال در ایراناجرای پروژه ESB در پلتکوما در پلتکو با بهره‌مندی از کارشناسان ارشد حوزه معماری زیر ساخت سرویس سازمانی و تجربه انجام پروژه‌های متعدد می‌توانیم با ارائه یک مشاوره تخصصی و رایگان معضلات و مشکلات سازمان شما را شناسایی کنیم و راهکارهای کارآمد که منجر به صرفه جویی مالی و زمانی می شود به شما معرفی کنیم. عدم استفاده از ESB باعث می‌شود تا با زیاد شدن سرویس‌های سازمان و ارتباط دو به دو آنها با هم، یک ساختار پیچیده و در هم تنیده بوجود آید که علاوه بر خطرات احتمالی، مانع از توسعه آنها در آینده نیز خواهد شد. استفاده از گذرگاه خدمات سازمانی باعث می‌شود که با تغییر یک یا چند وب ‌سرویس در سازمان، نیازی به اطلاع دادن به سرویس گیرندگان سازمان برای تغییر در نحوه‌ی دریافت داده‌ها نباشد.این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی استمراجع: https://platco.ir/services/integration-web-services/enterprise-service-bus/  https://www.cleo.com/blog/knowledge-base-enterprise-service-bus-esb  https://tutorialspedia.com/esb-introduction-an-overview-of-esb-concepts-capabilities-benefits-challenges/ </description>
                <category>سپهر اویسی</category>
                <author>سپهر اویسی</author>
                <pubDate>Fri, 24 Dec 2021 19:00:41 +0330</pubDate>
            </item>
                    <item>
                <title>مقدمه‌هایی بر ابزارهای مانیتورینگ (Monitoring tools)</title>
                <link>https://virgool.io/@m_46678530/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D9%87%D8%A7%DB%8C%DB%8C-%D8%A8%D8%B1-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7%DB%8C-%D9%85%D8%A7%D9%86%DB%8C%D8%AA%D9%88%D8%B1%DB%8C%D9%86%DA%AF-monitoring-tools-gw3evh8axcrj</link>
                <description>امروزه سازمان‌ها، کسب و کارهای اینترنتی و پایگاه‌های خبری بیش از پیش به فاکتورهای اساسی از جمله، پایداری سرویس‌ها‌، سرعت بارگذاری و در نهایت عملکرد درست بخش‌های مختلف اهمیت می‌دهند. بنابراین در نظر داشتن کیفیت پارامترهای اشاره شده بصورت شبانه روز نیاز به استفاده از سرویس‌های مانیتورینگ که امکان پایش را از نقاط مختلف دنیا در اختیار شما قرار می‌دهند کامل احساس می‌شود. به همین دلیل، در این پست سعی خواهیم کرد که با مفاهیم اصلی این حوزه آشنا شویم و همچنین با ابزارهای مانیتورینگ موجود در صنعت، و در ایران بیشتر آشنا شویم. آشنایی با مانیتورینگ سیستم‌هامانیتورینگ سیستم‌ها معمولاً به‌عنوان بخشی مهم و اصلی در هر سازمان ظاهر می‌شوند. این سیستم‌های مانیتورینگ اغلب برای پیگیری منابع سیستم، مانند میزان استفاده و فرکانس CPU یا مقدار RAM و از این قبیل اطلاعات استفاده می‌شوند. آنها همچنین برای نمایش مواردی مانند فضای خالی در یک یا چند دیسک، دمای CPU و سایر اجزای مهم و اطلاعات شبکه از جمله آدرس IP سیستم و نرخ‌های فعلی آپلود و دانلود استفاده می‌شوند. سایر مانیتورینگ‌ها نیز ممکن ممکن است شامل تاریخ و زمان، زمان به کارگیری سیستم، نام کاربری،  باشد. به زبان دیگر این ابزارها تمام اطلاعاتی که برای یک سیستم ویا سازمان حیاتی باشد را استخراج میکند و سپس با استفاده از آن اطلاعات نسبت به نیازمندی‌های سیستم، پاسخ میدهد.سیستم‌های مانیتورینگ مبتنی بر سخت افزار که اطلاعات مشابه را نظارت می‌کنند کمتر رایج هستند. معمولاً اینها یک یا چند درایو فیزیکی هستند که به سیستم‌هایی که می‌خواهیم مانیتور کنیم وصل می‌وند و فضایی  را اشغال می‌کنند و یا مستقیماً با سخت افزار سیستم ارتباط برقرار می‌کنند ویا در بهترین حالت از طریق USB به یک سیستم جمع آوری داده‌های نرم افزاری متصل می‌شوند. با هر دو روش جمع‌آوری داده‌ها، سیستم مانیتورینگ اطلاعات را روی یک صفحه LCD کوچک یا روی یک سری نمایشگرهای عددی کوچک آنالوگ یا LED نمایش می‌دهد. برخی از مانیتورهای سیستم مبتنی بر سخت‌افزار نیز امکان کنترل مستقیم سرعت فن را فراهم می‌کنند و به کاربر این امکان را می‌دهند تا به سرعت خنک‌سازی سیستم را اعمال کند. هدف ما در این پست آشنایی با این دسته از سیستم‌های مانیتورینگ مبتنی بر سخت افزار نیست.از سال 1950 و با پیشرفت روز به روز صنعت نیاز به کنترل کننده‌های پیشرفته بوجود آمد. معایب و مشکلات سیستم‌های کنترلی آن زمان مانند نویز و خطایابی؛ بسیار دشوار و گاها زمان گیر شدن پیدا کردن نقص و رفع آن، بر این شد تا پای ” کنترل کننده‌های منطقی ” در سال 1960 به صنعت باز شود. این سیستم‌ها مشکل اول یعنی کاهش نویز و حجم تابلو های کنترل را برطرف نمودند اما هنوز مشکل خطایابی و رفع آن برطرف نشد به علاوه اینکه مشکل بازرسی از وضعیت لحظه‌ای این سیستم‌ها و برنامه‌ریزی مجدد آنها نیز خودنمایی می‌کرد که در سال 1975  سیستم‌های مانیتورینگ ابداع و در کنار سیستمهای کنترلی به کار برده شدند؛ به طوری که امروزه مانیتورینگ جایگاه ویژه و جدا نشدنی از طراحی سیستم‌های کنترلی دارند. می توان اینطور گفت،  مانیتورینگ در هرم اتوماسیون، در نوک قله قرار دارد و این امر به اهمیت سیستمهای مانیتورینگ اشاره می‌کند. امروزه صنایع بزرگی چون پتروشیمی، تولید انرژی، صنایع شیمیایی، خودروسازی، غذایی و… بدون وجود مانیتورینگ لحظه به لحظه فرآیند قادر به ادامه کار نیستند.در راه‌حل‌های اولیه مانیتورینگ، این اغلب با ارسال یک پینگ به دستگاه و انتظار پاسخ انجام می‌شود. اگر پاسخی دریافت شود، کاربر می‌تواند مطمئن باشد که سرور یا روتر یا سوئیچ در حال کار کردن است و خاموش یا خراب نشده است. به زبان ساده، اطمینان حاصل کنید که سیستمهای IT در ابتدایی ترین سطح، در دسترس هستند. راه‌حل‌های پیشرفته‌تر مانیتورینگ بر سیستم امکان مشاهده دقیق وضعیت عملیاتی آن دستگاه‌ها را فراهم می‌کند. به مثالتوجه کنید: &quot;من می دانم که سرور من فعال است، ولی می‌خواهم مطمئن شوم که فضای هارد دیسک تمام نشده است.&quot; این چک سرویس نامیده می‌شود.ابزارهای مانیتورینگ، برای ردیابی وضعیت برنامه‌ها، شبکه‌ها، زیرساخت‌ها، وب سایت‌ها و موارد دیگر طراحی شده اند. بهترین ابزارهای نظارت باید به سرعت مشکلات موجود در منابع را شناسایی کرده و با پاسخ مناسب برای حل مسائل حیاتی هشدار دهند. توجه داشته باشید که مسائل زیرساخت اجتناب ناپذیر است و تیم‌ها باید بهترین ابزارهای نظارت را برای کاهش تأثیر یک حادثه در اختیار داشته باشند.هدف از ابزارهای مانیتورینگ چیست؟ابزارهای مانیتورینگ عملکرد بالا را برای نرم افزار شما تضمین می‌کنند. نظارت مداوم بر سیستم به شما امکان می‌دهد عملکرد و در دسترس بودن برنامه‌های نرم افزاری را مدیریت کنید. این منجر به زمان پاسخگویی سریع، بهبود فرآیندهای محاسباتی و رضایت مشتریان می‌شود. به خصوص تجربه کاربر نهایی یکی از اهداف اصلی هنگام برخورد با تعاملات واقعی کاربر و معاملات تجاری است. ابزارهای نظارتی تلاش برای تفسیر چنین رویدادهای وابسته را می‌کنند و شما را به مؤلفه‌ای هدایت می‌کنند که ممکن است باعث مشکلات عملکرد یا مشکلاتی برای مشتریان شما شود. تعمیر، تسریع و بهینه سازی سرورها و برنامه‌های نرم افزاری شما هرگز به این آسانی نبوده است.قابلیت‌های سیستم مانیتورینگنظارت یک فعالیت فوق العاده گسترده و پیچیده است. این یک مفهوم بسته نیست، اما همانطور که بالاتر به آن اشاره کردیم سیستم مانیتورینگ به نیازهای هر شرکت بستگی دارد. با این حال ، سیستم های نظارتی اغلب دارای تعدادی ویژگی مشترک هستند، از جمله موارد زیر:تجزیه و تحلیل در زمان واقعی. یک سیستم مانیتورینگ خوب یک نظارت مستمر را ارائه می دهد که هیچ تأخیری در آن صورت نمی گیرد یا این تأخیرها به صورت حداقل ممکن است.سیستم هشدار. سیستم مانیتورینگ قادر است در هنگام خطر اطلاع رسانی های مورد نظر ما را انجام دهد. برای مثال در هنگام وقوع حادثه این سیستم قادر است هشدار های خطر را طبق پروتکل های تعریفی از سوی ما به صدا در بیاورد.ارسال نوتیفیکشن.این سیستم قادر است برای اتفاق هایی که در محیط مورد پایش صورت می گیرد اعلان هایی به صورت پیامک، ایمیل و … برای اپراتور ارسال نماید.تهیه گزارش. به منظور ارائه داده ها به مشتریان یا بخشهای مختلف شرکت، سیستم مانیتورینگ توانایی جمع آوری داده ها و ارائه گزارش را دارد.چند دلیل برای اینکه چرا به ابزارهای مانیتورینگ نیاز دارید؟ابزارهای مانیتورینگ  به تعیین معیار عملکرد سازمان شما کمک می کنندبدون معیار، چگونه بخش فناوری اطلاعات شما می‌داند که چگونه عمل کرده است ویا در حال بهبود است؟ زمانی که ندانید زیرساخت فعلی شما چه کاری انجام می‌دهد یا اینکه بخش شما چقدر خوب عمل می‌کند، رسیدن به استراتژی مطلوب بسیار دشوار خواهد بود. به همین دلیل، این ضروری است که سازمان‌ها استراتژی‌های ارائه خدمات و پشتیبانی را بر اساس حدس‌ و گمان نزند و این استراتژی‌ها را با حقایق مبتنی بر داده‌ها تغییر دهند. از طرفی دقت داشته باشید که یک tradeoff کنید در این قضیه چون می‌تواند خطرناک هم باشد، چون شاید داده‌ها غلط باشند. اما در کل وجود این ابزارهای مانیتورینگ می‌تواند منجر به از بین بردن فشار بیش از حد بر کارکنان، کاهش بودجه و آسیب دیدن اعتبار شود.ابزارهای مانیتورینگ به کاهش تلاش دستی کمک می کنندابزارهای مانیتورینگ این قابلیت را دارند که نه تنها مشکلات را شناسایی کنند، بلکه می‌توانند به طور خودکار مشکلات را نیز برطرف کنند. با استفاده از قوانین و تکنیک‌های یادگیری ماشینی، ابزارهای مانیتورینگ می‌توانند رفتار برنامه‌های کاربردی شما را بفهمند/بیاموزند و هنگامی که چیزی درست کار نکند، به جای اینکه فقط هشدار دهند، یک اصلاح را اعمال کنند. آنها به طور خودکار مشکل را حل می‌کنند و حتی می‌توانند از مسائل قبلی درس بگیرند، به این معنی که با گذشت زمان، حل آنها سریعتر و هوشمندانه تر شده است.بنابراین، ابزارهای مانیتورینگ، تلاش دستی مربوط به نظارت و پشتیبانی از زیرساخت فناوری اطلاعات را کاهش خواهند داد. و حذف این وظایف کوچکتر، به این معنی است که تیم زمان بیشتری برای تمرکز بر مسائل مهم دارد.ابزارهای مانیتورینگ به سازمان فناوری اطلاعات شما کمک می‌کنند تا فعال باشدهنگامی که ابزارهای مانیتورینگ شما به گونه‌ای تنظیم شده‌اند که قبل از اینکه بر پایگاه مشتری شما تأثیر بگذارند، شما را در مورد مسائل آگاه می‌کنند، می‌توانید قبل از اینکه برای شما - یا مشتریانتان - مشکل ایجاد کنند، آنها را برطرف کنید. شناسایی و رفع مشکلات قبل از برخورد فواید متعددی دارد: سازمان شما در زمان و هزینه صرفه جویی می‌کند، از خرابی سیستم جلوگیری می‌کند، و از ایجاد مشتریان ناراضی جلوگیری می‌کند. همه اینها از اعتبار بخش IT شما محافظت می‌کند و باعث افزایش اعتبار می شود.ابزارهای مانیتورینگ در نهایت به شما این قدرت را می‌دهند که تیم خود را از کارهای ساده خلاص کنید، در زمان و هزینه در فعالیت‌های عملیاتی صرفه‌جویی کنید، خرابی سیستم را کاهش دهید و حتی از آن جلوگیری کنید، و به استراتژی، بودجه و برنامه‌های بهبود مستمر کمک کنید. بدون دسترسی به ابزارهای مانیتورینگ، پشتیبانی کاملاً فعال متأسفانه یک رویا برای سازمان شما باقی خواهد ماند.ابزار Prometheusابزار Prometheus یک جعبه ابزار مانیتورینگ و هشدار سیستم منبع باز است که در ابتدا در SoundCloud ساخته شد. از زمان شروع آن در سال 2012، بسیاری از شرکت‌ها و سازمان‌ها Prometheus را پذیرفته‌اند و این پروژه دارای یک جامعه توسعه دهندگان و کاربران بسیار فعال دارد. اکنون یک پروژه منبع باز مستقل است و مستقل از هر شرکتی نگهداری می‌شود.ابزار Prometheus معیارهای خود را به عنوان داده‌های سری زمانی جمع آوری و ذخیره می‌کند، یعنی اطلاعات متریک با مهر زمانی که در آن ثبت شده است، در کنار جفت‌های اختیاری کلید-مقدار به نام برچسب‌ها ذخیره می‌شود.ویژگی‌های اصلی Prometheus عبارتند از:یک مدل داده چند بعدی با داده‌های سری زمانی که با نام متریک و جفت‌های کلید/مقدار شناسایی شده‌اند.زبان PromQL، یک زبان پرس و جو انعطاف پذیر برای استفاده.عدم وابستگی به ذخیره‌سازی توزیع شده.‌حالت‌های مختلف نمودار و داشبورد پشتیبانی می‌کند.معماریشکل زیر معماری Prometheus و برخی از اجزای اکوسیستم آن را نشان می‌دهد:استفاده از این ابزار چه زمانی مناسب است؟این ابزار برای ضبط هر سری زمانی، مخصوصا برای حالت عددی به خوبی کاربرد دارد. هم با نظارت ماشین محور و هم برای نظارت بر معماری‌های سرویس محور بسیار پویا، مناسب است. در دنیای ریزسرویس‌ها، پشتیبانی آن از جمع‌آوری داده‌های چند بعدی و انجام پرس‌وجو، یک نقطه قوت خاص است.همپچنین این ابزار، با قابلیت اطمینان بالایی طراحی شده است، تا به شما امکان تشخیص سریع مشکلات را بدهد. هر سرور Prometheus مستقل است و به فضای ذخیره سازی شبکه یا سایر خدمات راه دور وابسته نیست. وقتی سایر بخش‌های زیرساخت شما خراب است، می‌توانید به به این ابزار تکیه کنید و برای استفاده از آن نیازی به راه‌اندازی زیرساخت‌های گسترده نیز ندارید.استفاده از این ابزار چه زمانی مناسب نیست؟این ابزار برای پارامتر کیفی قابلیت اطمینان ارزش قائل است. شما همیشه می‌توانید آمارهای موجود در مورد سیستم خود را حتی در شرایط خرابی مشاهده کنید. اما اگر به دقت 100٪ نیاز دارید، مانند صورتحساب هر درخواست، Prometheus انتخاب خوبی نیست زیرا داده‎‌های جمع آوری شده احتمالاً به اندازه کافی دقیق و کامل نیستند. در چنین حالتی بهتر است از سیستم دیگری برای جمع آوری و تجزیه و تحلیل داده‌ها برای صورتحساب استفاده کنید و از Prometheus برای بقیه نظارت خود استفاده کنید.ابزارهای مانیتورینگ ساخت ایرانسامانه مانیتورینگ سپهراینترنت اشیاء بستری است که می‌توانید با استفاده از اینترنت بر عوامل و وسایل پیرامون خود نظارت و کنترل داشته باشید. این امر باعث افزایش بازدهی و عملکرد بهتر ماشین آلات، سیستم ها و خدمات رسانی می شود. سامانه مانیتورینگ سپهر این امکان را فراهم ساخته است که با استفاده از اینترنت اشیاء به مانیتورینگ محیط های اتاق سرور، کارخانجات، تولیدی ها، کشاورزی و … بپردازد.سامانه مانیتورینگ سپهر انفورماتیک درخشان با استفاده از اینترنت اشیاء شکل گرفته است و قابلیت نصب بر روی انواع سرورهای داخلی و ابری را دارد. زمانی که قصد داریم یک اتاق سرور ایجاد کنیم باید یک سری تجهیزات نصب کنیم. البته با توجه به نیاز و نوع فعالیت هر مجموعه نوع تجهیز کردن این اتاق متفاوت می باشد.مانیتورینگ نت نگارسرویس نت نگار همانند سرویس های مانیتورینگ، ۲۴ ساعت شبانه روز و ۷ روز هفته سرویس های آنلاین یا API Backend کسب و کار شما را مانیتور می کند و در صورتیکه شرایط خطا یا Downtime و یا کندی سرعت پاسخگویی (Latency) شما اولین نفری هستید که متوجه می شوید. در واقع سرویس های مانیتورینگ به شما کمک می کند شرایط اختلال را قبل از کاربرانتان متوجه شوید. مهم ترین ویژگی نت نگار شاید همین باشد که به شما کمک می کند در صورت اختلال متوجه شوید دلیل آن از کدام بخش است که این موضوع امکان حل مشکل را آسانتر خواهد کرد. این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی استمراجع: https://prometheus.io/docs/introduction/overview/  https://www.sysaid.com/blog/service-desk/5-reasons-why-you-need-monitoring-tools  https://sepehranformatic.com/product/monitoring-sepehr/  https://netnegar.io/solution/network-monitoring-essentials.html </description>
                <category>سپهر اویسی</category>
                <author>سپهر اویسی</author>
                <pubDate>Fri, 24 Dec 2021 16:58:27 +0330</pubDate>
            </item>
                    <item>
                <title>احراز هویت یکپارچه و مدیریت هویت</title>
                <link>https://virgool.io/@m_46678530/%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87-%D9%88-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%87%D9%88%DB%8C%D8%AA-pxpfkh5m63jv</link>
                <description>در این پست با 2 بحث جذاب احراز هویت یکپارچه (SSO) و مدیریت هویت(Identity Management) بیشتر آشنا خوهیم شد؛ احراز هویت یکپارچه (SSO) چیست؟کاربران روزانه از تعداد زیادی برنامه‌ استفاده می‌کنند. استفاده از رمزهای عبور پیچیده برای هر کدام از این سیستم‌ها چالشی است که کاربران با آن روبه رو هستند.  Single Sign-On راه حل مناسبی برای این مسئله است. در این حالت، ورود به سیستم‌های مختلف با یک هویت واحد امکان پذیر خواهد بود. همچنین فرایند افزودن و حذف دسترسی کاربران آسان تر می‌شود.  به زبان ساده (Single Sign On (SSO یک سرویس متمرکز تایید هویت است که در آن کاربر تنها با استفاده از یک حساب کاربری (نام کاربری و رمز عبور) می‌تواند به چندین برنامه یا سایت دسترسی داشته باشد. این قابلیت را می‌توان هم برای کارمندان و هم برای مشتریان به کار برد تا تجربه ورود آنها ساده شود. به طور معمول، کارمندان برای انجام کارهای خود به چندین برنامه تجاری مانند حساب‌های پیام رسانی و ایمیل، سایت‌های اینترانت، سوابق مالی و غیره وارد می‌شوند که اگر از این قابلیت استفاده شود برای کارمندان یک تجربه خوبی خواهد بود.به طور مشابه، مشتریان اغلب از طریق یک حساب تجاری یا پورتال به چندین سرویس یا برنامه دسترسی دارند. بانکداری مثال خوبی است. همانطور که در نمودار زیر نشان داده شده است، SSO این امکان را برای مشتریان بانک فراهم می‌کند که با یک مجموعه از اعتبارنامه‌ها وارد شوند و بتوانند اقدامات مختلفی مانند بررسی موجودی حساب خود و انتقال پول را انجام دهند. حتی اگر این خدمات در واقع برنامه‌های جداگانه‌ای هستند که توسط بانک در پشت صحنه مدیریت می‌شوند، SSO تجربه یکپارچه را برای مشتریان شما فراهم می کند.مزایای SSOامنیت قوی‌تربا کاهش تعداد گذرواژه‌های کاربران، امنیت شرکت را تقویت می‌شود. از آنجایی که حمله برای دریافت گذرواژه‌ها، حمله‌های محبوبی هستند، کاهش تعداد آن‌ها، احتمال نقض را نیز کاهش می‌دهد.تجربه کاربی بهترسختی‌های ناشی از استفاده از چندین رمز عبور و چندین بار ثبت نام را از بین می‌برد. مشتریان می‌توانند یک بار وارد سیستم شوند و به راحتی به تمام محصولات و خدمات مورد نیاز خود دسترسی داشته باشند. با توجه به اینکه تقریباً 3 تا از هر 4 مشتری گزارش می‌دهند که تجربه این قابلیت، عامل مهمی در تصمیم گیری‌ها است، ورود به سیستم یک مکان عالی برای شروع تحت تاثیر قرار دادن آنها است.بهبود بهره‌وری کارکنان این قابلیت به کارمندان شما دسترسی آسان‌تری به منابعی که برای انجام کارهایشان نیاز دارند، می‌دهد. با سریع‌تر کردن دسترسی بدون به خطر انداختن امنیت، تجربه آن‌ها را ساده‌تر می‌کنید و به آن‌ها زمان بیشتری برای تمرکز روی کارهای مهم می‌دهید.کاهش هزینه‌هاکاهش تعداد رمزهای عبور، به دلیل مشکلات موجود مربوط به رمز عبور، موجب کاهش هزینه می‌شود. بازگردانی رمز عبور ممکن است کار بزرگی به نظر نرسد، اما برخی از سازمان ها سالانه هزینه‌های قابل توجه‌ای بودجه صرف هزینه‌های پشتیبانی مربوط به رمز عبور می‌کنند. با به حداقل رساندن تعداد رمزهای عبور استفاده شده، می‌توانید در هزینه‌های زیادی صرفه جویی کنید.احراز هویت یکپارچه (SSO) چگونه کار می‌کند؟تایید هویت با SSO به اعتماد بین دامنه‌ها متکی است. هنگام ورود به سامانه یا برنامه در سیستم SSO مراحل زیر اجرا می شود:سامانه یا برنامه مورد نظر ابتدا بررسی می‌کند که آیا هویت شما قبلا از طریق SSO تایید شده است یا خیر. در صورت تایید امکان دسترسی به شما داده می شود.در غیر این صورت شما را به درگاه ورود SSO انتقال می‌دهد.سامانه SSO  درخواست تایید هویت کاربران را به دایرکتوری کاربران سازمان ارسال کرده و در صورت تایید، نشست کاربر در سامانه SSO ایجاد می‌گردد.پس از ورود، سامانه سرویس گیرنده اطلاعات تایید هویت را در قالب نشست یا توکن به مرورگر شما منتقل می‌کند تا با هر بار مراجعه به صفحات جدید اعتبار شما تایید گردد.درک تفاوت میان ورود با رمزعبور و ورود از طریق SSO اهمیت دارد. تصور اینکه با ورود رمز عبور یکسان در تمامی سامانه‎‌ها وارد شوید و نتیجه یکسانی با ورود از طریق SSO به دست می آورید، تصوری اشتباه است. چراکه در صورتی که هر یک از این سامانه‌ها به علت ضعف در پیاده سازی لایه امنیتی مورد حمله قرار گرفته و اطلاعات هویتی شما افشا شود، حمله کننده می‌تواند به تمامی سامانه‌های شما دسترسی یابد. به علاوه با استفاده از SSO دیگر نیازی به ورود رمز عبور به ازای ورود به هر سامانه وجود ندارد و صرفا کافی است یک بار نام کاربری و رمز عبور خود را فقط در درگاه سامانه SSO وارد نمایید. احراز هویت یکپارچه را به‌عنوان واسطه‌ای در نظر بگیرید که می‌تواند تأیید کند که آیا اعتبار ورود کاربر با هویت او در پایگاه داده مطابقت دارد، بدون اینکه خود پایگاه داده را مدیریت کند؛مدیریت هویت (Identity Management) چیست؟مدیریت هویت به مجموعه سیاست‌ها و ابزارهای استفاده شده توسط سازمان‌ها اشاره دارد تا اطمینان حاصل شود که افراد و موجودیت‌ها سطح دسترسی مناسب را به منابع فنی سازمان دارند یا خیر. سامانه مدیریت هویت، راهکاری جامع برای مدیریت امن هویت دیجیتال و دسترسی به سامانه‌ها و برنامه‌های کاربردی مختلف است. در واقع هر شی دارای برخی هویت‌ها است که این ویژگی‌ها، آن را از دیگر شی‌ها متمایز می‌کند. پس دقیقا ما هم نسبت به همین هویت سعی میکنیم کاربران خود را مدیریت کنیم.منظور از مدیریت در این بحث، یعنی فرآیند کنترل اشیا یا افراد در سازمان و برنامه خود است. که این هویت می‌تواند یک شخص ویا گروهی از افراد باشد.دنیای دیجیتال روز به روز در حال گسترش است به نحوی که امروزه تامین امنیت هویت فردی به یک کار بسیار دشوار تبدیل شده است. هر فردی دارای هویت متفاوتی در زمینه متفاوتی است. مدیریت هویت یک بخش کلیدی از هر سازمانی است، به دلیل اینکه هر سازمانی نیازمند مراقبت از اطلاعاتش در برابر افراد بدون سطح دسترسی است و همچنین برای هر کارمند نیز باید محدودیت‌هایی تعیین گردد، که ممکن است به مدیر اصلی اجازه دسترسی به کل برنامه و به مدیران میانی اجازه دسترسی به بخش‌های خاصی از برنامه، داده شود. امروزه هر سازمانی نیازمند مدیریت هویت است، مدیریت هویت یک اصطلاح انتزاعی است و هر سازمانی متد و روش خاصی برای مدیریت هویت افراد طراحی کرده است. ابتدا به کمک یک مثال ساده تفاوت‌های بین احراز هویت (identity) و سطح دسترسی (access) را بررسی می‌کنیم. وقتی ما وارد سازمانی می‌شویم، کارت ورود خود را روی دستگاه ورود می‌گذاریم، سیستم تعیین می‌کند که این شخص آیا جز کارمند‌های این سازمان است یا خیر، اما اگر یک کارمند عضو بخش منابع انسانی باشد در نتیجه بخش مالی، به آن کارمند اجازه مداخله در مسائل بخش مالی را نمی دهد و به آن کارمند اعلام می شود که شما سطح دسترسی کافی برای تغییرات در این بخش را ندارید. پس به زبان ساده، وارد کردن یوزرنیم و پسورد به معنای احراز هویت است، و تعیین سطح دسترسی به معنای بررسی این است که این کاربر اجازه استفاده از کدام عملیات‌های سیستم را دارد.در دنیای دیجیتال گاهی یوزرنیم و پسورد برای احراز هویت یک فرد کافی نیست، پس به چه چیز های دیگری نیاز داریم؟ برای احراز هویت یک فرد از مکانیزمی که از دو عامل یا بعضی اوقات بیشتر از دو عامل (چند عامل) دارد استفاده می شود. گاهی از دستگاه‌های سخت افزاری و گاهی هم یک مکانیزم کد بندی استفاده می شود. امروزه اکثرا سازمان‌ها از روش دو عاملی برای احراز هویت افراد استفاده می کنند.گوگل از روش‌هایی با بیش از یک عامل به احراز هویت افراد می پردازد، مثلا با وارد کردن یوزرنیم و پسورد و گوگل یک کد به گوشی موبایل ارسال می کند که به کمک آن، احراز هویت کاربر با دقت خوبی انجام می شود.به طور خلاصه می توان گفت هر گونه روش دیگری که در کنار استفاده از یوزرنیم و پسورد برای احراز هویت استفاده می شود را دو عاملی یا چند عاملی می‌نامیم.تعیین و کنترل سطح دسترسی در واقع همان مشخص کردن حق و حقوق کاربر در استفاده از بخش‌های مختلف برنامه است.  برای مثال ما به یک سینما می‌رویم و برای تماشای برخی از فیلم‌ها، باید سن بالاتر از 12 سال داشت، اگر سن کافی نباشد، مامور به آن فرد بلیط فیلم را نمی‌فروشد، در واقع آن فرد سطح دسترسی کافی برای تماشای آن فیلم را ندارد. کنترل سطح دسترسی در واقع بررسی اجازه استفاده از بخش های مختلف سیستم می باشد. روش احراز هویت و تعیین سطحمبتنی بر نقشهر فردی در سازمان دارای نقش‌هایی است که توسط چارت سازمانی مشخص شده است. برای مثال یک فرد مدیر است و یک فرد ادمین و فردی دیگر دارای نقش برنامه نویس است. پس ما برای افراد نقش تعریف می‌کنیم. در روش‌های مبتنی بر نقش، هر فرد باید متناسب با نقش خود ابتدا احراز هویت و سپس با توجه به نقش تعیین سطح دسترسی برایش انجام شود. برای مثال، در سیستم مدیریت یک بانک، یک کارمند می‌خواهد به بخش‌های مربوطه به ارتباط با مشتری برود و یک مدیر می‌خواهد به بخش‌های مربوط به مدیر‌ها دسترسی داشته باشد، پس ابتدا نقش‌ها تعریف می‌شوند و سپس با توجه به نقش‌ها، افراد ابتدا احراز هویت و تعیین سطح دسترسی برای آنها انجام می‌شود و نقش آنها معلوم می‌شود و معلوم می‌شود که یک فرد دارای نقش کارمند است، پس اجازه دسترسی به بخش‌های مربوط به ارتباط با مشتری را دارد و اجازه دسترسی به بخش‌های مدیر را ندارد.دایرکتوری‌هادایرکتوری‌ها، تلفیق همه حافظه‌های داخلی یک برنامه دیتابیس محور است که احراز هویت و تعیین سطح دسترسی کاربرها را انجام می‌دهد. به بررسی یک سناریو می پردازیم، به عنوان مثال برنامه سازمان ما دارای سه برنامه است؛ هر 3 برنامه دارای دیتابیس داخلی است و کاربر باید با وارد کردن یوزرنیم و پسورد خود ابتدا احراز هویت شود و سپس سطح دسترسی فرد مشخص شود تا بتواند به انجام وظایف خود بپردازد. پس می توان گفت کار بسیار دشواری است که یک فرد برای کار با هر بخش، یک یوزرنیم و پسورد جداگانه داشته باشد. پس باید چه کار کرد؟می‌توان با ساخت یک دایرکتوری که شامل همه دیتابیس‌های حافظه‌های داخلی می‌باشد و همچنین در کل شرکت اجرا  می‌شود کار را راحت کرد به طوری که به کمک یک یوزرنیم و پسورد بتوان کاربر را احراز هویت و تعیین سطح دسترسی نمود. ابزار Microsoft Azure Active Directory یک نمونه از دایرکتوری‌ها است که یک پسورد برای استفاده از تمامی سرویس‌ها و برنامه ها کافی است.یکبار ورود به سیستم/مبتنی بر نشانهما در دنیای موبایلی زندگی می‌کنیم و اکثر خدمات خود را از طریق موبایل دریافت می کنیم. روش یکبار ورود به سیستم مبتنی بر نشانه به طور فراگیری در برنامه‌های موبایلی استفاده می‌شود. برای مثال برنامه‌ instagram از روش احراز مبتنی بر نشانه برای احراز هویت کاربر استفاده میکنند.  Web API نقش خیلی مهمی در پیاده سازی روش احراز هویت مبتنی بر نشانه دارد.وقتی یک فرد برای اولین بار در سیستم لاگین می‌کند، درخواست او به وب سرور فرستاده می‌شود. Web API این درخواست را می‌گیرد و یوزرنیم و پسورد را احراز هویت می‌کند، وقتی احراز هویت موفق بود سیستم یک بلیت یا همان نشانه (token) می‌سازد که این نشانه شامل یک مقدار منحصر به فرد، تاریخ انقضا و سطح دسترسی کاربر است که به برنامه موبایل ارسال می‌شود. از دفعات بعدی، اگر کاربر بخواهد به سیستم دسترسی پیدا کند، برنامه موبایلی token را به سرور ارسال می‌کند و سرور ابتدا token را اعتبار سنجی می‌کند و در صورت معتبر بودن آن، شروع به سرویس دهی به کاربر می کند.احراز هویت یکپارچه، مدیریت هویت نیست!در دنیای امروزی مدیریت هویت و دسترسی (IAM) و احراز هویت یکپارچه (SSO) همچنان یکی از محبوب‌ترین ابزارهای مورد استفاده سازمان‌ها در سراسر جهان است. با این حال، تمایز بین SSO و IAM مهم است. SSO یکی از زیرمجموعه های مهم IAM است، اما به تنهایی یک استراتژی کامل IAM را ایجاد نمی‌کند. با این حال، بسیاری از سازمان‌ها تنها از یک ورود به سیستم برای اتصال کاربران نهایی به برنامه‌های کاربردی وب در محیط فناوری اطلاعات خود استفاده می‌کنند و آن را استراتژی مدیریت هویت می‌نامند که نادرست است.پلتفرم IAM و SSO مدرن JumpCloudبا مدرن‌سازی محیط فناوری اطلاعات، مفهوم سنتی برنامه وب SSO برای بسیاری از سازمان‌ها کافی نیست، و همچنین راه‌حل‌های مدیریت دسترسی و هویت پاسخگوی نیاز سازمان نیست. به همین دلیل، پلت فرم دایرکتوری JumpCloud به عنوان یک ارائه دهنده  مدیریت هویت که از طریق فضای ابری عمل می‌کند که دارای قابلیت های True Single Sign-On داخلی است که به کاربران امکان می‌دهد تقریباً هر منبع فناوری اطلاعات را به طور یکپارچه احراز هویت کنند. در حالی که این یک تجربه عالی برای کاربران نهایی فراهم می‌کند، اما به مدیران فناوری اطلاعات نیز اجازه می‌دهد تا دید بیشتری نسبت به محیط IT داشته باشند و هویت‌ها را به روشی ایمن و کارآمد کنترل کنند.این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی استمراجع: https://www.pingidentity.com/en/company/blog/posts/2021/sso-vs-federated-identity-management.html  https://authin.ir/single×2-https://authin.ir/single-sign-on-blog/ </description>
                <category>سپهر اویسی</category>
                <author>سپهر اویسی</author>
                <pubDate>Fri, 24 Dec 2021 00:33:24 +0330</pubDate>
            </item>
                    <item>
                <title>تحلیل ایستای کد: Static Code Analysis</title>
                <link>https://virgool.io/@m_46678530/%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D8%A7%DB%8C%D8%B3%D8%AA%D8%A7%DB%8C-%DA%A9%D8%AF-static-code-analysis-mt3jqi2ixnpp</link>
                <description>تحلیل ایستای کد، تکنیک شناخت تقریبی از رفتار زمان اجرای یک برنامه است. به عبارت دیگر، این فرآیند پیش‌بینی خروجی یک برنامه، بدون اجرای واقعی است. با این حال، اخیراً، اصطلاح &quot;تحلیل ایستای کد&quot; بیشتر اشاره به یکی از کاربردهای این تکنیک یعنی درک برنامه و تشخیص مسائل استفاده می‌شود. این تحلیل و درک برنامه، باگ‌های احتمالی عملکرد، حفره‌های امنیتی و غیره را کاهش می دهد. این همان استفاده‌ای است که در طول این پست به آن اشاره می کنیم.پالایش تکنیک‌ها برای کشف سریع خطا مانند سایر روش‌ها به عنوان نشانه‌ای از دید ما از علم است.- جی رابرت اوپنهایمررویکردها و ابزارهای مختلفی در زمینه تحلیل ایستای کد استفاده می‌شود که هر کدام دارای مزایا و معایبی هستند که تأثیر مستقیمی بر کیفیت بازخورد ارزیابی دارند. در این پست، رویکردهای اصلی مختلف و ابزارهای مختلف برای تحلیل ایستای کد، ارزیابی و مقایسه شده است.مقدمهاستفاده از روش‌های تحلیلی برای بررسی کد به منظور تصحیح اشکالات پیاده سازی، یکی از ستون‌های اصلی توسعه نرم‌افزار است. در ابتدای پیدایش صنعت نرم‌افزار هیچ درکی در مورد اینکه بررسی کد چقدر ضروری و مؤثر است وجود نداشت، اما در دهه 1970، بررسی و بازرسی رسمی برای بهره وری و کیفیت محصول مهم شناخته شد. تعریف فاگان از کارایی تشخیص خطا به شرح زیر است:بنابراین، تشخیص خطا تا آنجا که به کد مربوط می‌شود، به نفع برنامه نویس است که از تجزیه و تحلیل استاتیک استفاده کند. اگرچه این بدان معنا نیست که دیگر روش‌های تجزیه و تحلیل نرم‌افزار استفاده نکرد؛ برعکس، بهترین راه برای تأیید اینکه یک پیاده سازی دارای کمترین خطا یا نقص است، ترکیب معیارهای استاتیک و پویا تجزیه و تحلیل است.رویکرد تحلیل ایستا به منظور بررسی کد، بررسی انطباق قوانین خاص، استفاده از آرگومان‌ها و غیره است. رویکرد پویا اساساً اجرای کد و اجرای برنامه است. این بدان معنی است که آزمون و بررسی کد چیزهای جداگانه و قابل تشخیصی هستند، اما توصیه نمی‌شود که یکی بدون دیگری اتفاق بیفتد. هدف ما بر شرح روش‌های تحلیل استاتیک، با توجه ویژه به ابزارهای موجود در بازار که این نوع خدمات را ارائه می‌کنند، تمرکز دارد.مروری بر رویکرد تحلیل ایستای کدتحلیل ایستای کد، آنالیز نرم افزارهای کامپیوتری است که بدون اجرای واقعی برنامه‌های ساخته شده از آن نرم افزار، انجام می‌شود. می‌توان استدلال کرد که معیارهای نرم افزار و مهندسی معکوس اشکالی از تجزیه و تحلیل استاتیک هستند. برنامه نویسان همیشه اشتباهات کوچکی انجام می‌دهند، مانند یک نقطه ویرگول در اینجا، یک پرانتز اضافی در آنجا، و غیره. اغلب اوقات این گاف‌ها بی اهمیت هستند، کامپایلر خطا را یادداشت می‌کند، برنامه نویس کد را اصلاح می‌کند و روند توسعه ادامه می‌یابد. با این حال، این چرخه سریع بازخورد و پاسخ معمولاً در مورد بیشتر آسیب‌پذیری‌های امنیتی اعمال نمی‌شود، زیرا می‌توانند برای مدت زمان نامحدودی قبل از کشف غیرفعال باشند. همانطور که می‌دانید، هر چه یک نقص در نرم‌افزار مدت طولانی‌تری غیرفعال باشد، هزینه تعمیر آن بیشتر می‌شود.وعده تجزیه و تحلیل استاتیک این است که بسیاری از مشکلات رایج کدگذاری را به طور خودکار قبل از انتشار یک برنامه شناسایی کنید. هدف تجزیه و تحلیل استاتیک، بررسی متن یک برنامه به صورت ایستا، بدون تلاش برای اجرای آن است.بررسی دستی : Manual Reviewبررسی دستی شکلی از تجزیه و تحلیل ایستا است که بسیار زمان بر است، و برای اجرای موثر آن، حسابرسان کد انسانی ابتدا باید بدانند که چه نوع خطاهایی قرار است پیدا کنند تا بتوانند به طور دقیق کد را بررسی کنند. بررسی کد برنامه در هر مرحله از توسعه نرم افزار قابل انجام است، اما بهترین نتایج زمانی حاصل می شود که این کار در مراحل اولیه انجام شود زیرا شناسایی و تصحیح آسیب پذیری‌های امنیتی و نقص‌های کیفیت در اواخر فرآیند توسعه نرم‌افزار، هزینه سنگینی دارد. هنگامی که این اشکالات به بازار انشتار پیدا می‌کنند و توسط مشتریان کشف شوند، عواقب آن می‌تواند بر قیمت نهایی تأثیر بگذارد و به شهرت آسیب برساند.بازبینی نه تنها شامل کدها می‌شود، بلکه شامل تمام اسناد، الزامات و طرح‌هایی است که توسعه‌دهنده تولید می‌کند، همه چیز مستعد بررسی است زیرا ممکن است در هر مرحله از توسعه نرم‌افزار خطاهایی پنهان باشد. در تصویر زیر، فاز اولیه بررسی دستی را نشان می‌دهد که مروری بر خود کد نوشته شده است، که در آن برنامه نویس سعی می‌کند خود کدی را که پیاده سازی کرده است ارزیابی و تصحیح کند. این راهنما بر ارائه کد مورد نظر توسط برنامه نویس خود به مخاطبان متمرکز است. بررسی همتا زمانی است که برنامه نویس کد خود را برای بررسی به همکار خود ارائه می‌دهد. در نهایت، بازرسی و حسابرسی، که معمولا توسط شخص ثالثی انجام می‌شود، حسابرسی بالاترین بررسی رسمی است.بهترین راه برای شناسایی و تصحیح باگ‌ها در مرحله‌ای است که خود برنامه نویس بررسی را انجام می‌دهد و سعی می‌کند مشکلات موجود در کد خود را پیدا و تصحیح کند، این معمولا به عنوان خود بازبینی شناخته می‌شود. هر برنامه نویس باید احساس مسئولیت شخصی در قبال پیاده سازی‌های خود داشته باشد.فرآیند بررسی تیمی می‌تواند کمی پیچیده تر باشد و چندین مرحله مختلف در بررسی نرم‌افزار وجود دارد. یک روش جالب این است که در آن توسعه‌دهنده، کد و ایده‌های خود را برای مخاطب توضیح می‌دهد و در معرض انتقاد آنها قرار می‌گیرد. علاوه بر این، الزامات رسمی برای انجام بررسی های ایستا کد وجود دارد. اجزای یک بازنگری رسمی عبارتند از: اهداف بازبینی، مجموعه موارد در حال بررسی، مجموعه‌ای از پیش شرط‌ها برای بررسی، نقش‌ها، اندازه تیم، شرکت کنندگان، چک لیست‌ها، معیارها و روش‌های کار مجدد.استفاده از ابزارهای خودکار برای تحلیل ایستای کدابزارهای تحلیل ایستا نسبت به بررسی‌های دستی بسیار مطلوب هستند زیرا سریعتر هستند، به این معنی که می‌توانند برنامه‌ها را به دفعات ارزیابی کنند. همانطور که یک برنامه نویس می‌تواند به یک کامپایلر تکیه کند تا به طور مداوم نکات ظریف نحو زبان را اعمال کند، یک ابزار تحلیل ایستا نیز خوب می‌تواند نکات دقیقی از باگ‌های پیچیده‌تر بیابد. علاوه بر این، آزمون خطاهایی مانند آسیب‌پذیری‌های امنیتی پیچیده است، زیرا اغلب در حالت‌های صعب العبور یا در شرایط غیرعادی ظاهر می‌شوند. ابزارهای تجزیه و تحلیل ایستا می‌توانند در گوشه‌های تاریک برنامه نیز تحلیل خود را انجام دهند.باید کار کردن از ابزارهای تحلیل ایستا آسان باشند، این بدان معناست که نتایج آنها باید برای توسعه دهندگان عادی که ممکن است اطلاعات زیادی در مورد امنیت نداشته باشند قابل درک باشد و کاربران خود را در مورد برنامه نویسی خوب آموزش دهند. یکی دیگر از ویژگی‌های مهم، نوع دانش (مجموعه قوانین) است که ابزار اعمال می‌کند. دقت داشته باشید که ابزارهای تجزیه و تحلیل ایستا نمی‌توانند همه مشکلات امنیتی را حل کنند، عمدتاً به این دلیل که این ابزارها به دنبال مجموعه ثابتی از الگوها یا قوانین در کد هستند. اگرچه ابزارهای پیشرفته‌تر اجازه می‌دهند قوانین جدیدی در طول زمان اضافه شوند، اما اگر هنوز قانونی برای یافتن یک مشکل خاص نوشته نشده باشد، ابزار هرگز آن مشکل را پیدا نمی‌کند. خروجی ابزارهای تحلیل ایستا هنوز نیاز به ارزیابی انسانی دارد. بنابراین هیچ راهی برای اجتناب از مطالعه خروجی و قضاوت در مورد اینکه کدام مسائل باید برطرف شوند و کدام یک سطح قابل قبولی از برنامه نویس را نشان می‌دهند وجود ندارد. توجه داشته باشید که یک ابزار همچنین می‌تواند منفی‌های کاذب تولید کند (برنامه حاوی اشکالاتی است که ابزار گزارش نمی‌کند) یا مثبت کاذب (ابزار اشکالاتی را گزارش می‌کند که برنامه حاوی آنها نیست). مثبت‌های کاذب به دلیل زمانی که توسعه‌دهنده متوجه می‌شود هیچ خطایی وجود ندارد، مشکل ایجاد می‌کند، اما منفی‌های کاذب بسیار خطرناک‌تر هستند، زیرا منجر به احساس امنیت کاذب می‌شوند. یک ابزار خوب برای تجزیه و تحلیل ایستا ابزاری است که اگرچه گاهی اوقات مثبت کاذب را نشان می‌دهد، اما هرگز اجازه نمی‌دهد یک منفی کاذب عبور کند.مزایا و معایب تحلیل ایستای کدآزمون یک برنامه دارای نکات بسیار زیادی است تا بتوان آن را مطابق با مشخصات تعیین شده، در نظر گرفت. تجزیه و تحلیل ایستا تنها در صورتی می‌تواند معنا پیدا کند که سایر اشکال تجزیه و تحلیل ساخته شوند، زیرا هیچ کس فقط نمی‌تواند از این تکنیک استفاده کند و مطمئن باشد که نرم افزار بدون عیب است، که این می‌تواند به عنوان یک نقطه ضعف بزرگ تلقی شود. از سوی دیگر، هیچ راهی برای اطمینان از اینکه پیاده سازی بدون خطا است وجود ندارد.اساساً دو نوع تحلیل نرم افزار وجود دارد: پویا و ایستا. همانطور که در ابتدا توضیح داده شد، تجزیه و تحلیل ایستا بدون اجرای واقعی برنامه‌های ساخته شده انجام می‌شود، اما تحلیل پویا با اجرای برنامه‌ها بر روی یک پردازنده واقعی یا مجازی انجام می‌شود. اگرچه تجزیه و تحلیل پویا الزامات عملکردی یک پروژه نرم افزاری را بررسی می‌کند، تجزیه و تحلیل ایستا می تواند میزان تست و اشکال زدایی لازم برای آماده شدن نرم افزار را کاهش دهد.نقطه ضعف تجزیه و تحلیل پویا این است که نتایج تولید شده برای اجرای آتی تعمیم داده نمی‌شوند. هیچ اطمینانی وجود ندارد که مجموعه ورودی‌ها، مشخصه همه اجرای برنامه‌های ممکن باشد. برنامه‌هایی که به ورودی‌های صحیح نیاز دارند نمی‌توانند از نتایج یک تحلیل پویای معمولی استفاده کنند، همانطور که برنامه‌هایی که به ورودی‌های دقیق نیاز دارند قادر به استفاده از نتایج یک تحلیل ایستا معمولی نیستندبرخی از آنالیزهای ایستا بسیار سریع اجرا می‌شوند، اما به طور کلی، به دست آوردن نتایج دقیق به مقدار زیادی محاسبات و انتظارهای طولانی نیاز دارد، به خصوص هنگام تجزیه و تحلیل برنامه‌های بزرگ. به طور معمول، تجزیه و تحلیل ایستا محافظه کارانه و صحیح است.  طراحی نرم افزار همچنین مستعد وجود اشتباهاتی است، تشخیص این مشکلات از طریق آزمون دشوار است، بیشتر به این دلیل که منشأ اکثر مشکلات در نیازها و طراحی نرم افزار است. الزامات و مصنوعات طراحی را می‌توان بررسی کرد اما قابل اجرا و آزمون نیست. از سوی دیگر، به دلیل سازماندهی ضعیف و ساختار نامناسب کد، یافتن مشکلات مربوط به طراحی یا مشکلات توسعه کد کند و  غیرممکن است.یکی از مزایای رویکرد تجزیه و تحلیل ایستا در طول توسعه این است که کد به شدت به گونه‌ای هدایت می‌شود که قابل اعتماد و خوانا باشد. این همچنین بر تأیید کد پس از آماده شدن تأثیر می‌گذارد و تعداد مشکلات موجود در اجرای بعدی آن کد را کاهش می دهد.ابزار برای تجزیه و تحلیل کد ایستا ابزارهایی مبتنی بر تحلیل ایستا را می‌توان برای کشف نقص در برنامه‌ها استفاده کرد. چندین ابزار در طول سال‌ها به منظور کمک به این فرآیند توسعه یافته است. ابزارها بر اساس تجزیه و تحلیل ایستا ساخته شده‌اند و می‌توانند برای یافتن خطاها و حتی برخی آسیب پذیری‌های امنیتی به صورت ایستا، یعنی بدون اجرای کد استفاده شوند. در این بخش با برخی از محبوب‌ترین ابزارها برای تجزیه و تحلیل ایستا آشنا خوایم شد. این ابزارها را می‌توان در دسته‌های زیر طبقه بندی کرد: NET، Java، C/C. و Multi-Language. علاوه بر این، این ابزارها منبع باز ویا تجاری هستند.ابزار FxCop برای دسته NET.یکی از ابزارهای تجزیه و تحلیل استاتیک در چارچوب NET. ابزار FxCop است که یک ابزار رایگان ایجاد شده توسط مایکروسافت است. FxCop کد میانی یک مجموعه دات نت کامپایل شده را تجزیه و تحلیل می‌کند و پیشنهاداتی برای طراحی، امنیت و بهبود عملکرد ارائه می‌دهد. به‌طور پیش‌فرض، FxCop یک اسمبلی را بر اساس قوانینی که توسط دستورالعمل‌های طراحی برای توسعه کتابخانه‌های کلاس تعیین شده است، تجزیه و تحلیل می‌کند. قوانین دستورالعمل طراحی به 9 دسته تقسیم می شوند، از جمله طراحی، عملکرد و امنیت و غیره. علاوه بر این، FxCop نه تنها بیش از 200 قانون را نمایش می‌دهد که هنگام تجزیه و تحلیل استفاده می‌شود، بلکه به کاربر اجازه می‌دهد قوانین موجود را خاموش کرده و قوانین سفارشی را اضافه کند. FxCop برای توسعه دهندگان کتابخانه کلاس در نظر گرفته شده است اما همچنین به عنوان یک ابزار برای افرادی که تازه وارد   چارچوب NET. هستند مفید است.ابزار CheckStyle برای دسته Javaیک ابزار منبع باز که بهترین قوانین را برای کد جاوا اعمال می‌کند، به عنوان CheckStyle شناخته می شود. با تجزیه و تحلیل کد منبع جاوا و گزارش هرگونه نقض استانداردها کار می کند. می توان آن را به عنوان یک پلاگین در یک IDE ادغام کرد تا توسعه دهندگان بتوانند فوراً هرگونه نقض استانداردهای رسمی را ببینند و اصلاح کنند. علاوه بر این، می‌توان از آن برای تولید گزارش‌های کل پروژه که نقض‌های یافت شده را خلاصه می‌کند، استفاده کرد. Checkstyle شامل بیش از 120 قانون و استاندارد است و به مسائلی می پردازد که از قالب بندی کد و قراردادهای نامگذاری تا معیارهای پیچیدگی کد را شامل می شود [16].ابزار Cppcheck برای دسته C/Cابزار Cppcheck یک ابزار محبوب، منبع باز، رایگان و تجزیه و تحلیل کد ایستا بین پلتفرمی است که به C و C++ اختصاص داده شده است. استفاده از آن آسان است و سادگی آن یکی از مزایای آن است. برای شروع کار با آن نیازی به انجام هیچ گونه تغییر یا اصلاحی ندارید، به همین دلیل است که اغلب برای مبتدیان توصیه می شود. همچنین شهرت دارد که تعداد نسبتاً کمی از موارد مثبت کاذب را گزارش می دهد، یا حداقل این آرزوی ابزار است.ابزار SonarQube برای دسته  Multi-Languageابزار SonarQube یک نام آشنا در کیفیت کد و امنیت کد است که به همه توسعه دهندگان این امکان را می‌دهد تا کدهای پاک تر و ایمن تر بنویسند. SonarQube با هزاران قانون خودکار تجزیه و تحلیل کد ایستا در بیش از 25 زبان برنامه نویسی، در حالی که مستقیماً با پلتفرم DevOps شما ادغام می‌شود، هم تیمی شما برای بهبود گردش کار توسعه و هدایت تیم شما است. SonarQube با ابزارهای موجود شما مطابقت دارد و زمانی که کیفیت یا امنیت پایگاه کد شما در خطر باشد، به طور خودکار، شما را خبر دار می‌کند. نسخه های مختلف SonarQube را میتوان به صورت رایگان استفاده کرد.بهبودهای پیشنهادی در ابزارهای موجودابزارهایی که برای شناسایی اشکالات در کد منبع استفاده می‌شوند، اغلب اخطارهای مثبت کاذب زیادی را به کاربر برمی‌گردانند. هشدارهای مثبت واقعی اغلب در میان تعداد زیادی از مثبت های کاذب باعث حواس پرتی می‌شوند. با سخت کردن یافتن نکات مثبت واقعی، نرخ مثبت کاذب بالا می‌تواند کاربران را ناامید کند و آنها را از استفاده از ابزارهای مفید منصرف کند.نتیجه‌گیریابزارهای خوب تجزیه و تحلیل ایستا، باید به راحتی قابل استفاده باشند. این بدان معناست که نتایج آنها باید برای توسعه دهندگان عادی قابل درک باشد تا کاربران خود را در مورد شیوه‌های برنامه نویسی خوب آموزش دهند. یکی دیگر از ویژگی‌های مهم، نوع دانش (مجموعه قوانین) است که ابزار اعمال می‌کند. اهمیت یک مجموعه قوانین خوب را نمی توان نادیده گرفت. در پایان، چک‌کننده‌های ایستا خوب می‌توانند به شناسایی و ریشه‌کن کردن باگ‌های امنیتی رایج کمک کنند. این امر به ویژه برای زبان هایی مانند C که مجموعه قوانین بسیار بزرگی برای آنها وجود دارد، بسیار مهم است. تجزیه و تحلیل ایستا باید به طور منظم به عنوان بخشی از هر فرآیند توسعه مدرن اعمال شود.ابزارهای تجزیه و تحلیل کد ایستا روشی سریع و خودکار برای اطمینان از اینکه کد منبع مطابق با دستورالعمل های طراحی و سبک از پیش تعریف شده باقی می‌ماند، ارائه می‌دهد. پیروی از چنین دستورالعمل‌هایی به تولید کد یکنواخت‌تر کمک می‌کند و همچنین می‌تواند به کاستی‌های بالقوه امنیت، عملکرد و قابلیت همکاری و اشاره کند. ابزارهای تجزیه و تحلیل کد ایستا جایگزینی برای بررسی کد به رهبری انسان نیستند. زیرا، با بررسی انسان می‌توان در مناطقی که نیاز به توجه بیشتر است، آن مناطق از کد را بیشتر تمرکز کنند.این مطلب، بخشی از تمرین‌های درس معماری نرم‌افزار در دانشگاه شهیدبهشتی استمراجع:1- https://www.checkpoint.com/cyber-hub/cloud-security/what-is-static-code-analysis/2- Gomes, I.V., Morgado, P., Gomes, T., &amp; Moreira, R.M. (2009). An overview on the Static Code Analysis approach in Software Development.3- https://www.perforce.com/blog/sca/what-static-analysis</description>
                <category>سپهر اویسی</category>
                <author>سپهر اویسی</author>
                <pubDate>Wed, 22 Dec 2021 15:28:20 +0330</pubDate>
            </item>
                    <item>
                <title>تحویل مستمر: Continuous Delivery</title>
                <link>https://virgool.io/@m_46678530/%D8%AA%D8%AD%D9%88%DB%8C%D9%84-%D9%85%D8%B3%D8%AA%D9%85%D8%B1-continuous-delivery-vaw6rttldwhq</link>
                <description>مقدمهتحویل مستمر چیست؟تحویل مستمر یعنی توانایی دریافت همه نوع تغییرات از جمله ویژگی‌های جدید، تغییرات پیکربندی، رفع اشکال‌ها و آزمون‌ها است که منجر به تولید نرم‌افزار ایمن و کیفیت بالا می‌شود. هدف در تحویل مستمر این است که استقرارها را  به شکل قابل پیش بینی انجام دهیم که می‌تواند بر اساس تقاضا انجام شود.چرا تحویل مستمر انجام دهیم؟اغلب فرض بر این است که اگر می‌خواهیم نرم‌افزار را به دفعات بیشتری مستقر کنیم، باید سطوح پایین‌تری از ثبات و قابلیت اطمینان را در سیستم‌های خود بپذیریم. در واقع، تحقیقات انجام‌شده نشان می‌دهد که اینطور نیست؛ تیم‌هایی با عملکرد بالا به طور مداوم خدمات را سریع‌تر و قابل اطمینان‌تر از رقبای کم عملکردشان ارائه می‌کنند. این امر حتی در حوزه های بسیار تحت نظارت مانند خدمات مالی و دولتی نیز صادق است. این قابلیت، مزیت رقابتی باورنکردنی را برای سازمان‌ها، فراهم می کند.اقداماتی که در قلب تحویل مستمر وجود دارد و به ما کمک می‌کند تا به چندین مزیت مهم دست یابیم، به صورت کلی در زیر بیان شده است:زمان سریعتر برای بازاریابی؛ غیرمعمول نیست که مرحله ادغام و آزمون در چرخه عمر تحویل نرم‌افزار در روش سنتی هفته‌ها ویا حتی ماه ها طول بکشد. هنگامی که تیم‌ها برای خودکارسازی فرآیندهای ساخت و استقرار، تهیه محیط و تست رگرسیون با یکدیگر همکاری می‌کنند، توسعه‌دهندگان می‌توانند آزمون یکپارچه‌سازی و رگرسیون را در کار روزانه خود بگنجانند و این مراحل را به طور کامل حذف کنند.کیفیت بالاتر؛ وقتی توسعه‌دهندگان ابزارهای خودکاری دارند که در عرض چند دقیقه رگرسیون‌ها را کشف می‌کنند، تیم‌ها آزاد می‌شوند تا تلاش خود را بر روی تحقیقات و فعالیت‌های آزمون سطح بالاتر مانند آزمون اکتشافی، آزمون قابلیت استفاده و آزمون عملکرد و آزمون امنیت متمرکز شوند. با ایجاد یک خط لوله استقرار، این فعالیت‌ها را می‌توان به طور مداوم در طول فرآیند تحویل انجام داد و اطمینان حاصل شود که از ابتدا کیفیت در محصولات و خدمات تعبیه شده است.هزینه‌های پایین‌تر؛ هر محصول یا خدمات نرم افزاری موفق، در طول عمر خود به طور قابل توجهی تکامل می‌یابد. با سرمایه‌گذاری در ساخت، آزمون، استقرار و اتوماسیون محیط، با حذف بسیاری از هزینه‌های ثابت مرتبط با فرآیند انتشار، هزینه ایجاد و ارائه تغییرات تدریجی در نرم‌افزار را به‌طور قابل‌توجهی کاهش می‌دهید.محصولات بهتر؛  این بدان معنی است که ما می‌توانیم در طول چرخه عمر تحویل بر اساس نرم افزار کار از کاربران بازخورد دریافت کنیم. تکنیک‌هایی مانند تست A/B ما را قادر می‌سازد تا رویکردی مبتنی بر فرضیه برای توسعه محصول داشته باشیم که به موجب آن می‌توانیم ایده‌ها را با کاربران قبل از ایجاد ویژگی‌های کامل آزمایش کنیم. این بدان معناست که می‌توانیم از ویژگی‌هایی که می‌سازیم که ارزش صفر یا منفی را به کسب‌وکارمان ارائه می‌کنند، اجتناب کنیم.تیم های شادتر؛ تحقیقات بررسی شده نشان داده است که تحویل مداوم باعث کاهش استرس و کاهش فرسودگی تیم می شود. علاوه بر این، زمانی که ما بیشتر نرم‌افزاری را منتشر می‌کنیم، تیم‌های تحویل نرم‌افزار می‌توانند فعال‌تر با کاربران درگیر شوند، بیاموزند که کدام ایده‌ها کار می‌کنند و کدام نه، و از نزدیک نتایج کاری را که انجام داده‌اند ببینند. با تحویل مستمر، می‌توانیم روی چیزی که بیشتر به آن اهمیت می‌دهیم تمرکز کنیم، برای مثال به طور مداوم کاربران خود را خوشحال کنیم.دیدیم که تحویل مستمر اثر جادویی دارد ولی دقت کنید که این جادو نیست؛ تحویل مستمر نیاز به یم انظبات و مدیریت دارد که باید به صورت مستمر چک کرد. خوب بریم کمی بهتر و مفصل‌تر با این مبحث آشنا شویم.اصولپنج اصل در قلب تحویل مستمر وجود دارد:ساخت کیفیتدبلیو ادواردز دمینگ، 14 اصل کلیدی را برای مدیریت ارائه کرده است. اصل سوم می گوید: وابستگی به بازرسی را برای دستیابی به کیفیت متوقف کنید. با ایجاد کیفیت در محصول در وهله اول، نیاز به بازرسی انبوه را از بین ببرید.رفع مشکلات و نقص‌ها در صورتی که فوراً آنها را پیدا کنیم بسیار ارزان‌تر است؛ در حالت ایده‌آل باید قبل از اینکه نسخه نهایی بررسی شوند، با اجرای تست‌های خودکار به صورت محلی در طول توسعه نرم‌افزار عیب‌های سیستم را پیدا کرد. ایجاد و تکامل حلقه‌های بازخورد برای شناسایی مشکلات در اسرع وقت، کاری ضروری و بی‌پایان در تحویل مستمر است. اگر در آزمون خود مشکلی پیدا کردیم، نه تنها باید آن را برطرف کنیم، بلکه باید بپرسیم: چگونه می‌توانستیم با یک آزمون پذیرش خودکار مشکل را پیدا کنیم؟ هنگامی که یک آزمون ناموفق است، باید بپرسیم: آیا می‌توانستیم برای حل این مشکل یک آزمون واحد بنویسیم؟کار در دسته های کوچکدر رویکردهای سنتی مرحله‌ای برای توسعه نرم‌افزار، انتقال از برنامه‌نویس به فاز آزمون و از فاز آزمون به فاز عملیات شامل نسخه‌های کامل است، که هر کدام از این فازها شامل ماه‌ها کار تیم‌هایی متشکل از ده‌ها یا صدها نفر است. اما در تحویل مداوم، ما رویکرد مخالف را در پیش می‌گیریم و سعی می‌کنیم هر تغییری را در نسخه تا آنجا که می‌توانیم به سمت انتشار دریافت کنیم و بازخورد جامع را در سریع ترین زمان ممکن دریافت کنیم. کار در دسته‌های کوچک فواید زیادی دارد. زمان دریافت بازخورد در مورد کارمان را کاهش می‌دهد، رفع مشکلات را آسان‌تر می‌کند، کارایی را افزایش می‌دهد و از تسلیم شدن در برابر اشتباه هزینه‌های غرق‌شده جلوگیری می‌کند.دلیل اینکه ما در دسته‌های بزرگ کار می‌کنیم، هزینه ثابت زیادی برای تحویل تغییرات است. یک هدف کلیدی از تحویل مداوم، تغییر اقتصادی فرآیند تحویل نرم‌افزار است تا کار در دسته‌های کوچک از نظر اقتصادی مقرون‌به‌صرفه باشد تا بتوانیم از مزایای بسیاری از این رویکرد برخوردار شویم.کامپیوترها کارهای تکراری را انجام می‌دهند، تیم مشکلات را حل می‌کنندهدف این است که کامپیوترها کارهای ساده و تکراری مانند آزمایش رگرسیون را انجام دهند تا انسان‌ها بتوانند روی حل مسئله تمرکز کنند. بنابراین کامپیوترها و افراد مکمل یکدیگر هستند. بسیاری از مردم نگران هستند که اتوماسیون آنها را بیکار کند. هدف این نیست؛ هیچ وقت در یک شرکت موفق کمبود کار وجود نخواهد داشت. درعوض، افراد برای تمرکز بر فعالیت‌هایی با ارزش بالاتر، از کار طاقت فرسا رها می‌شوند. این مزیت بهبود کیفیت را نیز دارد، زیرا انسان‌ها در هنگام انجام کارهای بی ارزش در معرض خطا هستند.بی وقفه به دنبال بهبود مستمر باشیدتایچی اوهنو، یکی از چهره های کلیدی در تاریخ شرکت تویوتا، زمانی گفت:فرصت‌های بهبود بی نهایت هستند. فکر نکنید که اوضاع را بهتر از قبل کرده‌اید و آسوده خاطر باشید. این مانند دانش آموزی است که افتخار می‌کند زیرا در شمشیربازی دو بار از سه بار استاد خود را شکست داده است. هنگامی که جوانه‌های ایده‌های بهبود را برداشتید، مهم است که در کار روزانه خود این نگرش را داشته باشیم که درست زیر یک ایده بهبود، ایده بهتر دیگری وجود دارد.تحول را به عنوان پروژه‌ای تلقی نکنید که باید شروع شود و سپس تکمیل شود تا بتوانیم طبق معمول به تجارت بازگردیم. بهترین سازمان‌ها سازمان‌هایی هستند که در آن‌ها کار بهبود بخشی ضروری از کار روزانه‌شان است و هیچ‌کس از وضعیت موجود راضی نیست.همه مسئول هستنددر سازمان‌هایی با عملکرد بالا، هیچ چیز &quot;مشکل شخص دیگری&quot; نیست. توسعه دهندگان مسئول کیفیت و پایداری نرم افزاری هستند که می‌سازند. تیم‌های عملیاتی مسئول کمک به توسعه‌دهندگان برای ایجاد کیفیت هستند. همه با هم برای دستیابی به اهداف سطح سازمانی کار می‌کنند، نه اینکه برای تیم یا بخش خود بهینه‌سازی کنند.اکثر مردم می‌خواهند کار درست را انجام دهند، اما رفتار خود را بر اساس نحوه پاداشی که دریافت می‌کنند تطبیق می‌دهند. بنابراین، ایجاد حلقه‌های بازخورد سریع از چیزهایی که واقعاً مهم هستند، پس نحوه واکنش مشتریان به آنچه ما برای آنها می‌سازیم و تأثیر آن بر سازمان ما میتوان یک معیار خوب باشد.پایه‌هاتحویل مستمر بر سه پایه استوار است: مدیریت پیکربندی جامع، یکپارچه سازی مداوم و آزمایش مداوم.در این قسمت مروری بر هر یک از این پایه‌ها خواهیم داشت.مدیریت پیکربندی: configuration managementاتوماسیون نقشی حیاتی در حصول اطمینان از اینکه می‌توانیم نرم‌افزار را به‌طور تکراری و قابل اطمینان منتشر کنیم، ایفا می‌کند. یکی از اهداف کلیدی این است که فرآیندهای دستی تکراری مانند ساخت، استقرار، آزمون رگرسیون و تامین زیرساخت و خودکارسازی آنها را انجام دهیم. برای دستیابی به این هدف، ما باید هر چیزی را که برای انجام این فرآیندها لازم است، از جمله کد منبع، اسکریپت‌های آزمون و استقرار، زیرساخت‌ها و اطلاعات پیکربندی برنامه، و کتابخانه‌هایی که به آنها وابسته هستیم، کنترل کنیم. ما همچنین می‌خواهیم پرس و جو از وضعیت فعلی و تاریخی محیط خود را ساده کنیم.ما دو هدف اساسی داریم:تکرارپذیری: ما باید یک محیط کاملاً خودکار ارائه کنیم و بدانیم که هر محیط جدیدی که از همان پیکربندی تولید می‌شود یکسان است.قابلیت ردیابی: ما باید بتوانیم هر محیطی را انتخاب کنیم و به سرعت و دقیقاً نسخه‌های هر وابستگی مورد استفاده برای ایجاد آن محیط را تعیین کنیم. ما همچنین می‌خواهیم نسخه‌های قبلی یک دامنه را با هم مقایسه کنیم و ببینیم بین آنها چه تغییری ایجاد شده است.این قابلیت ها چندین مزیت قابل توجه به ما می دهد:بازیابی فاجعه: هنگامی که مشکلی در یکی از محیط‌های ما پیش می‌آید، به عنوان مثال، نقص سخت‌افزار یا نقص امنیتی، باید بتوانیم آن محیط را در مدت زمان معینی برای بازیابی سرویس بازتولید کنیم.کیفیت بالاتر: فرآیند تحویل نرم افزار اغلب در معرض تاخیرهای طولانی در انتظار آماده سازی محیط های توسعه، آزمایش و تولید است. زمانی که این کار به طور خودکار از طریق کنترل نسخه انجام شود، می‌توانیم بازخوردی را در مورد تأثیر تغییرات خود با سرعت بیشتری دریافت کنیم و به ما امکان می‌دهد کیفیت را در نرم‌افزار خود ایجاد کنیم.مدیریت ظرفیت: وقتی می‌خواهیم ظرفیت بیشتری به محیط‌هایمان اضافه کنیم، توانایی ایجاد نسخه‌های جدید از سرورهای موجود ضروری است. این قابلیت مقیاس افقی سیستم‌های توزیع شده مبتنی بر ابر مدرن را امکان پذیر می‌کند.پاسخ به نقص‌ها: هنگامی که یک نقص مهم یا آسیب پذیری را در برخی از اجزای سیستم خود کشف می کنیم، می خواهیم نسخه جدیدی از نرم افزار خود را در اسرع وقت منتشر کنیم. بسیاری از سازمان ها برای این نوع تغییرات فرآیند اضطراری دارند که با دور زدن برخی آزمایش ها و ممیزی ها سریعتر پیش می رود. این یک معضل شدید در سیستم های ایمنی حیاتی است. هدف ما باید استفاده از فرآیند انتشار استاندارد خود برای رفع اضطراری باشد - این دقیقاً همان چیزی است که تحویل مداوم بر اساس مدیریت پیکربندی جامع امکان‌پذیر است.هنگام تلاش برای دستیابی به مزایا، همیشه باید با تعریف اهدافی که می‌خواهیم به آنها برسیم، شروع کنیم. این به ما امکان می‌دهد تعیین کنیم که کدام یک از مسیرهای ممکن برای رسیدن به هدف ما احتمالاً بهترین است و اگر متوجه شدیم رویکرد ما بسیار گران یا طولانی است، مسیر خود را تغییر دهیم یا اهداف خود را دوباره ارزیابی کنیم.از چه ابزارهایی برای مدیریت پیکربندی استفاده کنم؟انتخاب ابزار موضوع پیچیده‌ای است و در بسیاری از موارد انتخاب ابزار عامل مهمی در موفقیت است. من توصیه می‌کنم تحقیقاتی را انجام دهید تا فهرست کوتاهی را بر اساس فناوری‌هایی که تیم شما با آن‌ها آشناست تهیه کنید و سپس یک هدف کوتاه‌مدت تعیین کنید و برای دستیابی به آن تلاش کنید. به این نوع نرم‌افزارها در حوزه نرم‌افزار SCM گفته می‌شود؛ به عنوان مثال می‌توانید از ابزارهای زیر استفاده کنید. ابزار SolarWinds Server Configuration Monitorیک مانیتور پیکربندی سرور است که برای شناسایی تغییرات پیکربندی غیرمجاز در سرورها و برنامه‌های شما ارائه شده است. این به شما کمک می‌کند تا تنظیمات سرور و برنامه‌های کاربردی را در ویندوز و لینوکس پایه گذاری کنید. این قابلیت دید و مسئولیت پذیری تیم را بهبود می‌بخشد و زمان عیب‌یابی را کاهش می‌دهد.ابزار CHEF Configuration Toolاین ابزار اساساً یک پلت فرم اتوماسیون است که راهی برای پیکربندی و مدیریت زیرساخت ارائه می دهد. زیرساخت به عنوان کد مستلزم اجرای با کدگذاری به جای اجرای دستی است. همچنین برای نوشتن تنظیمات روی Ruby و DSL کار می‌کند.یکپارچه‌سازی مداوم: Continuous Integrationترکیب کار چندین توسعه دهنده سخت است. سیستم‌های نرم افزاری پیچیده هستند و یک تغییر ظاهرا ساده و مستقل به یک فایل می‌تواند به راحتی عواقب ناخواسته‌ای داشته باشد که صحت سیستم را به خطر می‌اندازد. در نتیجه، برخی از تیم‌ها از توسعه‌دهندگان می‌خواهند که روی شاخه‌های خود، جدا از یکدیگر کار کنند. با این حال، با گذشت زمان این شاخه‌ها از یکدیگر جدا می‌شوند. در حالی که ادغام یکی از این شاخه‌ها در خط اصلی معمولاً مشکل ساز نیست، ولی کار مورد نیاز برای ادغام چندین شاخه با عمر طولانی در خط اصلی توسعه معمولاً مشکل ساز است و به مقدار قابل توجهی از کار مجدد نیاز دارد.تیم‌ها در زمان‌هایی نیاز به فریز کردن کد، یا حتی فازهای یکپارچه‌سازی دارند، زیرا آنها برای ادغام این شاخه‌ها قبل از انتشار کار می‌کنند. با وجود ابزار مدرن، این فرآیند هنوز گران و غیرقابل پیش بینی است. این مشکل با افزایش اندازه تیم و با افزایش طول عمر شاخه ها به طور تصاعدی شدیدتر می شود.عمل ادغام مداوم برای رسیدگی به این مشکلات ابداع شده است. CI (ادغام پیوسته) از اصل XP (برنامه نویسی شدید) پیروی می‌کند که اگر چیزی درای مشکل است، باید آن را بیشتر انجام دهیم و مشکل را جلو ببریم. بنابراین در CI توسعه دهندگان تمام کارهای خود را به طور منظم (حداقل روزانه) در trunk  ادغام می‌کنند. مجموعه‌ای از آزمون‌های خودکار هم قبل و هم بعد از ادغام اجرا می‌شوند. اگر این آزمون‌های خودکار با شکست مواجه شوند، تیم کاری را که انجام می‌دهند متوقف می‌کند و شخصی بلافاصله مشکل را برطرف می‌کند.مزایای یکپارچه سازی مداوم بسیار قابل توجه است - تحقیقات نشان می دهد که منجر به سطوح بالاتری از توان عملیاتی، سیستم‌های پایدارتر و نرم‌افزار با کیفیت، می‌شود. با این حال این عمل به دو دلیل اصلی هنوز بحث برانگیز است.اول، توسعه دهندگان را ملزم می کند که ویژگی‌های بزرگ و سایر تغییرات را به مراحل کوچکتر و تدریجی تر تقسیم کنند که می توانند در trunk/ master ادغام شوند. این یک تغییر پارادایم برای توسعه دهندگانی است که عادت ندارند به این روش کار کنند. درواقع ما می‌خواهیم بتوانیم تغییرات را در سریع‌ترین زمان ممکن بررسی، ادغام، آزمایش و اجرا کنیم و این فرآیند زمانی سریع‌تر و ارزان‌تر است که تغییرات کوچک و مستقل باشند، و شاخه‌هایی که در آنها زندگی می‌کنند کوتاه مدت و در دسته‌های کوچک باشد. دوم، ادغام مداوم مستلزم مجموعه ای سریع از آزمون‌های واحد خودکار جامع است. این آزمون‌ها باید به اندازه کافی جامع باشند تا سطح خوبی از اطمینان حاصل شود که نرم افزار همانطور که انتظار می‌رود کار می‌کند، در حالی که در چند دقیقه یا کمتر اجرا می شود. اگر آزمایش‌های واحد خودکار بیشتر طول بکشد، توسعه‌دهندگان مایل به اجرای مکرر آن‌ها نیستند و نگهداری از آن‌ها سخت‌تر می‌شود. ایجاد مجموعه‌های قابل نگهداری از تست‌های واحد خودکار پیچیده است و بهتر است از طریق توسعه آزمون محور (TDD) انجام شود. با وجود این موانع، کمک به تیم‌های توسعه نرم‌افزار برای اجرای یکپارچه‌سازی مستمر باید اولویت شماره یک هر سازمانی باشد که می‌خواهد تحویل مستمر را آغاز کند. CI با ایجاد حلقه‌های بازخورد سریع و حصول اطمینان از کار توسعه‌دهندگان در دسته‌های کوچک، تیم‌ها را قادر می‌سازد تا کیفیت را در نرم‌افزار خود ایجاد کنند، در نتیجه هزینه توسعه مداوم نرم‌افزار را کاهش می‌دهد و هم بهره‌وری تیم‌ها و هم کیفیت کاری را که تولید می‌کنند افزایش می‌دهد.از چه ابزارهایی برای کپارچه‌سازی مداوم استفاده کنم؟ابزار GitLab CIیک پلت فرم مدیریت کد، که به سرعت در حال رشد برای توسعه دهندگان مدرن است. این ابزارها را برای مدیریت مسائل، نمایش کد، یکپارچه سازی و استقرار مداوم، همه در یک داشبورد فراهم می‌کند. GitLab بسته‌های از پیش ساخته شده را برای توزیع‌های محبوب لینوکس ارسال می‌کند، در عرض چند دقیقه نصب می‌شود، یک رابط کاربری دوستانه دارد و مستندات دقیقی را در مورد هر ویژگی ارائه می‌دهد.ویژگی های کلیدی:ماشین‌های اضافی را اضافه کنید تا تست‌های خود را برای عملکرد مقیاس بندی کنیداسکریپت‌های ساخت CMD به شما این امکان را می‌دهد که آنها را به هر زبانی برنامه ریزی کنیدآزمون نسخه سفارشی برای بررسی شاخه‌ها به صورت جداگانهاستقرار دستی، و قابلیت بازگشت بدون زحمتهزینه: رایگان برای نسخه انجمن، شرکتی با شروع از 16 دلار برای هر کاربرابزار Travisیک پلت فرم CI است که فرآیند تست نرم افزار و استقرار برنامه‌ها را خودکار می‌کند. این به عنوان یک پلتفرم ساخته شده است که با پروژه های GitHub شما یکپارچه می‌شود تا بتوانید آزمایش کد خود را در هر لحظه شروع کنید. با مشتریانی مانند فیس بوک، موزیلا و توییتر قرارداد دارند. این یکی از ابزارهای یکپارچه سازی مداوم موفق در بازار است.ویژگی های کلیدی:رایگان برای منبع باز عمومی پیش بینی شده در GitHubبه سادگی ثبت نام، اضافه کردن یک پروژه، و می توانید آزمایش را شروع کنیدپشتیبانی دوزبانه تا کد شما در تمامی نسخه ها روان اجرا شودابزارهای توسعه یافته API و CMD برای مدیریت سفارشیهزینه: رایگان برای مخازن باز، Enterprise برای خصوصیآزمون مداوم : Continuous Testing به طور سنتی، استفاده گسترده از بازرسی دستی تغییرات کد و آزمون دستی به منظور نشان دادن درستی سیستم انجام می‌شد. این نوع آزمایش معمولاً در مرحله‌ای پس از «تکمیل برنامه» انجام می‌شود. با این حال، این استراتژی چندین اشکال دارد:آزمایش رگرسیون دستی زمان زیادی می‌برد و انجام آن نسبتاً پرهزینه است، گلوگاهی ایجاد می کند که مانع از انتشار بیشتر نرم افزارها است و دریافت بازخورد به توسعه دهندگان هفته‌ها (و گاهی اوقات ماه ها) پس از نوشتن کد مورد آزمایش می‌شود.آزمون‌ها و بازرسی‌های دستی چندان قابل اعتماد نیستند، زیرا افراد در انجام کارهای تکراری مانند تست رگرسیون به صورت دستی ضعیف هستند و پیش بینی تأثیر مجموعه‌ای از تغییرات بر روی یک سیستم نرم افزاری پیچیده از طریق بازرسی بسیار سخت است.برای ایجاد کیفیت در نرم افزار، باید رویکرد متفاوتی را اتخاذ کنیم. هدف ما این است که انواع مختلفی از آزمون‌ها اعم از دستی و خودکار را به طور مداوم در طول فرآیند تحویل اجرا کنیم. نمودار زیر به خوبی این هدف نشان داده شده‌اند:هنگامی که ما یکپارچه سازی مداوم و آزمون اتوماسیون را در محل خود داریم، یک pipeline استقرار (الگوی کلیدی در تحویل مداوم) ایجاد می‌کنیم. در الگوی pipeline استقرار، هر تغییری یک بیلد را اجرا می‌کند که ابتدا بسته‌هایی را ایجاد می‌کند که می‌توانند در هر محیطی مستقر شوند و ثانیا آزمایش‌های واحد را اجرا می‌کند، و بازخوردهایی را به توسعه‌دهندگان در فضای چندگانه می‌دهد.در pipeline استقرار، هر تغییری عملاً کاندیدای انتشار است. وظیفه pipeline استقرار یافتن مسائل شناخته شده است. اگر نتوانیم هیچ مشکل شناخته شده‌ای را تشخیص دهیم، باید با آزاد کردن بسته‌هایی که از آن عبور کرده اند، احساس راحتی کنیم. اگر اینطور نیستیم، یا اگر بعداً نقص‌هایی را کشف کردیم، به این معنی است که باید خود را بهبود دهیم، شاید باید آزمون‌هایی را اضافه یا به روز کنیم.هدف ما باید این باشد که مشکلات را در اسرع وقت پیدا کنیم، و زمان تحویل از ورود تا انتشار را تا حد امکان کوتاه کنیم. بنابراین ما می‌خواهیم فعالیت‌ها را در خط لوله استقرار موازی کنیم، نه اینکه مراحل زیادی به صورت سری اجرا شوند. با ساختن یک pipeline اولیه استقرار را شروع کنید، که دارای یک آزمون واحد، یک آزمون پذیرش واحد، یک اسکریپت استقرار خودکار که یک محیط آزمون را ایجاد می‌کند، است؛ سپس پوشش آزمون خود را افزایش دهید و pipeline استقرار خود را با تکامل محصول یا خدمات خود گسترش دهید.از چه ابزارهایی برای آزمون مداوم استفاده کنم؟ابزار Seleniumهنگامی که صحبت از آزمون خودکار وب به میان می‌آید، احتمالاً سلنیوم نام شناخته شده‌ای است. سلنیوم یک چارچوب منبع باز است که کاندیدای عالی برای تیمی است که به سمت پذیرش آزمون مداوم تمایل دارد.سلنیوم برای مهندسین تضمین کیفیت (QA) با سطح پیشرفته مهارت برنامه نویسی انتخابی مناسب است. این نیاز به درک عمیقی از نحوه کار چارچوب برای تنظیم و پیاده سازی چرخه توسعه فعلی شما دارد.سلنیوم از طیف گسترده‌ای از سیستم‌عامل‌های محبوب (ویندوز، macOS، لینوکس) و مرورگرها (Chrome، Firefox، Safari) برای آزمایش بین محیطی پشتیبانی می‌کند.با این حال، هنگام ادغام سلنیوم با سایر ابزارها در خط لوله CI/CD چالش‌های زیادی وجود دارد، زیرا باید دانش و مهارت‌های فنی خاصی داشته باشید. به همین دلیل است که برخی جایگزین‌ها بر روی سلنیوم ساخته شده‌اند (مانند استودیو Katalon) که اجزای آزمایش مداوم را بدون نیاز به کاربران برای نوشتن اسکریپت و پیکربندی از ابتدا ارائه می‌دهد.ابزار TestComplete این محصولی از SmartBear است، یک ابزار اتوماسیون آزمون برای برنامه‌های دسکتاپ، وب و موبایل است. این ابزار از زبان‌های برنامه نویسی مختلف از جمله Python، Javascript، VBScript پشتیبانی می‌کند.این ابزار به شما امکان می دهد آزمون‌های مبتنی بر کلمه کلیدی یا داده محور را انجام دهید. سازندگان TestComplete اخیراً ویژگی‌های هوش مصنوعی را برای تشخیص و نگهداری شیء آزمایشی پویا معرفی کرده‌اند. TestComplete می‌تواند به‌طور خودکار آزمایش‌ها را در صورت ایجاد تغییرات در رابط کاربری AUT شناسایی و به‌روزرسانی کند. همچنین می‌توانید پوشش آزمون خود را با اجازه دادن به چارچوب‌های آزمون دیگر، مانند TestNG، Selenium Webdriver، و همچنین SOAP UI برای تست API، به حداکثر برسانید.ابزار TestComplete با اکوسیستم CI/CD از طریق پلاگین‌ها پشتیبانی می‌کند. می‌توانید از این افزونه‌ها برای ادغام با ابزارهای معروف CI/CD مانند Jenkins، GIT، Zephyr استفاده کنید. یا می توانید پلاگین‌های سفارشی را برای ادغام با سیستم موجود توسعه دهید.پیاده سازی تحویل مستمرسازمان‌هایی که تلاش می‌کنند تحویل مستمر را مستقر کنند، معمولاً دو اشتباه رایج مرتکب می‌شوند. اولین مورد این است که تحویل مستمر را به عنوان یک حالت نهایی، به خودی خود یک هدف در نظر بگیرید. دوم این است که زمان و انرژی زیادی را صرف نگرانی در مورد اینکه از چه محصولاتی استفاده کنید. در این بخش مجموعه‌ای از الگوها را مشاهده کنید که با موفقیت برای افزایش توان عملیاتی، پایداری و کیفیت اعمال شده‌اند.الگوهالیندا رایزینگ یک الگو را به عنوان &quot;یک استراتژی نامگذاری شده برای حل یک مشکل تکراری&quot; تعریف می‌کند.الگوی کلیدی معرفی شده در تحویل مستمر، pipeline استقرار است. این الگو از چندین پروژه که در آن  با فرآیندهای دستی پیچیده، شکننده و دردناک برای آماده‌سازی محیط‌های آزمایش و تولید و استقرار در آن‌ها دست و پنجه نرم می‌کردند، پدیدار شده است. در الگوی pipeline استقرار، هر تغییر در کنترل نسخه، فرآیندی (معمولاً در یک سرور CI) را راه‌اندازی می‌کند که بسته‌های قابل استقرار ایجاد می‌کند و آزمون‌های واحد خودکار و اعتبارسنجی‌های دیگر مانند تجزیه و تحلیل کد استاتیک را اجرا می‌کند. این مرحله اول طوری بهینه شده است که اجرای آن تنها چند دقیقه طول می کشد. اگر این مرحله commit اولیه با شکست مواجه شد، مشکل باید فوراً برطرف شود؛ اگر commit شد، مرحله بعدی را در pipeline  آغاز می‌کند، که ممکن است شامل مجموعه‌ای جامع تر از آزمون‌های خودکار باشد. نسخه‌های نرم‌افزاری که تمام آزمون‌های خودکار را پشت سر می‌گذارند، می‌توانند در صورت تقاضا در مراحل بعدی مانند آزمون‌های اکتشافی، آزمون‌های عملکرد، مرحله‌بندی و تولید، مانند شکل زیر، مستقر شوند.این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.مراجع:1- continuousdelivery2- wikipedia</description>
                <category>سپهر اویسی</category>
                <author>سپهر اویسی</author>
                <pubDate>Tue, 21 Dec 2021 19:14:12 +0330</pubDate>
            </item>
                    <item>
                <title>مدل C4، مدلی برای تجسم معماری نرم افزار</title>
                <link>https://virgool.io/@m_46678530/%D9%85%D8%AF%D9%84-c4-%D9%85%D8%AF%D9%84%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%AC%D8%B3%D9%85-%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-vchjrrnp98ym</link>
                <description>برای درک نیاز مدل c4 بهتر است با یک مثال شروع کنیم، اگر از کسی که در صنعت ساختمان فعالیت می­کند بخواهید که به صورت بصری معماری موجود در ساختمان را برای شما نمایش دهد، به راحتی با کمک گرفتن از نقشه‌های ساختمان، پلان‌های طبقه‌ها و عکس‌ها جزئیات را برای شما ارائه خواهد داد. در مقابل، از یک توسعه‌دهنده نرم‌افزار بخواهید که معماری نرم‌افزار یک سیستم نرم‌افزاری را با استفاده از نمودارها به اشتراک بگذارد، احتمالاً با یک آشفتگی از جعبه‌ها و خطوط مواجه خواهید شد. این ساختار نیز شاید سلیقه‌ای باشد و از یک معیار و استانداردی تبعیت نکند؛ برای مثال اشکال‌های مختلف، نام‌گذاری مبهم، روابط بدون برچسب، اصطلاحات عمومی، سطح انتزاع مختلط و غیره.صنعت نرم‌افزار در پاسخ به این نیاز در بین توسعه دهندگان نرم افزار در سال ۲۰۰۷ زبان UML وجود آمد. نبود یک استاندار مشخص برای مدل کردن سیستم با استفاده از نمودار های گرافیکی استاندارد و یکسان، مشکلاتی را برای برنامه نویسان و طراحان نرم افزار به وجود آورده بود. با وجود پیدایش چنین زبان‌هایی، راه موثری برای ارتباط با معماری نرم‌افزار سیستم همچنان ارائه نمی‌شد، باز مشکلات بصری در این صنعت باقی مانده بود؛ و  همچنان تیم‌ها تمایل داشتند به نمودارهایی تکیه کنند که روی تخته سفید ترسیم می‌کنند یا با استفاده از ابزارهای نمودارسازی همه‌منظوره مانند Microsoft Visio.مدل C4 به‌عنوان راهی برای کمک به تیم‌های توسعه نرم‌افزار برای توصیف و برقراری ارتباط معماری نرم‌افزار، هم در طول جلسات طراحی اولیه و هم هنگام مستندسازی یک کد موجود، ایجاد شد است. این مدل راهی است برای ایجاد نقشه‌هایی از کد خود، در سطوح مختلف از جزئیات، به همان روشی که از google map  برای بزرگنمایی در منطقه‌ای که به آن علاقه دارید استفاده می‌کنید؛ در این مدل هم این امکانات موجود است که در مستند و طرح­های خود در سطوح مختلف از جزئیات، مروری داشته باشید. خوب بیاید کمی بیشتر و تخصصی­ تر با مدل C4 آشنا شویم.مدلسازی  C4چیست؟یک مدل  C4 معماری نرم افزار را در سطوح مختلف جزئیات توصیف یا تعریف می­کند. مدل C4 مجموعه ای از نمودارها است که زمینه، کانتینرها، اجزا و کد یک نرم افزاررا نشان می دهد. سلسله مراتب این نمودارها به مخاطبان مختلف اجازه می­دهد تا معماری نرم افزار را در سطح جزئیات مورد نیاز خود درک کنند.چهار سطح از مدل های C4چهار سطح در مدل  C4وجود دارد که هر کدام برای مخاطبان متفاوتی است و هر سطر دارای جزئیات متفاوتی است. که مدل معماری نرم افزار شما را می سازند.سطح 1: contextاین سطح کلی­ترین توصیفی هستند که سیستم شما چه کاری انجام می­دهد، چه کسی از آن استفاده خواهد کرد و با چه سیستم­های دیگری تعامل خواهد داشت. یک نمودار زمینه به شما کمک می­کند تا محدوده پروژه خود را توصیف کنید و نیز تا مشخص کنید که کاربر سیستم­ شما چه کسی است و پاسخگو چه سیس را می­خواهید حل کنید.سطح 2: containersاین سطح اولین گام را برای توصیف سیستم نرم­افزاری برداشته و API ها، پایگاه داده­ها و میکروسرویس­هایی را که سیستم از آنها استفاده خواهد کرد، نشان می­دهد. هر یک از این برنامه­ها با یک کانتیر نشان داده می­شوند و تعاملات بین آنها در سطح بالایی نشان داده می­شود.سطح 3: componentsیک گام عمیق‌تر از نمودار کانتینر، نمودار مؤلفه است که در آن گروه‌های کد را در یک کانتینر به تفصیل شرح می‌دهد. این مؤلفه­ها انتزاعی از کد شما را نشان می­دهند.این نوع نمودار با نمودار مؤلفه‌های UML قابل مقایسه است، اما برای ایجاد نمودار معماری نرم‌افزار از مجموعه‌ای از قوانین دقیق‌تر پیروی می‌کند.سطح 4: Codeآخرین سطح به جزئیات زیادی نیاز دارد تا نشان دهد چگونه کد یک جزء واحد در سیستم در واقع پیاده سازی می­شود. در این سطح به نمادهای موجود مانند زبان مدل سازی یکپارچه (UML)، نمودارهای رابطه موجودیت (ERD) یا نمودارهای تولید شده توسط محیط­های توسعه یکپارچه (IDE) متکی است.ارائه نرم افزار با هر چهار سطحبسته به پروژه شما و اجزایی که باید توصیف کنید، در نهایت مجموعه­ای از چهار یا چند نمودار خواهید داشت که مدل C4 شما را نشان می­دهد. اگر یک مدل  C4می‌سازید، می‌توانید مستقیماً از خطوط بر روی اشکال در نمودارهای خود استفاده کنید تا به کاربران اجازه دهید تا به سطوح عمیق‌تر مدل شما دسترسی داشته باشند و متوجه فرق انتزاع سطوح شوند.برای سطح 1 تا 3، مدل C4 از 5 عنصر اصلی نمودار استفاده می­کند: افراد، سیستم­های نرم­افزاری، کانتینرها، اجزا و روابط. این مدل تکنیکی برای چیدمان، شکل، رنگ و سبک این عناصر ندارد و کاملا ارتباط به سلیقه و یا ابزار مدل سازی C4 دارد. در عوض،مدل C4 فقط از نمودارهای ساده مبتنی بر جعبه­های تو در تو را به منظور تسهیل ترسیم تعاملی بودن سیستم­، توصیه می­کند.مدل C4 معماری بصری مشترک و معماری تکاملی را در چارچوب تیم‌های چابک تسهیل می‌کند، و تیم­هایی که روش‌های مستندسازی رسمی‌تری را دنبال می­کنند، مناسب نسیت.برای ایجاد نقشه‌هایی از کد شما، ابتدا به مجموعه‌ای از انتزاعات مشترک نیاز داریم تا زبانی فراگیر ایجاد کنیم که بتوانیم از آن برای توصیف ساختار ایستا یک سیستم نرم‌افزاری استفاده کنیم. مدل C4 ساختارهای ایستا یک سیستم نرم افزاری را از نظر کانتینرها، اجزا و کد در نظر می­گیرد. و شخصی از سیستم­های نرم افزاری که ما می­سازیم، استفاده ­کنند.شخص (Person)یک شخص نماینده یکی از کاربران انسانی سیستم نرم افزاری شما (به عنوان مثال بازیگران، نقش­ها، شخصیت ها و غیره) است.سیستم نرم افزاری (Software System)یک سیستم نرم‌افزاری بالاترین سطح انتزاع است و کلیات را توصیف می‌کند. این شامل سیستم نرم افزاری است که شما مدل سازی می­کنید و سایر سیستم­های نرم افزاری که سیستم نرم افزاری شما به آنها وابسته است (یا برعکس). در بسیاری از موارد، یک سیستم نرم افزاری متعلق به یک تیم توسعه نرم افزار است.کانتینر (applications and data stores)در مدلC4، یک کانتینر یک برنامه کاربردی یا یک فروشگاه داده را نشان می­دهد. کانتینر چیزی است که باید در حال اجرا باشد تا سیستم نرم افزاری کلی کار کند. یک کانتینر در اصل یک زمینه یا مرزی است که در داخل آن برخی از کدها اجرا شده یا برخی از داده­ها ذخیره ­شود. و هر کانتینر یک چیز یا محیط زمان اجرا به طور جداگانه قابل استقرار ویا اجرا است، که معمولاً (اما نه همیشه) در فضای فرآیند خود اجرا می­شود. به همین دلیل، ارتباط بین کانتینرها معمولاً به شکل ارتباط بین فرآیندی است.مولفه (Component)کلمه &quot; Component&quot; یک اصطلاح بسیار پربار در صنعت توسعه نرم افزار است، اما در این زمینه یک جزء از مجموعه عملکردهای مرتبط است. اگر از زبانی مانند جاوا یا سی شارپ استفاده می­کنید، ساده ترین راه برای فکر کردن به یک کامپوننت این است که مجموعه­ای از کلاس­های پیاده سازی است. جنبه‌هایی مانند نحوه بسته‌بندی آن مؤلفه‌ها یک نگرانی جداگانه و متعامد است. نکته مهمی که در اینجا باید به آن توجه کرد این است که همه Component داخل یک کانتینر معمولاً در یک فضای پردازش یکسان اجرا می­شوند.چگونه یک مدل C4 بسازیممن از ابراز visual-paradigm برای ایجاد یک مدل C4 استفاده کرده­ام. که در این لینک میتوانید به این ابزار دسترسی داشته باشید. توجه داشته باشید که در نسخه رایگان این نرم ­افزار، هنگام export کردن نمودار اسم سایت در نمودار شما نمایش داده میشود.سناریو که پیش خواهیم برد یک سناریو ساده است که شامل موجودیت های دانشجو، سیستم گلستان، سیستم ایمیل دانشگاه و دانشگاه است. هدف از این سناریو درک بهتر مدل C4 است. مرحله 1: نمودار را برای سطح Context ترسیم می­کنیم.در visual-paradigm، یک نمودار جدید باز می‌کنید و از اشکال اصلی برای ساختن نمودار زمینه context استفاده می‌کنید. اشکالی را که نشان دهنده سیستم نرم افزاری شما هستند، از جمله کاربر ویا هر سیستم نرم افزاری متصل به سیستمی که در حال ترسیم آن هستید، بکشید و رها کنید. در حین کشیدن و رها کردن اشکال، برای افزودن متنی که اجزای نمودار شما را برچسب یا توصیف می کند، تایپ کنید. هر شکل در مدل های C4 معمولاً شامل موارد زیر است: نام یک عنصر در نمودار شماشرح مختصری از نقش یک سیستم، پایگاه داده، جزء یا کانتینرفلش­هایی با توضیحاتی که نحوه تعامل عناصر با یکدیگر را توضیح می­دهدهنگام کار بر روی نمودار زمینه خود، قوانین سبکی را تنظیم کنید که نحوه ترسیم نمودارهای یک مدل C4 را دیکته می­کند. برای مثال، می‌توانید سیستمی را که توضیح می‌دهید به رنگ آبی تیره‌تر استفاده کنید و کاربران شما نیز ممکن است رنگ متفاوتی داشته باشند. این قوانین یکپارچگی بصری ایجاد می­کند که به بینندگان اجازه می­دهد به سرعت هر نمودار را در ارتباط با یکدیگر بخوانند و درک کنند.در این سطح می­توانید از اشکال زیر استفاده کنید:مرحله 2: نمودار را برای سطح Container ترسیم می­کنیم.هنگامی که متوجه شدید که سیستم شما چگونه با محیط در ارتباط است، یک گام بعدی این است که با نمودار Container مرز سیستم را بزرگنمایی کنیم. الان نسبت به سطح context با جزییات سیستم خود را شرح خواهیم داد.این نمودار شکل سطح بالای معماری نرم افزار و نحوه توزیع مسئولیت­ها در سیستم مورد نیاز را نشان می­دهد. همچنین گزینه­های اصلی فناوری و نحوه ارتباط کانتینرها با یکدیگر را نشان می­دهد.در این سطح می­توانید از اشکال زیر استفاده کنید:مرحله 3: نمودار را برای سطح Component ترسیم می­کنیم.در مرحله بعد می‌توانیم هر Container  را بزرگ‌نمایی کرده و بیشتر تجزیه کنید تا بلوک‌های ساختمانی اصلی و تعاملات آن‌ها را شناسایی کنیم.نمودار کامپوننت نشان می­دهد که چگونه یک کانتینر از تعدادی &quot;مولفه&quot; تشکیل شده است، هر یک از آن اجزا چیست، مسئولیت­های آنها و جزئیات فناوری و اجرای آنها چیست.در این سطح می­توانید از اشکال زیر استفاده کنید:مرحله 4: نمودار را برای سطح Code ترسیم می­کنیم.در نهایت، می‌توانید روی هر مؤلفه بزرگ‌نمایی کنید تا نحوه پیاده‌سازی آن به‌عنوان کد را نشان دهید. با استفاده از نمودارهای کلاس UML، نمودارهای رابطه موجودیت یا موارد مشابه.در این یک سطح، سطح جزئیات اختیاری و بر اساس درخواست است و اغلب از ابزارهایی برای رسم این سطح میتوان استفاده کرد. در حالت ایده‌آل، این نمودار به طور خودکار با استفاده از ابزار (به عنوان مثال یک ابزار مدل‌سازی IDE یا UML) تولید می‌شود، و شما باید فقط آن ویژگی‌ها و روش‌هایی را نشان دهید که به شما امکان می‌دهند داستانی را که می‌خواهید بگویید، نشان دهد.مرحله 5: جمع آوری خروجی هر مرحلهالان در هر مرحله یک خروجی داریم، و چون به ترتیب انتزاع در سیستم بحث را بردیم جلو می توانیم بگوییم یک نمودار سلسله مراتبی داریم.سطح Context سیستم گلستانسطح Container  برای سیستم گلستانسطح Component برای Single-Page Applicationسطح Code برای Sing In Controllerجمعبندیمدل C4 یک راه ساده برای برقراری ارتباط با معماری نرم افزار در سطوح مختلف انتزاعی است، به طوری که میتوانید داستان های مختلف را برای مخاطبان مختلف تعریف کنید.  ما با مدل C4 با هر ZoomIn کردن با جزییات بیشتری مواجه خواهیم شد.با استفاده از این مدل c4، با یک آشفتگی از جعبه‌ها و خطوط مواجه نخواهید شد و معماری نرم افزار خود را با بهترین شکل شرح خواهیم داد.این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.مراجع:c4model.comWikipediaC4-Model</description>
                <category>سپهر اویسی</category>
                <author>سپهر اویسی</author>
                <pubDate>Sat, 20 Nov 2021 17:21:11 +0330</pubDate>
            </item>
            </channel>
</rss>