<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی رضانسب</title>
        <link>https://virgool.io/feed/@Arnasab</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 14:51:33</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>علی رضانسب</title>
            <link>https://virgool.io/@Arnasab</link>
        </image>

                    <item>
                <title>AI Transformation Playbook - ترجمه راهنمای تحول هوش مصنوعی</title>
                <link>https://virgool.io/@Arnasab/httpsvirgoolioarnasabai-transformation-playbook-jzsljwpknsiy</link>
                <description>این مطلب ترجمه کتابچه AI Transformation Playbook نوشته شده توسط Andrew Ng است.این کتابچه یکی از بهترین مراجع برای تحول در هوش مصنوعی در شرکت ها و سازمان ها است.چگونه شرکت خود را وارد عصر هوش مصنوعی کنیم؟فناوری هوش مصنوعی (AI) اکنون آماده است تا هر صنعتی را متحول کند، درست مانند کاری که برق ۱۰۰ سال پیش انجام داد. از حالا تا سال ۲۰۳۰، پیش‌بینی می‌شود که هوش مصنوعی حدود ۱۳ تریلیون دلار رشد تولید ناخالص داخلی (GDP) ایجاد کند.اگرچه تاکنون این فناوری ارزش فوق‌العاده‌ای را برای شرکت‌های پیشرو در حوزه فناوری مانند گوگل، بایدو، مایکروسافت و فیسبوک به وجود آورده است، اما موج‌های بعدی خلق ارزش فراتر از صنعت نرم‌افزار خواهند بود.این کتابچه راهنمای تحول هوش مصنوعی حاصل بینش‌هایی است که از رهبری تیم Google Brain و گروه هوش مصنوعی بایدو به دست آمده‌اند؛ تیم‌هایی که نقش کلیدی در تبدیل گوگل و بایدو به شرکت‌هایی پیشتاز در زمینه هوش مصنوعی ایفا کردند.هر سازمانی می‌تواند با پیروی از این راهنما به یک شرکت قدرتمند در زمینه AI تبدیل شود،هرچند این توصیه‌ها عمدتاً برای شرکت‌های بزرگ با ارزش بازار یا ارزیابی بین ۵۰۰ میلیون دلار تا ۵۰۰ میلیارد دلار طراحی شده‌اند.گام های این کتابچه۱- اجرای پروژه‌های آزمایشی برای ایجاد شتاب اولیه۲- ساخت تیم هوش مصنوعی داخلی۳- ارائه آموزش گسترده در زمینه AI۴- تدوین استراتژی هوش مصنوعی۵- توسعه ارتباطات داخلی و خارجی۱. اجرای پروژه‌های آزمایشی برای ایجاد شتاب اولیهبرای پروژه‌های اولیه‌ی هوش مصنوعی، موفق بودن آن‌ها اهمیت بیشتری دارد تا اینکه حتماً بیشترین ارزش تجاری را داشته باشند. این پروژه‌ها باید به‌اندازه‌ای معنادار باشند که موفقیت اولیه آن‌ها بتواند شرکت شما را با هوش مصنوعی آشنا کند و سایر افراد در سازمان را برای سرمایه‌گذاری در پروژه‌های بیشتر متقاعد سازد؛ اما نباید آن‌قدر کوچک باشند که دیگران آن را بی‌اهمیت تلقی کنند.نکته مهم این است که چرخ حرکتی (Flywheel) پروژه‌های AI به حرکت درآید، تا تیم هوش مصنوعی شما بتواند شتاب و اعتماد به نفس کسب کند.ویژگی‌های پیشنهادی برای چند پروژه نخست هوش مصنوعی:ترجیحاً باید امکان‌پذیر باشد که یک تیم هوش مصنوعی تازه‌کار یا خارجی (که ممکن است آشنایی عمیقی با حوزه کاری شما نداشته باشد) با تیم‌های داخلی شما (که دارای دانش تخصصی عمیق هستند) همکاری کند، و راه‌حل‌هایی بسازند که ظرف ۶ تا ۱۲ ماه اثرگذاری آن‌ها شروع شود.پروژه باید از نظر فنی امکان‌پذیر باشد.هنوز شرکت‌های زیادی هستند که پروژه‌هایی را آغاز می‌کنند که با فناوری‌های فعلی AI غیرممکن است. داشتن مهندسان مورد اعتماد هوش مصنوعی برای بررسی صحت و امکان‌پذیری پروژه پیش از شروع، به اطمینان از عملی بودن آن کمک می‌کند.پروژه باید هدف مشخص و قابل اندازه‌گیری داشته باشد که ارزش تجاری ملموس ایجاد کند.زمانی که من هدایت تیم Google Brain را برعهده داشتم، تردیدهای زیادی در خود گوگل (و در سطح جهانی) نسبت به فناوری یادگیری عمیق وجود داشت. برای اینکه تیم بتواند شتاب بگیرد، من تیم Google Speech را به‌عنوان اولین مشتری داخلی انتخاب کردم و ما به‌طور نزدیک با آن‌ها همکاری کردیم تا دقت سیستم تشخیص گفتار گوگل را به شکل قابل توجهی افزایش دهیم.تشخیص گفتار پروژه‌ای معنادار در گوگل بود، اما مهم‌ترین پروژه شرکت محسوب نمی‌شد—مثلاً از نظر تأثیر مالی، اهمیت کمتری نسبت به کاربرد هوش مصنوعی در جست‌وجوی وب یا تبلیغات داشت. اما با موفقیت در پروژه تشخیص گفتار، تیم‌های دیگر به ما اعتماد پیدا کردند و این موضوع باعث شد تیم Google Brain شتاب لازم را به دست آورد.زمانی که تیم‌های دیگر شاهد موفقیت همکاری تیم Google Speech با تیم Google Brain شدند، ما توانستیم مشتریان داخلی بیشتری جذب کنیم.دومین مشتری بزرگ داخلی تیم ما، Google Maps بود، که از یادگیری عمیق برای بهبود کیفیت داده‌های نقشه‌ها استفاده کرد. با داشتن دو پروژه موفق، من گفتگوهایی را با تیم تبلیغات آغاز کردم.این شتاب تدریجی منجر به اجرای پروژه‌های هوش مصنوعی موفق بیشتری شد.این روند، مدلی قابل تکرار است که شما نیز می‌توانید در شرکت خود از آن استفاده کنید.۲. ساخت تیم هوش مصنوعی داخلیدر حالی‌ که همکاری با شرکای بیرونی دارای تخصص فنی عمیق در AI می‌تواند به شما کمک کند تا شتاب اولیه را سریع‌تر به دست آورید، در بلندمدت اجرای برخی پروژه‌ها با یک تیم داخلی هوش مصنوعی کارآمدتر خواهد بود. علاوه بر این، خواهید خواست برخی پروژه‌ها را درون شرکت نگه دارید تا مزیت رقابتی منحصربه‌فردتری ایجاد کنید.دریافت حمایت از مدیران ارشد برای ساخت این تیم داخلی اهمیت دارد. در دوران رشد اینترنت، استخدام یک مدیر ارشد فناوری اطلاعات (CIO) نقطه عطفی برای بسیاری از شرکت‌ها بود تا استراتژی منسجمی برای استفاده از اینترنت داشته باشند. در مقابل، شرکت‌هایی که پروژه‌های پراکنده‌ای نظیر بازاریابی دیجیتال، آزمایش‌های علم داده و راه‌اندازی وب‌سایت‌های جدید انجام می‌دادند، نتوانستند از قابلیت‌های اینترنت بهره‌برداری کنند، زیرا این پروژه‌های آزمایشی کوچک به اندازه‌ای مقیاس‌پذیر نبودند که بتوانند بقیه شرکت را متحول کنند.در عصر هوش مصنوعی نیز، یک لحظه کلیدی برای بسیاری از شرکت‌ها، شکل‌گیری یک تیم متمرکز هوش مصنوعی خواهد بود که بتواند به کل شرکت کمک کند. این تیم هوش مصنوعی می‌تواند زیرمجموعه‌ای از CTO، CIO یا CDO (مدیر ارشد داده یا مدیر ارشد دیجیتال) باشد، در صورتی که مهارت‌های لازم را داشته باشند. همچنین می‌تواند تحت رهبری یک CAIO (مدیر ارشد هوش مصنوعی) قرار گیرد.مسئولیت‌های کلیدی واحد AI عبارت‌اند از:ایجاد توانمندی هوش مصنوعی برای پشتیبانی از کل شرکتاجرای مجموعه‌ای اولیه از پروژه‌های میان‌وظیفه‌ای برای پشتیبانی از بخش‌ها یا واحدهای تجاری مختلف با پروژه‌های AI؛ پس از تکمیل پروژه‌های اولیه، ایجاد فرآیندهای تکرارپذیر برای ارائه مستمر مجموعه‌ای از پروژه‌های ارزشمند هوش مصنوعیتوسعه استانداردهای یکپارچه برای جذب و حفظ نیروتوسعه پلتفرم‌های سراسری در شرکت که برای چندین بخش/واحد تجاری مفید باشند و به‌احتمال زیاد توسط یک واحد منفرد توسعه نخواهند یافت؛ برای مثال، همکاری با CTO/CIO/CDO برای توسعه استانداردهای یکپارچه انبار دادهبسیاری از شرکت‌ها به‌گونه‌ای سازمان‌دهی شده‌اند که چندین واحد تجاری به مدیرعامل گزارش می‌دهند. با ایجاد یک واحد AI جدید، شما قادر خواهید بود استعدادهای هوش مصنوعی را در قالب ماتریسی به بخش‌های مختلف اختصاص دهید تا پروژه‌های میان‌وظیفه‌ای را پیش ببرند.شرح وظایف جدید و ساختارهای تیمی جدیدی شکل خواهد گرفت. نحوه‌ای که من اکنون کار تیم‌های خود را در نقش‌هایی مانند مهندس یادگیری ماشین، مهندس داده، دانشمند داده و مدیر محصول هوش مصنوعی سازمان‌دهی می‌کنم، با دوران پیش از AI متفاوت است. یک رهبر خوب در حوزه AI می‌تواند در تنظیم فرآیندهای صحیح به شما مشاوره دهد.در حال حاضر، رقابتی شدید برای جذب استعدادهای AI وجود دارد، و متأسفانه بیشتر شرکت‌ها برای استخدام دانشجوی دکترای AI از دانشگاه استنفورد (یا حتی دانشجوی کارشناسی) با مشکل مواجه خواهند شد. از آنجا که این رقابت در کوتاه‌مدت عمدتاً بازی با جمع صفر است، همکاری با یک شریک جذب نیروی انسانی که بتواند در ساخت تیم AI به شما کمک کند، ضروری خواهد بود.۳. ارائه آموزش گسترده در زمینه هوش مصنوعیهیچ شرکتی در حال حاضر به‌اندازه کافی نیروی متخصص AI در داخل سازمان خود ندارد. اگرچه رسانه‌ها حقوق‌های بالا در حوزه هوش مصنوعی را بیش از حد بزرگ‌نمایی کرده‌اند (اعدادی که در مطبوعات گزارش می‌شوند معمولاً استثنا هستند)، اما پیدا کردن استعداد در حوزه AI واقعاً دشوار است.خوشبختانه با رشد محتوای دیجیتال، از جمله دوره‌های آنلاین گسترده (MOOCs) مانند کورسرا، کتاب‌های الکترونیکی و ویدیوهای یوتیوب، آموزش تعداد زیادی از کارکنان در مهارت‌هایی مانند هوش مصنوعی، بیش از هر زمان دیگری مقرون‌به‌صرفه شده است.مدیر ارشد یادگیری (CLO) هوشمند می‌داند که وظیفه‌اش گردآوری محتوا است، نه تولید آن، و همچنین باید فرآیندهایی برای اطمینان از تکمیل دوره‌های آموزشی توسط کارکنان ایجاد کند.ده سال پیش، آموزش کارکنان به معنی استخدام مشاورانی بود که به محل شرکت می‌آمدند تا سخنرانی کنند. اما این روش ناکارآمد بود و بازگشت سرمایه (ROI) مشخصی نداشت. در مقابل، محتوای دیجیتال بسیار مقرون‌به‌صرفه‌تر است و تجربه‌ای شخصی‌تر برای کارمندان فراهم می‌کند. اگر بودجه‌ای برای استخدام مشاوران دارید، محتوای حضوری باید تکمیل‌کننده محتوای آنلاین باشد. (این روش به «کلاس معکوس» معروف است. من دریافته‌ام که اگر این روش به‌درستی اجرا شود، یادگیری سریع‌تر و لذت‌بخش‌تر خواهد بود. برای مثال، کلاس یادگیری عمیق من در دانشگاه استنفورد به همین روش تدریس می‌شود.)استخدام چند متخصص AI برای ارائه محتوای حضوری نیز می‌تواند انگیزه کارکنان را برای یادگیری تکنیک‌های AI افزایش دهد.هوش مصنوعی شغل‌های بسیاری را دگرگون خواهد کرد. شما باید به همه کارکنان دانشی بدهید تا بتوانند با نقش‌های جدید خود در عصر AI سازگار شوند. مشورت با یک متخصص به شما امکان می‌دهد تا یک برنامه آموزشی سفارشی برای تیم خود طراحی کنید. با این حال، یک برنامه آموزشی پیشنهادی می‌تواند به شکل زیر باشد:۱. مدیران ارشد و رهبران کسب‌وکار: (⩾۴ ساعت آموزش)هدف:توانمندسازی مدیران برای درک آنچه هوش مصنوعی می‌تواند برای سازمان انجام دهد، آغاز تدوین استراتژی AI، تصمیم‌گیری در خصوص تخصیص منابع، و همکاری مؤثر با تیم‌های هوش مصنوعی برای اجرای پروژه‌های ارزشمند.سرفصل‌ها:درک کلی کسب‌وکار از AI، شامل فناوری پایه، داده، و آنچه AI می‌تواند و نمی‌تواند انجام دهدآشنایی با تأثیر هوش مصنوعی بر استراتژی شرکتمطالعه موردی از کاربردهای AI در صنایع مشابه یا صنعت خاص شرکت۲. رهبران واحدهایی که پروژه‌های AI اجرا می‌کنند: (⩾۱۲ ساعت آموزش)هدف:رهبران واحدها باید بتوانند جهت‌گیری پروژه‌های AI را مشخص کنند، منابع اختصاص دهند، پیشرفت را پیگیری و در صورت لزوم اصلاحاتی اعمال کنند تا موفقیت پروژه تضمین شود.سرفصل‌ها:درک کلی کسب‌وکار از AI، شامل فناوری پایه، داده، و قابلیت‌ها و محدودیت‌های AIدرک فنی ابتدایی از AI، شامل دسته‌بندی اصلی الگوریتم‌ها و نیازمندی‌های آن‌هادرک ابتدایی از فرآیند و چرخه کاری پروژه‌های AI، نقش‌ها و مسئولیت‌های تیم AI، و نحوه مدیریت این تیم‌ها۳. کارآموزان مهندسی هوش مصنوعی: (⩾۱۰۰ ساعت آموزش)هدف:مهندسان تازه‌کار AI باید بتوانند داده جمع‌آوری کنند، مدل‌های AI را آموزش دهند، و پروژه‌های خاص AI را تحویل دهند.سرفصل‌ها:درک فنی عمیق از یادگیری ماشین و یادگیری عمیق؛ درک پایه از سایر ابزارهای AIآشنایی با ابزارهای موجود (متن‌باز و سایر ابزارهای جانبی) برای ساخت سیستم‌های هوش مصنوعی و دادهتوانایی اجرای فرآیندها و چرخه کاری تیم‌های AIهمچنین: آموزش مداوم برای به‌روز ماندن با پیشرفت‌های فناوری AI۴. تدوین استراتژی هوش مصنوعیاستراتژی هوش مصنوعی، شرکت شما را در مسیر ایجاد ارزش هدایت خواهد کرد و همزمان موجب ایجاد خندق‌های دفاعی رقابتی می‌شود. زمانی که تیم‌ها شروع به دیدن موفقیت پروژه‌های اولیه AI می‌کنند و درک عمیق‌تری از AI پیدا می‌کنند، شما قادر خواهید بود نقاطی را شناسایی کنید که در آن‌ها AI می‌تواند بیشترین ارزش را ایجاد کند و منابع را بر آن حوزه‌ها متمرکز نمایید.برخی از مدیران فکر می‌کنند که تدوین استراتژی AI باید اولین قدم باشد. اما بر اساس تجربه من، بیشتر شرکت‌ها قادر نخواهند بود استراتژی معناداری برای AI تدوین کنند مگر آنکه پیش از آن مقداری تجربه پایه در این زمینه کسب کرده باشند، چیزی که پیشرفت نسبی در مراحل ۱ تا ۳ برایتان فراهم می‌کند.روش ساختن خندق‌های دفاعی رقابتی (defensible moats) نیز با AI در حال تحول است. در اینجا چند رویکرد پیشنهاد می‌شود:ایجاد چند دارایی دشوار در حوزه AI که با یک استراتژی منسجم هم‌راستا باشند:AI به شرکت‌ها امکان می‌دهد مزیت‌های رقابتی منحصربه‌فرد را به شیوه‌های جدیدی بسازند.آثار مهم مایکل پورتر در حوزه استراتژی کسب‌وکار نشان می‌دهد که یکی از راه‌های ساختن کسب‌وکاری دفاع‌پذیر، ایجاد چند دارایی دشوار است که با یک استراتژی منسجم همسو باشند. در این صورت برای رقبا بسیار دشوار خواهد بود که به‌طور همزمان همه این دارایی‌ها را تقلید کنند.استفاده از AI برای ایجاد مزیت خاص در بخش صنعتی خودتان:به‌جای رقابت &quot;کلی&quot; در زمینه AI با شرکت‌های بزرگی مانند گوگل، توصیه من این است که به یک شرکت پیشرو در استفاده از AI در صنعت خاص خودتان تبدیل شوید؛ جایی که توسعه قابلیت‌های منحصر‌به‌فرد در AI برایتان مزیت رقابتی به همراه می‌آورد.اینکه AI چگونه بر استراتژی شرکت شما اثر می‌گذارد، به صنعت و شرایط خاص شما بستگی دارد.چرخه طلایی AI : محصول بهتر -&gt; کاربر بیشتر -&gt; داده بیشتر -&gt; محصول بهتر -&gt; ...طراحی استراتژی‌هایی منطبق با &quot;چرخه طلایی AI&quot; (بازخورد مثبت):در بسیاری از صنایع، شاهد خواهیم بود که تجمع داده‌ها به ساختن کسب‌وکارهایی دفاع‌پذیر منجر می‌شود.برای مثال، موتورهای جستجوی پیشرو مانند گوگل، بایدو، بینگ و یاندکس مجموعه داده‌های عظیمی در اختیار دارند که نشان می‌دهد کاربران پس از جست‌وجو روی کدام لینک‌ها کلیک می‌کنند. این داده‌ها به این شرکت‌ها کمک می‌کند موتور جستجوی دقیق‌تری بسازند (A)، که باعث جذب کاربران بیشتر می‌شود (B)، و همین باعث تولید داده‌های بیشتر می‌شود (C).این چرخه بازخورد مثبت، شکستن آن را برای رقبا بسیار دشوار می‌کند.داده، دارایی کلیدی سیستم‌های هوش مصنوعی است.بنابراین بسیاری از شرکت‌های موفق در AI دارای استراتژی داده بسیار پیشرفته‌ای هستند. عناصر کلیدی استراتژی داده شما ممکن است شامل موارد زیر باشد:کسب داده به‌صورت استراتژیک:سیستم‌های AI می‌توانند با ۱۰۰ داده (&quot;داده کم&quot;) تا ۱۰۰ میلیون داده (&quot;داده بزرگ&quot;) ساخته شوند. اما داشتن داده بیشتر تقریباً هرگز ضرر ندارد.تیم‌های AI از استراتژی‌های پیچیده و چندساله برای جمع‌آوری داده استفاده می‌کنند. این استراتژی‌ها باید با صنعت و شرایط شما تطابق داشته باشند.برای مثال، گوگل و بایدو محصولات رایگان متعددی دارند که مستقیماً درآمدزا نیستند، اما داده‌هایی تولید می‌کنند که می‌توان آن‌ها را در جای دیگری به درآمد تبدیل کرد.انبارهای داده یکپارچه:اگر ۵۰ پایگاه داده جداگانه زیر نظر ۵۰ معاون یا بخش مختلف داشته باشید، برای یک مهندس یا نرم‌افزار AI تقریباً غیرممکن خواهد بود که به این داده‌ها دسترسی داشته باشد و بین آن‌ها ارتباط برقرار کند.در عوض، داده‌های خود را در یک یا در نهایت چند انبار داده متمرکز تجمیع کنید.تشخیص اینکه چه داده‌ای ارزشمند است و چه داده‌ای نیست:داشتن چندین ترابایت داده لزوماً به این معنا نیست که تیم AI می‌تواند از آن‌ها ارزش استخراج کند.انتظار اینکه تیم AI به‌طور جادویی از یک مجموعه داده بزرگ، ارزش خلق کند، احتمال شکست بالایی دارد.من متأسفانه شاهد بوده‌ام که مدیرعامل‌ها بیش از حد روی جمع‌آوری داده‌های بی‌ارزش سرمایه‌گذاری کرده‌اند یا حتی شرکتی را صرفاً به خاطر داده‌هایش خریده‌اند، و بعداً متوجه شده‌اند که آن داده‌ها عملاً بی‌فایده هستند.برای پرهیز از این اشتباه، تیم AI را از مراحل ابتدایی در فرآیند جمع‌آوری داده درگیر کنید و اجازه دهید به شما در اولویت‌بندی نوع داده‌هایی که باید جمع‌آوری و ذخیره شوند کمک کند.ایجاد اثر شبکه‌ای و مزیت‌های پلتفرمی:در نهایت، AI می‌تواند برای ساختن خندق‌های رقابتی سنتی نیز به‌کار گرفته شود.برای مثال، پلتفرم‌هایی با اثر شبکه‌ای، کسب‌وکارهایی بسیار دفاع‌پذیر هستند. آن‌ها معمولاً دارای دینامیک &quot;برنده همه چیز را می‌برد&quot; هستند که شرکت‌ها را مجبور به رشد سریع یا نابودی می‌کند.اگر AI به شما امکان دهد که سریع‌تر از رقبایتان کاربران را جذب کنید، این می‌تواند به ساختن خندقی دفاعی از طریق دینامیک‌های پلتفرمی تبدیل شود.به‌طور گسترده‌تر، شما همچنین می‌توانید از AI به‌عنوان یک جزء کلیدی در استراتژی‌های کم‌هزینه، با ارزش بالا یا دیگر استراتژی‌های کسب‌وکار استفاده کنید.۵. توسعه ارتباطات داخلی و خارجیهوش مصنوعی تأثیر قابل توجهی بر کسب‌وکار شما خواهد داشت. به میزانی که این فناوری بر ذی‌نفعان کلیدی شما تأثیر می‌گذارد، شما باید یک برنامه ارتباطی اجرا کنید تا از هم‌راستایی (alignment) اطمینان حاصل شود. در ادامه، مواردی آورده شده که باید برای هر گروه مخاطب در نظر بگیرید:روابط با سرمایه‌گذاران:شرکت‌های پیشرو در AI مانند گوگل و بایدو اکنون تا حد زیادی به خاطر قابلیت‌های هوش مصنوعی خود و تأثیر آن بر سودآوری‌شان، شرکت‌های ارزشمندتری شده‌اند. توضیح یک تئوری روشن درباره ایجاد ارزش از طریق AI در شرکت شما، شرح رشد قابلیت‌های AI، و داشتن یک استراتژی هوشمندانه در این زمینه، به سرمایه‌گذاران کمک می‌کند تا ارزش شرکت شما را به‌درستی درک و ارزیابی کنند.روابط با دولت:شرکت‌ها در صنایع با مقررات شدید (مانند خودروهای خودران، مراقبت‌های بهداشتی) با چالش‌های منحصربه‌فردی برای پایبندی به قوانین مواجه‌اند. توسعه یک روایت معتبر و قانع‌کننده درباره هوش مصنوعی که ارزش و مزایایی را که پروژه شما می‌تواند برای صنعت یا جامعه به همراه داشته باشد، توضیح دهد، گامی مهم در ایجاد اعتماد و حسن نیت است. این کار باید با ارتباط مستقیم و گفت‌وگوی مداوم با قانون‌گذاران همراه باشد، هم‌زمان با اجرای پروژه شما.آموزش مشتری/کاربر:هوش مصنوعی احتمالاً مزایای قابل توجهی برای مشتریان شما به همراه خواهد داشت، بنابراین اطمینان حاصل کنید که پیام‌های مناسب در بازاریابی و نقشه راه محصول به‌درستی انتقال داده می‌شود.جذب استعداد/استخدام:به دلیل کمبود نیروی متخصص در AI، داشتن برند کارفرمایی قوی تأثیر چشمگیری در توانایی شما برای جذب و نگه‌داشت این نوع استعدادها خواهد داشت. مهندسان هوش مصنوعی می‌خواهند روی پروژه‌هایی هیجان‌انگیز و معنادار کار کنند. یک تلاش نسبتاً کوچک برای به نمایش گذاشتن موفقیت‌های اولیه شما می‌تواند بسیار مؤثر واقع شود.ارتباطات داخلی:از آنجا که هوش مصنوعی هنوز به‌درستی درک نشده است و به‌ویژه هوش مصنوعی عمومی (AGI) بیش‌ازحد تبلیغ شده، ترس، تردید و عدم اطمینان وجود دارد. بسیاری از کارکنان همچنین نگران از دست دادن شغل خود به‌دلیل خودکارسازی توسط AI هستند، اگرچه این نگرانی به‌طور گسترده‌ای وابسته به فرهنگ است (برای مثال، این ترس در ایالات متحده بسیار بیشتر از ژاپن دیده می‌شود).ارتباطات داخلی شفاف، هم برای توضیح مفاهیم هوش مصنوعی و هم برای پاسخ به نگرانی‌های کارکنان، باعث کاهش مقاومت درونی در برابر پذیرش هوش مصنوعی خواهد شد.یادداشتی تاریخی، مهم برای موفقیت شمادرک اینکه چگونه اینترنت صنایع را متحول کرد، برای پیمودن مسیر رشد هوش مصنوعی بسیار مفید است. اشتباهی وجود دارد که بسیاری از کسب‌وکارها در زمان ظهور اینترنت مرتکب شدند و امیدوارم شما آن را در دوران ظهور هوش مصنوعی تکرار نکنید.ما در عصر اینترنت آموختیم که:مرکز خرید + وب‌سایت ≠ شرکت اینترنتیحتی اگر یک مرکز خرید، یک وب‌سایت راه‌اندازی کرده و محصولات خود را از طریق آن به فروش برساند، این به‌تنهایی آن را به یک شرکت اینترنتی واقعی تبدیل نمی‌کند.آنچه یک شرکت اینترنتی واقعی را تعریف می‌کند این است:آیا شرکت خود را به‌گونه‌ای سازمان‌دهی کرده‌اید که کارهایی را که اینترنت به خوبی انجام می‌دهد، به‌درستی انجام دهد؟برای مثال، شرکت‌های اینترنتی به‌شکل گسترده‌ای از آزمایش‌های A/B استفاده می‌کنند؛ آن‌ها به‌طور روتین دو نسخه از یک وب‌سایت را هم‌زمان اجرا می‌کنند تا ببینند کدام بهتر عمل می‌کند. حتی ممکن است صدها آزمایش به‌طور هم‌زمان اجرا شود، کاری که برای یک مرکز خرید فیزیکی بسیار دشوار است.شرکت‌های اینترنتی می‌توانند هر هفته محصول جدیدی عرضه کنند و در نتیجه سریع‌تر یاد بگیرند، در حالی که یک مرکز خرید شاید فقط هر فصل طراحی خود را تغییر دهد.شرکت‌های اینترنتی همچنین شرح وظایف خاصی برای نقش‌هایی مانند مدیر محصول و مهندس نرم‌افزار دارند و این نقش‌ها فرآیندها و جریان‌کاری خاص خود را دارند.یادگیری عمیق (Deep Learning)، یکی از سریع‌ترین حوزه‌های رشد در AI، شباهت‌هایی با رشد اینترنت دارد.امروزه می‌بینیم که:هر شرکت معمولی + فناوری یادگیری عمیق ≠ شرکت AIبرای اینکه شرکت شما در AI به موفقیت برسد، باید ساختار سازمان خود را به‌گونه‌ای تنظیم کنید که بتواند از قابلیت‌های منحصربه‌فرد هوش مصنوعی به‌خوبی استفاده کند.برای اینکه شرکت شما واقعاً یک شرکت AI باشد، باید:منابعی برای اجرای سیستماتیک چندین پروژه ارزشمند AI داشته باشد:شرکت‌های AI دارای فناوری و نیروی متخصص (چه درون‌سازمانی و چه برون‌سپاری‌شده) هستند که می‌توانند چندین پروژه AI را به‌صورت نظام‌مند اجرا کنند و ارزش مستقیم برای کسب‌وکار ایجاد نمایند.درک کافی از AI در سازمان وجود داشته باشد:باید یک آگاهی عمومی از AI وجود داشته باشد، به‌همراه فرآیندهایی برای شناسایی و انتخاب پروژه‌های ارزشمند AI به‌صورت نظام‌مند.جهت‌گیری استراتژیک شرکت هم‌راستا با موفقیت در آینده‌ای مبتنی بر AI باشد.تبدیل یک شرکت موفق به یک شرکت موفق در زمینه هوش مصنوعی چالش‌برانگیز است، اما با پشتیبانی شرکای مناسب، کاملاً امکان‌پذیر است. تیم من در Landing AI متعهد به کمک به شرکا در مسیر تحول هوش مصنوعی‌شان است، و من نیز به اشتراک‌گذاری بهترین تجربیات ادامه خواهم داد.برنامه تحول AI ممکن است ۲ تا ۳ سال طول بکشد، اما باید انتظار داشته باشید که نتایج ملموس اولیه را در عرض ۶ تا ۱۲ ماه مشاهده کنید.با سرمایه‌گذاری در مسیر تحول AI، از رقبا جلوتر خواهید بود و از قابلیت‌های هوش مصنوعی برای پیشرفت قابل‌توجه شرکت خود بهره‌برداری خواهید کرد.Andrew Ng ، رئیس هیئت مدیره و مدیرعامل Landing AIخوشحال میشم نقد و نظرتون درباره این مطلب بنویسید.</description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Fri, 25 Jul 2025 12:40:05 +0330</pubDate>
            </item>
                    <item>
                <title>تحلیل و بررسی یک رویداد اجتماعی در توییتر</title>
                <link>https://virgool.io/@Arnasab/%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D9%88-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%DB%8C%DA%A9-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%AA%D9%88%DB%8C%DB%8C%D8%AA%D8%B1-lt44idrvswcw</link>
                <description>چکیدهنقش شبکه های اجتماعی امروز در زندگی ما کاملا مشهود است.روز به روز به تعداد کاربران شبکه های اجتماعی افزوده می‌شود  در این مطلب ابتدا به اهمیت تحلیل شبکه های اجتاعی می‌پردازیم و سپس ابزارهای تحلیل توییتر را مورد بررسی قرار می‌دهیم و نقاط قوت هر یک از ابزار ها را بیان می‌کنیم  . در انتها به تحلیل یک رویدداد اجتماعی که در طول زمان این پروژه در توییتر مورد بحث قرار گرفته است، می پردازیم. به روش های استخراج اطلاعات از توییتر را برای بررسی رویداد می‌پردازیم و با نوشتن برنامه پایتون و استفاده از گراف سعی میکنیم انجمن ها و دسته های مختلف افرادی که در این رخداد واکنش داشتند را شناساسی کنیم. در انتها نتایج پروژه با انجام تحلیل ارائه می‌کنیم .کلمات کلیدی : تحلیل شبکه های اجتماعی - تحلیل توییتر - اسخراج اطلاعات از توییتر - تحلیل گرافاگر جایی گنگ توضیح داده شده و نیاز بود توضیح بیشتری داده بشه یا انتقاد و پیشنهادی داشتید، خیلی خوشحال میشیم اون رو در نظرات با ما درمیون بزارید. ۱. مقدمهشبکه های اجتماعی امروز به بخشی جدایی ناپذیر از زندگی ما تبدیل شده اند. تعداد کاربران آن پیوسته در حال افزایش است. تعداد کاربران فعالی که روزانه از توییتر استفاده می‌کنند، از ۵۴ میلیون در سال ۲۰۱۰ به نزدیک ۲۰۰ میلیون در سال ۲۰۲۱ رسیده است. در آمریکا کاربران بطور میانگین ماهانه ۱۵۸ دقیقه در توییتر وقت می‌گذرانند. جالب است بدانید ۹۲ درصد توییت ها صرفا توسط ۱۰ درصد کاربران ایجاد می‌شود. [1]اگرچه دسترسی به توییتر در ایران با محدودیت همراه است، اما تعداد کاربران فارسی زبان این شبکه اجتماعی در ایران در سال اخیر بصورت قابل توجه ای افزایش یافته است. بنابر نتایج مرکز پژوهشی بتا تعداد کاربران فارسی زبان توییتر از ۲ میلیون کاربر در سال ۱۳۹۹ به ۳.۲  میلیون در سال ۱۴۰۰ ، و تعداد توییت ها از ۵۰۰ میلیون به ۷۹۰ میلیون در مدت مشابه رسیده است. [2] این آمار مثال هایی جهت ارائه درک بهتر نسبت به میزان رشد تعداد کاربران و داده های شبکه های اجتماعی در سال های اخیر می‌باشد.در دهه اخیر همواره نام توییتر با فعالیت های اجتماعی و سیاسی پیوند خورده است. . این رسانه اجتماعی بصورت گسترده مورد توجه سیاستمداران و دیپلمات ها قرار گرفته است و به بستری جهت انعکاس نظرات و سخنان ها تبدیل شده است.  استفاده از این زیرساخت نوع جدیدي از دیپلماسی را با عنوان «توئیپلماسی» به وجود آورد. بررسی تاثیرگذاری اجتماعی توییتر بصورت گسترده ای مورد توجه پژوهشگران و محققان قرار گرفته است.برای تبیین بهتر تاثیر متقابل رخداد های اجتماعی و سیاسی با توییتر   میتوانیم نگاهی کلی به روند انتشار توییت فارسی در سال ۱۴۰۰ بیندازیم :بررسی روند انتشار محتوا در توییتر فارسی در سال ۱۴۰۰ [3]همانطور که مشهود است رخداد های اجتماعی و سیاسی تاثیر غیر قابل انکاری در میزان انتشار محتوا و فعالیت کاربران در توییتر دارد.با توجه به رشد کاربران و تاثیر متقابل رخداد های اجتماعی – سیاسی در رسانه اجتماعی، اهمیت لزوم تحلیل داده ها بیش از پیش نمایان است . در این مطلب سعی می‌کنیم، در ادامه بصورت مختصر با ابزار هایی که میتوانند در تحلیل توییتر به ما کمک کنند آشنا می شویم و نقاط مثبت هر یک را بیان می‌کنیم. در ادامه به اصطلاحات رایجی که در شبکه توییتر استفاده می‌شود و  دانستن آن برای فهمیدن مطلب لازم است را توضیح میدهیم. در بخش بعد به راه های جمع آوری داده از توییتر می پردازیم و روش های مختلف را بیان میکنیم  و در انتها با کمک یکی از این روش ها یک موضوع داغ در طول این پروژه را داده های آن را جمع آوری کرده و با ایجاد گراف به کمک کتابخانه NetworkX  آن ها را دسته بندی کرده و نتایج را گزارش می‌کنیم.۲. فعالیت های پیشینبا افزایش فعالیت شبکه های اجتماعی محققان و گروه ها و مجموعه های بسیاری به تحلیل محتوای توییتر  روی آورده اند. بطور کلی این تلاش ها را به سه دسته کلی میتوان تقسیم کرد :      ۱. تحقیقاتی که تاثیر متقابل شبکه اجتماعی بر روی جامعه و سیاست، تشخیص حساب های جعلی، روش های متخلف داده کاوی بر روی شبکه های اجتماعی و ... بررسی کرده اند.     ۲. برنامه هایی که موضوعات مربوط  حساب ها رو مورد بررسی قرار می‌دهند.      ۳. مجموعه ها و شرکت هایی که بر روی کلان داده های یک موضوع یا یک ناحیه جغرافیایی تحلیل و بررسی انجام می‌دهند.۲-۱ بررسی تحقیقات انجام شده بر روی تحلیل توییتردر دسته اول  بسیاری از محققان به تاثیر توییتر در جامعه و رخداد ها مورد تحلیل و بررسی قرار داده اند، بیشترین این دست مقالات جامعه  و سیاست آمریکا را پوشش می‌دهند مقاله ی  Twitter use by the U.S. Congress  نوشته Jennifer Golbeck و همکاران با بررسی بیش از ۶ هزار توییت اعضای کنگره آمریکا و تاثیر آن ها مورد توجه قرار داده است.[4] از این دست آقای قربانی شیخ نشین در مقاله ای به تاثیر توییتر بر روی میزان محبوبیت ترامپ از قبل تا پایان ریاست جمهوری وی پرداخته است.[5]. همچنین آقای مهدی بیگدلو در دانشگاه خوارزمی با انجام تحقیقات با انجام نظر سنجی های مختلف به تاثیر توییتر بر فرهنگ سیاسی استادان دانشگاه های شهر بزرگ ایران پرداخته اند.[6] بخشی دیگر از تحقیقات در حوزه تشخیص حساب های جعلی در توییتر و شبکه های اجتماعی بوده است. برای نمونه در مقاله آقای  Sirivianos  و همکارنشان در دانشگاه دوک با استفاده از الگوریتم پیاده روی تصادفی راهی کمک به شناسایی حساب های جعلی در مقاله پیشنهاد دادند . این روش مبتنی بر ایجاد گراف شبکه اجتماعی بود . نیازمند ان است تا ما شبکه ی اجتماعی را در اخیتار داشته باشیم و مناسب توسعه دهندگان است. [7] در دسته دیگر برخی محققان تلاش کرده اند تا با استفاده از ویژگی های حساب ها، حساب های جعلی را تشخیص دهند. در ، ویژگی‌های مختلفی را از نمایه، شبکه اجتماعی و محتوای یک حساب استخراج می‌کنند. رویکرد های یادگیری ماشین با نظارت با استفاده از داده های از قبل مشخص شده برای یادگیری استفاده می‌کنند تا بتوانند بین حساب های جعلی و قانونی تمایز قائل شوند. رویکرد های با نظارت عموما از روش های طبقه بندی (Classification) شناخته شده ای مانند جنگل تصادفی ( Random Forest)، SVM و KNN استفاده می‌کنند. [8]۲-۲ بررسی ابزار های ساخته شده برای تحلیل توییتر۲-۲-۱ مقدمهدر دسته دوم  ابزار و برنامه هایی قرار دارند که به تحلیل حساب توییتری و محتوای کلی توییتر می‌پردازند.شناخت این ابزار ها از این جهت مورد اهمیت است که شناخت معیار ها و متریک هایی که این ابزار ها برای تحلیل توییتر استفاده می‌کنند، میتواند دید خوبی در رابطه با تحلیل توییتر به ما بدهد. همچنین شناخت تفاوت ها و امکاناتی هر یک از این ابزار میتواند در پروژه های تحلیل توییتر و فیلتر کردن موضوعات، تاریخ و ... بسیار مفید باشد. بطور کلی این ابزار ها را میتوان به دو دسته کلی رایگان و غیر رایگان تقسیم کرد. ما در اینجا لیست از این ابزار ها را قرار می‌دهیم و در ادامه  امکانات چند ابزار را که در ادامه به آن اراجاع خواهیم داد را، بصورت خلاصه بیان می‌کنیم :ابزار های رایگان : Twitter Analytics  - TweetDeck - Tweriod - Twitter List - Strawberryj.amابزار های اشتراکی Twitonomy - SocialPilot - Tweepi - TweetReach - Tweepsmap - GroupTweet - Twilert - Bluenod-SocialOomph  ابزار های ایرانی :  لایف وب - زلکا - نوین هاب۲-۲-۲ مروری بر قابلیت کلیدی برخی از ابزار ها Twitter Analytics :این ابزار در قالب یک افزونه توسط شرکت توییتر ارائه می‌شود . این ابزار قابلیت های جامعی درخصوص رفتار حساب میزان مشاهده، لایک، فالور های حساب و مقایسه ان با دوره های مختلف را میدهد. این ابزار برای بررسی تاثیر توییت ها از معیار های ایمپرشن‌ها (Impressions) و مشارکت (Engagements) استفاده می‌کند.Twitter List : قابلیت کلیدی این ابزار دسته بندی مخاطبین بر اساس سلایق آنها است. با کمک آن میتوان با توجه مخاطبین و فراوانی دسته ها، محتوای تخصصی ایجاد کرد .Tweriod :نقطه مثبت این ابزار بررسی و تحلیل ۲۰۰ توییت اخیر دنبال کنندگان‌ حساب و پیشنهاد بهترین زمان توییت برای کاربران است.TweetDeck :این ابزار هم متلق به شرکت توییتر است و قابلیت کلیدی که میتوان در آن اشاره کرد، انجام جستجوهای دلخواه  بر اساس کلمه، تاریخ، زمان است.Twilert : یکی از ابزار های غیررایگان محبوب در برند های تجاری است که  هنگامی که در توییتر نام تجاری، کلمه کلیدی یا هشتگی از پیش تعیین شده استفاده شود، از طریق ایمیل به حساب اطلاع داده می‌شود.SocialOomph :یکی از ابزار هایی امکانات تخصصی جهت خودکار سازی اعمال ارائه می‌دهد. برای نمونه به کمک آن میتوان ارسال توییت و پیام  و دنبال کردن با توجه به سلیقه خودکار سازی کند. امکانات این در دو نسخه رایگان و پولی قابل دسترسی است.Strawberryj.am :یکی از ابزار های نسبتا جدید و رایگان است که همه توییت های منتشر شده توسط دنبال کنندگان جحساب را جمع آوری می‌کند. عبارت ها و کلماتی که بیشتر مورد استفاده قرار گرفته اند را مشخص می‌کند. این امکان کمک می‌کند تا حساب کاربری بداند بداند دنبال کنندگانش در این لحظه بیشتر به چه چیزی اهمیت می‌دهند.TwitterCounter :قابلیت کلیدی این ابزار ، تحلیل و ارائه گراف های پایه در خصوص دنبال کنندگان  و توییت ها است. MentionMapp :این ابزار با استفاده از گراف و بصورت بصری حساب های افرادی که بیشترین تعامل را دارند را  نمایش می‌دهد. به کمک گراف میتوان بیشترین تعامل حساب ها و زمان آن ها را تشخیص داد .Twitonomy :این ابزار در ارائه آمار تجمیعی و تفکیکی  عملکرد مطلوبی دارد. اطلاعاتی نظیر اینکه چه ساعاتی بیشتر از همه دنبال کنندگان فعالیت می‌کنند میزان فعالیت آنها و نسبت ریتوییت به توییت و .. دسته سوم را سایت هایی تشکیل می‌دهند که محتوای کلی و موضوعات داغ را تحلیل می‌کنند، و لزوما اطلاعات مربوط به یک حساب را بررسی نمی کنند.  برخی از این وب سایت ها تحلیل خود را معطوف به موضوعات داغ و ترند ها کرده اند از جمله این ابزار ها می‌توان به موارد زیر اشاره کرد :RiteTag - Tagboard  - Hashtagify سایت Trendsmap سعی می‌کند در هر لحظه ترند ها را بر اساس موقعیت مکانی نمایش دهد:‌سایت trendsmap در تاریخ ساعت ۲ بعد از ظهر ۲۴ تیر ماه ۱۴۰۱۲-۲-۳ شرکت های ایرانی فعال در این حوزهشرکت های ایرانی هم در تحلیل داده های توییتر ورود کرده اند که بیشتر تمرکز آنان  تحلیل توییتر فارسی  است . برخی از سایت هایی که در تحلیل و گزارش توییتر فارسی عملکرد قابل توجه ای دارند عبارت اند از : ۲-۲-۳-۱ مرکز پژوهشی بتا مرکز پژوهشی «بِتا»، (بررسی و تحلیل اطلاعات)  به تحلیل داده های با کمک هوش مصنوعی می پردازد. این مرکز با سازمان دولتی و خصوصی بسیاری  همکاری کرده است. در شکل زیر نمونه از گرازش های  را می بینید.روند انتشار محتوا در اینستاگرام فارسی - نمونه ای گزارش مرکز پژوهشی بتا۲-۲-۳-۲. اندیشکده تحلیلی دیتاک http://beta-co.ir/# تحلیل افکار عمومی بعد از موج گرانی پس از آزادسازی قیمت ها - نمونه ای از گزارش دیتاک https://iranthinktanks.com/dataak-analiticaa/ ۲-۲-۳-۳. لایف وبلایف وب شرکتی دانش بنیان است با تجربه بیش از ۱۰ سال است که کلان داده‌ شبکه‌های اجتماعی، وبسایت‌ها و رسانه‌های چاپی را جمع‌آوری می‌کند و با پردازش مبتنی بر هوش مصنوعی، تحلیل کمی و کیفی آن به مشتریان ارائه می‌کند.داغ ترین رخداد های شبکه های اجتماعی در بهار ۱۴۰۱ - نمونه گزارش از لایف وب https://lifewebco.com/ ۲-۲-۳-۴.زلکازلکا یک شرکت دانش بنیان ایرانی  است که یک پلتفرم رصد، تحلیل، انتشار و مدیریت رسانه‌ها و شبکه‌های اجتماعی ارائه می دهدمیزان پاسخگویی پر منشن ترین برند های در توییتر فارسی - نمونه ای از گزاش زلکا https://zelkaa.com/ ۳. اصطلاحات رایج در شبکه های اجتماعی - ادبیات موضوعدر شبکه های اجتماعی اطلاعات منتشر شده توسط کاربران دارای ویژگی ها و اصطلاحات مشترکی وجود دارد که برای تحلیل و بررسی شبکه های آشنایی با آنها لازم است از این رو در ادامه به بررسی اصطلاحات شبکه های اجتماعی می‌پردازیم:۳-۱. نمایه :نمایه (Profile) صفحه‌ای است که برای کاربر پس از عضویت در شبکه‌های اجتماعی ایجاد می‌شود تا بتواند خود را به دیگران معرفی کند. این صفحه شامل: آواتار يا عكس کاربر، بیوگرافی، علاقه‌مندی‌های او، مطالبی که به‌روز کرده، فهرست دوستان و... بوده و برای سایر کاربران قابل دسترسی است. در برخی از شبکه‌های اجتماعی، اعضا قادرند تنظیمات نمایه خود را به گونه‌ای انجام دهند که اطلاعات آنها به صورت عمومی یا خصوصی قابل دیدن باشد؛ بدین صورت که فقط اعضایی که در فهرست دوستان کاربر حضور دارند، قادر باشند نمایه او را ببینند، در اکثر موارد تنظیمات به گونه ای است که تمام اعضای آن شبکه اجتماعی قادر به دیدن موارد موجود در نمایه باشند و یا حتی از طریق جستجو در موتورهای جستجوگر نیز بتوان اطلاعات او را مشاهده کرد.۳-۲. آواتار (تصویر نمایه) :در اکثر موارد شبکه های اجتماعی برای هر حساب یک عکس - اصطلاحا آواتار(Avatar) در نظر می‌گیرند تا صاحب حساب بتواند عکسی ازخود را قرار دهد که البته در بعضی از موارد افراد تمایلی به انتشار تصویر خود ندارند و در این موارد از تصوير افراد یا چیزهایی که دوست دارند، استفاده می‌کنند . آواتار در صفحه نمایه قابل مشاهده است .۳-۳. پسند (Like) :در صورتی که شخصی مطلبی که سایر کاربران در شبکه‌های اجتماعی ارسال کرده‌اند، دوست داشته باشد می تواند با فشار دادن علامت لایک (که بصورت قلب است) رضاست خود را ثبت کند. پسند های یک حساب میتواند معیاری جهت تحلیل ویژگی ها صفات شخصیتی حساب استفاده شود. اکثر برنامه سعی می‌کنند با استفاده فعالیت کاربران از جمله پسند ها علایق آنها را تشخیص دهند تا بتوانند در پیشنهاداتی که به آنها می‌دهند هوشمند تر عمل کنند .۳-۴. رابطه دوستی(friendship relation):اگر حساب کاربری بخواهد مطالب یا فعالیت های حساب دیگری را دنبال کنند و از آن مطلع شود میتواند درخواست رابطه‌ دوستی بدهد. البته لزوما این رابطه دوستانه نیست و میتواند صرفا مرتبط به علایق کاری، سیاسی، اجتماعی و ... باشد. این رابطه میتواند یک طرفه یا دوطرفه باشد. برای نمونه اگر حسابی بخواهد یک حساب بازیگر را دنبال کند میتواند درخواست دوستی کند. اگر حساب بازیگر بصورت خصوصی فعالیت کند این درخواست نیازی به تایید از طرف حساب بازیگر دارد. این یک نمونه ارتباط دوستی یک طرفه است. ۳-۵. دنبال کننده (Follower):در یک شبکه اجتماعی به حساب هایی که فعالیت های یک حساب را دنبال می‌کنند دنبال‌کننده های آن کاربر می‌گویند .۳-۶. دنبال شونده (Following):در یک شبکه اجتماعی به حساب هایی که کاربر فعالیت آنها ها را دنبال می‌کنند دنبال‌شونده های آن کاربر می‌گویند .۳-۷. بلاک کردن (Block):به زمانی اطلاق می‌شود که حسابی نمی‌خواهد شخصی برای او یادداشت یا پیغامی بفرستد یا برای مطالب آن نظر بگذارد. در این حالت، شخص را اصطلاحا بلاک می‌کند. همچنین مدیران شبکه‌ها از این ابزار برای کنترل کاربران، قطع دسترسی آنان به قسمتی از پايگاه و یا اخراج کاربران خاطی از پايگاه شبكه اجتماعي استفاده می‌کنند.۳-۸. نظر (Comment) :کاربران در شبکه اجتماعی این قابلیت را دارند تا نسبت به فعالیت یک حساب بازخورد نشان دهند. در اکثر موارد این شبکه ها اجازه میدهند افراد نسبت به پست یا پیام نظر خود را بنویسند. البته بعضی از برنامه های به حساب کاربری اجازه میدهند قسمت نظرات برای پست و فعالیت های خود ببندند.۳-۹. بازارسال (retweet):در یک شبکه اجتماعی در صورتی یک مطلب مورد توجه یک کاربر قرار گیرد میتواند آن مطلب را با حفظ نام ارسال کننده برای مخاطبان خود بازارسال کند. که از آن با نام های فوروارد و یا ریتوییت (در توییتر) نام برده می‌شود.۳-۱۰. خوراک (Feed):خوراک راهی است برای دسترسی به مطالب نظیر وبلاگ‌ها، سایت‌ها و يا خبرگزاری‌ها؛ بدون نیاز به باز کردن سایت مورد نظر است. وقتی فید یک پايگاه اينترنتي را دنبال شود، با هر بار به روز شدن آن سایت، سرخط و تیتر مطالب منتشر شده نمایش داده شده و به‌راحتی می‌توان کل مطالب مورد علاقه را مطالعه کرد. اکنون فیدها یکی از اجزای جدانشدنی سایت‌ها و شبکه‌های اجتماعی هستند و کاربران بسیاری با دنبال کردن مطالب خود از طریق فید، به‌سرعت و به‌آساني در دنیای اینترنت فعالیت می‌کنند.۳-۱۱. برچسب (تگ) (Tag):برچسب ها برای توضیح دادن یا دسته‌بندی کردن محتوای وب (متن، عکس، فیلم و صوت) به کار می‌روند. انجام این عمل (به اصطلاح تگ‌ زدن) توسط کاربران شبکه‌های اجتماعی انجام می‌شود؛ به عنوان مثال، شما در یک شبکه اجتماعی، عکسی از افرادی در طبیعت می‌گیرید. میتوانید با مشخص کردن افراد حاضر در عکس را یا حتی قسمتی از منظره را اصطلاحا تگ کنید که این عمل به جستجوی بهتر مطالب و درنتیجه دیده شدن حساب کاربری کمک می‌کنند.۳-۱۲ # (هشتگ )(Hashtag) :این نشانه که به آن Hashtag گفته می‌شود، هنگامي توسط کاربران شبکه‌های اجتماعی استفاده می‌شود که بخواهند نوشته خود را به دسته‌بندی خاصی تگ کنند. بدین ترتیب، وقتي کاربری در آن شبکه لغت مورد نظر شما را جستجو کرد، مطلب تگ‌شده شما نیز جزء نتایج جستجو آورده خواهد شد. همچنین در بسیاری از برنامه ها تعداد هشتگ های یک کلمه شمارش می‌شود و از آن برای مسئله داغ یا ترند در آن شبکه استفاده می‌شود. به همین دلیل کاربران یک شبکه اگر بخواهند عبارت یا موضوعی را در شبکه ترند کنند یک هشتگ مربوط به اون موضوع را منتشر می‌کنند.۳-۱۳. لرکر :لِرکِر در فرهنگ اینترنت به شخصی گفته می‌شود که در اجتماعات آنلاین به مشاهده نوشته‌ها و آثار دیگران می‌پردازد ولی خود به‌طور فعال در فعالیت‌ها شرکت نمی‌کند. لرکرها جمعیت زیادی را در جوامع آنلاین به خود اختصاص می‌دهند. لِرکِر بودن به شخص اجازه می‌دهد تا به بررسی اجتماع مورد نظر بپردازد و قبل از فعالیت در آن به قواعد و ویژگی‌های شرکت در آن اجتماع آگاه شود. اگرچه عدم روابط اجتماعی در لِرکِرها می‌تواند به تنهایی و انزوای آنها منجر شود. ۳-۱۴. کاربردر فرهنگ رایانه، کاربر به کسی می گوید که با یک سیستم ( سخت‌افزار یا نرم‌افزار) تعامل دارد و از آن استفاده می‌کند. در بیشتر مواقع، کاربر انسان است. هر سیستم می‌تواند یک یا چند نوع کاربر مثل مدیر، کاربر دارای اشتراک ، مهمان و.... داشته باشد؛ کاربر میتواند به برنامه نویس و گسترش دهندگان برنامه اطلاق شود به همین دلیل برای ایجاد تمایز از اصطلاحاتی مانند کاربر نهایی (End User) هم استفاده می‌شود.به آن دسته از کاربرانی که برای انجام فعالیت های غیرقانونی در شبکه حضور دارند؛ در اصطلاح کاربران مخرب گفته می‌شوند. این کاربران در شبکه های اجتماعی با ایجاد حساب های جعلی مختلف، فعالیت های غیر قانونی خود را انجام می‌دهند .۴. جمع آوری داده هابرای اینکه بتوانیم داده ها را از توییتر دریافت کنیم در وهله اول باید راهی برای جمع آوری داده های مورد نظر برای پروژه پیدا کنیم. بطور کلی راه های جمع آوری داده ها را میتون به دو بخش تقسیم کرد :۴-۱ استفاده از مجموعه داده های آماده توییتر برای کاربرد های مختلف و مطالعات دیتاست های آماده در اینترنت قرار گرفته است که محققان میتوانند تحقیقاتشان بر روی آن ها انجام دهند. چند نمونه از این وب سایت ها که میتوانید در آن دیتاست های آماده توییتر را پیدا کنید در زیر آورده ایم : https://data.world/datasets/twitter  https://www.kaggle.com/  https://imerit.net/blog/top-25-twitter-datasets-for-natural-language-processing-and-machine-learning-all-pbm/ ۴-۲ جمع آوری داده با توجه به نیازهای مخصوص پروژه برای این این کار میتوانیم از API رسمی توییتر استفاده کنیم یا از ابزار شخص ثالث برای جمع آوری داده های موردنظر خودمون استفاده کنیم . استفاده از API توییتر این امکان رو فراهم میکنه علاوه بر شخصی سازی دریافت اطلاعات موردنیاز بتوانیم حجم زیادی از داده را دریافت کنیم. فرض کنید چند روز بر روی سرور اجرا شود و صد ها هزار توییت استخراج شود . ابزار های شخص ثالث معمولا چنین قابلیت هایی ندارند.۴-۲-۱ دریافت اطلاعات با استفاده از API توییتر اما متاسفانه در چند سال اخیر دریافت API از توییتر بسیار سخت تر شده است. برای دریافت API توییتر نیاز است در حساب کاربری خود منو توسعه دهندگان دلایل نیاز و استفاده از API توییتر کاملا شرح دهید. پاسخ های داده شده توسط توییتر اعتبار سنجی می‌شود و نتیجه به ایمیل شما ارسال خواهد شد. چند توصیه برای اینکه احتمال موافقت با درخواست دریافت API شما افزایش پیدا کند :   سابقه حساب شما مهم است اگر حسابی دارید که زمان زیادی با آن در توییتر فعالیت می‌کردید، با آن حساب درخواست فعال شدن پنل توسعه دهندگان را بدهید.برای هر حساب امکان ارسال یک درخواست وجود دارد. در نوشتن و توضیح دلایل استفاده تان از API توییتر اصلا کوتاهی نکنید. توضیحات خود را به صورت دقیق بیان کنید، از عبارت ها و دلایل کلی اجتناب کنید.  اگر توانستید به پرتال توسعه دهندگان توییتر درسترسی پیدا کنید . در مرحله بعد باید برای هر برنامه که میخواهید از این API استفاده کنید شک APP  ایجاد کنید. هر حساب میتواند ۱۰ APP را ایجاد کند. بعد از احراز هویت و تعیین حساب کاربری برای استفاده، به شما یک توکن و کلید برای حساب کاربری به نام های access_token و  access_token_secret داده می‌شود. همچنین برای هر APP در دو مقدار ConsumerKey و ConsumerSecret ساخته می‌شود  که میتوانید از آنها برای دسترسی به API استفاده کنید. حالا وقت آن رسیده است که به کمک این توکن ها به API توییتر متصل شویم و شروع به جمع آوری داده ها کنیم : برای استفاده از API توییتر در پایتون میتوانیم از کتابخانه Tweepy استفاده کنیم ‍‍import tweepy
consumer_key = &amp;quotconsumer_key&amp;quot
consumer_secret = &amp;quotconsumer_secret&amp;quot
access_token = &amp;quotaccess_token&amp;quot
access_token_secret = &amp;quotaccess_token_secret&amp;quot 

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token,access_token_secret)
api = tweepy.API(auth)با دریافت شی api میتوانیم مطابق نیازمان از آن استفاده کنیم برای نمونه میتوانیم توییت های تایملاین را نمایش دهیم public_tweets = api.home_timeline()
for tweet in public_tweets:
    print(tweet.text)میتوانیم تعداد دنبال کنندگان حساب و نام هر یک از دنبال کنندگان را استخراج کنیم.[10]user = api.get_user(screen_name=&#039;twitter&#039;)print(user.followers_count)
for friend in user.friends():
   print(friend.screen_name)۴-۲-۲ استفاده از ابزار های شخص ثالث بجای استفاده از API توییتر اگر نتوانستید به API توییتر دسترسی پیدا کنید نگران نباشید چراکه ابزار هایی وجود دارند که میتوانند معمولا نیاز های ما را پاسخ دهند.ابزار های متفاوتی برای دریافت داده های وجود دارند و از جمله آنها، کتابخانه های پیشرفته برای دریافت داده ها بدون نیاز به API کتابخانه twint است. مزیت اصلی این کتابخانه عدم محدودیت در دریافت توییت ها و سادگی آن است. [11] https://github.com/twintproject/twint در آدرس بالا میتوانید به کد ها ، طریقه نصب، قابلیت ها و موارد استفاده از آن را مشاهده کنید.۵. پیاده سازیدر ادامه قصد داریم یک رویداد اجتماعی که در مدت زمان نوشتن این مقاله در شبکه توییتر ترند شده است را داده ها را استخراج و سپس مورد بررسی و تحلیل قرار دهیم. غالب محتوای این پروژه در بهار ۱۴۰۱ در حال انجام بوده است بنابراین نگاهی به گزارش لایف وب (یکی از سایت تحلیل محتوای توییتر فارسی که پیش از این معرفی شد)در خصوص پر تکرار ترین هشتگ های این بهار ۱۴۰۱ می‌اندازیم:پرتکرار ترین هشتگ ها بر اساس تعداد کاربران استفاده کننده در بهار ۱۴۰۱ [9]یکی از معیار هایی که در تعیین هشتگ برای تحلیل پروژه موردنظر بود که سلایق مختلف از آن هشتگ استفاده کرده باشند.همچنین توییت ها حاوی مطالب مثبت و منفی باشد. پس بررسی های صورت گرفته هشتگ سلام_فرمانده به عنوان موضوع تحلیل ترجیه داده شد . چراکه سایر هشتگ ها عموما دارای محتوای مشخصی (از نظر منفی یا مثبت بودن) بودند برای نمونه  گرانی یا فاجعه متروپل آبادان طبیعتا شامل توییت هایی با احساس خشم و ناراحتی  بودند. یا هتشگ هایی همانند آزادی فلسطین محتوایی با قالب خاص را دربر میگرفت. اما شعر سلام فرمانده پس از پویش های مختلف همخوانی این شعر در شهر های مختلف، با موجی از نظرات مثبت و منفی همراه شد. به همین دلیل این موضوع برای تحلیل و بررسی در نظر گرفته شد.ابتدا باید در مرحله اول داده های مورد نیاز خود را استخراج کنیم برای اینکار از کتابخانه twint ااستفاده می‌کنیم. https://gist.github.com/arnasab/d318baba08f5b1043d2aea94dcb9fba4 با استفاده از کد بالا توییت  هایی که در آن واژه سلام فرمانده به کار رفته است را نمایش می‌دهیمنتیجه خروجی با فرمت csv  ذخیره می‌شود نتیجه به صورت مشابه است :بخشی از خروجی ایجاد شده -قسمت اولبخشی از خروجی ایجاد شده بخش دومنکته : ممکن است ابزار twint در استخراج توییت های ماه های قبل به خوبی عمل نکند برای عملکرد بهتر ، باید بازه زمانی را به بخش های کوچکتر تقسیم کرد و نتایج آن را ترکیب کرد.در ادامه باید ستون هایی که لازم نداریم را حذف کنیم. در مرحله بعد باید در فایل پایتون باید داده ها را بخوانیم و سپس تبدیل به گراف کنیم. برای این کار از کتابخانه networkX استفاده می‌کنیم . کتابخانه networkX  یکی از ابزار ها جهت تحلیل گراف در زبان پایتون است. [11]پیش از تبدیل به گراف باید مشخص کنیم که گراف ما وزن دار است یا بدون وزن ؟ گراف ما جهت دار است ؟ در این گراف گره و یال های ما چه خواهند بود؟ گره ها :  حساب های کاربری های نسبت به این رخداد واکنش داشتند. (واکنش یعنی اگر در این رخداد توییت زدند یا توییتی در این زمینه ریتویت و کوت یا ریپلای کرده باشند )یال ها : بر اساس نوع ارتباط میان گره ها میان آن ها یال با وزن مشخص ایجاد می شود.وزن یال ها : در اینجا برای هر مشارکت یک وزنی در نظر گرفته می‌شود مجموع تعامل میان دو حساب وزن یال در نظر گرفته می شود .reply = 2 , qoute = 3 , retweet = 5 فرض کنید حسابی توییت حساب دیگر را رپلای کند میان این دو حساب یال با وزن ۲ ایجاد می‌شود.اگر علاوه بر آن توییت را  اگر  علاوه بر آن توییت ریتوییت کند به وزن قبلی یال ۵ مقدار اضافه میشود . دلیل اصلی این مدل وزن دهی ایسنت که در انتها برای تشخیص انجمن ها، هدف ما اینست که افرادی در یک انجمن قرار گیرند که از نظر فکری مشابه باشند. و به نظر میرسد اگر حسابی، حساب  دیگری را ریتوییت کند احتمال بالا این دو در این رخداد مورد بررسی هم نظر باشند بسیار زیاد است. کد زیر برای هر رابطه ایجاد شده میان حساب وزن محاسبه می‌شود. https://gist.github.com/arnasab/22942dbfcd15f4d0ddd9465615e12a4a در کد های بالا برای هر رابطه تابع claculated_weight   فراخوانی میشود و وزن یال های آن محاسبه می‌شود. https://gist.github.com/arnasab/884fd261d3ea9a2189bea605deaaae3d در ادامه باید گراف را ایجاد کنیم. ویژگی هایی که برای گره ها نیاز است نگه داریم را تعیین کرده ایم. با استفاده از تابع DiGraph یک گراف جهت دار خالی ایجاد کردیم در ادامه با استفاده از تابع add_nodes_fromتمام گره ها را اضافه می‌کنیم. همچنین با تابع add_weighted_edges_from لیست یال های وزن دار که در کد قبل محاسبه شده بود  را به گرافمان اضافه می کنیم.در انتها میتوانیم از الگوریتم های تشخیص انجمن ها برای دسته بندی داده هایمان استفاده کنیم . در اینجا از الگوریتم تشخیص اجتماعات LPA استفاده کردیم . با استفاده از دستور زیر تشخیص انجمن ها بر اساس الگوریتم LPA بر روی گراف انجام می‌شود. نتایج بصورت لیست در شی communities ذخیره شده است.communities = list(nx.algorithms.community.asyn_lpa_communities(G,weight=&amp;quotweight&amp;quot))تعداد اندازه لیست communities  تعداد انجمن های تشخیص داده شده را نشان می‌دهد. هر عضو این لیست خود لیستی است که شامل تمام گره های آن لیست است. شش دسته اول تعداد قابل توجهی ره به خود اختصاص دادند، اما نقاط بعدی لیستی با طول دو و یک هستند بنابراین آن ها را از انجمن ها حذف می‌کنیم.۶.  نتایج به دلیل محدودیت های سخت افزاری و زمانی صرفا بخش از داده ها به عنوان نمونه انتخاب کردیم (در حدود ۱۰۰ هزار توییت ) و از بقیه داده ها صرف نظر کردیم . به همین دلیل بیشتر گزارش خود را معطوف به درصد هر نوع کردیم و خیلی به تعداد توییت ها هر خوشه نپرداختیم.با جمع آوری داده ابتدا نگاهی به این نتایج جمع آوری شده بیندازیم :در داده های ما از ۲۴ زبان مختلف داده جمع آوری شد . که از این بین بیشترین سهم برای زبان فارسی و عربی بود.زبان های استفاده شده در داده جمع آوری شدهدر خوشه های ایجاد کاربران عرب زبان هم خوشه بندی شده بودند. با نگاهی کاربران هر خوشه میتوان خوشه های فارسی را به سه دسته مثبت منفی و خنثی تقسیم کرد.تعداد اعضای خوشه ها بصورت زیر است :تفکیک بر اساس خوشه بندی بسیار جالب است اگر به خوشه منفی نگاه کنیم، عملکرد آن ها بیشتر دهه اول خرداد ماه بوده است. دقیقا زمانی که حادثه دلخراش متروپل رخ داد. بیشترین نظرات منفی علیه این شعر در این زمان بوده است نگاهی به تفکیک واکنش در طول بازه ۲ خرداد تا ۸ خرداد را نمایش می‌دهد.میزان توییت های هر خوشه در بازه ۲ خرداد تا ۸ خرداد۷. جمع بندیدر این مطلب سعی کردیم ابتدا اهمیت تحلیل شبکه های مجازی در زمان فعلی بررسی کنیم. سپس نگاهی به آمار توییتر انداختیم و تحقیقات و برنامه های ایجاد شده جهت تحلیل توییتر پرداختیم و آن ها را دسته بندی کردیم . در ادامه بصورت مختصر با ابزار هایی که میتوانند در تحلیل توییتر به ما کمک کنند آشنا شدیم و نقاط مثبت هر یک را بیان کردیم. در ادامه به اصطلاحات رایجی که در شبکه توییتر استفاده می‌شود و  دانستن آن برای فهمیدن مطلب لازم بود را بیان کردیم. در ادامه به راه های جمع آوری داده از توییتر پرداختیم و یک موضوع داغ در طول این پروژه را داده های آن را جمع آوری کرده و با ایجاد گراف به کمک کتابخانه NetworkX  آن ها را دسته بندی کردیم و نتایج را گزارش کردیم .امیدوارم این مطلب براتون مفید بوده باشه اگه نظری داشتید لطفا در قسمت نظرات بگید. ممنون از وقتی که گذاشتید و این مطلب را تا اینجا خوندید.۸. منابع [1] https://backlinko.com/twitter-users [2] https://fa.shafaqna.com/news/1174009/%D9%85%D8%AD%D8%A8%D9%88%D8%A8%E2%80%8C%D8%AA%D8%B1%DB%8C%D9%86-%D9%88-%D9%BE%D8%B1%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87%E2%80%8C%D8%AA%D8%B1%DB%8C%D9%86-%D8%B4%D8%A8%DA%A9%D9%87%E2%80%8C%D8%A7/ [3] http://beta-co.ir/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%d8%b1%d9%88%d9%86%d8%af-%d8%a7%d9%86%d8%aa%d8%b4%d8%a7%d8%b1-%d9%85%d8%ad%d8%aa%d9%88%d8%a7-%d8%af%d8%b1-%d8%aa%d9%88%db%8c%db%8c%d8%aa%d8%b1-%d9%81%d8%a7%d8%b1%d8%b3/ [4] https://onlinelibrary.wiley.com/doi/10.1002/asi.21344 [5] https://qpss.atu.ac.ir/article_13650.html [6] https://nms.atu.ac.ir/article_8498.html [7] Q. Cao, M. Sirivianos, X. Yang, and T. Pregueiro, “Aiding the detection of fake accounts in large scale social online services,” in Presented as part of the 9th {USENIX} Symposium on Networked Systems Design and Implementation ({NSDI} 12), 2012, pp. 197–210[8]  K.-C. Yang, O. Varol, P.-M. Hui, and F. Menczer, “Scalable and generalizable social bot detection through data selection,” in Proceedings of the AAAI Conference on Artificial Intelligence, vol. 34, no. 01, 2020, pp. 1096–1103.[9] https://lifewebco.com/%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AA%D9%88%DB%8C%DB%8C%D8%AA%D8%B1/ [10] https://docs.tweepy.org/en/stable/# [11] https://github.com/twintproject/twint [12] https://networkx.org/ </description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Mon, 11 Jul 2022 14:06:52 +0430</pubDate>
            </item>
                    <item>
                <title>نقش معماری میکروسرویس در حل مشکل پیچیدگی نرم افزار</title>
                <link>https://virgool.io/@Arnasab/%D9%85%D8%B1%D9%88%D8%B1-%D8%AF%D9%88-%D9%86%D9%85%D9%88%D9%86%D9%87-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%85%D8%B9%D8%B1%D9%88%D9%81-%D9%88-%D9%85%D9%88%D9%81%D9%82-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C-jxiz0vfostyc</link>
                <description>بروزرسانی بهمن ۱۴۰۱مقدمه در این پروژه قصد داریم معماری چندین محصول معروف از موفق ترین شرکت های دنیای امروز را بررسی کنیم . در ابتدا هدف و نیاز های محصول را بشناسیم و سپس تحلیل کنیم چه چالش هایی باعث شده این شرکت ها به سمت این معماری ها بروند؟ نقش این معماری ها موفقیت این شرکت چه بوده؟ در هر یک از این معماری ها چه نقاط قوت و ضعفی وجود دارد ؟ درنهایت کاربرد این معماری ها را نسبت به هم مقایسه کنیم.اسپاتیفای(Spotify)ابتدا باید ببینیم نرم افزار چه نیازمندی هایی دارد : ابتدا  به آمار زیر نگاه کنید  : number of Spotify monthly active users (MAUs) worldwide from 2015 to 2021(in millions) [source]شکل بالا تعداد کابران فعال اسپاتیفای را از اول سال ۲۰۱۵ تا فصل سوم سال ۲۰۲۱ نمایش داده است . همانطور که میبینید در طول ۶ سال بیش از ۳۰۰ میلیون  و فقط در فصل آخر سال ۲۰۲۱ بیش از ۲۵ میلیون کاربر فعال جدید اضافه شده است.[منبع] در هر روز بیش از ۶۰ هزار آهنگ جدید آپلود میشود یعنی تقریبا هر ثانیه یک آهنگ به اسپاتیفای اضافه میشود. (منبع)همچنین برنامه هایی مانند اسپاتیفای برای گرفتن مجوز فعالیت در کشور های مختلف مجبورند از قوانین حق موسیقی این کشور ها تبعیت کنند. مثلا شاید یک موسیقی در آمریکا مجوز بگیرید اما در  آلمان نیازمند اصلاح باشد  و در نتیجه اسپاتیفای با توجه به موقعیت کاربر باید نسخه دارای مجوز آن کشور را نمایش دهد.  بعد پرداخت هزینه برای آهنگ ها (به سازمان ها و به ناشر ها و ..) برای هر کشور قوانین خاص خود را دارد . در کنار  همه اینها بازار پر طرفدار موسیقی با ورود شرکت های بزرگی همچون گوگل و اپل ، کوچکترین غفلت ممکن است با از دست دادن میلیون ها کاربر همراه شود .  پس بطور خلاصه میتوان گفت معماری برنامه اسپایتفای باید نیازمندی های زیر را برآورده کند :  قابلیت پشتیبانی از میلیون ها کاربر (معماری باید مقیاس پذیر باشد)پشتیبانی در چندین پلتفرم (وب ، کامپیوتر های شخصی ، گوشی های هوشمند و ... )پیروی از قوانین تجاری و قوانین سازمان و کشور های مختلف (مثل قانون کپی رایت و .. ) قابلیت اضافه کردن سریع ویژگی جدید و رقابت با دیگر برنامه هاحالا باید پرسید چگونه نرم افزاری همزمان از کاربران جدید  پشتیبانی کند  و کشور های جدید و قوانین آن ها را را اضافه کند و در عین حال  با امکانات و نوآوری های جدید مانع مهاجرت کاربرانش به  برنامه های رقیب شود. همه این نیازمندی ها در تقابل هم هستند . شاید اپلیکیشن های زیادی را به خاطر بیاورید که با افزایش کاربران کارایی خود را از دست داده باشند یا به دلیل مشکلات حقوقی از ادامه مسیر باز مانده باشند هر یک از چالش ها آنقدر بزرگ هستند که بتواند یک برنامه را متوقف کند. بیایید ببینیم اسپاتیفای با چه معماری نرم افزاری توانست از این چالش ها با موفقیت عبور کند ؟ پاسخ معماری میکروسرویس است در این معماری برنامه به سرویس های کوچک شکسته میشود و هر یک از این بخش ها توسط یک تیم مستقل پیاده سازی میشود .بفرض کنید یک قابلیت در اسپاتیفای میخواهد اضافه شود.اسپاتیافی در پلتفرم های مختلفی عرضه میشود و همه اینها باید این قابلیت را اضافه کنند (تیم توسعه اندروید ، تیم توسعه IOS ، وب  و دسکتاپ و ...)  بنابراین تیم های توسعه هر پلتفرم از تیم هسته مرکزی درخواست API های لازم برای اون قابلیت را میکنند. تیم هسته مرکزی درخواست پیاده سازی در سمت سرور را خواهد داشت . همچنین ممکن است تیم سرور از تیم زیرساخت بخواهد تا امکانات لازم برای توسعه این قابلیت را فراهم کند (امکانات زیر ساختی یا ساخت دیتابیس های لازم و ...)تیم هسته مرکزی تعیین کننده کتابخانه و API های مشترک را دارد و در نقش واسط عمل می‌کند. ممکن است تیم پلتفرم مستقیما با تیم سرور در ارتباط باشد.چالش این نوع پیاده سازی چیست ؟ synchronization همانطور که توضیح داده شد در این پیاده سازی توسعه پلتفرم وابسته به پیاده سازی library های تیم هسته و خود ان وابسته پیاده سازی سمت سرور و آن وابسته به پیاده سازی زیرساخت است. این باعث کند شدن شدید توسعه خواهد شد. راهکار چیست؟پیاده سازی قابلیت توسط یک تیم Full Stack. یعنی تیم ها هر کدام  افرادی با تخصص های زیر را دارندfront -end developer , back-end  developer ،    test , UI Designer ,  Product Ownerپس پیاده سازی هر قابلیت به یک تیم سپرده می شود. وابستگی تیم ها حدف نمیشود اما به کمترین سطح کاهش می یابد معماری ها بصورت زیر می‌شودجالب است بدانید  اسپایتفای بیش از ۹۰ تیم و ۶۰۰ توسعه دهنده دارد که در ۵ ساختمان در دو کشور مشغول توسعه این برنامه هستند.( آمار مربوط به سال ۲۰۱۵ است )اسپاتیفای هدف خود را داشتن صپ ها میلیون کاربر قرار داده بود به همین دلیل نیاز بود تا هر بخش بصورت مستقل توسعه پیدا کند تا  بتواند در صورت لزوم مقیاس پذیر باشد. یک سرویس ساخته میشود کارایی و سرعت ان اطمینان پیدامیکنیم و حال میتوانیم در صورت لزوم کپی کنیم و جای دیگر سال ها بدون نگرانی استفاده کنیم. برای نمونه نگاهی به مزیت جداسازی سرویس و بخش ها در معماری برای مقیاس پذیری بندازید:افزایش مقیاس در پیاده سازی یکپارچه افزایش مقیاس در معماری میکروسرویسبیاید نگاهی به مزیت های این معماری بندازیم : مقیاس پذیری آسان : در این معماری میتوانید شما گلوگاه های محسباتی را پیدا کنید و به راحتی سرویس مربوط رو افزایش دهید . (برای مثال در شکل بالا سرویس سفید نیاز به گسترش داشته است)تست آسان :‌هر وقت سرویس ها کوچکتر هستند و اهداف کوچکتری دنبال میکنند تست آن ها بسیار راحت خواهد شد. لذا شما هر وقت از هر بخش کوچک اطمینان پیدا کردین سراغ تست میان ارتباط بخش ها میروید  پیاده سازی آسان نظارت آسان بر هر سرویستوسعه مجزا هر بخش : شما برای اصلاح و توسعه دیگر نیازی نیست نگران این باشید دیگر بخش چگونه با چه زبان یا چه تکنولوژی هایی پیاده سازی شده اند.سرویس های کوچک ایرادات کوچکی هم دارند اگر یک سرویس کوچک دارای مشکل باشد ولی سرویس های بزرگ و با وظایف بزرگ قطعا ایراد یابی سختر خواهد شد.مشکلات این معماری:هر وقت هر ویژگی برنامه یک سرویس کوچک باشد برنامه بزرگی مثل اسپاتیفای امروز صد ها سرویس دارد. جالب است بدانید در سال ۲۰۱۵ اسپاتیفای فقط ۸۱۰ سرویس فعال داشته و به طور متوسط برای هر تیم (squad) ۱۰ سرویس  وجود داشته است .در چنین سیستمی مستند سازی بسیار اهمیت پیدا میکند. چراکه تیم ها بعد از پیاده سازی ویژگی و تست و کامل ممکن سراغ سرویس دیگری بروند و  اگر بعد از مدتی نیاز به تغییر سرویس باشد بدون مستند سازی خوب بسیار دشوار خواهد بود. سرویس های زیاد و ارتباط میان آنها اگرچه پیچیدگی را کاهش  میدهند اما تاخیر در اجرا را به همراه خواهد اورد . شکل زیر بخشی از سرویس های اسپاتیفای را به نمایش گذاشته است : جالب است بدانید شرکت اسپاتیفای ابتدا از فرهنگ اسکرام در شرکت خود استفاده میکرد اما با افزایش رشد سریع متوجه شد دیگر قواعد اسکرام به هدف و شرکت آن ها کمک شایانی نمی کند و لذا شروع به تغییر بخش هایی از اسکرام کردند امروز از متد بهینه شده ای استفاده می کنند که در پست های بعدی درباره آن خواهم نوشت .مزایا و معایب معماری میکروسرویس را در اسپاتیفای دیدیم اجازه بدهید نگاهی به نتفلیکس بیندازیم.نتفلیکس (Netflix)نت فلیکس در واقع یک شرکت پشتیبانی از محصولات تصویری است که در سال ۱۹۹۸ در آمریکا بنیان گذاری شد. بیشترین کاربران نتفلیکس در کشور آمریکا هستند. این شرکت در اولین مرحله پیشرفت ، اقدام به کرایه دی وی دی از فیلم های مختلف نمود. بعد از آن شروع به تولید محصولات و فیلم های مختلف نمود و در نهایت، پای خود را به کشور های مختلف باز کرد و در حال حاضر در بیش از ۱۹۰ کشور دنیا، مجری فعالیت های رسانه ای است. [منبع]نتفلیکس بیش از ۲۰۰ میلیون کاربر و بیش از ۱۲۵ میلیون ساعت برنامه ویدیویی دارد .برای زیرساخت خود از  بستر AWS استفاده میکند .سرور های نتفلیکس بر روی AWS در سه ناحیه جغرافیایی قرار دارد  (دو تا در آمریکای شمالی و یکی در اروپا) .[منبع] و در حال حاضر بیش از ۱۰۰ هزار ماشین مجازی (سرور ) بر روی AWS  دارد.[منبع] در آگوست سال ۲۰۰۸ نتفلیکس به مدت چهار روز از دسترس خارج شد. و این سراغازی برای مهاجرت از معماری یکپارچه به  سمت معماری میکروسرویس بود. در این سال نتفلیکس زیر ساخت خود را به سمت کلود  و پایگاه داده های خود را از RDBMS  به Cassandra منتقل کرد. همه این تصمیم ها برای فراهم کردن محیط مقیاس پذیر بود.در شکل زیر ارتباط میان سرویس های مختلف و ترافیک عبور ی از آنها را مشاهده میکنید.[منبع] معماری میکروسرویس در نتفلیکس همانند اسپاتیفای تیم ها کوچک که شامل تخصص های مختلف بودند وظیفه پیاده سازی سرویس ها را بر عهده گرفتند. مزایای و معایب معماری میکروسرویس طبیعتا مشابه است. نتیجه گیری :دو  برنامه بزرگ اسپاتیفای و نتفلیکس و معماری آن ها را مرور کردیم دیدیم نتفلیکس مجبور شد در سال ۲۰۰۸  معماری خود را برای پشتیانی از کاربران بیشتر و مقیاس پذیری و توسعه ساده تر به میکروسرویس تغییر دهد و اسپاتیفای که در همان سال متولد شد از همان ابتدا با رویای میلیون ها کاربر معماری میکروسرویس را انتخاب کرد.  پشتیبانی از میلیون ها کاربر و مقیاس پذیر بودن ، همواره در دسترس بودن ، امنیت بالا در برابر حملات و نوآوری و توسعه سریع از جمله نیازمندی های مشترک شرکت های بزرگ است. شرکت ها راه حل های مشابهی برای حل این نیازمندی ها دارند. استفاده از معماری میکروسرویس  بجای monolithic ، متدولوژی توسعه آجایل (چابک) جایگزین RUP ، استفاده از سرویس های کلود بجای زیرساخت اختصاصی و استفاده از CI/CD  و کانتینرزیشن (مثل داکر ) راه حل هایی هستند که در کنار هم این نیازمندی ها را برطرف کرده اند و امکان میلیون های کاربر و توسعه سریع را برای شرکت ها مهیا کرده اند.«این مطلب، تحقیقی در درس مهندسی نرم افزار پیشرفته در دانشگاه شهیدبهشتی است»منابع : [1] https://www.youtube.com/watch?v=7LGPeBgNFuU https://virgool.io/p/jxiz0vfostyc/[2]https://www.youtube.com/watch?v=57UK46qfBLY [3] https://www.youtube.com/watch?v=CZ3wIuvmHeM[4] Analysis of Netflix architecture and business model https://www.statista.com/statistics/367739/spotify-global-mau/  https://www.statista.com/statistics/483112/netflix-subscribers/  https://pt.slideshare.net/diannemarsh/how-netflix-thinks-of-devops-spoiler-we-dont  https://opensource.com/article/18/4/how-netflix-does-failovers-7-minutes-flat  https://medium.com/pm101/spotify-squad-framework-part-i-8f74bcfcd761 </description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Sat, 12 Feb 2022 23:29:37 +0330</pubDate>
            </item>
                    <item>
                <title>API Gateway</title>
                <link>https://virgool.io/@Arnasab/api-gateway-wzju6bxafiyf</link>
                <description>در این پست میخوام فهم خودمو از API Gateway با شما درمیان بذارم. اگه نظری داشتید یا مشکلی دیدید ، لطفا در نظرات برامون بنویسید.انتظار دارم تو این پست بتونم به سوالات زیر پاسخ بدم -  معنی API Gateway رو چی هست؟- برای حل چه مشکلی ارائه شد؟- چه مزایا و معایبی با خودش به همراه داره ؟- چه  از ابزار های  متن باز (open source) و معروفی تو این زمینه وجود داره؟در ایران کدوم شرکت ها در این زمینه خدماتی ارائه می دن؟خوب بیاید شروع کنیم :همانطور که میدونید API مخفف Application Programming Interface  (یا به فارسی رابط برنامه نویسی اپلیکیشن ) است. وژاه دوم gateway به معنای دروازه است .در گذشته در اطراف بسیاری از شهر ها و قلعه ها دیوار می کشیدند تا افراد برای ورود از دروازه عبور کنند. نگهبانان در کنار دروازه می ایستادند و با کمک این تکنیک ورود و خروج رو کنترل میکردند و  امنیت شهرها و قلعه ها تامین میشد. دروازه درب کوشک قزوینحالا بیاید با یه مثال نقش  API Gateway در معماری میکروسرویس ببینیماول در چند خط معماری میکروسرویس را مرور کنیم بعد ببینیم API Gateway چه چیزی به آن اضافه کردهبرای نمونه یک سایت فروشگاهی را در نظر بگیرید . در چنین سایتی احتمالا سرویس های مختلفی وجود دارد مثلا، افراد میتوانند ثبت نام کنند، کالا ها را مشاهده کنند ، کالا ها را نسبت به هم مقایسه کنند ، محصول را سفارش بدهند و پرداخت انجام دهند.در معماری Monolithic همه این سرویس ها در یک برنامه بصورت متمرکز در یک هسته مرکزی  پیاده سازی میشود گرچه ممکن است این هسته بخش بندی شده (ماژولار) باشد اما همه در یک پلتفرم واحد در کنار هم هستند و جداسازی آنها بسیار سخت یا غیرممکن است.این پیاده سازی چند مشکل جدی داشت :-  سرویس ها و کامپوننت‌ها را به سادگی نمی‌توان با یک معماری جدیدتر و بهینه‌تر جایگزین کرد چرا که کل معماری نرم‌افزار را باید تغییر داد.- یک خطا در یکی از سرویس، به احتمال زیاد کل برنامه را مختل خواهد کرد- کل اعضا مجبور هستند با زبان برنامه نویسی و تکنولوژی های مشترک استفاده کنندموارد بالا نگهداری و ارتقا برنامه ها را بسیار سخت میکرد معماری میکروسرویس برای حل این مشکلات ارائه شد.میکروسرویس‌ یک روش به منظور تقسیم‌بندی کردن یک اپلیکیشن (نرم‌افزار) به بخش‌ها یا سرویس‌های کوچک، مستقل از یکدیگر است. این سرویس ها به منظور مدیریت کردن یک وظیفه خاص طراحی میشوند مثلا میکروسرویس پرداخت، ثبت سفارش ، مشاهده کالا و ...این سرویس ها عموما به وسیله API از نوع Rest یا SOAP با یکدیگر ارتباط برقرار میکنند.به کمک این معماری سرویس های مختلف از هم جدا شدند میتوانند بصورت مستقل توسعه پیدا کنند. در واقع اگر ما وظیفه پیاده سازی یک سرویس بر عهده داشته باشیم دیگر به جزییات پیاده سازی بقیه سرویس ها اهمیت نمیدهیم . فقط در قالب مشخص شده سرویس میدهیم و با دیگر سرویس اربتاط خواهیم داشت.این معماری تقریبا مشکلاتی که در بالا مطرح کردیم برطرف میکند اما یک مشکل جدید بوجود می آید . فرض کنید شرکت ما یک اپلیکیشن برای موبایل های اندروید و یکی برای ios یک وب دارد طبیعتا هر یک از نرم افزار ها بخواهد به میکروسرویس ها درخواست ارسال کند و داده دریافت کند. باتوجه به اینکه هر یک از میکروسرویس ها استاندارد متفاوتی دارند کار برای پیاده سازی اپلیکیشن و وب بسیار سخت خواهد شد و به شدت به ماکروسرویس ها وابسته خواهند شد و این باز باعث سخت شدن توسعه نرم افزار می شود بیایید تصور کنیم که در حال توسعه یک کلاینت موبایل برای یک برنامه خرید هستید. این احتمال وجود دارد که شما نیاز به پیاده سازی صفحه جزئیات محصول داشته باشید که اطلاعات مربوط به هر محصول را نمایش می دهد.به عنوان مثال، نمودار زیر نشان می دهد که هنگام پیمایش جزئیات محصول در برنامه تلفن همراه اندروید آمازون، چه چیزی را خواهید دید.حتی اگر این یک برنامه کاربردی گوشی هوشمند است، صفحه جزئیات محصول اطلاعات زیادی را نشان می دهد. به عنوان مثال، نه تنها اطلاعات اولیه محصول (مانند نام، توضیحات و قیمت) وجود دارد، بلکه این صفحه همچنین نشان می دهد:تعداد اقلام در سبد خریدتاریخچه سفارش هانظرات مشتریانهشدار موجودی کمگزینه های حمل و نقلتوصیه های مختلف، از جمله سایر محصولاتی که این محصول اغلب با آنها خریداری می شود، سایر محصولات خریداری شده توسط مشتریانی که این محصول را خریداری کرده اند، و سایر محصولات مشاهده شده توسط مشتریانی که این محصول را خریداری کرده اند.گزینه های خرید جایگزینهنگام استفاده از معماری برنامه یکپارچه، یک کلاینت تلفن همراه با برقراری یک تماس REST ( ) با برنامه، این داده ها را بازیابی می کند. یک متعادل کننده بار درخواست را به یکی از N نمونه برنامه یکسان هدایت می کند. سپس برنامه از جداول پایگاه داده مختلف پرس و جو می کند و پاسخ را به مشتری برمی گرداند.GET api.company.com/productdetails/productIdدر مقابل، هنگام استفاده از معماری میکروسرویس، داده های نمایش داده شده در صفحه جزئیات محصول متعلق به چندین میکروسرویس است. در اینجا برخی از میکروسرویس‌های بالقوه که داده‌های خود را در صفحه جزئیات محصول نمونه نمایش می‌دهند، آمده است:خدمات سبد خرید - تعداد اقلام در سبد خریدخدمات سفارش - تاریخچه سفارشخدمات کاتالوگ – اطلاعات اولیه محصول، مانند نام، تصویر و قیمت آنخدمات بررسی - نظرات مشتریانخدمات موجودی - هشدار موجودی کمخدمات حمل و نقل - گزینه های حمل و نقل، مهلت ها و هزینه ها به طور جداگانه از API ارائه دهنده حمل و نقل ترسیم شده استخدمات (های) توصیه - موارد پیشنهادیما باید تصمیم بگیریم که مشتری موبایل چگونه به این خدمات دسترسی دارد. بیایید به گزینه ها نگاه کنیم.ارتباط مستقیم مشتری با میکروسرویسدر تئوری، یک مشتری می‌تواند مستقیماً به هر یک از میکروسرویس‌ها درخواست بدهد. هر میکروسرویس یک نقطه پایانی عمومی ( https:// serviceName .api.company.name ) خواهد داشت. این URL به بار متعادل کننده میکروسرویس نگاشت می شود، که درخواست ها را در نمونه های موجود توزیع می کند. برای بازیابی جزئیات محصول، مشتری تلفن همراه برای هر یک از خدمات ذکر شده در بالا درخواست می دهد.متأسفانه، این گزینه چالش ها و محدودیت هایی دارد. یکی از مشکلات عدم تطابق بین نیازهای مشتری و API های ریز دانه ای است که توسط هر یک از میکروسرویس ها در معرض دید قرار می گیرند. مشتری در این مثال باید هفت درخواست جداگانه ارائه دهد. در برنامه‌های پیچیده‌تر، ممکن است نیاز به ساخت خیلی بیشتر باشد. به عنوان مثال، آمازون توضیح می دهد که چگونه صدها سرویس در ارائه صفحه محصول خود نقش دارند. در حالی که یک کلاینت می تواند این تعداد درخواست را از طریق یک شبکه LAN انجام دهد، احتمالاً از طریق اینترنت عمومی بسیار ناکارآمد خواهد بود و قطعاً از طریق شبکه تلفن همراه غیرعملی خواهد بود. این رویکرد همچنین کد مشتری را بسیار پیچیده تر می کند.مشکل دیگر مشتری که مستقیماً با میکروسرویس ها تماس می گیرد این است که برخی ممکن است از پروتکل هایی استفاده کنند که وب پسند نیستند. یک سرویس ممکن است از Thrift باینری RPC استفاده کند در حالی که سرویس دیگری ممکن است از پروتکل پیام رسانی AMQP استفاده کند. هیچ‌کدام از پروتکل‌ها به‌خصوص برای مرورگر یا فایروال مناسب نیستند و بهتر است به صورت داخلی استفاده شوند. یک برنامه کاربردی باید از پروتکل هایی مانند HTTP و WebSocket خارج از فایروال استفاده کند.یکی دیگر از اشکالات این روش این است که بازسازی میکروسرویس ها را دشوار می کند. با گذشت زمان ممکن است بخواهیم نحوه پارتیشن بندی سیستم به سرویس ها را تغییر دهیم. برای مثال، ممکن است دو سرویس را ادغام کنیم یا یک سرویس را به دو یا چند سرویس تقسیم کنیم. با این حال، اگر مشتریان مستقیماً با خدمات ارتباط برقرار کنند، انجام این نوع بازسازی می تواند بسیار دشوار باشد.به دلیل این نوع مشکلات، به ندرت منطقی است که مشتریان مستقیماً با میکروسرویس ها صحبت کنند.استفاده از دروازه APIمعمولاً یک رویکرد بسیار بهتر استفاده از چیزی است که به عنوان دروازه API شناخته می شود . API Gateway سروری است که تنها نقطه ورود به سیستم است. این شبیه به الگوی نما از طراحی شی گرا است. API Gateway معماری سیستم داخلی را محصور می کند و یک API را ارائه می دهد که برای هر مشتری طراحی شده است. ممکن است مسئولیت‌های دیگری مانند احراز هویت، نظارت، تعادل بار، ذخیره‌سازی، شکل‌دهی و مدیریت درخواست، و مدیریت پاسخ استاتیک داشته باشد.نمودار زیر نشان می دهد که چگونه یک API Gateway به طور معمول در معماری قرار می گیرد:دروازه API مسئول مسیریابی درخواست، ترکیب و ترجمه پروتکل است. تمام درخواست های مشتریان ابتدا از طریق دروازه API انجام می شود. سپس درخواست ها را به میکروسرویس مناسب هدایت می کند. API Gateway اغلب یک درخواست را با فراخوانی چندین میکروسرویس و جمع‌آوری نتایج انجام می‌دهد. می تواند بین پروتکل های وب مانند HTTP و WebSocket و پروتکل های غیردوستانه وب که به صورت داخلی استفاده می شوند ترجمه کند.در API Gateway همچنین می تواند برای هر مشتری یک API سفارشی ارائه کند. معمولاً یک API درشت دانه را برای مشتریان تلفن همراه نشان می دهد. به عنوان مثال، سناریوی جزئیات محصول را در نظر بگیرید. دروازه API می تواند یک نقطه پایانی ( /productdetails?productid= xxx ) ارائه دهد که به مشتری موبایل امکان می دهد تمام جزئیات محصول را با یک درخواست بازیابی کند. API Gateway با فراخوانی خدمات مختلف - اطلاعات محصول، توصیه‌ها، بررسی‌ها و غیره - و ترکیب نتایج، درخواست را مدیریت می‌کند.یک نمونه عالی از یک دروازه API، دروازه API Netflix است . سرویس پخش جریانی Netflix در صدها نوع مختلف دستگاه از جمله تلویزیون، ست تاپ باکس، تلفن های هوشمند، سیستم های بازی، تبلت ها و غیره در دسترس است. در ابتدا، Netflix تلاش کرد یک API یک اندازه برای سرویس پخش خود ارائه دهد. با این حال، آنها متوجه شدند که به دلیل طیف متنوع دستگاه ها و نیازهای منحصر به فرد آنها، به خوبی کار نمی کند. امروزه، آنها از یک دروازه API استفاده می کنند که با اجرای کد آداپتور مخصوص دستگاه، یک API متناسب با هر دستگاه ارائه می دهد. یک آداپتور معمولاً هر درخواست را با فراخوانی به طور متوسط ​​6 تا 7 سرویس باطن انجام می دهد. دروازه API Netflix به میلیاردها درخواست در روز رسیدگی می کند.مزایا و معایب یک دروازه APIهمانطور که انتظار دارید، استفاده از API Gateway هم مزایا و هم معایبی دارد. مزیت اصلی استفاده از دروازه API این است که ساختار داخلی برنامه را محصور می کند. مشتریان به جای درخواست از خدمات خاص، به سادگی با دروازه صحبت می کنند. API Gateway برای هر نوع کلاینت یک API خاص ارائه می کند. این باعث کاهش تعداد رفت و برگشت بین مشتری و برنامه می شود. همچنین کد مشتری را ساده می کند.در API Gateway نیز دارای اشکالاتی است. این یکی دیگر از مؤلفه‌های بسیار در دسترس است که باید توسعه، مستقر و مدیریت شود. همچنین این خطر وجود دارد که دروازه API به یک گلوگاه توسعه تبدیل شود. توسعه دهندگان باید API Gateway را به روز کنند تا نقاط پایانی هر میکروسرویس را در معرض دید قرار دهند. مهم است که روند به روز رسانی API Gateway تا حد امکان سبک باشد. در غیر این صورت، توسعه دهندگان برای به روز رسانی دروازه مجبور خواهند شد در صف منتظر بمانند. با وجود این اشکالات، برای اکثر برنامه های کاربردی دنیای واقعی، استفاده از دروازه API منطقی است.پیاده سازی API Gatewayاکنون که به انگیزه ها و مبادلات استفاده از دروازه API نگاه کردیم، بیایید به مسائل طراحی مختلفی که باید در نظر بگیرید نگاه کنیم.عملکرد و مقیاس پذیریتنها تعداد انگشت شماری از شرکت ها در مقیاس نتفلیکس فعالیت می کنند و نیاز به رسیدگی به میلیاردها درخواست در روز دارند. با این حال، برای اکثر برنامه ها عملکرد و مقیاس پذیری API Gateway معمولا بسیار مهم است. بنابراین منطقی است که API Gateway را بر روی پلتفرمی بسازیم که از ورودی/خروجی ناهمزمان و غیر مسدود کننده پشتیبانی کند. انواع مختلفی از فناوری های مختلف وجود دارد که می توان از آنها برای پیاده سازی یک API Gateway مقیاس پذیر استفاده کرد. در JVM می‌توانید از یکی از چارچوب‌های مبتنی بر NIO مانند Netty، Vertx، Spring Reactor یا JBoss Undertow استفاده کنید. یکی از گزینه های محبوب غیر JVM Node.js است که پلتفرمی است که بر روی موتور جاوا اسکریپت کروم ساخته شده است. گزینه دیگر استفاده از NGINX Plus است. NGINX Plus یک وب سرور بالغ، مقیاس پذیر و با کارایی بالا و پروکسی معکوس ارائه می دهد که به راحتی مستقر، پیکربندی و برنامه ریزی می شود. NGINX Plus می‌تواند احراز هویت، کنترل دسترسی، درخواست‌های متعادل‌سازی بار، پاسخ‌های ذخیره‌سازی را مدیریت کند و بررسی‌ها و نظارت بر سلامت آگاهانه از برنامه را ارائه می‌دهد.استفاده از مدل برنامه نویسی واکنشیدر API Gateway برخی از درخواست ها را به سادگی با مسیریابی آنها به سرویس Backend مناسب رسیدگی می کند. با فراخوانی چندین سرویس پشتیبان و جمع‌آوری نتایج، سایر درخواست‌ها را مدیریت می‌کند. با برخی از درخواست‌ها، مانند درخواست جزئیات محصول، درخواست‌های مربوط به خدمات پشتیبان مستقل از یکدیگر هستند. به منظور به حداقل رساندن زمان پاسخ، API Gateway باید درخواست های مستقل را همزمان انجام دهد. با این حال، گاهی اوقات، وابستگی هایی بین درخواست ها وجود دارد. API Gateway ممکن است ابتدا نیاز داشته باشد تا درخواست را با فراخوانی یک سرویس احراز هویت، قبل از مسیریابی درخواست به یک سرویس باطن، تأیید کند. به طور مشابه، برای واکشی اطلاعات در مورد محصولات در لیست خواسته های مشتری، دروازه API ابتدا باید نمایه مشتری حاوی آن اطلاعات را بازیابی کند و سپس اطلاعات مربوط به هر محصول را بازیابی کند.شبکه ویدئویی نتفلیکس .نوشتن کد ترکیب API با استفاده از رویکرد برگشت به تماس ناهمزمان سنتی به سرعت شما را به جهنم پاسخ به تماس سوق می دهد. کد درهم، درک آن دشوار و مستعد خطا خواهد بود. یک روش بسیار بهتر این است که کد API Gateway را با استفاده از رویکرد واکنشی به سبک اعلانی بنویسید. نمونه هایی از انتزاعات واکنشی عبارتند از Future در Scala، CompletableFuture در جاوا 8 و Promise در جاوا اسکریپت. افزونه‌های Reactive نیز وجود دارد(همچنین Rx یا ReactiveX نامیده می شود)، که در ابتدا توسط مایکروسافت برای پلت فرم دات نت توسعه داده شد. نتفلیکس RxJava را برای JVM به طور خاص برای استفاده در دروازه API خود ایجاد کرد. RxJS برای جاوا اسکریپت نیز وجود دارد که هم در مرورگر و هم در Node.js اجرا می شود. استفاده از یک رویکرد واکنشی شما را قادر می سازد تا کد API Gateway ساده و در عین حال کارآمد بنویسید.فراخوان خدماتیک برنامه کاربردی مبتنی بر میکروسرویس یک سیستم توزیع شده است و باید از مکانیزم ارتباط بین فرآیندی استفاده کند. دو سبک ارتباط بین فرآیندی وجود دارد. یکی از گزینه ها استفاده از مکانیزم ناهمزمان و مبتنی بر پیام است. برخی از پیاده سازی ها از یک واسطه پیام مانند JMS یا AMQP استفاده می کنند. سایرین، مانند Zeromq، بدون واسطه هستند و خدمات به طور مستقیم ارتباط برقرار می کنند. سبک دیگر ارتباط بین فرآیندی یک مکانیسم همزمان مانند HTTP یا Thrift است. یک سیستم معمولاً از هر دو سبک ناهمزمان و سنکرون استفاده می کند. حتی ممکن است از چندین پیاده سازی از هر سبک استفاده کند. در نتیجه، API Gateway باید از مکانیسم‌های ارتباطی مختلفی پشتیبانی کند.کشف خدماتدر API Gateway باید مکان (آدرس IP و پورت) هر میکروسرویسی که با آن در ارتباط است را بداند. در برنامه‌های سنتی، احتمالاً می‌توانید مکان‌ها را سیم‌کشی کنید، اما در برنامه‌های میکروسرویس مدرن مبتنی بر ابر، این یک مشکل غیر ضروری است. سرویس‌های زیرساخت، مانند کارگزار پیام، معمولاً دارای یک مکان ثابت هستند که می‌تواند از طریق متغیرهای محیط سیستم عامل مشخص شود. با این حال، تعیین مکان یک سرویس برنامه چندان آسان نیست. سرویس‌های برنامه دارای مکان‌هایی به صورت پویا هستند. همچنین مجموعه ای از نمونه های یک سرویس به دلیل مقیاس خودکار و ارتقاء به صورت پویا تغییر می کند. در نتیجه، دروازه API، مانند هر سرویس گیرنده دیگری در سیستم، باید از مکانیسم کشف سرویس سیستم استفاده کند: یا کشف سمت سرور یاکشف سمت مشتری . مقاله بعد خواهد کشف سرویس با جزئیات بیشتر توضیح می دهیم. در حال حاضر، شایان ذکر است که اگر سیستم از کشف سمت مشتری استفاده می‌کند، درگاه API باید بتواند رجیستری سرویس را که پایگاه داده‌ای از تمام نمونه‌های میکروسرویس و مکان‌های آنها است، جستجو کند.رسیدگی به شکست های جزئییکی دیگر از مسائلی که باید هنگام پیاده سازی یک API Gateway به آن بپردازید، مشکل شکست جزئی است. این موضوع در همه سیستم های توزیع شده زمانی که یک سرویس با سرویس دیگری تماس می گیرد که یا کند پاسخ می دهد یا در دسترس نیست، ایجاد می شود. دروازه API هرگز نباید به طور نامحدود منتظر یک سرویس پایین دستی را مسدود کند. با این حال، نحوه رسیدگی به خرابی به سناریوی خاص و اینکه کدام سرویس در حال شکست است بستگی دارد. به عنوان مثال، اگر سرویس توصیه در سناریوی جزئیات محصول پاسخگو نباشد، API Gateway باید بقیه جزئیات محصول را به مشتری برگرداند زیرا هنوز برای کاربر مفید هستند. توصیه‌ها می‌توانند خالی باشند یا مثلاً با یک لیست ده برتر سیم‌کشی شده جایگزین شوند. با این حال، اگر سرویس اطلاعات محصول پاسخگو نباشد، API Gateway باید یک خطا را به مشتری بازگرداند.در API Gateway همچنین می‌تواند داده‌های کش شده را در صورت موجود بودن بازگرداند. به عنوان مثال، از آنجایی که قیمت محصول به ندرت تغییر می کند، در صورتی که سرویس قیمت گذاری در دسترس نباشد، API Gateway می تواند داده های قیمت گذاری ذخیره شده را برگرداند. داده ها را می توان توسط خود API Gateway ذخیره کرد یا در یک کش خارجی مانند Redis یا Memcached ذخیره کرد. با برگرداندن داده های پیش فرض یا داده های حافظه پنهان، API Gateway تضمین می کند که خرابی های سیستم بر تجربه کاربر تأثیر نمی گذارد.در Netflix Hystrix یک کتابخانه فوق العاده مفید برای نوشتن کدی است که خدمات از راه دور را فراخوانی می کند. Hystrix تماس هایی را که از آستانه تعیین شده فراتر می روند، دفع می کند. این یک الگوی قطع کننده مدار را اجرا می کند ، که مشتری را از انتظار بیهوده برای یک سرویس بی پاسخ باز می دارد. اگر میزان خطای یک سرویس از آستانه مشخص شده فراتر رود، Hystrix مدار شکن را خاموش می کند و همه درخواست ها بلافاصله برای یک دوره زمانی مشخص با شکست مواجه می شوند. Hystrix به شما این امکان را می‌دهد تا زمانی که درخواستی با شکست مواجه می‌شود، یک عمل بازگشتی تعریف کنید، مانند خواندن از حافظه پنهان یا برگرداندن یک مقدار پیش‌فرض. اگر از JVM استفاده می کنید، حتما باید از Hystrix استفاده کنید. و اگر در یک محیط غیر JVM در حال اجرا هستید، باید از یک کتابخانه معادل استفاده کنید.خلاصهبرای اکثر برنامه‌های کاربردی مبتنی بر میکروسرویس، پیاده‌سازی یک API Gateway که به عنوان یک نقطه ورودی واحد در یک سیستم عمل می‌کند، منطقی است. دروازه API مسئول مسیریابی درخواست، ترکیب و ترجمه پروتکل است. به هر یک از مشتریان برنامه یک API سفارشی ارائه می کند. API Gateway همچنین می‌تواند با برگرداندن داده‌های ذخیره‌شده یا پیش‌فرض، خرابی‌های سرویس‌های پشتیبان را پنهان کند. در مقاله بعدی این مجموعه به ارتباط بین سرویس ها خواهیم پرداخت.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»منابع : https://www.nginx.com/blog/building-microservices-using-an-api-gateway/ </description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Fri, 24 Dec 2021 23:16:30 +0330</pubDate>
            </item>
                    <item>
                <title>Message Queue</title>
                <link>https://virgool.io/@Arnasab/message-queue-buz6zhqcpv7w</link>
                <description>این بار میخوام فهم خودمو از صف پیام ها (یا  Message Queue)  با شما به اشتراک بذارم. اگه جایی به نظرتون بد یا اشتباه گفته شده خوشحال میشم در بخش نظرات بهم بگید. همچنین اگر تجربه جالب یا ارزشمندی از ابزار های این حوزه دارید در نظرات با ما سهیم شید در این پست امیدوارم بتونم بگم این صف پیام ها چی هست ؟ و اینکه چه مشکلی رو قرار حل کنه؟ ابزارهای مطرح رو هم در این زمینه یه نگاهی  بندازیم و اگر اسمشون یه جایی به گوشمون خورد بدونیم هدف این ابزار ها چیه؟بیاید فرض کنیم میخواهیم یک پیامی رو به یک نفر منتقل کنیم یه خبر یا چیز دیگری . یک راهکار اینه زنگ  بزنیم سریع و خوب به نظر میرسه و راهکار دوم که احتمالا به ذهن ما میرسه که اون پیام را پیامک کنیم. بیاید این دو راهکار بررسی کنیم: اگر  زمان خوبی باشه و طرف مقابل ما در دسترس باشه و سرش شلوغ نباشه احتمالا تلفن زدن راهکار مناسب تر و سریع تری به نظر میرسه. اما اگر مشغول کاری باشد یا در دسترس نباشه چی ؟  نتیجه اینه جواب تلفن رو نمیده . ما باید دوباره و دوباره زنگ بزنیم تا هر وقت آقا جوابمون رو داد بتونیم پیاممون رو منتقل کنیم. این زمانبر و تکراری است و شاید برای همینه در این شرایط ترجیح میدیم پیامک کنیم.این قضیه بین برنامه ها هم وجود داره فرض کنید یه برنامه پیوسته داده میفرسته و یه برنامه دیگه پیوسته داده رو باید بگیره و عملی روی اون انجام بده. اگر سرعت ارسال داده زیاد بشه و یا به دلیلی دیگه  دقایقی این برنامه نتونه این داده ها رو دریافت کنه چه کار باید کرد؟ این داده از دست خواهد رفت بهترین راهکار استفاده از صف است اگر سرعت ارسال پیام بیشتر از دریافت باشد پیام ها در این صف قرار میگیرند و گیرنده پیام ها را از صف میخواند.یک صف پیام یک پروتکل ارتباطی ناهمزمان را ارائه می دهد، که سیستمی است که پیامی را در صف پیام قرار می دهد و نیازی به پاسخ فوری به پردازش ادامه ندارد. ایمیل احتمالاً بهترین نمونه از ارتباطات ناهمزمان است. هنگامی که یک ایمیل ارسال می شود، فرستنده به پردازش موارد دیگر بدون نیاز به پاسخ فوری از طرف گیرنده ادامه می دهد. این روش مدیریت پیام، تولید کننده را از مصرف کننده جدا می کند تا نیازی به تعامل همزمان با صف پیام نداشته باشد.جداسازی و مقیاس پذیریجداسازی نشان می‌دهد که یک بخش از یک سیستم چقدر به بخش دیگری از سیستم متکی است. جداسازی فرآیند جداسازی توابع است به گونه‌ای که آنها بیشتر خودکفا باشند.یک سیستم جدا شده زمانی حاصل می شود که دو یا چند سیستم قادر به برقراری ارتباط بدون اتصال باشند. سیستم ها می توانند کاملاً مستقل باقی بمانند و از عملکردهای دیگر بی اطلاع باشند. جداسازی اغلب نشانه یک سیستم کامپیوتری است که به خوبی ساختار یافته است زیرا نگهداری از آن آسان تر است.اگر یک فرآیند در یک سیستم جدا شده نتواند پیام‌ها را از صف پردازش کند، پیام‌های دیگر همچنان می‌توانند به صف اضافه شوند و پس از بازیابی سیستم پردازش شوند. همچنین می‌توانید از صف پیام برای به تأخیر انداختن پردازش استفاده کنید - برای مثال، یک تولیدکننده پیام‌ها را به یک صف ارسال می‌کند. در زمان مقرر، مصرف کنندگان پیام ها را در صف شروع و پردازش می کنند. یک پیام در صف را می توان ذخیره و باز ارسال کرد و پیام را می توان تا زمانی که پردازش شود دوباره تحویل داد.به جای ساختن یک برنامه بزرگ، جدا کردن بخش های مختلف برنامه و برقراری ارتباط بین آنها به صورت ناهمزمان با استفاده از صف های پیام مفید است. این اجازه می دهد تا بخش های مختلف برنامه به طور مستقل تکامل یابد، به زبان های مختلف نوشته شود، و/یا توسط تیم های توسعه مجزا نگهداری شود.یک صف پیام، فرآیندهای برنامه شما را مجزا و مستقل از یکدیگر نگه می دارد. اولین فرآیند هرگز نیازی به فراخوانی فرآیند دیگری، ارسال اعلان‌ها به فرآیند دیگر یا دنبال کردن جریان فرآیند سایر فرآیندها نخواهد داشت. فقط می تواند پیام را در صف قرار دهد و سپس پردازش را ادامه دهد. سایر فرآیندها نیز می توانند کار خود را به طور مستقل انجام دهند و هنگامی که می توانند آنها را پردازش کنند، پیام ها را از صف دریافت می کنند. این روش مدیریت پیام ها سیستمی را ایجاد می کند که نگهداری و مقیاس آن آسان است.صف پیام - یک مورد استفاده سادهتصور کنید وب سرویسی دارید که در هر ثانیه درخواست های زیادی دریافت می کند، جایی که هیچ درخواستی گم نمی شود و همه درخواست ها باید توسط تابعی پردازش شوند که توان عملیاتی بالایی دارد. به عبارت دیگر، وب سرویس همیشه باید بسیار در دسترس و آماده دریافت درخواست جدید باشد به جای اینکه با پردازش درخواست های دریافتی قبلی قفل شود.در این مورد، قرار دادن یک صف بین وب سرویس و سرویس پردازش ایده آل است. وب سرویس می تواند پیام &quot;شروع پردازش&quot; را در یک صف قرار دهد و فرآیند دیگر می تواند پیام ها را به ترتیب دریافت و مدیریت کند. این دو فرآیند از یکدیگر جدا شده اند و نیازی به انتظار ندارند. اگر در مدت زمان کوتاهی درخواست های زیادی داشته باشید، سیستم پردازش قادر به پردازش همه آنها خواهد بود. صف با درخواست ها ادامه می یابد حتی اگر تعداد آنها افزایش یابد.سپس تصور کنید که کسب و کار و حجم کار در حال رشد است و سیستم نیاز به افزایش مقیاس دارد. تنها کاری که باید انجام شود این است که مصرف کنندگان بیشتری را اضافه کنیم تا سریعتر از صف ها خارج شوند.ابزار ها آپاچی کافکا : آپاچی کافکا یک پلتفرم متن باز  هست که توسط بنیاد نرم افزار آپاچیبا اسکالا و جاوا نوشته شده. هدف این پروژه ارائه یک پلتفرم قدرتمند با تاخیر کم واحد  ویکپارچه برای ویرایش اطلاعات ورودی به آن در مقیاس واقعی است RabbitMQاگر شروع به بررسی یک راه حل مبتنی بر صف کنید، CloudAMQP میزبانی صف پیام را با RabbitMQ ارائه می دهد. RabbitMQ یک میان افزار متن باز پیام گرا است که پروتکل صف پیام پیشرفته (AMQP) را پیاده سازی می کند. AMQP دارای ویژگی هایی مانند صف بندی، مسیریابی، قابلیت اطمینان و امنیت است. اطلاعات بیشتر در مورد CloudAMQP را اینجا بخوانید.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»منابع : https://www.cloudamqp.com/blog/what-is-message-queuing.html </description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Fri, 24 Dec 2021 22:53:16 +0330</pubDate>
            </item>
                    <item>
                <title>Containerization and container orchestration</title>
                <link>https://virgool.io/@Arnasab/containerization-and-container-orchestration-c3pwepptwkbc</link>
                <description>یکی از عبارت هایی که در بین کامپیوتری ها  این روزا ها زیاد می‌شنویم عبارت کانتینر و داکر و کوبرنتیزه   مطالبی که در این زمینه خوندم رو میخوام با شما به اشتراک بذارم. اگه جایی به نظرتون بد یا اشتباه گفته شده خوشحال میشم در بخش نظرات بهم بگید. همچنین اگر تجربه جالب یا ارزشمندی از ابزار های این حوزه دارید در نظرات با ما در میان بزارید.بیاید اول معنی کانتینر رو بفهمیم کانیتینر چی هست ؟  برای قرن های متمادی از حمل و نقل دریایی برای انتقال کالا ها استفاده میشد. اما با توجه به اینکه کالا ها از لحاظ شکل و اندازه با هم متفاوت اند همواره مشکلات زیادی درحمل و نقل آنها وجود داشته . یک نمونه کانتینر ماکوم ملکین در سال 1950 با ایده یکپارچه سازی کالا کانتینراسون را معرفی کرد.در واقع با این تکنیک همه کالا ها در یک جعبه فلزی با نام کانتینر (به فارسی بارگنج) قرار میگرفتند. اجناسی که داخل آنها قرار میگرفتند بدلیل جنس فلزی و محکم کانتینر از آسیب ها در امان هستند و درعین حال ابعادشون استاندارده و این باعث میشه بخوبی روی هم سوار بشند. اینطوری کشتی ها خیلی سریعتر و مقدار بیشتری میتونستند بار بزنند. کانتینر ها خیلی زود جای خودشون تو صنعت حمل نقل پیدا کردند و الان تو حمل و نقل زمینی و هوایی هم استفاده می شداین ایده به سرعت در جاهای دیگه هم استفاده شد.  حتی مخزن های زباله شهر ها هم عین هم شدند تا کار پدافند شهری راحتتر بشهخوب تا الان با معنی و مفهوم کانتینر در دنیای حمل و نقل آشنا شدیم حالا ببینیم این مفهوم کی وارد کامپیوتر شد؟کانتینر در کامپیوترتقریبا می توان گفت کانتینر ها در کامپیوتر هم (مشابه دنیای خارج) به معنای جداسازی و بسته بندی برنامه ها جهت سهولت در توسعه و حمل و اجرای آن ها است. این مفهوم تقریبا جدیده و شاید نگاهی به تایخچه ورود این مفهوم به کامپیوتر درک خیلی بهتری به ما بده.مرحله اول : chrootمخفف change root سال 1979 میلادی با اضافه شدن chroot در  unix 7 اولین بار ایزوله کردن سرویس ها اتفاق افتاد.در واقع دایرکتوری روت را ازنظر برنامه تغییر می دهد و بنابراین برنامه فقط دایرکتوری که ما مشخص کردیم را به عنوان روت می بینید و به بیرون دسترسی ای ندارد  (اصلا نمیدونه بالا از اون دایرکتوری دایرکتوری دیگه ای هم هست) و در نتیجه اگر خطایی رخ دهد حداکثر در آن دایرکتوری تاثیر گذاره مرحله دوم : jail (زندان)بعد سال 2000 مفهوم زندان (Jail) در سیستم عامل Free BSD معرفی شد که بر پایه chroot به مدیران سیستم اجازه میداد تا در سیستم عامل خود چندین زندان (بخش کوچکی از سیستم عامل که در محیط خود ایزوله است) را اجرا کنند .یا به عبارتی دیگر در سطح سیستم عامل مجازی سازی انجام دهند. زندان ها در نسخه های اول با استفاده . ابزار chroot برای کارهای ساده مناسب است اما در مواقعی که نیاز به انعطاف پذیری و پیچیدگی و ویژگی‌های خاصی باشد، نمی‌توان به آن اعتماد کرد. به همین دلیل زندان ها در طول زمان و در نسخه های مدرن هسته FreeBSD پیشرفت کرده است و همچنان در حال توسعه است تا نیاز های کاربران را پاسخ دهند.در سال 2001 سیستم زندان در Linux VServer مورد بازبینی قرار گرفت و قسمت بندی منابع سیستم عامل بهبود یافت. Openvz ,  Solaris Containers در همین زمینه سال 2004و 2005 معرفی شدند.درباره مکانیزم زندان می توانید بیشتر بخوانید. https://en.wikipedia.org/wiki/FreeBSD_jailمرحله سوم : قابلیت cgroup &amp; namespaceقابلیت cgroups(Control Groups) و namespace در سال 2008 به کرنل لینوکس اضافه شد. در واقع ما cgroups میتونیم بخشی از منابع سیستم عامل بگیریم به یک پردازش (یا مجموعه از پردازش ها) اختصاص بدیم. در نتیجه اون پردازه فقط همین منابع رو برای خودش میبینه به بقیه دسترسی نداره و ایزوله میشه.بطور خلاصه این قابلیت 1.محاسبه 2.تعیین سقف استفاده (limit) 3. ایزوله کردن منابع سیستم عامل (CPU, memory, disk I/O, network ,…) برای مجموعه ای پردازش ها را بر عهده دارد.در شکل زیر میبینید هر یک از گروه های کنترلی (cgroup) منابعی بخشی از منابع رو بصورت ایزوله دریافت کرده اند.مرحله چهارم : Containerبعد در سال ۲۰۰۸  LXC (Linux Container) معرفی شد که صرفا با استفاده از قابلیت های جدید کرنل لینوکس محیط ایزوله در اختیار پردازه ها قرار میداد. این شروع یک انقلاب در حوزه کامپیوتر بود. بعد ها تکنولوژی های زیادی بر پایه LXC بوجود اومدند که مهمترین اونها در سال ۲۰۱۳ داکر بود.مزیت داکر نسبت به بقیه سطح بالا بودن و سادگی اون بود که باعث شد به سرعت به محبوبیت باورنکردنی ای برسه. داکر اگرچه ابتدا با استفاده از LXC کانتیریزیشن رو پیاده سازی میکرد ولی بعد از استقبال گسترده ، موتور خودش رو توسعه داد و جایگزین LXC  کرد و کاملا مستقل شد.فرق مجازی سازی با کانتینرزیشنامروزه مفهوم مجازی سازی رو زیاد می‌شنویم. معمولا هر وقت از مجازی سازی صحبت می‌کنند منظور آن ها مجازی‌سازی در سطح سخت افزار است که توسط Hypervisor انجام می‌شود و ماشین های مجازی (vm) ایجاد می‌شود. که یک محیط ایزوله سخت افزاری هستند و برای کار باید سیستم عامل نصب کنیم  اما سرویس ها مبتنی بر کانتینر که درباره آنها صحبت کردیم با نام مجازی سازی در سطح سیستم‌عامل شناخته می‌شوند و با استفاده از قابلیت هسته سیستم‌عامل یک محیط ایزوله از سیستم‌عامل را به نام کانتینر در اختیار برنامه ها قرار می‌دهند.ارتباط میان حافظه-شبکه کانتینرها و مدیریت آنها توسط Container Engine (در اینجا داکر انجین) صورت می‌گیرد.پس تا اینجا فهمیدیم داکر و دیگر سرویس های مبتنی بر کانتینر یک محیط ایزوله از سیستم عامل به نام کانتینر در اختیار ما  قرار میدهند . حالا ببینیم اینها چه مزیت و معایبی به ما میدن.فواید کانتینر ها خوب کانیتنر در دنیای واقعی را به خاطر بیاورید آنها آمدند تا به سادگی بارگیری و منتقل شوند. همین مزیت در کامپیوتر وجود دارد در  واقع هر وقت بتوانیم یک کانتینر در یک محیط ایزوله (مبتنی بر لینوکس) به درستی اجرا کنیم پس میتوانیم در هر محیط ایزوله ی دیگر هم (مبتنی بر لینوکس ) این کار را چرا که هسته های سیستم عامل ها یکسان  و محیط ها ایزوله هستند.  فقط کافی است در مقصد هم ابزاری مثل داکر نصب باشد تا بر روی  ان کانتینر را اجرا کنیم.قابل انتقال بودن و سادگی کانتینر ها بهترین ویژگی های آنهاست و این نشان میدهد انتخاب نام نام کانتینر هوشمندانه بوده است . اما کانتینر ها نسبت به ماشین های مجازی مزیت های بسیار قابل توجهی دارند . به چند نمونه اشاره می‌کنیمکارایی : مجازی سازی نیاز به نصب سیستم عامل بر روی ماشین مجازی دارد و خود سیستم عامل بخشی از منابع سیستم را مصرف میکند. و این عملا باعث میشود هنگامی که ترافیک و استفاده از منابع زیاد باشد کانتینر عملکرد مطلوب تری نسبت به ماشین های مجازی نشان بدهند.سبک بودن : کانتینر بر خلاف ماشین های مجازی برای اجرای نرم افزار ها نیازی  به نصب سیستم عامل ندارند و این باعث میشه بر خلاف ماشین های مجازی که چند گیگ حجم اشغال میکنند حجم کانتینر ها معمولا در حدود چند مگابایت باشد.انعطاف پذیری : در ماشین های مجازی ما میزان حافظه و دیسک و پردازنده ها باید مشخص کنیم یا برای تغییر آنها باید ماشین مجازی را خاموش و منابع را اصلاح و دوباره راه اندازی کنیم. درحالی که کانتینر چنین محدودیتی ندارند اگر نیاز به منابع بیشتر داشته باشند به آنها تخصیص داده خواهد شد و اگر منابع را رها کنند به صورت پویا ازآنها گرفته و به دیگر کانتیر ها تخصیص داده خواهد شد.مشکلات کانتینر ها همونطور که چند خط بالاتر گفتیم کانتینر محیط ایزوله ای از سیستم عامل رو در اختیار ما قرار میده و چون محیط کانتینر ایزوله است و هسته سیستم عامل های لینوکس مشابه اند به سادگی میشه انتقال داد و استفاده کرد. اما اگر بخواهیم از لینوکس ببریم روی ویندوز یا برعکس چی ؟ اصلا ما بالاتر گفتیم این ساخت کانتینر با استفاده از قابلیت های کرنل لینوکسه (از جمله cgroup , namespace) هست ویندوز چجوری ممکنه بتونه این کار رو انجام بده ؟ واقعیت همون چیزی بود که بالاتر گفتیم این قابلیت های در هسته لینوکس اضافه شده ولی خوب مایکروسافت هم برای اینکه اهمیت کانتینرها درک کرده بود تلاش زیادی صورت داد تا این قابلیت رو به ویندوز اضافه کنه. در سال های اخیر داکر و مایکروسافت تعاملات گسترده ای با هم داشتند تا این قابلیت هر چه بهتر در ویندوز پیاده سازی بشه و میشه گفت تاحدوی خوبی موفق بوده. الان به کمک داکر در ویندوز میتوان برنامه هایی که مخصوص ویندوز هستند رو داکرایز کرد و در ویندوز های دیگر اجرا کرد. برای فهمیدن جزییات بیشتر کانتینر در ویندوز میتونید از لینک زیر کمک بگیرید: https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/ بذارید برای فهم بهتر با چند پرسش و پاسخ این مسئله رو بفهمیم :آیا میتوان برنامه ای در ویندوز مبتنی بر کانتینر کنیم و اون رو در سیستم عامل های ویندوز دیگر اجرا کنیم؟بله.  ویندوز در سال های اخیر قابلیت ساخت محیط های ایزوله کردن پردازه ها و برنامه ها رو در هسته سیسم عامل خودش پیاده سازی کرده و میتوان اینکار را انجام داد.آیا برنامه های کانتینری ایجاد شده در لینوکس (مبتنی بر کرنل لینوکس) را بر روی ویندوز اجرا کرد؟بله اما ویندوز برای این کار از یک مجازی ساز بهینه شده در خودش استفاده میکنه در واقع ویندوز با مجازی سازی یه لینوکس مینیمال تو خودش بالامیاره بعد روی داکر اون کانتینر رو اجرا میکنه برای همین داکر ویندوز برای پروژه های بزرگ (چون معمولا کانتیر های مورد نیاز یه پروژه بزرگ مبتنی بر لینوکس هستند ) مشخصا کندتره .آیا برنامه های کانتینری ایجاد شده در ویندوز (مبتنی بر کرنل ویندوز) را بر روی لینوکس اجرا کرد؟خیر؛ چنین قابلیت فعلا وجود نداره مگر اینکه خودتون زحمت بالا اوردن یه ویندوز مجازی روی لینوکس بکشید !با توجه به نکات بالا میبینیم کانتینر به اندازه ماشین های مجازی مستقل نیستند و باید برای اجرا به اینکه مبتنی بر لینوکس هستند یا ویندوز دقت کرد . همچنین چون کانتینر درمحیط ایزوله بر روی سیستم عامل اجرا میشود اگر مشکلی در آسیب پذیری خود سیستم عامل باشد کانتینر ها هم آسیب پذیر خواهند بود. مفهوم Container Orchestration هر وقت از مفهوم مجازی بر روی سرور ها میگوییم باید از مدیریت مجازی سازی بر روی چندین سرور هم بگوییم.فرض کنید. فرض کنید یه سایت سرویس دهنده نسبتا بزرگ هستیم. طبیعتا نمیتوانمی تمام ترافیک را بر روی یک سرور مدییرت کنیم نیاز داریم بار ورودی را میان چندین سرور توزیع کنیم . (در اصطلاح load balancing  انجام دهیم ). یا در  صورت خرابی یک سرور سرویس ما متوقف نشود و هر وقت به هر دلیل یک سرور از مدار خارج شد سرور دیگر بصورت خودکار شروع به سرویس دهی کند (در اصطلاح High Availibility داشته باشم) . در چنین مسائلی نیاز داریم یک سرور در نقش مدیر مجموعه سرور های ما عمل کند. اگر این مدیریت در محیط کانتینر ها باشد، به آن Container Orchestration  می‌گوییم . به بیان دقیق تر به خودکارسازی فرایند deployment و مدیریت ، مقیاس پذیری و تنظیم شبکه کانتینر ها Container Orchestration  گفته می‌شود.در محیط های سازمانی که نیاز به مدیریت صد ها یا شاید چندین هزار کانتینر داریم قطعا نمیتوان این مدیریت را بصورت دستی برای آنها استفاده کرد و این مدیریت با ابزار های Container Orchestration امکان پذیر خواهد بود. بصورت خلاصه این ابزار ها امکانات زیر را برای کانتینر ها ارائه میدهند:تامین (Provisioning) و استقرار ( deployment )پیکر بندی (Configuration ) و زمانبندی (scheduling)تخصیص منابع در دسترس بودن کانتینر ها (Container availability )مقیاس پذیریمسیریابی ترافیک و توزیع بار (Load balancing)مانیتورینگ کانتینر هانتیجه گیری :سعی کردم در این پست به زبان ساده درباره کانتینر ها صحبت کنیم از کاربرد اونها در دنیای واقعی گفتیم و بعد بصورت خلاصه تاریخچه ورود این مفهوم به دنیای کامپیوتر رو مطرح کردیم  . معماری کانتینر ها رو با مجازی‌سازی بررسی کردیم و مزیت ها و معایب هر کدوم  رو دیدیم «این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»منابع: https://www.alibabacloud.com/knowledge/what-is-containerization  https://www.redhat.com/en/topics/containers/what-is-container-orchestration  https://www.docker.com/  https://kubernetes.io/  https://bigdata-ir.com/%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%AF%D8%A7%DA%A9%D8%B1-docker-%D8%A8%D8%A7-vserver-%D9%88-openvz-%D9%88-lxc/ </description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Fri, 24 Dec 2021 22:37:16 +0330</pubDate>
            </item>
                    <item>
                <title>مدیریت لاگ چیست ؟  + بررسی ابزار ها</title>
                <link>https://virgool.io/@Arnasab/%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D9%84%D8%A7%DA%AF-%DA%86%DB%8C%D8%B3%D8%AA-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-%D9%87%D8%A7-k33ukthwnyzw</link>
                <description>در این پست قصد داریم ابتدا بفهیم لاگ چیه ؟ بعد ببینیم چرا باید لاگ ها مدیریت بشه ؟ چه نرم افزاری هایی معروفی تو این حوزه وجود دارند؟ در آخر هم نگاهی به شرکت های ایرانی که تو این حوزه خدماتی ارائه میدهند می اندازیم. لاگ چیست؟برنامه نویس ها تو هر حوزه ای که برنامه ای می‌نویسند برای اینکه بعد بتوانند عملکرد برنامشون رو رصد کنن لاگ تولید میکنن . لاگ عموما یه فایل متنیه که برنامه نویس ها همه اتفاق هایی که مهم است و ممکن است بعدا به آن مراجعه شود را ذخیره می‌کنند. به عبارت های زیر نگاه کنید:15 FEB 2021 | 12:30:50 | ali@gmail.com | loginخط بالا میتواند یک خط از فایل لاگ باشد هر رخداد در لاگ حداقل سه قسمت را دارد :۱. زمان رخداد  ۲.منبع (یعنی اون فرایند ، سیستم یا کاربری که باعث تولید لاگ شده )  ۳. داده لاگ : که گزارش اتفاق و هر اطلاعاتی در اون زمینه نیاز داریم است.پس تا الان فهمیدیم فایل لاگ یه فایل (شاید متنی) هست که رخداد های مهم داخلش ثبت میشه بعضی لاگ ها برای انسان ها نوشته میشن (مثل لاگ بالا) یعنی مثلا اگر من برنامه نویس یه اپلیکیشن نوشتم در حین برنامه یه مشکلی پیش اومد از برنامه افتادیم بیرون! میرم به فایل لاگ نگاه می‌کنم . از روی لاگ ها بررسی میکنم برنامه در چه شرایطی یا با چه سناریویی مشکل پیدا میکنه و بعد سعی میکنم برنامه رو اصلاح کنم تا در اون شرایط دیگه مشکل پیدا نکنه. خلاصه این نوع لاگ ها ساده هستند و  انسان ها میتونن بخونن و با یک برنامه ویرایشگر متن (مثل notepad) قابل خوندن هستند. احتمالا شما هم دیدید هر وقت با یک برنامه کار میکنید برنامه میپره بیرون (در اصطلاح crash میکنه) بعد یه پیام میاد میگه مشکل رو گزارش کنید. در این مواقع معمولا یکی از فایل هایی که به سازنده ارسال میشه فایل لاگ هست تا بررسی کنن ببینن چی شد که پرید بیرون و در نسخه های بعدی مشکل رو برطرف کنن.بسیاری  از لاگ ها هم برای اینکه سیستم یا برنامه یا ابزارها اونا رو بررسی کنن ساخته میشن در این شرایط این لاگ ها رو ما نمیتونیم بخونیم (در اصطلاح human readable  نیست)  و ممکنه این فایل ها به صورت باینری ساخته شوند.چرا لاگ نیاز به مدیریت دارند؟لاگ ها اطلاعات بسیار زیادی با خود به همراه دارند. در واقع آنها ریز عملکرد سامانه ما هستند. اگر این اطلاعات به درستی استخراج شود برای توسعه دهنگان ، تیم زیرساخت بسیار مفید است . حتی اگر ماطلاعات بصورت آماری و تصویر سازی شود میتواند نگاه جامعی به مدیران محصول بدهند. برای کارشناسان امنیت در تست نفوذ ، امنیت شبکه و ..  لاگ ها مهمترین منبع اطلاعاتی هستند . در مراکز بزرگ یا نظامی شاید سامانه  هایی دیده باشید که وضعیت سرور یا سرویس ها را در لحظه (real time) پایش میکند و اطلاعات در یک داشبورد نمایش میدهد. جالب است بدانید در بسیاری موارد این اطلاعات از لاگ ها استخراج میشوند. و با ابزار ها بصورت تصویری نمایش داده میشوند. (برای نمونه به شکلی که در چند خط پایین تر آمده نگاه کنید ) اما مشکلی که وجود داره اینه که در  یک سامانه معمولی، در لحظه صد ها یا شاید هزاران لاگ تولید میشه یک برنامه معمولی آنقدر لاگ داره که بدون مدیریت لاگ، فهمیدن دلیل مشکل  بسیار سخت یا حتی غیرممکن باشه. مهمتر از تولید لاگ استخراج اطلاعات از لاگ هاست. این حجم عظیم از داده باید سازماندهی شود.تمام فعالیت ها و فرآیند ها لازم برای تولید، جمع آوری ، استخراج اطلاعات و ذخیره و نگهداری این حجم عظیم داده، (به نام لاگ ) را با مفهوم کلی مدیریت لاگ (log management) معرفی میکنند. داشبورد سامانه اطلاعات امنیتی و مدیریت رویداد (SIEM) - ایجاد شده توسط ابزار مدیریت لاگ ELKوظایف ابزار های مدیریت لاگ : پس مدیریت لاگ براساس تعریف انجمن ملی استانداردها و فناوری ها (NIST) باید بخش های زیر داشته باشد: جمع آوری لاگ ها :‌ ابتدا باید نحوه جمع آوری داده و محل ذخیره سازی آن مشخص شود. باید توع اطلاعاتی را که میخواهیم جمع آوری کنیم مشخص کنیم.  قطعا تمام اطلاعات موجود در لاگ ها را نیاز نداریم . ابزار مدیریت لاگ باید ساختاری برای تعیین نحوه جمع آوری و اعمال فیلتر های لازم و ساختار ذخیره سازی در اختیار ما بگذارد متمرکز کردن داده ها : باید این ابزار ها با سرعت تولید لاگ برنامه ها و سیستم ما هماهنگ باشند . لاگ ها را از منابع مختلف در یک محل جمع آوری کنند تا بتوانیم از آنها در ادامه اطلاعات را استخراج کنیم.جستجو در لاگ ها : این ابزار ها همچنین امکان جسنجوی پیشرفته در لاگ ها و جمع آوری داده ها با الگو های خاص به ما  می دهند. تا بتوانیم از این اطلاعات در تحلیل داده استفاده کنیم.تحلیل لاگ ها و گزارش گیری : ابزار های مدیریت لاگ امکانات تحلیل داده با کمک تکنینک های داده کاوی و آماری  بصورت خودکار و ساده فراهم میکنند. علاوه بر این این تحلیل ها را با استفاده از نمودار و شکل های گرافیکی تصویر سازی کرده به سادگی در اختیار مدیران سیستم قرا میدهندذخیره و بایگانی لاگ ها : همانطور که گفتیمدر لحظه لاگ های بسیار زیادی تولید می‌شود و طبعیتا نگهداری همیشگی آنها نیازمند حجم بالایی حافظه است . پس ما باید اول به این سوال پاسخ دهیم که تا چه زمانی میخواهیم داده ها نگهداری و ذخیره شوند. همچنین سیستم مدیریت لاگ باید از لاگ ها پشتیبان گیری کند تا در صورت خرابی یک دیسک داده ها از دست نروند. در نتیجه ابزار های مدیریت لاگ باید ذخیره سازی داده و پشتیبان گیری از آنها را برای ما انجام دهند.ابزار های معروف در حوزه مدیریت لاگحالا که با وظایف اصلی ابزار های مدیرت لاگ آشنا شدیم بیاید نگاهی ابزار های معروف در این حوزه بندازیم : ابزار ELK  عبارت ELK مخفف شده سه کلمه Elasticseach، Logstash و Kibana است. این سه تکنولوژی متن باز (open source) در کنار هم توانسته اند به یکی از بهترین و محبوب ترین ابزار های مدیریت لاگ تبدیل شوند.ELKالستیک سرچ : یک ابزار تحلیل و موتور جستجوی متن باز بسیار قدرمتند  است ابزار Logstash : رویداد ها بصورت آنلاین از تکنولوژی های مختلف میگیره و پرداش میکنه و در الستیک سرچ ذخیره میکنهابزار Kibana : امکان تحلیل داده‌های ذخیره شده در الستیک و همچنین ایجاد داشبورد و ساخت نمودارهای مختلف را رو به ما میده.ابزار Beats :  معمولا ابزار Beats به کمک پشته ELK  می آید. این ابزار وظیفه جمع آوری لاگ ها و ارسال آن به یک سرور دارددر شکل بالا ترتیب استفاده از ابزار ها را میبنیم Beats لاگ ها را جمع آوری و به یک سرور ارسال میکنه توسط Logstash این لاگ ها پردازش و سپس برای استفاده Elasticsearch ذخیره میشه. سپس با کمک الستیک به سرعت بر روی لاگ ها جستجو و نتایج را برای مصور سازی به kibana تحویل میده۲. ابزار Graylogاین ابزار هم یکی از قدرتمندترین ابزارهای مدیریت لاگ است که میتوان به کمک آن از سرور های مختلف لاگ های تجزیه و تحلیل کرد . این ابزار با ابزار های دیگر مانند MongoDB برای بیگ دیتا و Elasticsearch که  همونطور که بالاتر گفتیم برای نگه داشتن Log ها و فعال کردن جستجو متن استفاده می شه.یکپارچه سازی شده و باید آنها را هم در کنار این ابزار نصب کنیم.محیط graylog۳. ابزار Sentryیکی از ابزار open-source مدیریت لاگه که از سراسر برنامه به صورت در لحظه (real time) خطاها را جمع آوری می ‌کنه تا توسعه دهندگان به راحتی بتوانند این خطا ها را برطرف کنند. این ابزار هر خطایی را که در برنامه بوجود آمده  باشد را با جزئیات نمایش داده و خطاها را از طریق ایمیل، پیام کوتاه، Slack و ... در اختیار کاربرانش قرار می ‌دهد.یکی از مزیت های اصلی این ابزار  پشتیبانی از بسیاری از زبان های برنامه نویسی از قبیل :Javascript, Python, Ruby, Node, Go, Android, Php و ... و همچنین بسیاری از فریم ورک ها از قبیل:React, Django, Rails, Angular, Laravel, Swift, Vue و ...است .سادگی و انعطاف پذیری و قابلیت ادغام با دیگر برنامه ها  این ابزار باعث شده به ادعای سازنده بیش از 60 هزار سازمان و بیش از ۱ میلیون برنامه نویس به طور فعال از این ابزار استفاده میکنندداشبورد Centryشرکت ایرانی ارائه دهنده ابزار های مدیریت لاگ شرکت داده کاوان تصمیم یار:یکی از شرکت هایی که در حوزه مدیریت لاگ خدکات ارائه میکند داده کاوان تصمیم یار (کوالاتک) نام داردشرکت داده کاوان تصمیم یار خدمات مختلف نرم افزاری ارائه می‌دهد که یکی از آنها “پلتکو” نام دارد که “پلتفرم یکپارچه سازی و مدیریت وب سرویس” می‌باشد. پلتکو لاگ‌های سازمان به صورت خودکار جمع آوری میکند و طبق نیاز سازمان، دسته بندی‌های لازم برای هر لاگ انجام میده (با ابزار Beat) سپس متناسب با نیازهای هر سازمان، لاگ‌ها را به داده تبدیل می‌کنه . همچنین مدیر یا کاربر با سرعت لاگ مورد نظر  خودشو جستجو کنه و بهش دسترسی پیدا کنه (با کمک الستیک سرچ)علاوه بر اینها بصورت داشبورد اطلاعات را برای مانیتورینگ نمایش میده و در صورت لزوم میتونه هشدار ارسال کنه . مدیر هم میتونه بصورت کلی و جزیی از بخش های مختلف سیستم گزارشگیری کنه همونطور که مشخصه این شرکت تقریبا تمام سرویس های ضروریمدیریت لاگ رو در اختیار کاربرانش قرار میده . آتین :آتین یک شرکت دانش بنیان در پارک علم و فناوری دانشگاه تهران است که فعالیت اصلی آن در حوزه خدمات احراز هویت است.این شرکت خود را اینگونه معرفی میکند :در واقع آتین یک سرویس مدیریت هویت و دسترسی است که با تمرکز ویژه بر رضایت مشتری بر بستر زیرساخت ابری توسعه یافته است. با استفاده از سامانه آتین مراکز و سرویس دهنده های فناوری اطلاعات به راحتی می توانند دسترسی دستگاه های مختلف داخل سازمان یا اشخاصی از جمله کارمندان، شرکای تجاری و مشتریان را به تمامی سامانه ها به صورت متمرکز مدیریت نمایند. آتین تضمین می کند که دسترسی همه کاربران بر اساس سیاست واحد صورت گیرد و تمامی افراد و سرویس ها، احراز هویت، مجوزدهی و نظارت شوند.یکی از محصولات این شرکت سامانه مدیریت لاگ و مانیتورینگ کاربران است. که از اینجا میتونید اطلاعات بیشتری دربارش ببینید.این سامانه هم  رفتار های کاربران و رخداد مرتبط رو ثبت میکنه و امگان پیگیری و گزارش گیری رو به فراهم میکنهسعی کردیم در این پست نگاه کلی و در عین حال مفید به لاگ ها و لزوم مدیریت اونها بندازیم.  چند ابزار متن‌باز در اون حوزه بررسی کردیم . به شرکت هایی در ایران که در این حوزه فعال بودند پرداختیم. امیدوارم این مطلب براتون مفید بوده باشه.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»منابع : https://www.graylog.org/post/what-is-log-management-a-complete-logging-guide#:~:text=Log%20management%20is%20an%20umbrella,of%20computer-generated%20log%20data.  https://en.wikipedia.org/wiki/Log_management  http://tecmint.ir/2018/06/13/%DB%B4-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-%D9%85%D8%AA%D9%86-%D8%A8%D8%A7%D8%B2-%D9%85%D8%A7%D9%86%DB%8C%D8%AA%D9%88%D8%B1%DB%8C%D9%86%DA%AF-log-%D9%87%D8%A7-%D9%88-%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA/  https://medium.com/@ibrahim.ayadhi/visualizing-dashboards-and-elk-siem-c4a669f3fae8  https://platco.ir/  https://qualatech.ir/  https://authin.ir/  https://sentry.io/ </description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Fri, 24 Dec 2021 20:39:17 +0330</pubDate>
            </item>
                    <item>
                <title>مدل C4 چیست ؟</title>
                <link>https://virgool.io/@Arnasab/%D9%85%D8%AF%D9%84-c4-%DA%86%DB%8C%D8%B3%D8%AA-rxzjvtlatmmb</link>
                <description>خوشبختانه این روزها توفیق اجباری پیش اومد با مدل  C4 در معماری نرم افزار آشنا بشم و قصد دارم اینجا اون چیزی که فهمیدم رو به اشتراک بذارم. خوشحال میشم اگر اشکالی دیدید یا نظری داشتید در بخش نظرات منتقل کنید. در این پست قصد دارم بگم C4  از کجا اومده ؟ برای چی اومده؟ چه ویژگی هایی داره؟مدل C4 از کجا اومده ؟جناب آقای  Simon Brown  که یک توسعه دهنده و معمار نرم افزار ساکن لندن است؛ در جاهای مختلف جهان معماری نرم افزار رو در قالب کارگاه دو سه روزه تدریس میکنه؛ در این کارگاه ها از تیم ها می خواد بر اساس نیازمندی ها معماری برای نرم افزار پیشنهاد بدهند. چند نمونه از معماری هایی که تیم ها در این کارگاه ها کشیدن رو در تصاویر زیر می بینید:آقای Brown می گوید: &quot;معماری های طراحی شده در نمایش جزییات با هم تفاوت دارند و هر وقت یک طراحی رو در مقابل تیم های دیگه میزارم و ازشون میخوام تا چیزی که میفهمن رو توضیح بدن معمولا تیم ها اگر خود طراحان  توضیح ندن نمیتونن معماری رو درک کنند.&quot;مدل C4 برای چی اومده؟آقای Brown  دو تا مشکل اساسی در  طراحی ها میدید:مفهوم مشترکی از اینکه به چه میزان جزئیات در طراحی معماری نرم افزار لازم است وجود ندارد. بدیهتا نباید ارائه معماری به کارفرما ، افرادی غیر فنی یا تیم های دیگر با معماری ای که برای توسعه دهندگان اون بخش لازم است یکسان باشد.اگر در رشته ای مثل برق هر وقت یه نقشه مثل شکل زیر طراحی میشه همه از آن برداشت مشترک دارند ولی به نظر میرسه چنین چیزی در طراحی معماری نرم افزار وجود نداره یا به صورت مشترک استفاده نمیشه.   شاید این سوال پیش بیاید آیا UML  ( و دیگر راه های مدلسازی ) زبان مشترک نیستند ؟آقای Brown در پاسخ می گوید اگر شما از UML استفاده میکنید و مشکلی ندارید از آن استفاده کنید اما واقعیت اینه که اکثر شرکت ها و تیم های برنامه نویسی (ازجمله تیم هایی که از متدولوژی توسعه agile استفاده می کنند) به دلیل پیچیده بودن پروژه و محدود بودن یا دلایل ترجیح میدن دیگر بجای UML از مستطیل های خط و دایره های خودساخته (مثل تصاویر بالا) استفاده کنند.آقای Brown برای حل چالش های بالا مدل C4 را به عنوان راه حل ارائه داده که در ادامه بهش می پردازیم.مدل C4 چه ویژگی هایی داره ؟آقای Brown با بررسی سطوح مختلف در دیگر علوم مهندسی مدل C4 را بر پایه UML  و معماری 4+1 پیشنهاد داد .در این مدل اقای مدل اقای Brown چهار سطح برای انتزاع (Abstractions) معرفی می کند. (۴ تا C)که این چهار لایه شامل  context , containers ,components, code می‌شود.کسانی که فقط نیاز به دید کلی دارند باید معماری در سطح context به انها ارائه شود اگر جزییات بیشتر لازم بود میتوانیم به سطوح داخلی برویم این مثل یه نقشه که هر وقت جزییات بیشتر خواستیم میتونیم zoom کنیم.چهار سطح مدل C4طبق این نگاه سامانه نرم افزاری از تعدادی کانتینر تشکیل شده است (کانتینرها میتواند پایگاه داده یا هر برنامه مستقلی باشند مثل اپلیکیشن ها و برنامه های وب یا دسکتاپ و...) و هر کانتینر شامل یک یا تعداد بیشتر کامپوننت هست که با زبان برنامه نویسی پیاده سازی شده است.قالب یک سامانه نرم افزاری در مدل C4بیاید جزییات این مدل رو در قالب یک مثال مرور کنیم: (هدف در این مثال طراحی یک اینترنت بانک با مدل C4 است)سطح اول :  System Context diagramدر این نمودار سامانه ما در وسط قرار می‌گیرد و کاربران و سامانه های دیگه ای که با سامانه ما تعامل دارند و همیچنین نحوه تعامل نمایش داده می‌شوند. در مثال زیر مشتریان با سامانه در ارتباط هستند آنها می‌خواهند موجودی حساب خود را بررسی کنند یا از دیگر خدمات بانک بهره‌مند شوند.همچین اینترنت بانک به سیستم ایمیل و زیر ساخت بانک نیازمند است  و درخواست هایی به آنها ارسال می کند. این ارتباط ها بوسیله خطوط جهت دار با توضیحات محدود نمایش داده می‌شود، که در شکل زیر مشاهده می‌کنید.در شکل رنگ ها نشان‌دهندۀ وضعیت سیستم‌ها هستند؛ آبی به معنای درحال ساخت و خاکستری به معنای  آماده برای استفاده است.نمودار سطح اول (System Context)سطح دوم : Container diagramدر این سطح باید زیر سامانه های اینترنت بانک را نمایش می دهیم در واقع سامانه اینرنت بانک را بزرگ می کنیم و داخل آن را می بینیم. هر سامانه از یک یا چندین کانتینر تشکیل شده . همونطور که گفتیم کانتینر میتونه هر نوع برنامه مستقلی یا پایگاه داده باشه. در این نمودار ارتباط میان کانتینر ها و تکنولوژی های انتخاب شده نمایش داده میشود.در مثال ما سامانه اینترنت بانک (که با خط چین نمایش داده شده) شامل وب اپلیکشن، موبایل اپلیکیشن، صفحه اینترنتی ، API اپلیکیشن و پایگاه داده است که ارتباط میان آنها نمایش داده شده است.نمودار سطح دوم (Container)سطح سوم : Component diagramدر این مرحله میتوانیم هر یک از کانتینر ها بزرگ کنیم و بخش های مختلف رو مشاهده کنیم. در این نمودار بخش های مختلف هر کانتینر ، وابستگی ها و ارتباط میان بخش های مختلف و قابلیت های پیاده سازی شده در هر بخش رو می‌بینیم. در مثال کانتینر API Application رو بزرگ کردیم و بخش های مختلف پیاده سازی شده برای این کانتینر رو می‌بینیم . در هر بخش قابلیت پیاده سازی شده بطور مختصر توضیح داده شده.(Component)نمودار سطح سوم سطح چهارم : Codeدر نهایت در این  سطح نحوه برنامه نویسی هر بخش رو نمایش میدهیم. در این مرحله میتوانیم برای نمایش از UML و  relationship diagrams و ابزار های مشابه استفاده کنیم.این نمودار رو میتوان با استفاده از ابزار هایی مثل IDE ها یا  UML modelling بصورت خودکار ایجاد کرد. کشیدن این نمودار فقط برای توسعه دهندگان همان بخش توصیه می‌شود.نمودار سطه چهارم (code)باید های دیگر C4در مدلسازی C4 توصیه میشود :۱. عنوان ها شفاف و قابل فهم باشد۲.  در سامانه ها و کانتینر ها توضحیات مختصری از هدف آنها نوشته شود.۳. در بخش ها تکنولوژی و قابلیت های پیاده سازی شده نوشته شود.۴. پیکان ها که رابطه یک طرفه نشان میدهند نوع ارتباط توضیح داده شود.جمع بندی : مدل C4 تلاشی برای کاهش شکاف در طراحی های معماری نرم افزار با الگویی ساده است. همچنین سعی میکند سطح بندی مختلف جزییات غیر ضروری و گیج کننده معماری را برای افراد مختلف درگیر با پروژه حذف کند. مدل C4 میخواهد تا معماری ها بدون توضیح طراحان برای همه قابل فهم باشند. C4 در جزییات استفاده از اشکال یا حتی تعداد سطح ها سختگیر نیست و اگر فکر می‌کنید با اضافه کردن سطح جدیدی میتوانید معماری را بهتر نمایش دهید حتما این کار را بکنید.این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهید بهشتی است. که امیدوارم از آن استفاده کرده باشید.منابع :https://c4model.comhttps://www.youtube.com/watch?v=x2-rSnhpw0ghttps://en.wikipedia.org/wiki/C4_modelhttps://www.youtube.com/watch?v=Ym9nhVZs89o</description>
                <category>علی رضانسب</category>
                <author>علی رضانسب</author>
                <pubDate>Sat, 20 Nov 2021 23:42:51 +0330</pubDate>
            </item>
            </channel>
</rss>