<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های m.hasanmahdi98</title>
        <link>https://virgool.io/feed/@m.hasanmahdi98</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-17 00:28:24</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>m.hasanmahdi98</title>
            <link>https://virgool.io/@m.hasanmahdi98</link>
        </image>

                    <item>
                <title>شناسایی افراد مهم در شبکه‌های پیچیده</title>
                <link>https://virgool.io/@m.hasanmahdi98/%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C-%D8%A7%D9%81%D8%B1%D8%A7%D8%AF-%D9%85%D9%87%D9%85-%D8%AF%D8%B1-%D8%B4%D8%A8%DA%A9%D9%87-peslftiusbyu</link>
                <description>مقدمهشناخت افراد مهم در شبکه های پیچیده یکی از موضوعات مهم و قابل توجه در شبکه های پیچیده است که در سال های اخیر بسیار مورد توجه قرار گرفته است. روش ها و رویکرد های بسیار زیادی برای این موضوع ارائه شده است که هر کدام جنبه ها و چالش های مختلفی در این زمینه را محور موضوع خود قرار داده اند.شناخت افراد کلیدی و مهم در یک شبکه نه تنها به درک بهتر از ساختار و رفتار شبکه و بهینه ‌سازی فرآیند های داخلی کمک می‌کند بلکه می‌تواند تاثیرات چشم گیری بر بهره‌وری و کارآیی کلی یک شبکه داشته باشد. این افراد به عنوان نقاط مرکزی ارتباطات، می‌توانند اطلاعات را به سرعت و به طور مؤثر در سراسر شبکه منتشر کنند و مانع از ایجاد گسست‌های اطلاعاتی شوند. به عبارت دیگر این نقاط میتوان بر رفتار شبکه و پویایی آن، تغییرات شبکه در طول زمان و انتشار اطلاعات در شبکه تاثیر زیادی دارند. برای شناسایی این افراد، تحلیل شبکه اجتماعی ابزاری قدرتمند است که به کمک آن می‌توان ساختار و روابط میان اعضای شبکه را به دقت بررسی کرد. برای شناسایی این افراد، در بسیاری از رویکرد ها از معیارهای مرسوم در شبکه های پیچیده استفاده میشود. مثلا از جمله شاخص‌های مهم در این تحلیل می‌توان به مرکزیت بینابینی اشاره کرد که نشان‌ دهنده توانایی یک فرد در ارتباط دادن بخش‌های مختلف شبکه به یکدیگر است، و همچنین مرکزیت نزدیکی که میزان دسترسی سریع یک فرد به سایر اعضای شبکه را اندازه‌گیری می‌کند. با توجه به این تحلیل‌ها، کسب و کار ها می‌توانند استراتژی‌های موثرتری برای مدیریت دانش، ارتقاء همکاری‌ها و بهبود فرآیندهای ارتباطی تدوین کنند. این رویکرد نه تنها به بهبود عملکرد فردی کمک می‌کند بلکه می‌تواند به افزایش نوآوری و تقویت روحیه تیمی در سازمان نیز منجر شود.اهمیت شناسایی افراد کلیدی در شبکه‌ های پیچیده در بسیاری از کسب و کارها مثلا در شبکه های اجتماعی و یا شبکه جاده های شهری و ترافیک،  به ویژه در زمان‌های بحران و تغییرات بیشتر نمایان می‌شود. در چنین شرایطی، این افراد و یا گره ها می‌توانند به عنوان پل‌های ارتباطی عمل کرده و انتقال سریع اطلاعات و منابع را تسهیل کنند. همچنین، در فرآیندهای نوآوری و تغییر، افراد و گره های کلیدی می‌توانند به عنوان حامیان تغییر و محرک‌ های اصلی برای پذیرش و اجرای ایده‌های جدید عمل کنند.برای دستیابی به این هدف، تکنیک‌های متعددی مانند تحلیل شبکه‌های اجتماعی ، نقشه‌برداری شبکه‌های کسب و کار و مدل‌های ریاضی مورد استفاده قرار می‌گیرند. این تکنیک‌ها به کسب و کار ها کمک می‌کنند تا نه تنها افراد با بیشترین ارتباطات، بلکه کسانی که نقش‌های حیاتی در تسهیل ارتباطات بین بخش‌های مختلف ایفا می‌کنند را نیز شناسایی کنند. به علاوه، این تحلیل‌ها می‌توانند به شناسایی الگوهای پنهان در تعاملات و ارتباطات سازمانی کمک کنند، که می‌تواند منجر به بهبود فرآیندهای مدیریت دانش و ارتقاء کارآیی کسب و کار مرتبط با آن شبکه شود.در نهایت، توجه به نقش افراد کلیدی در شبکه و استفاده از تحلیل‌های دقیق می‌تواند به ایجاد یک فرهنگ سازمانی قوی‌تر، ارتقاء همکاری‌های بین بخشی و بهبود توانمندی‌های رهبری کمک کند. این امر به سازمان‌ها امکان می‌دهد تا در مواجهه با چالش‌ها و فرصت‌ها، واکنش‌های سریع‌تر و مؤثرتری داشته باشند و در نهایت، به دستیابی به اهداف استراتژیک خود نزدیک‌تر شوند.ادبیات موضوعیتحلیل و بررسی شبکه‌های پیچیده همواره مورد توجه  پژوهشگران به خصوص در سال های اخیر بوده و در بسیاری از زمینه‌ ها نظیر فیزیک، زیست‌شناسی، مخابرات، علوم کامپیوتر،   و اپیدمیولوژی کاربردهای گسترده‌ای داشته است. شبکه‌های پیچیده در سال های اخیر به یکی از موضوعات  اصلی تحقیقات و پژوهش ها  تبدیل شده‌اند. امروزه در  زندگی روزمره ، نمونه‌های زیادی از شبکه‌های پیچیده وجود دارد. به عنوان مثال، شبکه جهانی وب یک شبکه واقعی از صفحات وب که به هم از طریق لینک‌هایی متصلند است؛ اینترنت یک شبکه از کامپیوترها و سخت افزار ها و روترهایی است که با لینک های فیزیکی به هم متصل شده‌اند؛ شبکه‌های عصبی متشکل از میلیارد ها نورون‌های ساده در مغز هستند که به یک سیستم پیچیده تبدیل شده‌اند. این شبکه‌ها و موارد مشابه می‌توانند به صورت گراف‌هایی با سایز حجیم مدل‌سازی شوند که از گره‌هایی تشکیل شده‌اند که با یکدیگر تعامل دارند و تعامل بین گره‌ها توسط یال نشان داده می‌شود. نظریه گراف به عنوان یک ابزار قدرتمند در مطالعات مختلف شبکه‌های پیچیده به کار گرفته شده است. مدل‌سازی این سیستم‌ها به ما این امکان را می‌دهد تا آن‌ها را بررسی کرده، توصیف ریاضیاتی آن‌ها را درک کنیم، رفتارهای مختلف آن‌ها را بشناسیم و آن‌ها را پیش‌بینی کنیم. با توجه به این که در این مقاله میخواهیم به کاربرد روش های تحلیل شبکه پیچیده بپردازیم مفاهیم گراف بررسی نمی شود.مدل‌سازی و تحلیل شبکه های پیچیده شامل ایجاد مدل‌هایی بر اساس روش های ارائه شده مرسوم است که ویژگی‌های شبکه‌های واقعی را تا حد امکان منعکس می‌کنند. در شبکه‌های واقعی، تعاملات محلی به خوبی قابل درک و مشاهده است، اما نتیجه کلی همه تعاملات به بررسی بیشتری برای درک نیاز دارد. برای درک بهتر ویژگی‌های شبکه ‌ها، به یک چارچوب نیاز داریم که ساختار شبکه و عملکرد و تغییرات آن را در نظرداشته باشد. تحلیل شبکه‌های پیچیده مبتنی بر دانستن برخی مفاهیم بنیادی مانند اندازه‌گیری‌های شبکه، ساختار شبکه و تأثیر اجتماعی است.شبکه‌های واقعی می‌توانند با استفاده از اندازه‌گیری‌ معیار ها شبکه بررسی، تحلیل و  مقایسه شوند. این اندازه‌گیری‌ها می‌توانند ویژگی‌های تعریف شده ای را بیان کرده و منبعی کارآمد برای بررسی شبکه‌ها باشند. مرکزیت، درجه بینابینی، ضریب خوشه‌بندی، میانگین طول مسیر و توزیع درجه از جمله معیارهایی هستند که می‌توانند ساختار و رفتار شبکه‌ها را تعریف کنند. یک مرور کلی در مورد این اندازه‌گیری‌ها خواهیم داشت.امروزه در بسیاری از کسب و کارها با مطالعه ساختار شبکه، شناسایی گره‌های تأثیرگذار و تشخیص جوامع به مسائل مهمی تبدیل شده‌اند که اخیراً در پژوهش ها و مقالات علمی بسیار مورد توجه قرار گرفته‌اند. تشخیص گروه ها و جامعه ( community ) با استفاده از روش‌های مختلفی انجام می‌شود و هر روش ویژگی‌های خاص خود را دارد. مسئله ای که در این مقاله قصد مرور آن را داریم  تعیین این است که کدام گره ‌ها در شبکه از اهمیت بالایی برخوردار هستند؛ روش‌های مختلفی برای حل این چالش پیشنهاد شده‌اند. به طور کلی میتوان این روش‌ها را به گروه های مختلفی دسته بندی کرد. روش‌های ساختاری ، روش‌های مبتنی بر بردار ویژه که بر تعداد همسایگان و تأثیرات آن‌ها مبتنی هستند، روش‌های تصمیم‌گیری چندمعیاری و روش‌های مبتنی بر یادگیری ماشین و شبکه های عصبی. هر رویکرد محدودیت‌های خود را دارد. برخی روش‌ها اطلاعات محلی شبکه را در نظر می‌گیرند یا اطلاعات جهانی را مدنظر قرار می‌دهند یا بر مهندسی ویژگی و انتخاب این ویژگی‌ها متکی هستند.به طور کلی، شبکه‌ های پیچیده به دلیل ساختار غیرخطی اجزا، بسیار چالش بر انگیز و پیچیده هستند. این شبکه‌ها می‌توانند به صورت پویا تغییر کنند و رفتارهای غیرقابل پیش‌بینی از خود نشان دهند. در نتیجه، مطالعه و تحلیل این شبکه‌ها به ما امکان می‌دهد تا به درک بهتری از سیستم‌ های پیچیده‌ای که در زندگی واقعی با آن ‌ها مواجه هستیم، دست یابیم و به بهبود عملکرد و پایداری آن‌ ها کمک کنیم.شبکه پیچیده به شبکه‌ای از گره ها و تعاملات بین گره ها اشاره دارد که رفتار کلی آنها از رفتارهای فردی این گره ها قابل تحلیل نیست و بنابراین ویژگی‌های جدیدی ظاهر می‌شود. این مفهوم شامل تمامی گره ها است که به نحوی به یکدیگر متصل هستند. به عبارت دیگر، شبکه پیچیده یک گراف است که دارای ویژگی‌های توپولوژیکی پیچیده‌ای است که در شبکه‌های ساده مانند شبکه‌های تصادفی دیده نمی‌شود، اما در شبکه‌هایی که نمایانگر سیستم‌های واقعی هستند، معمولاً یافت می‌شود.تحلیل شبکه ‌های پیچیده در سال های اخیر بسیار مورد توجه قرار گرفته است و به طور گسترده‌ای از یافته‌های تجربی شبکه‌های دنیای واقعی الهام گرفته است. این حوزه شامل بررسی و تحلیل ساختارها و الگوهای پیچیده‌ای است که در شبکه‌های واقعی مشاهده می‌شود. به عنوان نمونه، شبکه‌های اجتماعی مانند اینستاگرام یا توییتر، مجموعه‌ای از افراد یا گروه‌ها هستند که از طریق تعاملات اجتماعی به هم متصل شده‌اند. این شبکه‌ها به عنوان مجموعه‌ای از گره ها (افراد) و یال‌ها (ارتباطات) تعریف می‌شوند که یک جامعه پویا را توصیف می‌کنند.در زمینه شبکه‌های پیچیده، معیار ها و اندازه گیری آن ها می‌توانند مهم‌ترین ویژگی‌های توپولوژیکی را نشان دهند. در طول فرایند مدل‌سازی، برخی اندازه‌گیری‌های خاص برای مقایسه مدل‌ها با شبکه‌های واقعی استفاده می‌شوند. به همین دلیل، این اندازه‌گیری‌ها منبعی اساسی در بسیاری از تحقیقات شبکه هستند.ترتیب  قرار گیری گره‌ها یک جنبه بسیار مهم در مطالعه شبکه‌های پیچیده و ساختار آنها محسوب می‌شود. این ساختار به مطالعات شبکه‌های واقعی اشاره دارد که تحت تحقیقات گسترده قرار گرفته‌اند. چندین مدل توسعه یافته‌اند که نحوه شکل گیری  شبکه‌هایی مانند شبکه های جهان کوچک و بدون مقیاس در جهان واقعی را توضیح می‌دهند. مثلا واتس و اشتروگاتز یک مدل را معرفی کردند که نشان می‌دهد چگونه شبکه‌های جهان کوچک دارای دو ویژگی اساسی، یعنی ضریب خوشه‌بندی بالا و مسیر متوسط کم، در شبکه‌ها ظاهر می‌شوند. این ویژگی‌ها نیاز مندی برای درک پویایی شبکه‌ها. همچنین، باراباشی و آلبرت با ارائه یک مدل نشان دادند که چگونه شبکه‌هایی با توزیع power law به وجود می‌آیند.مدل‌های تکاملی شرح می‌دهند که چگونه شبکه‌های پیچیده در طول زمان تکامل می‌یابند، نشان می‌دهند که چگونه رفتارهای شبکه‌ای توسعه می‌یابد و قوانین حاکم بر تکامل سیستم‌ های فیزیکی را توضیح می‌دهند. به عنوان مثال، کار باراباَشی و آلبرت در زمینه شبکه‌هایی با توزیع power law از این دسته مدل‌ ها است. مدل‌ های استاتیک در نظر دارند تا توصیف ساختار شبکه‌ها و شرح ویژگی ‌های مختلف شبکه ‌های پیچیده را نشان دهند. به عنوان مثال، مدل واتس و اشتروگاتز توضیح می‌ دهد که چگونه ضریب خوشه‌ بندی بالا و مسیر متوسط کم در طول زمان در شبکه‌ ها به وجود می‌ آیند.تأثیر اجتماعی یکی از مهم ‌ترین مباحث در زمینه شبکه های پیچیده، به خصوص شبکه‌های اجتماعی است. نمی‌توان از این نوع شبکه ‌ها بدون بحث درباره گسترش ایده و اطلاعات و تأثیر این اطلاعات بر جامعه ‌مان سخن گفت. تعاملات بین عوامل شبکه ‌های اجتماعی، وسیله‌ ای است برای گسترش اطلاعات. بیشینه‌ سازی تأثیر یکی از مسائل مرتبط با انتشار اطلاعات در شبکه است. یافتن گروهی از افراد برجسته در یک شبکه اجتماعی بسیار حیاتی است تا بتوانند تأثیر خود را به بزرگترین مقیاس گسترش دهند. به عبارت دیگر، استفاده این گره‌ها می‌تواند باعث گسترش سریع و مفید اطلاعات در کل شبکه شود. مسأله بیشینه‌سازی تأثیر اجتماعی، یکی از مسائل مهم در انتشار اطلاعات است که تأثیر قابل ملاحظه‌ای بر جامعه دارد. برخی از افراد و گره ها به بهبود فرایند گسترش اطلاعات و ایده‌های جدید از طریق شبکه‌های اجتماعی تمایل دارند و توانایی انجام این کار را دارند. همچنین تشخیص اپیدمی یکی از کاربردهای آن است. یا مثلا یک برند می‌تواند با استفاده از گروه محدودی از مشتریان خاص، اطلاعات خدمات جدید خود را به دیگران منتقل کند. انتشار اطلاعات در حوزه‌های سیاسی نیز از دیگر کاربردهای مهم این فرایند از طریق شبکه‌های اجتماعی است.در زندگی روزمره، مثال‌های مختلفی از شبکه‌های پیچیده وجود دارد.اندازه‌گیری‌های مختلفی را برای شبکه‌های پیچیده پیشنهاد شده است،اما سه معیار اساسی وجود دارد که می‌توانند ویژگی‌های شبکه‌ های پیچیده را توصیف کنند. این معیارها شامل فاصله میانگین بین گره‌ ها، ضریب خوشه ‌بندی و توزیع درجه هستند. توزیع درجه یک توزیع احتمالی است از درجه‌های هر گره در شبکه است. ضریب خوشه‌ بندی، سطح transitivity محلی یا سراسری یک گراف را ارزیابی می‌کند. به عبارت دیگر، ما در سطح مثلث ها (رابطه‌های بین سه گره) را مطالعه می‌کنیم و بررسی می‌کنیم که آیا زمانی که بین گره‌های ab و bc لینک وجود دارد، بین گره‌های a و c نیز لینک وجود دارد یا خیر. مسافت میانگین بین گره‌ها، میانگین طول کوتاهترین مسیر بین هر دو رأس است .در سال های قبل، بیشتر کارهای پژوهشی درباره شبکه‌ های پیچیده بر روی ساختار توپولوژیکی شبکه و ویژگی‌های آن و همچنین پویایی آن تمرکز داشتند. هدف از مطالعه و تجزیه و تحلیل شبکه‌ های پیچیده، نه تنها درک سیستم‌های واقعی مختلف است، بلکه دستیابی به کنترل موثر این شبکه‌ ها نیز می‌ باشد. در واقع، برای پیش‌بینی و کنترل چنین سیستم یا شبکه‌های پیچیده‌ای، نیازمند درکی از شرح ریاضی این سیستم‌ها هستیم. با توجه به پویایی شبکه‌ های پیچیده، می‌توان شبکه‌ ها را به دو دسته تقسیم کرد، ایستا و موقتی. مطالعه شبکه‌ های پیچیده با این دسته آغاز شده است که حضور گره‌ها و لینک‌ها با هیچ مفهوم زمانی ارتباطی ندارد. شبکه استاتیک شامل گره‌ ها و یال هایی است که به تدریج در طول زمان تغییر می‌کنند یا به طور دائمی ثابت می‌مانند. در شبکه های موقتی ، مفهوم زمان نیز وجود دارد و وجود لینک‌ ها و گره‌ ها به زمان وابسته است، بنابراین همیشه تضمین شده نیست که وجود داشته باشند. این نوع شبکه‌ها واقع‌ گرایانه‌ تر هستند.در علم شبکه، هر گره نقش خاص خود را ایفا می‌کند. گره‌ ها همه به یک اندازه اهمیت ندارند و برخی از گره‌ها در شبکه نسبت به دیگران اهمیت بیشتری دارند به دلیل توانایی آن‌ها در گسترش در سراسر شبکه. این گره‌ها به عنوان گره‌های تأثیرگذار شناخته می‌شوند. شناسایی گره‌های مهم ضروری است در حملات شبکه، شبکه‌های تروریستی و مطالعات مربوط به اپیدمی کاربرد دارد. به همین دلیل، روش‌هایی برای یافتن گره‌های مهم در شبکه‌های پیچیده، توجه زیادی به خود جلب کرده‌اند. چندین روش برای شناسایی این گره‌ها پیشنهاد شده است: مرکزیت درجه، مرکزیت بینایی، مرکزیت نزدیکی، PageRank، و روش های دیگر از جمله این روش ها هستند.این روش‌های پیشنهادی به دسته های مختلف تقسیم می‌شوند. روش های ساختارمند، رویکردهای مبتنی بر بردار ویژگی و رویکردهای مبتنی بر یادگیری ماشین. در ادامه این دسته بندی را مورد بررسی قرار میدهیم.کارهای پیشیندر این بخش می‌خواهیم کارهای پیشین و پژوهش هایی که در این زمینه انجام شده است را بررسی کنیم و یک دسته بندی مروری بر روی روش های آن انجام دهیم. با مرور مقالات در این حوزه میبینیم به طور کلی سه دسته روش برای این مسئله وجود دارد.روش های ساختاریدر روش‌های ساختاری برای شناسایی گره‌های مهم در شبکه‌های پیچیده، چندین رویکرد وجود دارد، رویکردهای محلی، نیمه محلی، سراسری و ترکیبی. رویکردهای محلی بر ارزیابی تأثیر گره‌ها در اطراف نزدیک آن‌ها تمرکز دارند و معمولاً شامل معیارهایی مانند مرکزیت درجه هستند. این روش‌ها اهمیت یک گره را بر اساس اتصالات آن و همسایگانش به اطراف نشان می‌دهند و بیشتر بر داده‌ های محلی تکیه دارند. به عنوان مثال، مرکزیت درجه به راحتی قابل محاسبه هستند و پیچیدگی محاسباتی کمی دارند. با این حال، غالباً ساختار کلی شبکه نادیده گرفته می‌شود و گره‌های مهم اغلب در بخش‌های بزرگ شبکه‌های چند مؤلفه‌ای شناسایی می‌شوند که کارایی این روش‌ها را در شبکه‌های بزرگ کاهش می‌کند. از سوی دیگر، رویکردهای مبتنی بر مسیرها اهمیت گره‌ ها را با در نظر گرفتن مسیر ها یا جریان‌ های درون شبکه ارزیابی می‌کنند. به عنوان مثال، مرکزیت نزدیکی و مرکزیت بینایی که بر اساس مسیرهای بین گره‌ ها ارزیابی می‌شوند. این اندازه‌گیری‌ها بیان می کنند که چگونه گره‌ها در انتشار اطلاعات یا کنترل آنها در شبکه نقش دارند. با وجود کارایی آن‌ها، به دلیل پیچیدگی محاسباتی بالای محاسبه مسیرهای کوتاه یا بینایی برای همه جفت گره‌ها در شبکه‌های بزرگ، استفاده از این روش ممکن است زمان‌بر باشند.رویکردهای سراسری دیدگاه جامعی ارائه می‌دهند و با در نظر گرفتن ساختار کلی شبکه به دنبال شناسایی افراد مهم هستند. این روش ها شامل معیارهایی مانند مرکزیت هسته هستند که نقش‌ ساختاری گره‌ها را در سراسر شبکه را نشان می‌دهند. به عنوان مثال، مرکزیت هسته، گره‌ها را بر اساس موقعیتشان در هسته شبکه مقایسه می‌کند.رویکردهای نیمه محلی بین رویکرد های محلی و سراسری هستند، با استفاده از اطلاعات همسایه همسایه ها (همسایگان دوم) برای ارزیابی توانایی گره‌ای در انتشار اطلاعات راهکار ارائه میدهند. در این روش‌ها، معیار هایی مانند مرکزیت درجه وزن‌دار کاربرد دارد.روش های مبتنی بر بردار ویژگیدر رویکردهای مبتنی بر مقادیر ویژه، تعداد همسایگان و تأثیر آن‌ها در نظر گرفته می‌شود، پیج‌ رنک و لیدررنک ، از مواردی است که در این روش ها کاربرد دارند. پیج‌ رنک نوعی از مرکزیت ویژه‌بردار است که الگوریتم استفاده شده در موتور جستجوی گوگل است. این روش در ابتدا برای اندازه‌ گیری شهرت یک صفحه وب معرفی شد. این الگوریتم فرض می‌کند که اهمیت یک صفحه توسط تعداد و کیفیت صفحات متصل به آن تعیین می‌شود. این الگوریتم در بسیاری از زمینه‌ها مورد استفاده قرار گرفته است و در شبکه‌های بدون مقیاس عملکرد خوبی دارد. با این حال، نسبت به اختلالات شبکه‌های تصادفی حساس بوده . الگوریتم HITS هر گره را در شبکه در نظر می‌گیرد و دو نقش را شامل می‌شود، اعتبار و مرجعیت. لیدر رنک در شبکه‌ های پیچیده جهت‌ دار به خوبی کار می‌کند اما به نظر می‌رسد که در شبکه‌های پیچیده بدون جهت، قابل اجرا نمی‌باشد.روش های یادگیری ماشین.در سال های اخیر تمرکز زیادی بر روی رویکردهای مبتنی بر یادگیری ماشین شده است. ون و همکارانش از ماشین بردار پشتیبان برای شناسایی قوانین نقشه ‌برداری بین شاخص‌های پایه.این روش نظارت خوبی برای شناسایی گره‌های مهم در شبکه‌های بزرگ‌ مقیاس فراهم می‌کند. ژائو و همکارانش مدلی برای شناسایی گره‌های حیاتی بر اساس هفت الگوریتم یادگیری ماشین Naïve Bayes، درخت تصمیم، جنگل تصادفی، ماشین بردار پشتیبان، نزدیک‌ترین همسایه، رگرسیون لجستیک و پرسپترون چندلایه پیشنهاد دادند[3]. این مدل بر اساس مدل گراف در رتبه‌بندی گره‌ها عمل می‌کند.رویکردهای مبتنی بر یادگیری ماشین به شدت به مهندسی ویژگی‌ها وابسته‌اند، و انتخاب این ویژگی‌ها می‌تواند عملکرد این رویکردها را تحت تأثیر قرار دهد. برای انجام این کار، ژائو و همکاران یک مدل یادگیری عمیق معرفی کردند [4] که مبتنی بر شبکه‌های گراف کانولوشن است. به طور همزمان ویژگی‌های گره و لینک بین آن‌ها را مورد بررسی قرار می‌دهد.به طور کلی مقالات و پژوهش های بسیاری در زمینه شناسایی افراد مهم در سال های اخیر منتشر شده است که در ادامه برخی از آن ها را بررسی میکنیم.در مقاله[5]، یک معیار جدید به نام مرکزیت هسته ( coreness centrality ) پیشنهاد داده شده است تا تأثیر انتشار یک گره را با استفاده از شاخص‌های k-shell همسایگانش در یک شبکه تخمین زده شود. نتایج آزمایشات بر روی شبکه‌های واقعی و مصنوعی، در مقایسه با مدل گسترش اپیدمیک، نشان می‌دهد که روش پیشنهادی   می‌تواند تأثیر گره‌ ها را با دقت بیشتری اندازه‌ گیری کرده و لیست رتبه‌بندی یکنواخت‌ تری نسبت به دیگر روش‌های رتبه‌ بندی ارائه دهد.دستیابی به دقت بالا و جامعیت در ارزیابی اهمیت گره‌ها در شبکه‌های پیچیده چالش مهمی است. برای حل این مشکل، در مقاله [6] روشی مبتنی بر ماشین بردار پشتیبان پیشنهاد شده است. ابتدا، چهار شاخص که اهمیت گره‌ها را به صورت جامع و کلی منعکس می‌کنند، انتخاب شدند. سپس روش فرآیند تحلیل سلسله مراتبی برای به‌دست‌آوردن ارزیابی اهمیت گره‌ها به کار گرفته شده. بر این اساس، سه شاخص ساده با پیچیدگی محاسباتی پایین پیشنهاد شدند و از SVM  برای یافتن قوانین نقشه‌برداری بین شاخص‌های ساده استفاده شد.در سال های گذشته روش هایی که  در زمینه یادگیری ماشین  ارائه شده است تنها بر روی سرعت تمرکز داشتند و به همین علت از بهبود عملکرد کاسته‌اند. در مقاله[7]، یک مدل موثر یادگیری تقویتی عمیق ارائه شده است که نتایج برتری نسبت به الگوریتم‌های معمول بهینه‌سازی  از خود نشان می‌دهد.این روش از طریق آموزش گسترده بر روی گراف‌های سنتی کوچک، این روش در کیفیت حل مسائل بهتر از روش‌های دیگرعمل میکند و اثبات تجربی نموده است که با افزایش اندازه شبکه، مقیاس‌پذیری خطی دارد، که نشان از برتری آن در حل این مسئله دارد.در روش مقاله [6] رویکردی با ادغام ویژگی‌های ساختاری شبکه، ارائه شده است. این روش نه تنها ساختار محلی شبکه را در نظر می‌گیرد بلکه ساختار سراسری آن را نیز مدنظر دارد. تأثیر ساختار سراسری با نزدیکی آن به تمام گره‌های دیگر در شبکه اندازه‌گیری می‌شود، اما تأثیر ساختارهای محلی تنها مشارکت تأثیر گره‌های همسایه نزدیک را در نظر می‌گیرد. برای ارزیابی عملکرد  این روش، از مدل مستعد-عفونت‌یافته-بهبودیافته (SIR) برای بررسی کارایی گسترش هر گره استفاده شده است.  این روش  با  PageRank، (HITS)، K-shell، مرکزیت بردار ویژه، مرکزیت نزدیکی ، مرکزیت بینابینی  و بر روی 8 شبکه واقعی مقایسه شده است. نتایج آزمایشات نشان می‌دهد که این روش  توانایی رتبه‌بندی قابلیت انتشار گره‌ها و اهمیت آن هارا را به طور دقیق‌تر و کارآمد‌تر از سایر روش‌ها دارد.یکی از چالش های این موضوع این است که به طور این حوزه فاقد یک چارچوب واحد برای حل کارآمد این مسئله است. در این مقاله [1] یک رویکرد یادگیری تقویتی عمیق به نام FINDER معرفی شده است که می‌تواند به صورت کامل بر روی شبکه‌های مصنوعی کوچک که توسط مدل‌های معرفی شده تولید شده‌اند، آموزش ببیند و سپس به طیف گسترده‌ای از سناریوهای کاربردی اعمال شود. آزمایش‌های گسترده تحت تنظیمات مختلف مسئله نشان می‌دهند که این روش به طور قابل توجهی در کیفیت حل مسائل از روش‌های موجود پیشی می ‌گیرد. علاوه بر این، این روش چندین مرتبه سریع‌تر از روش‌های موجود برای شبکه‌های بزرگ عمل می‌کند.نتیجه‌گیریدر این مقاله، یک مرور کوتاه از شبکه‌های پیچیده ارائه شد. هدف در این مقاله مرور و آشنایی با رویکرد های ارائه شده برای شناسایی افراد و یا گره های مهم در شبکه بود. با توجه به این که این موضوع در سال های اخیر بسیار مورد توجه بوده است، این مرور تمامی کارهای موجود مرتبط با شناسایی گره‌های تأثیرگذار را پوشش نمی‌دهد. اگرچه شبکه‌های پویا بر تغییرات در ویژگی‌ ها و ظهور خواص شبکه‌ها در طول زمان تکیه دارند، اکثر رویکردها بر شبکه‌های استاتیک اعمال می‌شوند تا شبکه‌های دینامیک. بنابراین، نیاز به کار بیشتر بر روی شبکه‌های دینامیک وجود دارد. از دیدگاه آینده، ما می‌توانیم رویکردهای موجود برای شناسایی گره‌های تأثیرگذار را به شبکه‌های دینامیک تطبیق دهیم. علاوه بر این، می‌توانیم روش‌های موجود را با هدف بهره‌برداری از مزایای هر دو روش و دستیابی به تعادل بین آن‌ها، ترکیب کنیم. به عنوان مثال، می‌توانیم الگوریتم‌های یادگیری ماشین و یادگیری عمیق را با سایر روش‌ها ترکیب کنیم. در این مقاله ابتدا یک بررسی اجمالی بر روی شبکه‌های پیچیده انجام دادیم. شبکه‌های پیچیده به عنوان یک زمینه تحقیقاتی پویا و چندرشته‌ای، طیف گسترده‌ای از مدل‌ها و روش‌ها را برای تحلیل و بررسی ساختار و تعاملات در شبکه های مختلف فراهم می‌آورد. در این مقاله، ما به بررسی ساختارهای مختلف شبکه‌ها و اندازه‌گیری‌های مرتبط با آن‌ها پرداخته‌ایم. همچنین، تأثیر اجتماعی درون شبکه‌ها و نحوه انتشار اطلاعات و ایده‌ها در این شبکه‌ها مورد بررسی قرار گرفته است. شبکه‌ها در طول سال‌ها از ساختارهای ساده  مدل‌های پیچیده‌ تر تکامل یافته‌اند و هر مدل دارای مزایا و معایب خاص خود است.به عنوان مثال، شبکه‌های کوچک‌جهان و مقیاس‌آزاد هر کدام ویژگی‌های منحصر به فردی دارند که آن‌ها را برای تحلیل سیستم‌های واقعی مناسب می‌سازد. شناسایی گره‌های تأثیرگذار در شبکه‌های پیچیده یکی از مسائل کلیدی است که توجه بسیاری از محققان را به خود جلب کرده است. این گره‌ها نقش مهمی در انتشار اطلاعات و کنترل شبکه‌ها ایفا می‌کنند. در این مقاله، روش‌های مختلف برای شناسایی این گره‌ها مورد بررسی قرار گرفته‌اند. از جمله این روش‌ها می‌توان به PageRank، HITS، K-shell، و مرکزیت بینابینی اشاره کرد. هر یک از این روش‌ها دارای نقاط قوت و ضعف خاص خود هستند که در این مقاله به آن ها اشاره شده است.با توجه به پیشرفت‌ های اخیر در حوزه یادگیری ماشین و یادگیری عمیق، می‌توان این روش‌ها را با روش‌های سنتی ترکیب کرده و به نتایج بهتری دست یافت. همچنین، توجه به شبکه‌های دینامیک و تطبیق رویکردهای موجود برای تحلیل این شبکه‌ها از دیگر زمینه‌های مهم پژوهشی است. شبکه‌های دینامیک با توجه به تغییرات زمانی و ظهور ویژگی‌های جدید، نیازمند روش‌های جدید و بهینه‌تری برای تحلیل و بررسی هستند.به طور کلی، این مقاله به عنوان یک منبع مقدماتی برای پژوهشگران مبتدی در این حوزه می‌تواند مورد استفاده قرار گیرد و آن‌ها را در جهت‌یابی پژوهش‌های آتی خود یاری کند. با ترکیب روش‌های موجود و بهره‌گیری از تکنیک‌های جدید، می‌توان به درک بهتری از شبکه‌های پیچیده و شناسایی گره‌های تأثیرگذار دست یافت.مراجع[1]. Fan, C., Zeng, L., Sun, Y. et al. Finding key players in complex networks through deep reinforcement learning. Nat Mach Intell 2, 317–324 (2020). https://doi.org/10.1038/s42256-020-0177-2[3]. Wen X, Tu C, Wu M, Jiang X (2018) Fast ranking nodes importance in complex networks based on LS-SVM method. Phys Stat Mech Appl 506:11–23. https:// doi. org/ 10. 1016/j. physa. 2018. 03. 076[4]. Gouheng Zhao et al, InfGCN: Identifying influential nodes in complex networks with graph convolutional networks[5]. Joonhyun Bae, Sangwook Kim, Identifying and ranking influential spreaders in complex networks by neighborhood coreness, Physica A: Statistical Mechanics and its Applications, https://doi.org/10.1016/j.physa.2013.10.047.[6]. https://www.sciencedirect.com/science/article/abs/pii/S0378437118303947[7]. https://arxiv.org/abs/2309.07153[8]. Mukhtar, M., Abal Abas, Z., Baharuddin, A.S. et al. Integrating local and global information to identify influential nodes in complex networks. Sci Rep 13, 11411 (2023). https://doi.org/10.1038/s41598-023-37570-7[9]. Malliaros, F., Rossi, ME. &amp; Vazirgiannis, M. Locating influential nodes in complex networks. Sci Rep 6, 19307 (2016). https://doi.org/10.1038/srep19307[10]. Qiuyan Shang, Yong Deng, Kang Hao Cheong, Identifying influential nodes in complex networks: Effective distance gravity model, https://doi.org/10.1016/j.ins.2021.01.053.</description>
                <category>m.hasanmahdi98</category>
                <author>m.hasanmahdi98</author>
                <pubDate>Sat, 13 Jul 2024 23:54:01 +0330</pubDate>
            </item>
                    <item>
                <title>معماری نرم افزار در سیستم های پردازش داده حجیم</title>
                <link>https://virgool.io/@m.hasanmahdi98/%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%AF%D8%B1-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AD%D8%AC%DB%8C%D9%85-wpmvfbqj1u5h</link>
                <description>مقدمهبا توجه به افزایش سرعت تولید داده در پلتفرم‌ های مختلف، بسیاری از نرم‌ افزار‌ ها در حوزه های مختلف با حجم زیادی از داده مواجه هستند. به همین جهت، حتی اگر ماهیت اصلی سیستم، تحلیل و پردازش داده نباشد، پردازش داده میتواند برای سازمان ارزش آفرین باشد.سیستم‌ های پردازش داده حجیم، عموما از بخش‌ های مشترکی تشکیل شده اند. این بخش‌ ها شامل بخش تولید داده، پیش‌پردازش و آماده‌ سازی اولیه، دریافت و یکپارچه سازی داده، تحلیل و اجرای پردازش برروی داده و نمایش نتایج میباشد. میدانیم هر سیستم مختلف، با داده‌ های مختلفی مواجه است و تبع آن، نیازمندی‌ های متفاوتی دارد و نیازمندی متفاوت، نیاز‌مند معماری متفاوت و مناسب برای پاسخ‌گویی به آن است. ایجاد معماری مناسب در چنین سیستم‌ هایی تاثیر بسیار مهمی در رسیدن به نیازمندی‌ ها با کارایی قابل قبول دارد.داده حجیم در این سیستم هاهمان طور که گفته شد، امروزه در حوزه‌ های مختلف، سیستم‌ های نرم‌ افزاری با حجم زیادی از داده مواجه هستند، و مدیریت این حجم بسیار زیاد، چالش‌ های زیادی خواهد داشت.  به طور کلی، در مواجهه با داده حجیم، دو موضوع اهمیت زیادی دارد، اولا فراهم کردن امکان دریافت و ذخیره سازی داده، و ثانیا، فراهم کردن امکان پردازش داده ذخیره شده، مطابق با نیازمندی‌ ها.اصطلاح “داده حجیم” یا کلان داده، به داده‌ای اطلاق میشود که به علت حجم و اندازه بسیار زیاد آن، روش‌ ها و ابزار‌ های مرسوم که توسط نرم‌ افزار‌ های معمولی استفاده میشود، توانایی ذخیره‌ سازی و پردازش‌ آن را ندارند. به طور کلی داده حجیم با سه معیار  ( Three Vs )  توصیف میشوند.حجم داد (Volume): معیاری برای توصیف حجم داده.سرعت (Velocity): معیاری برای توصیف سرعت تولید داده.تنوع (variety): معیاری برای توصیف میزان تفاوت در داده موجود.همان‌طور که گفته شد، امروزه سیستم‌ های نرم‌ افزاری در حوزه‌ های مختلف نیاز به پرداز داده حجیم دارند، بخصوص حوزه‌ هایی که با تعداد کاربر زیاد مواجه‌ هستند. بعنوان مثال، نرم‌ افزار‌ های شبکه‌ های اجتماعی، سیستم‌ های حوزه سلامت، حوزه‌ های صنعتی، حتی در زمینه‌ های خاص مانند سیستم‌ های هواشناسی و یا نظامی، همگی با توجه به حجم داده‌ای که در اختیار دارند، نیاز به تحلیل و پرداز دارند. به همین سبب وجود معماری و چارچوب مناسب در چنین سیستم‌ هایی بسیار اهمیت دارد.استفاده از کلان دادهمعمولا وجود این حجم زیاد داده، به خودی خود، ارزشی ندارد و تحلیل آن و استخراج دانش از آن است که سبب ارزش آفرینی میشود. در این فرایند لازم است تا داده حجیم که معمولا ساختار و فرمت مناسبی ندارد، ابتدا جمع آوری، ذخیره و پردازش شود تا بتوان اطلاعات مفید و سودمند از آن استخراج شود و در راستای تولید ارزش از آن استفاده شود.استفاده از این اطلاعات در زمینه‌ های مختلف مرسوم است. مثلا برای بهبود تجربه کاربر. در این رویکرد، میتوان با جمع آوری اطلاعات کاربران، و پردازش و تحلیل آن، محصول را در راستای افزایش رضایت کاربر بهبود بخشید. مثلا پلتفرم‌ های پخش فیلم، با جمع آوری تعامل کاربر با سیستم، و پردازش آن، پیشنهاد‌ هایی مطابق با سلیقه کاربر ارائه میدهند.همچنین میتوان با پردازش داده حجیم، امنیت را افزایش داد، مثلا در سیستم بانکی، با جمع اوری و تحلیل اطلاعاتی که مثلا از لاگ ‌ها بدست می آید، میتوان مخاطرات فرایند‌ های مختلف را شناسایی کرد و برای هر کدام راه حلی مناسب پیشنهاد داد.از دیگر استفاده‌  های سیستم پردازش داده حجیم، میتوان تصمیم گیری سریع را عنوان کرد، مثلا سیستم‌ های مسیر یاب، با تحلیل حجم زیادی از داده کاربران، میتوانند در لحظه حجم ترافیک در مسیر‌ های مختلف را محاسبه نمایند و بدین ترتیب در ارائه خدمات به کاربر، عملکرد بهتری داشته باشند.اهمیت انتخاب معماری مناسب در سیستم‌ های پردازش داده حجیمهمان طور که میدانیم، ایجاد معماری مناسب، و اتخاذ تصمیمات کلیدی برای فراهم کردن بستری مناسب برای توسعه محصول، در سیستم‌ های نرم افزاری امری ضروری است. همچنین میدانیم، هدف ایجاد معماری مناسب، رسیدن به ویژگی‌ های کیفی مناسب، با کمترین هزینه است.در سیستم‌ های پردازش داده حجیم، علاوه بر این موارد، چون با حجم زیادی از داده مواجه هستیم و سرعت تولید داده بسیار زیاد است، وجود ساختار و ظرفیت مناسب و پاسخگو برای مواجهه و مدیریت کلان داده بسیار اهمیت دارد. با توجه به این که سرعت تولید میتواند بسیار زیاد باشد، عدم وجود معماری مناسب در این شرایط، میتواند به سرعت سبب ایجاد چالش‌ های زیاد، با هزینه‌ های جبران‌ نا‌پذیر شود.قابل ذکر است که در این شرایط، اتخاذ تصمیم مناسب برای ایجاد معماری، بسیار حساس‌ تر و پیچیده‌ تر خواهد بود. در این شرایط معماری‌ پیشنهاد شده، باید توانایی پاسخ‌گویی به نیازمندی سیستم، با توجه به ویژگی‌های داده سیستم ( حجم، سرعت، تنوع) را داشته باشد.موضوع دیگری که در طراحی معماری اهمیت دارد، در نظر گرفتن احتمال ایجاد تغییرات در آینده است. معمولا در سیستم‌ های نرم‌ افزاری بخش زیادی از هزینه‌ مربوط به مراحل بعد از استقرار است. همواره در توسعه سیستم‌ های نرم‌ افزاری در مراحل اجرا با وقوع خطا‌ ها و باگ‌ ها مواجه خواهیم بود، که برای رفع آن نیاز به ایجاد تغییرات در ساختار سیستم‌ وجود دارد. همچنین ممکن است تا لازم باشد به علت تعریف نیازمندی جدید، ویژگی‌ هایی جدید به سیستم اضافه شود. پس بدین ترتیب لازم است معماری ایجاد شده، امکان ایجاد تغییر را داشته باشد.در سیستم‌ های پردازش داده حجیم، با توجه به این که معمولا این سیستم‌ ها بسیار بزرگ هستند، و حجم داده‌ای که با آن مواجه‌ اند نیز بسیار زیاد است معمولا با تغییرات بیشتر و پیچیده‌تری مواجه هستیم.  به همین دلیل، وجود معماری‌ای منعطف و مناسب برای این موضوع، در سیستم‌ های پردازش داده حجیم، بسیار اهمیت دارد.اتخاذ تصمیم در مورد معماری در این سیستم‌ ها بسیار حساس‌تر است. با توجه به اندازه بزرگ سیستم، و نرخ بالای داده ورودی و تغییرات زیاد، اگر تصمیم گرفته شده، مناسب نباشد، تبعات آن بسیار سریع نمایان میشود، و میتواند سبب افزایش هزینه در مدت زمان بسیار کم شود.در طراحی معماری برای سیستم های پردازش داده حجیم لازم است تا نیاز مندی های سیستم به طور دقیق شناسایی شود و بر اساس آن ها تصمیمات لازم اتخاذ شود. اما به طور معمول، سیستم های پردازش داده حجیم در یکسری نیازمندی اشتراک دارند. هر سیستمی که لازم است در آن تحلیل داده صورت گیرد، نیازمند آن است که داده و منبع داده را شناسایی کند. برای پردازش و تحلیل داده نیاز است تا نسبت به منبع تولید کننده داده شناخت نسبی وجود داشته باشد. امکان ذخیره سازی داده حجیم ویژگی دیگری است که لازم است معماری برای آن رویکرد مناسب ارائه شود. ذخیره سازی داده حجیم به علت حجم بالا و نرخ تولید زیاد میتواند چالش بر انگیز باشد. هم چنین سرعت دسترسی به آن نیز بسیار مهم است، به همین دلیل در معماری این سیستم ها لازم است برای این امر نیز تصمیم مناسب اتخاذ شود.در بسیاری از سیستم های پردازش داده حجیم لازم است تا امکان پردازش داده به صورت بلادرنگ، پس از دریافت آن وجود داشته باشد. چون معمولا نرخ تولید داده بسیار زیاد است، وجود این ویژگی میتواند در کارایی و مقیاس پذیری سیستم تاثیر زیادی داشته باشد.ویژگی‌ های کیفی مهم در سیستم‌ های پردازش داده حجیمبه طور کلی، معماری در سیستم‌ های پردازش کلان داده، همانند دیگر سیستم‌ های نرم‌ افزاری، باید در راستای بهبود ویژگی‌ های کیفی طراحی شود. اما در سیستم‌ های کلان داده، به طور مشترک، برخی از این ویژگی‌ ها اهمیت بیشتری دارند. مقیاس‌ پذیریویژگی مقیاس‌پذیری را میتوان بعنوان مهم‌ترین ویژگی در بین ویژگی‌ های کیفی در چنین سیستم‌ هایی درنظر گرفت. این ویژگی بیان‌گر این است که معماری سیستم تا چه میزان توانایی و ظرفیت برای گسترش نرم‌ افزار برای پشتیبانی از کاربران و داده بیشتر را دارد. علت اهمیت این ویژگی در سیستم‌ های پردازش داده حجیم این است که، با بزرگ‌تر شدن چنین سیستم‌ هایی، تعداد کاربران و داده‌ های تولید شده به طور چشمگیر افزایش خواهد یافت. اگر در چنین شرایطی، معماری ظرفیت افزایش سریع پشتیبانی را نداشته باشد، با چالش‌ هایی مواجه خواهیم شد.دسترس‌ پذیرییکی دیگر از ویژگی‌ های مهم در این سیستم‌ ها، ویژگی دسترس پذیری است. با توجه به این که نرخ تولید داده در این سیستم‌ ها بسیار بالاست، دسترس پذیری پایین، میتواند سبب از بین رفتن حجم زیادی از داده شود. همچنین عدم مدیریت به موقع داده در زمان مشخص نیز میتواند هزینه بر باشد.کاراییمعیار کارایی بیانگر توانایی پاسخگویی سیستم، و هزینه لازم برای آن است. در چنین سیستم‌ هایی چون حجم داده بسیار زیاد است، توانایی سیستم در پاسخ‌گویی در کمترین زمان و منابع مورد نیاز برای پاسخگویی بسیار اهمیت دارد. هم چنین با توجه به این که نرخ تولید داده در این سیستم ها بسیار بالا است، پاسخگویی در کم ترین زمان ممکن بسیار اهمیت دارد. اگر این موارد در معماری به خوبی در نظر گرفته نشده باشد، با افزایش حجم داده و بزرگتر شدن سیستم، بدون شک با چالش مواجه خواهیم شد و با افزایش هزینه روبرو خواهیم بود.سازگاریممکن است سیستم مد نظر با حجم زیادی از داده و تنوع بالا مواجه باشد، به همین جهت لازم است تا معماری، علاوه بر توانایی مدیریت داده‌ های متنوع، بستری را فراهم کند تا یکپارچگی در سیستم حفظ شود.امنیتدر تمامی سیستم‌ های نرم‌ افزاری، ویژگی امنیت، موضوعی بسیار مهم و قابل توجه است. در سیستم‌ های پردازش داده حجیم، چون داده را میتوان بعنوان بخش مهمی از سیستم در نظر گرفت، حفظ امنیت ( بخصوص محرمانگی داده) اهمیت بیشتری دارد.مولفه‌ های مهم در معماری سیستم‌ های پردازش کلان دادهطبق بررسی‌ هایی انجام شده، معماری‌ هایی که در این زمینه معرفی شده اند، در یکسری مولفه، اشتراک دارند. این بخش‌ ها به شرح زیر میباشند.منابع دادهمنابعی که بعنوان منشا ورودی سیستم، داده تولید میکنند. منشا این داده‌ ها میتواند به طور مستقیم داده‌ ای باشد که کاربر وارد میکند. و یا داده‌ای باشد که سیستم از کاربران استخراج میکند، مثلا تعامل کاربر با سیستم، و یا ذخیره سازی رفتار کاربر. مثلا پلتفر‌ های بخش موسیقی و یا فیلم ( مثلا spotify ) رفتار‌ های کاربر در حین استفاده از پلتفرم، مانند پخش سبک خاصی از موسیقی در ساعات خاصی از روز، رد کردن موسیقی پیشنهادی، پخش کردن بخشی از موسیقی و دیگر تعاملات را برای پردازش ذخیره سازی میکنند. علاوه بر چنین اطلاعاتی، داده‌ های دیگری، مثلا لاگ ذخیره شده سیستم نیز میتواند بعنوان ورودی در نظر گرفته شود. بانک اطلاعاتیمولفه مشترک دیگر در این سیستم‌ ها، بخش مربوط به ذخیره سازی داده است. این مولفه رویکرد مربوط به ذخیره سازی را تعریف میکند. چون حجم داده زیاد است، نحوه نگه‌داری داده بسیار اهمیت دارد. در این بخش، تصمیمات مربوط به نگه‌داری داده، مانند تکنولوژی مورد استفاده، distribute بودن پایگاه‌داده، فرمت ذخیره سازی و چنین تصمیماتی گرفته میشود.مولفه پردازش دسته‌ ای دادهاین مولفه، داده‌ های جمع‌آوری شده را با پردازش اولیه برای تحلیل آماده میکند. علت استفاده از این بخش قبل از تحلیل داده، حجم زیاد داده است، و پردازش اولیه دسته‌ ای داده‌ ها میتواند هزینه لازم برای تحلیل و پردازش داده را کاهش دهد.دریافت داده بلادرنگپس از دریافت داده توسط ماژول قبلی، لازم است تا داده جمع‌آوری شده، برای تحلیل نهایی پردازش اولیه و آماده سازی شود. این امر توسط این مولفه انجام میشود. ابزار‌ هایی مانند Spark streaming و Azure stream analytics امکان پردازش جریان داده را فراهم میکنند.خزن داده ذخیره میشود. اما معمولا در این مولفه یکسری پردازش اولیه بر روی داده نیز انجام میشود. از ابزار‌  های موجود برای پیاده سازی و نگه‌داری این بخش، میتوان Azure events, kafka و Azure iot hub را نام برد.پردازش جریان دادهپس از دریافت داده توسط ماژول قبلی، لازم است تا داده جمع‌آوری شده، برای تحلیل نهایی پردازش اولیه و آماده سازی شود. این امر توسط این مولفه انجام میشود. ابزار‌هایی مانند Spark streaming و Azure stream analytics امکان پردازش جریان داده را فراهم میکنند.منبع ذخیره داده تحلیلیپس از پردازش داده، لازم است تا تحلیل داده فراهم شده با فرمت و ساختار متناسب با نیازمندی سیستم، ذخیره سازی شود. در این مولفه با انتخاب ابزار مناسب برای داده کلان، این امر فراهم میشود. مثلا ابزار Azure synapse یک سرویس مناسب برای داده با مقیاس بالا فراهم میکند.مولفه ارائه گزارش تحلیلیهمان طور که میدانیم، یکی از اصلی ترین اهداف سیستم‌ های پردازش داده حجیم، استخراج تحلیل و دانش از حجم زیاد داده است. برای فراهم کردن این امکان، معمولا در معماری سیستم‌ های پردازش داده حجیم، یک مولفه برای این امر در نظر گفته میشود که بعنوان لایه مدلسازی داده از آن یاد میشود.مولفه orchestration معمولا در این سیستم‌ ها فرایند پردازش داده به صورت تکراری و مداوم انجام میشود، این فرایند شامل دریافت داده، تبدیل آن به فرمت  قابل پردازش، جابجایی بین لایه‌ ها و مولفه‌ های مختلف، و انتقال داده پردازش شده به مولفه مربوط به تحلیل است. برای استفاده از رویکرد‌ خودکار سازی این فرایند، میتوان از ابزار‌ های orchestration مانند Sqoop و یا Azure Oozie استفاده نمود.معماری‌ های ارائه شده برای سیستم‌ های پردازش کلان‌دادهمعماری لامبدایکی از معروف ترین معماری‌ هایی که در این حوزه استفاده میشود. این معماری بستری فراهم میکند تا بتوان داده با محم بسیار بالا را پردازش کرد. هم چنین رویکردی برای ایجاد مولفه پردازش دسته‌ ای و جریان داده را نیز ارائه میکند. این معماری که توسط Nathan Marz که یکی از متخصصین علم داده twitter است ارائه شده است و هدف آن ارائه چارچوبی مقیاس پذیر برای پردازش کلان داده است. اهداف اصلی این معماری، کاهش تاخیر سیستم، افزایش مقاومت در برابر خطا و بهبود مقیاس پذیری است.این معماری از سه لایه اصلی تشکیل شده است.لایه Batchوظیفه اصلی این لایه، مدیریت دسترسی به داده است. در این معماری، محموعه اصلی داده، تغییر ناپذیر است، و برای دسترسی به داده، باید از این لایه استفاده شود. بدین ترتیب، احتمال ایجاد تغییر به صورت اشتباه در مجموعه داده کاهش میابد. از این لایه بعنوان data lake نیز یاد میشود.در این لایه، داده ها با ساختاری مشخص به نام batch view ذخیره میشوند. مزیت این روش این است که نگه‌داری داده و مدیریت آن ساده تر میشود و هم چنین سرعت جست و جو و دسترسی به داده افزایش میابد.در معماری لامبدا، برای مدیریت نما‌ها دو رویکرد در نظر گرفته شده است. در روش اول با اضافه شدن نمای جدید، نما‌های قبلی حذف میشوند. اما در روش دیگر، با دریافت داده جدید، بجای حذف نما، نما‌های موجود بروز رسانی میشوند.در این لایه میتوان از ابزار‌ هایی مانند hadoob برای ذخیره‌سازی استفاده کرد.لایه Speedدر این لایه، مدیریت داده‌ های پردازش شده در لایه batch انجام میشود. هم‌چنین در این لایه از رویکرد‌ هایی برای افزایش سرعت دسترسی به داده استفاده میشود. مثلا در ای لایه، batch view ها برای جست و جوی سریع‌تر ایندکس میشوند. یا مثلا در این لایه، برای کاهش تاخیر در ایندکس کردن، از تکنیک پردازش جریان داده استفاده میشود، و داده‌ های ورودی، به صورت بلادرنگ پردازش میشوند.لایه Servingوظیفه این لایه، پاسخگویی به درخواست کاربر است. این لایه دسترسی به داده‌ های پردازش شده را با تاخیر کم فراهم میکند.با توجه به ویژگی و امکاناتی که این معماری فراهم میکند، در حوزه‌ هایی حجم داده با نرخ تولید بالا زیاد است، مانند ماشین لرنینگ، IOT ، مدیریت لاگ و غیره عملکرد خوبی خواهد داشت.استفاده از این معماری امکانات و ویژگی‌ هایی را برای سیستم فراهم میکند. میتوان گفت کاهش خطا یکی از مهم‌ ترین این ویژگی‌ هاست. چون در این معماری دسترسی به داده اصلی به صورت مدیریت شده توسط لایه batch انجام میشود، احتمالا وقوع خطا کاهش میابد. در این لایه از نما‌های مشترک و ساختار یافته استفاده میشود، به همین جهت ویژگی نگه‌ داری (maintainance) بهبود میابد. همچنین با توجه با ساختار لایه‌‌ های این چارچوب، این معماری از مقیاس‌ پذیری خوبی برخوردار خواهد بود.مزایای معماری لامبداکاهش احتمال وقوع خطا به علت وجود لایه batch فراهم سرعت بیشتر بدون کاهش ویژگی قابل اتکا بودنمقاوم بودن در برابر وقوع خطامعایبپیچیدگی بیشتر نسبت به دیگر معماری‌هامحاسبات بیشتر برای آماده سازی داده در مرحله تحلیلمعماری کاپامعماری کاپا همانند معماری لامبدا بستری برای پردازش جریان و دسته داده فراهم میکند. در این معماری به طور کلی، داده دریافتی از جریان داده ورودی، ابتدا در یک message engine ( مثلا apache kafka ) ذخیره میشود و سپس توسط یک موتور پردازش جریان داده پردازش میشود و خروجی به صورت ساختاری مناسب برای تحلیل ذخیره میشود. با توجه به این که در این معماری، رویکردی نزدیک به رویکرد بلادرنگ استفاده میشود، (یعنی داده ورودی پس از دریافت سریعا برای تحلیل اماده میشود)، تحلیل داده‌ های جدید به سرعت برای درخواست کاربران ذخیره میشوند.معماری کاپا بعنوان معماری ساده‌ تر جایگزین معماری لامبدا میشود. در این معماری با توجه به این که داده به صورت بلادرنگ اماده تحلیل میشود، عملا لایه batch حذف میشود.مزایای معماری کاپامعماری کاپا توانایی ایجاد بستری برای پردازش  [تقریبا] بلادرنگ ( یا آنلاین ) داده را دارد.معماری ساده تر نسبت به لامبدا .مقیاس پذیری بالا.معایبعدم وجود لایه batch میتواند احتمال وقوع خطا را افزایش دهد.سخن پایانیامروزه در بسیاری از حوزه های مختلف، سیستم‌های نرم‌ افزاری با حجم زیادی از داده مواجه هستند. حتی اگر هدف اصلی سیستم نرم افزاری پردازش و تحلیل داده حجیم نباشد، جمع آوری و تحلیل این داده ها میتواند برای کسب و کار مفید و سود آور باشد. پس در حوزه های مختلف، مثل حوزه های مربوط به یادگیری ماشین، اینترنت اشیا، شبکه های اجتماعی و غیره، سیستم‌ های پردازش داده حجیم بسیار کاربرد دارند. با توجه به ویژگی این سیستم‌ ها، اندازه بزرگ آن ها، و حجم بسیار زیاد داده‌ ای که با آن مواجه هستند، وجود معماری مناسب و پاسخ گو امری ضروری است. با توجه به این که نرخ تولید داده در این این سیستم های نرم افزاری معمولا زیاد است، فراهم کردن یک معماری که ظرفیت مدیریت حجم زیاد داده را داشته باشد میتواند چالش بر انگیز باشد.به همین جهت بررسی کردیم تا ببینیم برای چنین سیستم هایی چگونه میتوان معماری مناسب ارائه کرد و در این معماری ها چه نکاتی اهمیت بیشتری دارند.«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»#معماری_نرم_افزار_بهشتیمنابع1.N. H. Madhavji, A. Miranskyy and K. Kontogiannis, &quot;Big Picture of Big Data Software Engineering: With Example Research Challenges,&quot; 2015 IEEE/ACM 1st International Workshop on Big Data Software Engineering, Florence, Italy, 2015, pp. 11-14, doi: 10.1109/BIGDSE.2015.10.2.https://www.researchgate.net/publication/343666493_Software_architectures_for_big_data_a_systematic_literature_review3.https://www.sciencedirect.com/book/9780128054673/software-architecture-for-big-data-and-the-cloud4.https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/big-data5.https://hazelcast.com/glossary/kappa-architecture/6.https://hazelcast.com/glossary/lambda-architecture/7.https://data-flair.training/blogs/lambda-architecture/8.https://www.databricks.com/glossary/lambda-architecture</description>
                <category>m.hasanmahdi98</category>
                <author>m.hasanmahdi98</author>
                <pubDate>Fri, 10 Feb 2023 23:48:04 +0330</pubDate>
            </item>
                    <item>
                <title>گذرگاه سرویس سازمانی ( ESB )</title>
                <link>https://virgool.io/@m.hasanmahdi98/%DA%AF%D8%B0%D8%B1%DA%AF%D8%A7%D9%87-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D8%B3%D8%A7%D8%B2%D9%85%D8%A7%D9%86%DB%8C-esb-ysvhnzojhzck</link>
                <description>مقدمهامروزه، سیستم‌های نرم‌افزاری، از مقیاس بالاتر، ابعاد و پیچیدگی بیشتر، نسبت به سال‌های گذشته برخوردار میباشند. علت این افزایش پیچیدگی، میتواند افزایش تمایل به استفاده از سیستم‌ نرم‌افزاری، در کاربرد‌ها و حوزه‌های بیشتر نسبت به گذشته باشد. اگر بعنوان هدف بخواهیم کاربرد‌های بیشتری را با استفاده از یک نر‌م‌افزار پوشش دهیم، یعنی نیازمندی‌های بیشتری تعریف خواهد شد، و هرچه نیازمندی بیشتر تعریف شود، طراحی معماری مناسب و پاسخ‌گو، سخت‌تر خواهد شد. در طراحی معماری مناسب برای سیستم‌های نرم‌افزاری بزرگ، روش‌ها و پیشنهاد‌های بسیاری ارائه شده است. بسیاری از این چارچوب‌ها پیشنهاد میکنند تا برای پیاده‌سازی، ره‌اندازی و نگه‌داری بهتر سیستم، معماری سیستم نرم‌افزاری از لایه‌ها، مولفه‌ها و سرویس‌های مجزا از هم تشکیل شود. زمانی که امکان تقسیم یک سیستم کلان، به بخش‌های کوچکتر وجود داشته باشد، تصمیم گرفتن در روند طراحی، و مدیریت آن، ساده‌تر خواهد بود.در شرایطی که سیستم از اجزا مختلف تشکیل شده باشد، لازم است تا امکان ایجاد ارتباط بین اجزا فراهم شود. در سیستم‌های نسبتا بزرگ، ایجاد بستری مناسب برای بر‌قراری ارتباط بین لایه‌های درونی سیستم، میتواند تبدیل به چالش شود. برای این امر، راه حل‌هایی ارائه شده است که شاید معمول‌ترین آن‌ها استفاده از گذر‌گاه خدمات سازمانی یا همان ESB است. گذرگاه سرویس سازمانی چیست؟لایه ESB یک ساختار در معماری سیستم‌های نرم‌افزاری است که به عنوان یک لایه یا مولفه میانی در نظر گرفته میشود که ارتباط بین مولفه‌ها و کارکرد‌های مختلف سیستم را فراهم میکند. این لایه عملکرد‌هایی نظیر برقراری ارتباط بین دو مولفه، تبدیل و تبادل داده، مسیریابی و پردازش درخواست‌ها را شامل میشود. ESB شامل مجموعه‌ای از قوانینی است که ارتباط بین این مولفه‌ها را تعریف می‌نماید. استفاده از ESB به کاهش وابستگی  ( decoupling ) نیز کمک میکند، زیرا با استفاده از این ساختار، مولفه‌های مختلف برای برقراری ارتباط با یک دیگر، لزومی به دانش از محتوای یکدگیر ندارند.استفاده از esb در سیستم، به نوعی سیستم نرم‌افزاری را به یک موجودیت قابل اتصال ( pluggable ) تبدیل میکند که ارتباط مولفه‌های جدید با آن را ساده‌تر و سریع‌تر میکند. به همین جهت، علاوه بر افزایش مقیاس پذیری سیستم، چابکی سازمان نیز افزایش میابد.به طور کلی، استفاده از گذرگاه یکپارچه برای ارتباط بین اجزا، اتصال و ارتباط بین مولفه‌ها در سیستم را، ساده‌تر میکند و این ساده سازی را، با تعریف استاندارد‌هایی انجام میدهد که مولفه‌ها از آن پیروی میکنند.معماری‌های سرویس گرا و ESBمعماری‌های سرویس گرا معماری‌ای هستند که در آن توسعه و نگه‌داری هر سرویس به صورت کاملا مجزا از هم انجام میشود. به عبارت دیگر، هر سرویس برای ارتباط با یک سرویس دیگر، نیازی با اطلاع در مورد محتوای سرویس مقصد ندارد. در چنین سیستم‌هایی وجود ESB امری ضروری است.عملکرد ESB در سیستم‌های سرویس‌گرازمانی که تعداد سرویس‌ها در یک سیستم افزایش میابد، مدیریت ارتباط بین آن‌ها نیز پیچیده‌تر میشود. هر سرویس برای ارتباط با یک مولفه، باید پروتکل و استاندارد‌های لازم مولفه مقصد را رعایت کند. به همین جهت در صورت عدم وجود یکپارچه‌ساز، لازم است تا هر مولفه برای ارتباط با دیگر سرویس‌ها، ابزار لازم برای ترجمه و تبادل ارتباط با آن را داشته باشد. بدین ترتیب، علاوه بر پیچیدگی مدیریت ارتباط، مقیاس پذیری نیز کاهش خواهد یافت. در این شرایط ESB علاوه بر ایجاد بستری مناسب برای برقراری ارتباط بین دو مولفه، با برخورداری از آداپتور‌ها و مترجم‌های لازم، میتواند فرایند ترجمه و تبادل داده را نیز بهبود بخشد.لایه ESB میتواند وظایف بیشتری نیز داشته باشد. مثلا در مورد مسائل مربوط به امنیت سیستم میتوان از ESB استفاده کرد. بعنوان مثال، میتوان امن بودن داده‌هایی که تبادل میشود را در گذر‌گاه بررسی کرد و به همین ترتیب از حملاتی مانند sql injection جلوگیری نمود. و یا مواردی مانند احراز هویت و یا بررسی سطح دسترسی را نیز میتوان در این لایه بررسی کرد.چه زمانی استفاده از ESB پیشنهاد میشود؟به طور کلی، سیستم‌هایی که شامل مولفه‌های مجزا هستند، میتوانند لایه‌ای جدا برای ارتباط در نظر بگیرند. عدم استفاده از ESB در شرایطی که ارتباط بین این مولفه‌ها کارایی را دچار چالش نمیکند میتواند فاقد اهمیت باشد، اما در شرایطی، استفاده نکردن از ساختار مناسب برای برقراری ارتباط میتواند سبب افزایش چشمگیر هزینه‌ها شود. به طور کلی در شرایط زیر پیشنهاد میشود از ESB استفاده شود.تعداد سرویس‌های زیادزمانی که یک سیستم شامل سرویس‌ها و مولفه‌های زیادی باشد، برای مدیریت ارتباط بین هر مولفه استفاده از ESB پیشنهاد میشود. تعداد بخش‌های زیاد یک سازماندر سازمان‌هایی که از بخش‌های داخلی متعدد تشکیل شده‌اند، و هر بخش کارکردی مجزا دارد، برخورداری از ESB میتواند مفید باشد.لزوم به برقراری مستمر بین سرویس‌دهنده و سرویس‌گیرندهدر شرایطی که ارتباط بین مولفه‌ها اهمیت زیادی دارد، و این ارتباط به صورت مستمر برقرار است، وجود یک لایه میانی برای مدیریت ارتباط، میتواند در بهبودی ویژگی‌های کیفی تاثیر داشته باشد.استفاده از مولفه‌های بیرونی ( پلاگین )در شرایطی که سیستم‌ نیاز به استفاده از مولفه‌های جدید و بیرونی داشته باشد، وجود یک ESB مناسب میتواند این امکان را با کارایی بالاتر فراهم کند.اهمیت زیاد مقیاس‌پذیریوجود لایه گذرگاه در سیستم، مقیاس‌پذیری را افزایش میدهد. به همین جهت در سیستم‌هایی که این ویژگی اهمیت بالایی دارد، برخورداری از این امکان میتواند تاثیر خوبی داشته باشد.مزایای استفاده از ESBافزایش مقیاس‌پذیریبا برخورداری از یک گذر‌گاه مناسب، امکان افزودن مولفه جدید و برقراری ارتباط با دیگر مولفه‌ها با سرعت بیشتری فراهم میشود.قابلیت پشتیبانی از پروتکل‌های ارتباطی بیشتربرای پشتیبانی از یک پروتکل جدید، کافیست وابستگی‌های لازم و مترجم‌های لازم در ESB توسعه یابد و نیازی به پیاده‌سازی جدا گانه در هر سرویس نیست. بدین ترتیب توسعه سیستم برای پشتیبانی از پروتکل‌های جدید ساده‌تر و سریع‌تر خواهد شد.افزایش امنیتبا توجه به این که بخش بسیار زیادی از اطلاعات از یک لایه عبور میکند، نظارت و مدیریت آن برای موارد امنیتی، ساده‌تر خواهد بود.سهولت در مانیتورینگبا برخورداری از یک لایه برای برقراری ارتباط، نظارت بر ارتباط بین مولفه‌ها ساده تر خواهد بود.چالش‌های ESB استفاده از ESB در کنار مزایا فراوان، چالش‌هایی نیز دارد. مهم‌ترین ایراد این رویکرد این است که در صورتی که از گذرگاه مناسب استفاده نشود، ESB میتواند تبدیل به گلوگاه سیستم شود و کارکرد سیستم را تحت تاثیر قرار دهد. پس نظارت بر آن و استفاده از تکنیک‌های برای جلوگیری از وقوع خطا در استفاده از ESB ضروری است.انتخاب یک بستر‌ مناسببا توجه به این که بستر‌های زیادی بعنوان esb توسط شرکت‌های مختلف ارائه داده شده است، انتخاب یک گزینه مناسب میتواند برای سازمان چالش باشد. برای انتخاب گزینه مناسب، میتوان موارد زیر را در نظر گفت.مدیریت سادهپیچیدگی و سبک وزن بودن یک بستر، میتواند اهمیت زیادی در انتخاب آن بعنوان esb داشته باشد. استفاده از یک گذر‌گاه با وزن زیاد، میتواند چابکی کلی سیستم را کاهش دهد. در مقابل مدیریت یک ESB سبک وزن نیز ساده تر خواهد بود.مقیاس‌پذیر بودنبا توجه به این که یکی از مهم‌ترین ویژگی‌های سیستم‌های نرم‌افزاری، مقیاس پذیری است، پس برخورداری از یک ESB که خود قابلیت مقیاس‌پذیری داشته باشد نیز امری ضروری است.امنیتدر سیستم‌هایی مانند سیستم‌های سرویس محور، بخش بسیار زیادی از داده از ESB عبور میکند، حفظ امنیت و یکپارچگی داده‌ها، ویژگی‌ای است که در هنگام انتخاب پلتفرم مناسب باید در نظر داشت.وابستگیدر انتخاب یک بستر مناسب، در نظر داشتن این که نصب و راه‌اندازی ESB مورد نظر، تا چه میزان نیاز به وابستگی‌ها و ابزار‌های پیش‌نیاز دارد، میتواند در انتخاب آن تاثیر گذار باشد.همچنین عدم برخورداری از یک ESB مناسب و بروز نیز میتواند چالش‌هایی ایجاد کند. وجود گذرگاه نامناسب، میتواند مدیریت ارتباط بین مولفه‌ها را پیچیده و زمان‌بر تر کند. همچنین در صورت قدیمی بودن ESB حفظ امنیت اطلاعات نیز میتواند با چالش مواجه شود.استفاده از ESB نامناسب میتواند ویژگی‌های کیفی را نیز تحت تاثیر قرار دهد. مثلا استفاده از گذرگاه نامناسب، قطعا مقیاس پذیری سیستم را تحت تاثیر قرار خواهد داد. همچنین این امر میتواند سبب کاهش کارایی کلی سیستم شود زیرا ESB با کارایی پایین میتواند به راحتی تبدیل به گلوگاه سیستم شود.ابزارهای متن باز خدمت دهنده ESBابزار MULE ESBاین ابزار، بستری بر پایه java میباشد که در سال ۲۰۰۳ معرفی شده است. استفاده از این بستر در محیط‌هایی که با تعداد بالا و متفاوت پروتکل ارتباطی مواجه است میتواند مفید باشد. در این پلتفرم، پشتیبانی از بیش از ۵۰ پروتکل متفاوت مانند UDP, TCP, JDBC و … پیاده سازی شده است. هم چنین ساختار این پلتفرم به نوعی طراحی شده است که برای سیستم‌ها با مقیاس‌پذیری بالا گزینه مناسبی باشد. برای مراجعه به سایت کلیک کنید.ابزار WSO2 ESB این ابزار یک پروژه متن‌باز است که با استفاده از یک مدل سرویس محور، خدمت ارائه میکند. این پلتفرم در سال ۲۰۰۵ ارائه شده است و از تکنولوژی جاوا بهره‌مند است. این بستر از Apache Axis 2 برای وب سرویس‌ها و Apache Synsapse برای مولفه‌های میانی استفاده میکند. ویژگی این پلتفرم، مقیاس‌پذیری بالا، و ماژولار بودن آن است. این ابزار بسیاری از پروتوکل‌های مطرح مانند JMS، FIX ،SOAP ،REST ،OAGIS و غیره را پشتیبانی میکند. برای مراجعه به سایت کلیک کنید.معرفی شرکت‌های ایرانی خدمت دهنده در حوزه ESB شرکت پلتکویکی از شرکت‌هایی که تجربه ارائه خدمات ESB را دارد، شرکت پلتکو میباشد. کارشناسان و متخصصان این شرکت با بررسی تخصصی معماری سازمان مد نظر، چالش‌های سازمان را شناسایی، و متناسب با آن خدمت ارائه میکنند.  برای مراجعه به سایت کلیک کنید. شرکت آی‌کنیکی دیگر از شرکت‌های داخلی ارائه دهنده ESB، شرکت آی‌کن میباشد. این شرکت با ارائه زیرساخت مناسب، امکاناتی مانند، مدیریت پیام‌های درونی سیستم، مانیتورینگ، کنترل سطح دسترسی، تعیین پروتکل‌های ارتباطی و .. را فراهم می‌آورد.  برای مراجعه به سایت کلیک کنید.شرکت داده پرداز پویای شریفاین شرکت با ارائه بستری توسعه پذیر، محیطی برای مدیریت جریان اطلاعات و ارتباط بین بخش‌های مختلف را فراهم میکند. برخورداری از متخصصان با تجربه از مزیت‌های این پلتفرم محسوب میشود. برای مراجعه به سایت کلیک کنید.منابع1.https://blog.seeburger.com/ipaas-vs-esb-which-integration-approach-is-best-for-your-organisation/2.https://open-source-guide.com/en/Solutions/Development-and-intermediate-layers/Esbs3.https://www.ibm.com/topics/esb4.https://www.mulesoft.com/resources/esb/what-esb5.https://en.wikipedia.org/wiki/Enterprise_service_busاین مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.</description>
                <category>m.hasanmahdi98</category>
                <author>m.hasanmahdi98</author>
                <pubDate>Fri, 30 Dec 2022 21:24:31 +0330</pubDate>
            </item>
                    <item>
                <title>تعریف Domain Driven Design</title>
                <link>https://virgool.io/@m.hasanmahdi98/%D8%AA%D8%B9%D8%B1%DB%8C%D9%81-domain-driven-design-k6xseiaf4hlh</link>
                <description>طراحی دامنه محور، رویکردی است که در آن ساختار و معماری سیستم نرم‌افزاری، به تبع حوزه مد نظر طراحی شود و در روند ایجاد ساختار و پاسخ به سوالات معماری، توجه اصلی، به دامنه کسب و کار باشد. به عبارتی میتوانیم بگوییم این رویکرد، دیدگاهی از بالا به پایین دارد. معمولا از این رویکرد در طراحی سیستم‌های نسبتا بزرگ استفاده میشود. در این رویکرد لازم است تا در مورد دامنه مورد نظر دانش کافی داشته باشیم. دامنه یک سیستم، محدوده فعالیت و کاربرد آن سیستم است. مثلا دامنه فعالیت میتواند سفارش آنلاین غذا ( مانند اسنپ فود ) یا پلتفرم ارائه کتاب( مانند فیدیبو) باشد. گاهی ممکن است سیستم به قدری بزرگ باشد، که تقسیم کردن آن به بخش‌های کوچک‌تر امری منطقی باشد. مثلا پلتفرم دیجیکالا را میتوان به بخش فروش، پشتیبانی، ارسال و غیره تقسیم کرد. به عبارتی، محیطی که کسب و کار در آن فعالیت میکند به قدری بزرگ است که خود شامل موضوعات و بخش‌های مختلف است. در مواجهه با چنین مدل‌هایی تعریف مرز بین این محیط‌ها میتواند کمک کننده باشد. هر بخش در محیط جدا و برای دامنه‌ای خاص فعالیت میکند، به این رویکرد محیط مرز‌بندی  شده میگویند. مثلا سیستم دانشگاه، شامل دامنه‌های مختلف هستند که هر کدام در محیطی جدا فعالیت میکنند، جدا کردن هر محیط در ایجاد ساختار مناسب تاثیر گذار خواهد بود. مثلا سیستم گلستان، شامل بخش آموزش، خوابگاه وغیره است. یکی دیگر از مزیت‌های DDD فراهم کردن امکان ارتباط بین Domain experts و developers است. DDD این کار با فراهم کردن یک زبان مشترک انجام میدهد. این زبان مشترک علاوه بر ارتباط بین توسعه دهنده و متخصص دامنه، در پیاده سازی سیستم هم استفاده میشود. یعنی برنامه نویس در نامگذاری اجزای کد، از همین زبان مشترک نیز استفاده میکند.[1][2]تعریف Hexagonal architectureایده کلی این رویکر این است که منطق اصلی و دیگر قسمت‌ها ( ابزار‌ها، سرویس‌های خارجی، پایگاه داده، رابط کاربری و …) از یک‌دیگر مستقل کند. این کار با تقسیم سیستم به اجزای جدا ( اما مرتبط ) انجام میشود.به عبارتی این رویکرد شکلی از معماری لایه­ای است. در این رویکرد میخواهیم امکان تغییر و حایگزینی اجزای مختلف را بدون ایجاد تغییرات زیاد در دیگر بخش‌ها، بخصوص منطق اصلی داشته باشیم. در این رویکرد پیشنهاد میشود که ورودی و خروجی هر بخش، در لبه‌ی بیرونی تبادل شود و منطق پیاده سازی، وابسته نحوه‌ی ارائه خروجی ( مثلا Rest API یا GraphQL ) نباشد.برای رسیدن به این هدف، این معماری ساختار از پورت و آداپتور استفاده میکند. هر کامپوننت، به وسیله تعدادی پورت با دیگر بخش‌ها ارتباط برقرار میکند. هم چنین برای بر قراری ارتباط از طریق یک پورت لازم است از پروتوکل تعریف شده توسط آن پورت تبعیت شود. هر کامپوننت خارجی میتواند به وسیله پورت و آداپتور مناسب آن با منطق مرکزی ارتباط برقرار کند ( مثلا هر دستگاه مختلف به شرط داشتن آداپتور USB میتوانند به یک کامپیوتر متصل شوند). علاوه بر پورت، هر کامپوننت شامل یک یا چند آداپتور نیز هست. آداپتور وظیفه ترجمه و تبادل داده بین هر کامپوننت و دیگر بخش‌ها را دارد. بسته به آنکه کامپوننت با چه بخش‌هایی تبادل اطلاعات دارد، میتوان چند آداپتور در نظر گرفت.[3][4][5]تعریف CQRSدر سیستم‌های monolithic که از یک پایگاه‌داده مشترک استفاده میشود، هر دو عملیات نوشتن و خواندن توسط همان پایگاه‌داده پاسخ داده میشود. در شرایطی که سیستم نرم‌افزاری، سیستمی نسبتا کوچک باشد و با داده‌های زیادی مواجه نباشد، این عملیات‌ها دارای پیچیدگی قابل توجه‌ نخواهند بود و مشکلی در مدیریت این عملیات‌ها ایجاد نمیشود. اما با بزرگ‌تر شدن سیستم، مدیریت پایگاه‌داده و اجرای عملیات نیز پیچیده‌تر خواهد شد. مثلا در یک پایگاه‌داده نسبتا بزرگ، برای خواندن داده توسط درخواست‌های نسبتا پیچیده ( مثلا join کردن چندین جدول ) ممکن است زمان قابل توجهی برای پردازش لازم باشد، و یا مثلا برای بروز رسانی جدول، ممکن است لازم باشد، اعتبار سنجی برای پیچیده‌ای برای نوشتن داده انجام شود، در این شرایط، با توجه به اینکه زمان پردازش میتواند نسبتا زیاد باشد، امکان قفل شدن پایگاه‌داده فراهم میشود.رویکرد CQRS برای حل این مسئله پیشنهاد میدهد تا در سیستم مد نظر، دستور‌ها و کوئری ها از هم جدا شوند. دستورات عملیاتی هستند که تغییرات ایجاد میکنند، و بهتر است به صورت task-based باشند(update username ). همچنین کوئری‌ها فقط وظیفه جابجایی داده دارند و هیچ تغییری ایجاد نمیکنند. معمولا در این رویکرد، بجای استفاده پایگاه داده مشترک برای هر دو عملیات، از دو پایگاه داده جداگانه برای خواندن و نوشتن استفاده شود. در این حالت لازم است تا مکانیزمی برای sync کردن پایگاه‌داده‌ها در نظر گرفته شود.مزیت این رویکرد این است که امکان مقیاس‌پذیری برای دو عملیات خواندن و نوشتن را مستقل از هم فراهم میسازد. همچنین به افزایش امنیت اطلاعات نیز کمک میکند، زیرا با این روش میتوان اطمینان حاصل کرد دستور نوشتن و ایجاد تغییرات، از مبدا معتبر انجام میشود.[6][7]تعریف MVVMالگوی طراحی mvvm که توسط مایکروسافت ارائه شده است، روشی است اجازه میدهد تا منطق پیاده سازی، و ارائه و نمایش آن، از هم جدا باشد. در این الگو، سه مولفه اصلی وجود دارد. مولفه اول نما یا view نام دارد که وظیفه آن، تعریف ساختار رابط‌کاربری‌‌ است. درواقع این مولفه اطلاعات را به کاربر نمایش میدهد. مولفه بعدی، مدل نام دارد. به طور خلاصه، مدل لایه‌ی داده در معماری است. مدل‌ها کلاس‌هایی هستند که وظیفه تعامل با اطلاعات را دارند. مدل و viewmodel در کنار هم عملیات تبادل ( خواندن و نوشتن ) داده را انجام میدهند. مولفه بعدی، Viewmodel نام دارد. به طور خلاصه، این مولفه ارتباط بین نما و مدل را فراهم میکند. در هر قسمت، با توجه به ورودی‌ای که از سمت نما وارد میشود، این مولفه ورودی را پردازش، و سپس با استفاده از مدل‌های مربوط، پاسخ مناسب را آماده و به بعنوان خروجی به نما میدهد. مزیت این رویکرد، مستقل کردن رابط کاربری، از منطق اصلی سیستم است. در این شرایط، امکان توسعه، تست و نگه‌داری هر مولفه به صورت جداگانه، توسط تیم‌های جداگانه فراهم میشود و به نوعی میتوان وابستگی بین بخش های سیستم را کاهش داد. این رویکرد در سیستم­های سرویس محور میتواند انتخاب مناسبی باشد.[8][9][10]تعریف Event Sourcingمفهوم الگوی Event Sourcing این است که به جای نگه‌داری حالت داده (state) فعالیت‌هایی که برای رسیدن به آن حالت انجام شده است نگه‌داری شود. بعنوان مثال، فرض کنید در سیستم بانکی، به جای آنکه باقی‌مانده حساب کاربر نگه‌داری شود، لیست تراکنش‌های آن حساب ذخیره شود. بدین ترتیب هر زمان که باقی‌مانده حساب لازم باشد، میتوان با استفاده از تراکنش‌ها، مقدار باقی مانده ( حالت کنونی) را بازیابی کرد. در این رویکرد بر خلاف حالت مرسوم که شامل ساختن، خواندن، بروز رسانی و حذف ( crud ) صرفا امکان ساختن و خواندن وجود دارد (CR). در مواقعی که با سیستم‌های CRUD در نرم‌افزار با مقیاس بالا مواجه هستیم، نگه‌داری سیستم پیچیده‌تر خواهد بود و با محدودیت‌هایی روبرو خواهیم بود. مثلا در این سیستم‌ها بروز رسانی اطلاعات سربار زیادی خواهد داشت، که همین مورد مقیاس پذیری را تحت تاثیر قرار میدهد. و یا در سیستم‌های پردازش موازی، امکان وقوع تعارض وجود دارد. برای حل این مشکلات، بخصوص در سیستم‌های نسبتا بزرگ، رویکرد event sourcing میتواند کمک کننده باشد.[11][12]تعریف Micro Frontendsمعماری Micro frontend رویکردی است که در آن بخش Front End یک نرم‌افزار، به بخش‌های کوچک‌تر و مستقل از هم تقسیم میشوند. به عبارتی این رویکرد، یک پله از معماری micro Service فراتر رفته، و علاوه بر تقسیم کردن back end به بخش‌های مستقل، پیشنهاد میدهد تا بخش فرانت نیز از هم جدا باشد.بدین ترتیب، هر قسمت میتواند جداگانه توسعه و نگه‌داری شود و این امکان وجود دارد در هر بخش از تکنولوژی‌ متفاوت استفاده شود. همچنین با استفاده از این معماری، وابستگی بین بخش‌های متفاوت کم میشود، و هر بخش توسط تیم‌های جدا امکان پیاده سازی دارد. همچنین در این شرایط، امکان ایجاد تغییرات و افزودن ویژگی با سرعت بالا فراهم میشود. معماری میکروفرانت‌اند، ساختاری عمودی دارد، و هر بخش، بر دامنه‌ای خاص تمرکز دارد. بعنوان مثلا در یک سامانه فروش آنلاین، بخش پروفایل کاربر، سبد خرید، محصولات، جستجو و غیره را میتوان از هم جدا کرد.حتی در مواردی مانند SPA هر قسمت از یک صفحه میتواند به عنوان یک بخش مستقل در نظر گرفته شود. بدین ترتیب میتوان هر بخش از یک اپلیکیشن ( مانند پروفایل ) را بعنوان یک بخش مستقل در نظر گرفت، به عبارتی هر کدام از این مولفه هارا میتوان یک سرویس مستقل، با رابط کاربری مستقل در نظر گرفت.[13][14]تعریف Low code platformsبستر‌های low-code امکانی را فراهم میکند، تا توسعه دهنده بدون نیاز به دانش فنی زیاد، و با استفاده از رابط کاربری، یک محصول نرم‌افزاری تولید کند. در این سیستم‌ها کاربر صرفا کامپوننت‌های مد نظر را کنار یکدیگر قرار میدهد، و خود سیستم تمامی بخش‌های مختلف، مانند فرانت‌اند و کد‌های بک‌اند را تولید میکند. مزیت قابل توجه‌ این ابزار این است مدت زمان لازم برای توسعه محصول بسیار کاهش میابد. همچنین برای توسعه محصول با استفاده از این ابزار، دانش فنی کم‌تری لازم است، به همین جهت، افراد بیشتری میتوانند در روند توسعه محصول مشارکت داشته باشند. با توجه‌ به این که این بستر‌ها، Reuseability بالایی دارند، علاوه بر افزایش سرعت توسعه، هزینه آن کاهش میابد. در مواقعی که یک سازمان، تیمی با توانایی لازم برای توسعه یک سیستم برای یک هدف خاص را نداشته باشدو یا مثلا تعداد توسعه دهنده کافی و یا زمان کافی نداشته باشد، و استخدام توسعه دهنده به صرفه نباشد، استفاده از این بستر‌ها انتخاب مناسبی است.اما فقط در شرایط ذکر شده استفاده از این ابزار مفید نیست. در تیم‌ها و سازمان‌های بزرگ نیز استفاده از این بستر میتواند کمک کننده باشد. مثلا برای راه اندازی یک نمونه اولیه از محصول و فراهم کرد حلقه بازخورد سریع، میتوان از این بستر استفاده کرد.[15][16]تعریف ESBوظیفه اصلی EBS ارائه بستری، برای ایجاد ارتباط بین اجزا‌ و سرویس‌های مختلف در معماری‌های سرویس‌گرا است. در این الگو، بستر ایجاد شده، علاوه برای ایجاد ارتباط بین مولفه‌ها، لازم است تا امکان جابجایی داده، تبدیل و ترجمه اطلاعات و مسیر یابی را فراهم سازد.مزیت استفاده از این بستر در سیستم‌های سرویس‌گرا، ساده سازی و یکپارچگی ارتباط بین سرویس‌های سازمان است. همچنین استفاده از این روش، در کاهش هزینه نیز تاثیرگذار خواهد بود، زیرا استفاده از این بستر بین سرویس‌ها مشترک خواهد بود، و لزومی ندارد برای ارتباط هر سرویس، پیاده سازی جدا صورت بگیرد. همچنین توسعه و نگه‌داری آن میتواند توسط یک تیم انجام بگیرد. استفاده از این بستر، مقیاس‌پذیری سیستم را نیز افزایش میدهد. به عبارتی، برخورداری از این الگو، سیستم را به یک Pluggable system تبدیل میکند و ارتباط سیستم کنونی با مولفه‌های جدید را ساده‌تر میکند. استفاده از تکنیک‌های مناسب در پیاده سازی بستر EBS بسیار اهمیت دارد. اگر در یک سیستم، این بستر از معماری مناسبی برخوردار نباشد و دارای صفات کیفی قابل قبول نباشد، به راحتی میتواند کارایی کل سیستم را تحت تاثیر قرار دهد. به عبارت دیگر، اگر EBS کارایی کافی نداشته باشد، تبدیل به bottleneck سیستم میشود، کارایی کل سیستم را کاهش میدهد. به همین جهت اگر معماری مناسب در طراحی آن اتخاذ نشده باشد، بهبود و ایجاد تغییرات در آن، ممکن است هزینه زیادی لازم داشته باشد.[17][18]تعریف API Gatewayدر سیستم‌هایی که معماری میکروسرویس دارند، رویکرد مناسب استفاده از API Gateway میباشد. به طور خلاصه، api gateway نقطه ورودی سیستم برای اتصال به هر سرویس است. به عبارت دیگر، api gateway لایه‌ای است که بین کلاینت و سرویس‌ها قرار میگیرد و ارتباط بین این دو را برقرار میکند. کاربران برای استفاده از سرویس مد نظر، درخواست خود را به این لایه ارسال میکنند و سپس با بررسی درخواست، به سرویس مناسب ارسال میشود.نکته قابل توجه این است که ممکن است api gateway به دلیل افزایش سرویس‌ها، بزرگ‌تر و پیچیده‌تر، و در نتیجه نگه‌داری آن سخت‌تر شود. به همین جهت پیشنهاد میشود تا خود API Gateway نیز دسته‌بندی شود. مثلا اگر سیستم در دو نسخه متفاوت برای مبایل و وب ارائه شده است، و هر کدام از سرویس‌های متفاوت استفاده میکنند، میتوان دو Gateway جدا برای هر کدام در نظر گرفت. استفاده از api gateway در سیستم‌های سرویس گرا امری ضروری است. اگر این لایه برای ارتباط وجود نداشته باشد، هر کلاینت برای استفاده از یک سرویس باید مستقیما به endpoint آن متصل شود. در این شرایط نگه‌داری سیستم پیچیده‌تر و پرهزینه‌تر خواهد بود و در ایجاد تغییر و یا اضافه کردن سرویس جدید، با چالش مواجه خواهیم بود. به همین جهت، وجود یک لایه میانی، که ارتباط بین کلاینت و سرویس‌ها را برقرار کند، میتواند کمک کننده باشد.[19]تعریف Business Process Management Systems (BPMS)سیستم مدیریت فرایند کسب و کار، بستری است که در آن امکان طراحی، مدل سازی، توسعه و نگه‌داری فعالیت‌های کسب و کار وجود دارد.در این بستر، میتوان هر فرایند سازمانی که توسط هر فرد و یا هر بخش سازمان اجرا میشود را مدل کرد. همچنین این سیستم امکان ایجاد و انجام فرایند سازمانی به صورت خودکار را فراهم می‌آورد. این بستر، امکان بررسی دقیق فرایند‌ها برای عیب‌یابی را فراهم میکند و کمک میکند تا مواردی که ممکن است منجر به خطا شود ( مثلا bottleneck فرایند) شناسایی شود. با رفع این ایرادات میتوان از افزایش هزینه‌ها جلوگیری کرد. دیگر مزیت این بستر، افزایش کارایی میباشد، زیرا با خودکار شدن این روند، از انجام کار‌های تکراری جلوگیری میشود. همچنین بهره‌مندی از این پلتفرم در معماری، چابکی سیستم را نیز به نحوی افزایش میدهد، زیرا با استفاده از این ابزار، میتوان در حین اجرای فرایند، آنرا ارزیابی نمود و برای بهبود آن تکنیک‌های لازم استفاده شود، به عبارتی، چرخه بازخورد به نوعی سریع‌تر خواهد بودبه طور خلاصه در این سیستم‌ها، میتوان پیچیده ترین فرایند سازمانی را مدل‌سازی کرد، و سپس با اجرای آن در این بستر، روند اجرای آن را تحت نظر قرار داد و در صورت نیاز تصمیمات لازم را اتخاذ نمود تا فرایند، بیشترین سود‌دهی را داشته باشد. همچنین در این سیستم، امکان ایجاد تغییرات در یک فرایند، به نحوی که سبب بهبود خروجی آن شود وجود دارد.[20][21]تعریف Business Rules Management Systems (BRMS)سیستم مدیریت قوانین کسب و کار، بستری است که در آن فرایند تعریف و طراحی، توسعه ، راه‌اندازی و مدیریت و نگه‌داری قوانین کسب و کار به صورت خودکار انجام میشود. قوانین کسب و کار معرف یک کسب و کار هستند. به عبارت دیگر، هر فرایند در یک کسب و کار برای به هدف رسیدن و سودآوری، نیاز‌مند اتخاذ یکسری تصمیم است، قوانین کسب و کار، چارچوبی هستند که به کمک آن‌ها میتوان تصمیم مناسب برای به هدف رسیدن فرایند اتخاذ کرد. معمولا قوانین کسب و کار شامل دو مولفه اصلی هستند، شرایط و عمل. مثلا در سیستم دانشگاه، در شرایطی که نمره دانشجو کم‌تر از حد قابل قبول باشد ( شرایط ) لازم است فرایند مردود شدن دانشجو در آن درس اعمال شود ( عمل ). با استفاده از BRMS فرایند ایجاد و اجرای قوانین کسب و کار، به صورت خودکار انجام خواهد شد. مزیت استفاده از این بستر در معماری سازمان، افزایش کارایی علاوه بر کاهش هزینه است، زیرا فرایند مدیریت قوانین، به صورت خودکار انجام میشود. همچنین مقیاس‌پذیری سیستم افزایش خواهد یافت، چون افزودن قوانین جدید، از مرحله طراحی تا توسعه و راه‌اندازی به صورت خودکار و با سرعت بالا امکان‌پذیر خواهد بود، همچنین با استفاده از این ابزار، مشکلاتی مانند ایجاد تعارض در قوانین به راحتی قابل مشاهده خواهد بود، به همین علت، نگه‌داری سیستم نیز بهبود خواهد یافت. دیگر مزیت بهره‌مندی از این بستر، افزایش امنیت سیستم است، زیرا در این شرایط، میتوان دسترسی به قوانین کسب و کار، که به عبارتی هسته مرکزی سیستم نرم‌افزاری هستند را محدود‌تر نمود.[22][23]تعریف Message Queueبه طور کلی صف پیام یک مکانیزم برای برقراری ارتباط بین چندین مولفه میباشد. در این رویکرد، یک صف برای پیام‌ها در نظر میگیریم که زمانی که یک مولفه نیاز به ارسال درخواست به یک مولفه‌ دیگر را داشته باشد پیام خود را در این صف قرار میدهد. در برخی روش‌ها، برای برقراری ارتباط بین دو مولفه، یک کامپوننت پس از ارسال درخواست، باید در انتظار پاسخ آن بماند. حال اگر از معماری سرویس محور استفاده کنیم، در این شرایط، هر سرویس برای دریافت پاسخ باید در انتظار یک مولفه دیگر بماند و با توجه به این که در این شرایط ممکن است تعداد قابل توجهی از سرویس‌ها نیاز به پاسخ سرویس دیگر داشته باشند کارایی سیستم کاهش خواهد یافت. در این شرایط استفاده از صف پیام میتواند مفید باشد. این صف بعنوان یک حافظه موقت عمل میکند که در آن درخواست یک کلاینت و یا یک کامپوننت ذخیره میشود. در این رویکرد معمولا دو عنوان تعریف میشود، تولید کننده پیام و مصرف کننده. تولید کننده در واقع همان کلاینت است که درخواستی برای پردازش دارد و مصرف کننده عامل پاسخ‌ دهنده به آن است.  تولید کننده با اتصال به اند‌پوینت صف، پیام و یا درخواست خود را در صف قرار میدهد. پیام‌ها به ترتیب از ابتدای صف به مصرف کننده مناسب برای پردازش ارائه میشود و پس از پردازش آن یک پاسخ مناسب آماده میکند. با توجه به این که اولویت کار‌ها میتواند متفاوت باشد، میتوان چندین صف پیام در نظر گرفت.[24][25]تعریف Docker and Containerizationمفهوم containerization بسته‌بندی کد و وابستگی‌های آن به همراه محیط اجرایی که نرم‌افزار در آن تست و اجرا شده است، میباشد. به طور معمول در روش‌های سنتی، برای توسعه و پیاده سازی محصول، کد و پیاده سازی سیستم، در محیطی مستقل انجام میشود و خروجی آن در محیطی دیگر راه‌اندازی میشود. در این حالت امکان وقوع خطاها‌یی به علت عدم رعایت وابستگی به وجود می‌آید. برای بر طرف کردن این چالش، میتوان از containerization استفاده کرد. این رویکرد با بسته‌بندی کردن تمام وابستگی‌ها، نر‌م‌افزار و پیکر‌بندی‌های لازم برای اجرا، به چالش‌هایی که در مرحله deployment  ممکن است به وجود بیاید را پاسخ میدهد. مزیت استفاده از این ابزار، قابل‌ حمل بودن محصول نهایی است. در این الگو، محصول نهایی یک پکیج قابل اجرا خواهد بود که وابستگی به محیطی که قرار است در آن deploy شود نخواهد داشت. همچنین، با توجه به این که هر کانتینر، مستقل از دیگر کانتینینر‌ها است، وقوع خطا در یکی از آن‌ها، سبب ایجاد مشکل در دیگر کانتینر‌ها نخواهد شد، همین جهت امنیت سیستم افزایش‌ خواهد یافت. یکی از ابزاری که در این حوزه محبوبیت بالایی دارد ابزار Docker است. این بستر میتواند یک سیستم به همراه همه‌ی وابستگی‌های آن را در یک پکیج ارائه دهد که امکان راه‌اندازی بر روی هر نسخه از لینوکس، ویندوز و مک‌او‌اس را دارد.[26][27]تعریف Container orchestration (such as Kubernetes)هماهنگی کانتینر‌ها فرایندی است که در آن عملیات لازم برای استفاده از کانتینر‌ها، شامل راه‌اندازی، مدیریت و مقیاس‌دهی را به صورت خودکار انجام دهد. معمولا از این مفهوم، برای راه‌اندازی، مدیریت، زمانبندی، تخصیص منابع و مانیتورینگ استفاده میشود. در ‌سازمان‌ها و سیستم‌هایی که از تعداد قابل توجی کانتینر استفاده میکنند، استفاده از این تکنیک میتواند کمک کننده باشد.[28]تعریف Log Management Toolsمدیریت لاگ، فرایندی است که در آن جمع‌آوری، ذخیره و پردازش لاگ، به صورت مداوم و حتی خودکار انجام شود. لاگ سیستم، تاریخچه‌ای از رخداد‌هایی است که توسط کد سیستم تولید میشوند. تولید و مگه‌داری لاگ سیستم‌های نرم‌افزاری امری ضروری است. مثلا پس از وقوع خطا، میتوان با مراجعه به لاگ سیستم، علت را جویا شد، و از دوباره رخ دادن آن خطا جلوگیری کرد. لاگ میتواند به صورت یک فایل، شامل پیام، تعاملات کاربران و یا گزارش‌ خطا باشد. استفاده از ابزار مدیریت لاگ، فرایند تولید و ذخیره لاگ به صورت خودکار انجام میدهد. مدیریت لاگ سیستم‌ نرم‌افزاری شامل فرایند‌های مختلفی است. اولین فرایند، جمع‌آوری (Collecting)داده است. ابزار مدیریت لاگ، اطلاعات لازم‌ را از مولفه های مورد نظر ( سرور، کاربر، سرویس‌ها) جمع‌آوری میکند. مورد دیگر، نظارت بر لاگ‌ها است. با نظارت بر لاگ، میتوان از وقوع خطا جلوگیری کرد. این ابزار‌ها میتوانند با نظارت بر لاگ‌ها، به برخی از رخداد‌ها واکنش نشان‌ دهند. مثلا با بررسی لاگ، سربار سرور را نظارت شود و در صورت وقوع ناهنجاری، هشدار صادر کند. همچنین معمولا ابزار مدیریت لاگ، امکان تحلیل رخداد‌های سیستم را نیز دارند. در مدیریت لاگ سیستم، معمولا با چالش‌هایی نیز مواجه هستم. مثلا در سیستم‌های بزرگ ممکن است حجم داده مربوط به لاگ زیاد باشد و پردازش آن با مشکل مواجه شود. همچنین لاگ تولید شده توسط سیستم، اگر ساختار مناسب نداشته باشد، پردازش آن ممکن است با چالش مواجه شود.[30] تعریف Monitoring toolsابزار مانیتورینگ، ابزار‌هایی هستند که برای بررسی وضعیت بخش‌های مختلف سیستم مورد استفاده قرار میگیرند. استفاده از این ابزار مزیا زیادی دارد. مثلا با نظارت حالت سیستم، میتوان قبل از وقوع خطا، احتمال وقوع آن را پیشبینی کرد. معمولا این کار با لاگ کردن رخداد‌ها و تحلیل آن‌ها به کمک ابزار مدیریت لاگ، صورت میگیرد. استفاده از ابزار مانیتورینگ، سبب میشود تا در موارد ضروری ( مانند وقوع خطا) تصمیمات لازم برای مقابله با آن گرفته شود. همین امر سبب میشود تا کارایی و Availability سیستم افزایش یابد.تعریف Static Code Analysisتحلیل کد ایستا، رویکردی است برای تحلیل و رفع خطا‌های کد، بدون اجرا کردن آن. در واقع در این روش، ساختار کد بررسی میشود و ضعف‌های آن بدون نیاز به اجرای کد تحلیل میشود. معمولا ابزار‌های تحلیل به صورت خودکار کد را بررسی میکنند مواردی مانند خطا‌های برنامه نویسی، عدم رعایت استاندارد‌های برنامه نویسی، خطا‌های سینتکس و مواردی مانند ضعف‌های امنیتی را گزارش میکنند. میتوان این بررسی را در خط لوله تحویل محصول انجام داد. با توجه به این که در چرخه توسعه محصول، تعداد دفعات build کردن کد زیاد است، استفاده از ابزار‌های خودکار برای این کار انتخاب مناسبی است. معمولا این ابزار تحلیل‌های مختلفی انجام میدهند. مثلا تحلیل کنترل برنامه، که در آن ساختار روند اجرا بررسی میشود. و یا تحلیل داده و متغییر‌های کد. استفاده از این ابزار، چرخه بازخورد را نیز کوتاه‌تر کرده و کارایی سیستم را افزایش میدهد.[31]تعریف Continuous Deliveryرویکرد تحویل مستمر، روشی است که در آن تلاش میشود تا فاصله بین تغییر در کد و اعمال آن در محصول نهایی کاهش یابد. معمولا این روش با خودکار کردن روند build، تست، پیکر‌بندی و راه‌اندازی انجام میشود و معمولا از یک خط لوله برای اجرای آن استفاده میشود. میتوان گفت این رویکرد، یکی از مهم‌ترین نیاز‌مندی‌های سیستم‌های نرم‌افزاری در سازمان‌ها است. در روش‌های سنتی که از CD استفاده نمیشد، در بسیاری از موارد، چرخه تحویل محصول یکی از گلوگاه‌های سیستم بود. در این شرایط، تیم مربوطه میبایست، به صورت دستی تمام مراحل ساخت، تست و راه‌اندازی را انجام میداد و به همین علت، امکان وقوع خطا بسیار بود. اما با وارد شدن CD به تکنیک‌های معماری، این چالش حل شد. استفاده از CD، روند فرایند تحویل را به صورت خودکار انجام میدهد، در این شرایط علاوه بر کاهش احتمال خطا، چرخه تحویل نیز کوتاه‌تر خواهد بود. نکته‌ دیگر این است که، بر خلاف گذشته، امروزه در روند توسعه و نگه‌داری یک نرم‌افزار، شاید لازم بایشد در طول روز به تعداد دفعات زیاد، تغیراتی که در کد ایجاد میشود بر روی محصول نهایی اعمال شود و به عبارتی کد build شود.[32][33]تعریف Single Sign on (SSO) and Identity Managementبا توجه به این که امروزه بسیاری از پلتفرم‌ها و سازمان‌ها چندین سرویس متفاوت ارائه میدهند، یکی از چالش‌هایی که بوجود می‌آید بحث احراز هویت کاربران‌ است.به طور کلی، مدیریت هویت رویکردی است که با استفاده از آن میتوان اطمینان حاصل کرد که به فرد اشتباه دسترسی داده نمیشود. به عبارت دیگر مشخص میکند یک کاربر کیست و چه کاری میتواند انجام دهد و به چه منابعی دست رسی دارد. یکی از جنبه های مهم در این موضوع SSO  است. در هر سیستم و یا سازمان، کاربر باید برای استفاده از هر سرویس یا منابع سازمان، احراز هویت انجام دهد. مثلا فرض کنید در یک سازمان، لازم باشد، یک کارمند برای استفاده از منابع و یا فرایند‌های مختلف احراز هویت شود. و یا ممکن است در یک سیستم سرویس محور، برای استفاده از هر سرویس، احراز هویت لازم باشد، در این شرایط کاربر باید برای ارتباط با هر مولفه عملیات احراز هویت انجام دهد.این موضوع میتواند سبب کاهش تجربه‌کاربری در استفاده از یک پلتفرم شود. به همین علت، موضوع احراز هویت یکپارچه مطرح میشود. در این رویکرد، کاربر یکبار احراز هویت میشود و میتواند از همه‌ی سرویس‌ها استفاده کند. مثلا کاربر با وارد شدن به حساب کاربری جیمیل، حساب کاربری شخص در دیگر سرویس‌های گوگل نیز احراز هویت میشود.[34]منابع1. https://en.wikipedia.org/wiki/Domain-driven_design2. https://learn.microsoft.com/en-us/archive/msdn-magazine/2009/february/best-practice-an-introduction-to-domain-driven-design3. https://medium.com/ssense-tech/hexagonal-architecture-there-are-always-two-sides-to-every-story-bc0780ed7d9c4. https://en.wikipedia.org/wiki/Hexagonal_architecture_(software)5.https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b315ec9677496.https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs7.https://medium.com/design-microservices-architecture-with-patterns/cqrs-design-pattern-in-microservices-architectures-5d41e359768c8.https://learn.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm9.https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel10.https://www.geeksforgeeks.org/mvvm-model-view-viewmodel-architecture-pattern-in-android/11.https://learn.microsoft.com/en-us/azure/architecture/patterns/event-sourcing12.https://medium.com/design-microservices-architecture-with-patterns/event-sourcing-pattern-in-microservices-architectures-e72bf0fc927413.https://micro-frontends.org/14.https://virgool.io/@ar.oroumand/%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-micro-front-end-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-gpt0dosfcypk15.https://theecmconsultant.com/best-low-code-platforms/16.https://en.wikipedia.org/wiki/Low-code_development_platform17. https://www.ibm.com/cloud/learn/esb18.https://en.wikipedia.org/wiki/Enterprise_service_bus19.https://learn.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern20. https://kissflow.com/workflow/bpm/business-process-management-systems-top-features/21.https://en.wikipedia.org/wiki/Business_process_management22. https://www.ibm.com/cloud/blog/business-rules-management-systems-10123. https://en.wikipedia.org/wiki/Business_rule_management_system24.https://aws.amazon.com/message-queue/25.https://en.wikipedia.org/wiki/Message_queue26.https://www.ibm.com/cloud/learn/containerization27.https://www.redhat.com/en/topics/cloud-native-apps/what-is-containerization29.https://www.redhat.com/en/topics/containers/what-is-container-orchestration30.https://www.crowdstrike.com/cybersecurity-101/observability/log-management/31.https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis#:~:text=Static%20analysis%2C%20also%20called%20static,code%20adheres%20to%20industry%20standards.32. https://learn.microsoft.com/en-us/devops/deliver/what-is-continuous-delivery33. https://en.wikipedia.org/wiki/Continuous_delivery34.https://www.cloudflare.com/learning/access-management/what-is-sso/35.https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh</description>
                <category>m.hasanmahdi98</category>
                <author>m.hasanmahdi98</author>
                <pubDate>Mon, 28 Nov 2022 23:47:20 +0330</pubDate>
            </item>
            </channel>
</rss>