<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Amirreza Vafaei</title>
        <link>https://virgool.io/feed/@amirezavafa2002</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-04-15 10:33:23</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/3824521/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Amirreza Vafaei</title>
            <link>https://virgool.io/@amirezavafa2002</link>
        </image>

                    <item>
                <title>پروژه پایانی درس معماری نرم‌افزار</title>
                <link>https://virgool.io/@amirezavafa2002/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C-%D8%AF%D8%B1%D8%B3-%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-cphu0wmoa4re</link>
                <description>عنوانموازی‌سازی تعبیه‌کردن فرامسیر‌ها در الگوریتم MAHE_IMدانشجو: امیررضا وفائياستاد: دکتر صادق علی‌اکبریشهریور ماه سال ۱۴۰۴چکیدهتشخیص گره‌های پرنفوذ در شبکه‌های اجتماعی به منظور انتخاب یک مجموعه بهینه و حداقلی از کاربران اولیه برای حداکثر کردن گسترش نفوذ، به عنوان یک مسئله کلیدی در تحلیل نفوذ مطرح است. در شبکه‌های ناهمگن، که شامل انواع مختلف گره‌ها (مانند کاربران، مقالات، کنفرانس‌ها) و روابط چندگانه هستند، این مشکل به دلیل پیچیدگی ساختاری پیچیده‌تر می‌شود. در حالی که اکثر مطالعات بر شبکه‌های همگن متمرکز بوده‌اند، شبکه‌های اجتماعی واقعی از مجموعه‌ای ناهمگن از کاربران و ارتباطات تشکیل شده‌اند که نیاز به روش‌های پیشرفته‌تری برای تحلیل و بهینه‌سازی نفوذ دارند. مقاله انتخابی با ارائه چارچوبی مبتنی بر یادگیری عمیق برای تعبیه روابط ناهمگن، گامی مؤثر در این زمینه برداشته است. نسخه موازی الگوریتم با استفاده از پردازش موازی تعبیه فرامسیرها و مانیتورینگ منابع، زمان اجرا را به طور قابل‌توجهی کاهش داده و عملکرد را بهبود می‌بخشد. ارزیابی با استفاده از مدل‌های انتشار اطلاعات (مانند مدل آبشار مستقل و خط) و داده‌های واقعی شبکه DBLP در حوزه یادگیری ماشین انجام شده است.کلیدواژه‌ها: بیشینه‌سازی نفوذ، تشخیص گره‌های پرنفوذ، تحلیل نفوذ، شبکه‌های ناهمگن، انتشار نفوذ، پردازش موازی، ارزیابی منابعمقدمهبیشینه‌سازی نفوذ (Influence Maximization, IM) یکی از موضوعات کلیدی در تحلیل شبکه‌های اجتماعی و اطلاعات ناهمگن است که هدف آن شناسایی مجموعه‌ای بهینه از گره‌های اولیه (بذرها) برای حداکثر کردن گسترش اطلاعات، ایده‌ها یا رفتارها در یک شبکه است. با افزایش پیچیدگی شبکه‌ها، به‌ویژه در محیط‌های ناهمگن که شامل انواع مختلف گره‌ها (مانند کاربران، مقالات، کنفرانس‌ها) و روابط چندگانه هستند، این مشکل از نظر محاسباتی چالش‌برانگیزتر می‌شود. در دنیای واقعی، شبکه‌های اجتماعی مانند DBLP، که شامل روابط پیچیده بین نویسندگان، مقالات و کنفرانس‌ها است، نیاز به روش‌های پیشرفته‌ای برای تحلیل و بهینه‌سازی نفوذ دارند.الگوریتم MAHE-IM (Multiple Aggregation of Heterogeneous Relation Embedding for Influence Maximization) به عنوان یک چارچوب مبتنی بر یادگیری عمیق برای بهینه‌سازی نفوذ در شبکه‌های ناهمگن توسعه یافته است. این الگوریتم با استفاده از تعبیه روابط ناهمگن (Heterogeneous Relation Embedding) و ترکیب آن با تکنیک‌های تشخیص جامعه، تلاش می‌کند تا دقت و کارایی را در شناسایی گره‌های تأثیرگذار افزایش دهد. با این حال، اجرای متوالی تعبیه فرامسیرها (Meta-paths) در نسخه اصلی این الگوریتم، به دلیل وابستگی به پردازش یک به یک، زمان‌بر است و از ظرفیت کامل منابع محاسباتی مانند CPU و GPU استفاده نمی‌کند.در این پروژه، هدف اصلی بهبود عملکرد و سرعت الگوریتم MAHE-IM از طریق پیاده‌سازی یک نسخه موازی است. با بهره‌گیری از پردازش موازی، می‌توان تعبیه فرامسیرهای مستقل را به صورت همزمان انجام داد و از منابع سیستمی به طور مؤثرتر استفاده کرد. این کار با در نظر گرفتن محدودیت‌های سخت‌افزاری و بهینه‌سازی مصرف منابع مانند CPU، حافظه و GPU انجام می‌شود. همچنین، با افزودن مانیتورینگ عملکرد، امکان تحلیل دقیق‌تر رفتار الگوریتم در هر فاز و مقایسه نسخه اصلی با نسخه موازی فراهم می‌شود.این گزارش به بررسی کامل پیاده‌سازی نسخه اصلی مانیتور شده و نسخه موازی بهینه‌شده می‌پردازد. ابتدا مروری بر پژوهش‌های پیشین در زمینه بیشینه‌سازی نفوذ و به‌ویژه رویکردهای موازی ارائه می‌شود. سپس، روش پیشنهادی برای بهبود عملکرد با مانیتورینگ و پردازش موازی تشریح می‌شود. در ادامه، جزئیات مجموعه داده، نتایج تجربی، و مقایسه بین دو نسخه ارائه خواهد شد. در نهایت، نتیجه‌گیری و پیشنهادات برای کارهای آینده بیان می‌گردد. این پروژه با الهام از نیازهای عملی در تحلیل شبکه‌های ناهمگن و با تکیه بر منابع محاسباتی مدرن، گامی در جهت کارآمدتر کردن الگوریتم‌های پیچیده برمی‌دارد.مروری بر پژوهش‌های پیشینتحلیل نفوذ در شبکه‌ها از دهه‌های گذشته با رشد شبکه‌های اجتماعی و نیاز به درک پویایی انتشار اطلاعات مورد توجه پژوهشگران قرار گرفته است. در ابتدا، مطالعات بر روی شبکه‌های همگن متمرکز بود که در آن گره‌ها و لبه‌ها از یک نوع واحد بودند. با این حال، با ظهور شبکه‌های ناهمگن، که شامل انواع مختلف گره‌ها و روابط پیچیده هستند، نیاز به روش‌های پیشرفته‌تر احساس شد. در این بخش، مروری بر پیشرفت‌های کلیدی در این حوزه ارائه می‌شود، با تأکید بر رویکردهای مبتنی بر پردازش موازی که پایه و اساس بهبود الگوریتم MAHE-IM در این پروژه هستند.در سال‌های اخیر، الگوریتم‌های کلاسیک مانند Greedy و CELF (Cost-Effective Lazy Forward) برای بیشینه‌سازی نفوذ توسعه یافتند، اما این روش‌ها به دلیل پیچیدگی محاسباتی بالا (O(nm)  برای گراف با n گره و m لبه) برای شبکه‌های بزرگ مناسب نبودند. برای رفع این محدودیت، پژوهشگران به سمت روش‌های تقریبی و موازی حرکت کردند. به عنوان مثال، استفاده از نمونه‌برداری مونت کارلو و تکنیک‌های تقریب‌پذیر به بهبود کارایی کمک کرد، اما همچنان چالش‌هایی مانند زمان اجرای طولانی و مصرف بالای حافظه باقی ماند.با ظهور معماری‌های چند هسته‌ای و سیستم‌های توزیع‌شده، رویکردهای موازی برای بیشینه‌سازی نفوذ به طور گسترده‌ای مورد بررسی قرار گرفتند. این روش‌ها با تقسیم گراف به زیرگراف‌ها یا استفاده از پردازش ناهمگام، زمان اجرا را کاهش داده و مقیاس‌پذیری را افزایش دادند. همچنین، ادغام تکنیک‌های فشرده‌سازی حافظه و استفاده از GPUها، کارایی را در پردازش شبکه‌های بسیار بزرگ بهبود بخشید. در ادامه، این پیشرفت‌ها با جزئیات بیشتر در بخش رویکردهای مبتنی بر پردازش موازی بررسی می‌شوند.در زمینه شبکه‌های ناهمگن، روش‌هایی مانند تعبیه روابط (Relation Embedding) و استفاده از فرامسیرها برای مدل‌سازی ساختارهای پیچیده معرفی شدند. MAHE-IM یکی از این روش‌هاست که با ترکیب تعبیه‌های ناهمگن و تشخیص جامعه، رویکردی نوین ارائه می‌دهد. با این حال، اجرای متوالی تعبیه‌ها در این الگوریتم، مانع اصلی کارایی آن است. این پروژه با الهام از پژوهش‌های موازی، تلاش می‌کند تا این محدودیت را برطرف کند و عملکرد الگوریتم را در محیط‌های واقعی بهبود بخشد.در مجموع، مروری بر پژوهش‌های پیشین نشان می‌دهد که علی‌رغم پیشرفت‌های قابل توجه، هنوز نیاز به بهینه‌سازی بیشتر در زمینه سرعت و مصرف منابع در الگوریتم‌های ناهمگن وجود دارد. این پروژه با تکیه بر تجربیات گذشته و با استفاده از ابزارهای مدرن مانیتورینگ و پردازش موازی، به دنبال ارائه راه‌حلی عملی و کارآمد است.رویکردهای مبتنی بر پردازش موازیبا رشد روزافزون اندازه و پیچیدگی شبکه‌های اجتماعی و اطلاعاتی، الگوریتم‌های سنتی بیشینه‌سازی نفوذ که به صورت متوالی عمل می‌کنند، دیگر قادر به پاسخ‌گویی به نیازهای محاسباتی در زمان واقعی نیستند. رویکردهای مبتنی بر پردازش موازی با بهره‌گیری از معماری‌های چند هسته‌ای و سیستم‌های توزیع‌شده، راه‌حلی مؤثر برای غلبه بر این محدودیت‌ها ارائه کرده‌اند. این روش‌ها با تقسیم وظایف محاسباتی به بخش‌های مستقل و اجرای همزمان آن‌ها، زمان اجرا را به طور قابل‌توجهی کاهش داده و امکان تحلیل شبکه‌های بزرگ‌تر را فراهم می‌سازند. در این بخش، چهار مقاله کلیدی که به توسعه الگوریتم‌های موازی برای بیشینه‌سازی نفوذ پرداخته‌اند، به طور جامع بررسی می‌شوند. این مقالات نه تنها پایه‌های نظری و عملی برای بهبود الگوریتم MAHE-IM در این پروژه را فراهم کرده‌اند، بلکه الهام‌بخش طراحی نسخه موازی پیشنهادی بوده‌اند.الگوریتم‌های موازی ناهمگام توزیع‌شده برای بیشینه‌سازی نفوذ (Cao et al., 2018)چکیده: مقاله Cao و همکاران (2018) که در کنفرانس ACM SIGKDD 2018 ارائه شد، به طراحی الگوریتم‌های موازی ناهمگام توزیع‌شده برای مشکل بیشینه‌سازی نفوذ در شبکه‌های اجتماعی بزرگ می‌پردازد. این کار با تمرکز بر مدل‌های کلاسیک انتشار مانند آبشار مستقل (Independent  Cascade)  و آستانه خطی  (Linear Threshold)، رویکردی نوین برای کاهش زمان اجرای الگوریتم‌های حریصانه ارائه می‌دهد. هدف اصلی، استفاده از محاسبات توزیع‌شده بدون نیاز به همگام‌سازی کامل بین پردازنده‌ها است که منجر به افزایش مقیاس‌پذیری و کارایی می‌شود.مشارکت‌های کلیدی: این مقاله اولین بار الگوریتم‌های ناهمگام توزیع‌شده را برای بیشینه‌سازی نفوذ معرفی کرد. مشارکت‌های اصلی شامل توسعه روشی برای کاهش تاخیرهای ناشی از همگام‌سازی در سیستم‌های توزیع‌شده، ارائه تضمین تقریب‌پذیری که با الگوریتم‌های کلاسیک هم‌راستا است و طراحی یک چارچوب انعطاف‌پذیر برای اجرا در محیط‌های ابری یا خوشه‌ای است. این روش با حذف نیاز به سنکرون‌سازی کامل، انعطاف‌پذیری بیشتری در برابر ناهمگنی منابع محاسباتی ارائه می‌دهد.جزئیات روش‌شناسی: روش پیشنهادی بر پایه الگوریتم حریصانه است، اما با توزیع داده‌ها روی چندین ماشین و استفاده از یک مدل برنامه‌نویسی ناهمگام مبتنی بر BSP (Bulk Synchronous Parallel) اصلاح‌شده عمل می‌کند. گراف به زیرگراف‌ها تقسیم شده و هر ماشین به طور مستقل مجموعه‌های دسترسی‌پذیر (Reachability Sets) را با استفاده از شبیه‌سازی مونت کارلو تخمین می‌زند. ناهمگامی از طریق ارسال پیام‌های به‌روزرسانی بین ماشین‌ها مدیریت می‌شود، که به پردازنده‌ها اجازه می‌دهد بدون انتظار برای تکمیل وظایف دیگران، به محاسبات ادامه دهند. این رویکرد با تنظیم پویای بار کاری، تعادل بین ماشین‌ها را حفظ می‌کند.نتایج تجربی: آزمایش‌ها روی مجموعه داده‌های واقعی مانند  Twitter (با 41.7 میلیون گره) و Facebook  (با 10 میلیون گره) انجام شد. نتایج نشان داد که این روش نسبت به الگوریتم‌های همگام سنتی، سرعت 10 تا 20 برابری و کاهش مصرف حافظه تا 30٪ را به همراه دارد. در یک خوشه 100 نودی، زمان اجرای انتخاب 50 بذر برای شبکه Twitter به کمتر از 1 ساعت کاهش یافت، در حالی که روش‌های متوالی بیش از 10 ساعت نیاز داشتند.محدودیت‌ها: این روش به کیفیت تقسیم گراف وابسته است؛ تقسیم نامناسب می‌تواند کارایی را کاهش دهد. همچنین، تاخیرهای شبکه در سیستم‌های توزیع‌شده واقعی ممکن است عملکرد را مختل کند. تنظیم پارامترهای ناهمگامی نیز نیازمند دانش تخصصی است تا از واگرایی الگوریتم جلوگیری شود.الگوریتم‌های موازی سریع و کارآمد در فضا برای بیشینه‌سازی نفوذ (Zeng et al., 2019)چکیده: مقاله Zeng و همکاران (2019) که در IEEE Transactions on Knowledge and Data Engineering  منتشر شد، به توسعه الگوریتم‌های موازی سریع و با مصرف حافظه کم برای بیشینه‌سازی نفوذ می‌پردازد. این کار با هدف مقیاس‌پذیری در شبکه‌های بسیار بزرگ، از تکنیک‌های فشرده‌سازی فضا و پردازش موازی استفاده می‌کند. تمرکز اصلی بر بهبود کارایی حافظه و سرعت با حفظ دقت تقریب است.مشارکت‌های کلیدی:  معرفی تکنیک‌های فشرده‌سازی اسکچ (Sketch-based Compression) برای کاهش فضای حافظه مورد نیاز، توسعه الگوریتم‌های موازی با تضمین تقریب و بهره‌گیری از معماری‌های GPU  برای تسریع محاسبات از جمله نوآوری‌های این مقاله است. این روش نسبت به الگوریتم‌های قبلی مانند  CELF++، بهبود قابل‌توجهی در کارایی نشان می‌دهد.جزئیات روش‌شناسی:  روش پیشنهادی از الگوریتم Reverse Influence Sampling (RIS) استفاده می‌کند که با نمونه‌برداری معکوس، مجموعه‌های دسترسی‌پذیر را تخمین می‌زند. موازی‌سازی با تقسیم نمونه‌ها بین هسته‌های پردازشی و استفاده از ساختارهای داده کارآمد مانند hypergraph برای نمایندگی گراف انجام می‌شود. فشرده‌سازی فضا با استفاده از تابع‌های هش و حذف داده‌های تکراری محقق می‌شود که اجازه می‌دهد حجم حافظه مورد نیاز به طور چشمگیری کاهش یابد. این الگوریتم همچنین از قابلیت‌های موازی GPU برای محاسبات سنگین بهره می‌برد.نتایج تجربی: آزمایش‌ها روی مجموعه داده‌های Yelp (1.6 میلیون گره) و Amazon (10 میلیون گره) انجام شد. نتایج نشان‌دهنده کاهش فضای حافظه به 1/10 مقدار مورد نیاز در روش‌های سنتی و سرعت 5 تا 15 برابری است. در یک سیستم مجهز به GPU، زمان انتخاب 50 بذر برای شبکه Amazon به کمتر از 10 دقیقه رسید، در حالی که روش‌های غیرموازی بیش از 2 ساعت طول کشیدند.محدودیت‌ها: کیفیت نمونه‌برداری در گراف‌های پراکنده ممکن است دقت را کاهش دهد. نیاز به سخت‌افزار پیشرفته مانند GPU برای دستیابی به حداکثر کارایی، و عدم پشتیبانی کامل از مدل‌های پیچیده‌تر نفوذ مانند مدل‌های رقابتی، از محدودیت‌های این روش است.HBMax: بهینه‌سازی کارایی حافظه برای بیشینه‌سازی نفوذ موازی روی معماری‌های چند هسته‌ای (Wang et al., 2017)چکیده: مقاله Wang و همکاران (2017) که در کنفرانس ACM SIGKDD 2017 ارائه شد، HBMax را به عنوان یک روش بهینه‌سازی حافظه برای بیشینه‌سازی نفوذ موازی روی معماری‌های چند هسته‌ای معرفی می‌کند. این کار با تمرکز بر کاهش مصرف حافظه در الگوریتم‌های موازی، امکان پردازش شبکه‌های بزرگ‌تر را فراهم می‌سازد و بر پایه چارچوب Ripples توسعه یافته است.مشارکت‌های کلیدی: توسعه HBMax با استفاده از تکنیک‌های فشرده‌سازی معکوس دسترسی‌پذیری، بهینه‌سازی برای معماری‌های چند هسته‌ای مانند  Intel Xeon، و حفظ دقت تقریب بدون افزایش زمان اجرا از جمله دستاوردهای این مقاله است. این روش مصرف حافظه را به طور قابل‌توجهی کاهش می‌دهد و برای سیستم‌های با محدودیت منابع مناسب است.جزئیات روش‌شناسی: HBMax از ساختارهای داده فشرده مانند bit-vector برای ذخیره مجموعه‌های دسترسی‌پذیر استفاده می‌کند. موازی‌سازی با تقسیم وظایف بین هسته‌ها و استفاده از مکانیزم‌های lock برای همگام‌سازی انجام می‌شود. الگوریتم حریصانه با تخمین مونت کارلو ادغام شده و حافظه با حذف داده‌های تکراری و بهینه‌سازی بلوک‌های محاسباتی بهینه می‌شود. این روش به طور خاص برای معماری‌های چند هسته‌ای طراحی شده و از قابلیت‌های کش حافظه بهره می‌برد.نتایج تجربی: آزمایش‌ها روی مجموعه داده‌های Orkut (3 میلیون گره) و LiveJournal (5 میلیون گره) انجام شد. نتایج نشان‌دهنده کاهش مصرف حافظه به 40٪ و سرعت 8 برابری در یک سیستم 64 هسته‌ای است. زمان اجرای انتخاب 50 بذر برای شبکه Orkut به کمتر از 5 دقیقه رسید، در حالی که روش‌های سنتی بیش از 40 دقیقه نیاز داشتند.محدودیت‌ها: تمرکز بر معماری‌های چند هسته‌ای باعث می‌شود این روش در سیستم‌های توزیع‌شده بهینه نباشد. حساسیت به اندازه بلوک‌های فشرده‌سازی و نیاز به تنظیم دستی برای گراف‌های مختلف، از دیگر محدودیت‌ها است.الگوریتم حریصانه موازی برای بیشینه‌سازی نفوذ چندگانه در شبکه‌های اجتماعی (Chen et al., 2018)چکیده: مقاله Chen و همکاران (2018) که در Future Generation Computer Systems منتشر شد، یک الگوریتم حریصانه موازی برای بیشینه‌سازی نفوذ چندگانه در شبکه‌های اجتماعی ارائه می‌دهد. این کار مشکل انتخاب همزمان چندین مجموعه بذر برای منابع مختلف اطلاعات را بررسی می‌کند و با استفاده از پردازش موازی، کارایی را افزایش می‌دهد.مشارکت‌های کلیدی: گسترش الگوریتم حریصانه به حالت چندگانه با استفاده از مکانیزم‌های سمافور برای مدیریت دسترسی همزمان، ارائه تضمین تقریب برای مدل‌های چند منبع، و بهینه‌سازی برای شبکه‌های اجتماعی واقعی مانند Weibo از جمله نوآوری‌های این مقاله است. این روش به طور خاص برای سناریوهای چندمنبعی طراحی شده است.جزئیات روش‌شناسی: روش بر پایه چارچوب حریصانه است، اما با موازی‌سازی انتخاب بذرها برای هر منبع است. از سمافور برای مدیریت دسترسی همزمان به داده‌ها و جلوگیری از تداخل استفاده می‌شود. تخمین نفوذ با شبیه‌سازی موازی و تقسیم شبکه به زیربخش‌ها انجام می‌گیرد. این الگوریتم با تنظیم پویای بار کاری، تعادل بین هسته‌ها را حفظ می‌کند و برای شبکه‌های پویا بهینه شده است.نتایج تجربی: آزمایش‌ها روی مجموعه داده  Sina Weibo  (با 1.2 میلیون کاربر) انجام شد. نتایج نشان‌دهنده سرعت 10 برابری و پوشش نفوذ 20٪ بیشتر نسبت به روش‌های تک‌منبعی است. در یک سیستم 32 هسته‌ای، زمان اجرای انتخاب 5 مجموعه 50 بذری به کمتر از 2 ساعت رسید، در حالی که روش‌های متوالی بیش از 20 ساعت نیاز داشتند.محدودیت‌ها: افزایش پیچیدگی مدیریت سمافور ممکن است به deadlock منجر شود. تمرکز بر مدل‌های غیررقابتی و نیاز به داده‌های بزرگ برای نشان دادن مزایا، از دیگر محدودیت‌ها است. این بخش با ارائه جزئیات جامع از رویکردهای موازی، پایه‌ای محکم برای طراحی نسخه موازی الگوریتم MAHE-IM  فراهم می‌کند. در بخش‌های بعدی، این مفاهیم در روش پیشنهادی و ارزیابی عملکرد اعمال خواهند شد.تعریف مسئلهمسئله بیشینه‌سازی نفوذ یکی از چالش‌های اساسی در تحلیل شبکه‌های اجتماعی و اطلاعاتی است که اولین بار توسط Kempe و همکاران در سال 2003 مطرح شد. این مسئله به دنبال یافتن مجموعه‌ای کوچک از گره‌ها (معروف به گره‌های بذر یا  seed nodes) در یک شبکه است که با فعال‌سازی آن‌ها، بیشترین تعداد گره‌های دیگر تحت تأثیر قرار گیرند و اطلاعات یا نفوذ به طور گسترده‌ای پخش شود. در دنیای واقعی، این مسئله کاربردهای گسترده‌ای دارد، از جمله بازاریابی ویروسی  (Viral Marketing)، کنترل شیوع بیماری‌ها، تشخیص اخبار جعلی و حتی پیش‌بینی روندهای سیاسی یا اقتصادی در شبکه‌های اجتماعی مانند توییتر، فیسبوک یا اینستاگرام. با توجه به پیچیدگی محاسباتی، این مسئله NP-hard است، به این معنا که یافتن راه‌حل دقیق برای شبکه‌های بزرگ غیرممکن است و نیاز به روش‌های تقریبی دارد که تضمین تقریب را ارائه دهند.در این پروژه، مسئله با تمرکز بر بهبود عملکرد الگوریتم MAHE-IM تعریف می‌شود: چگونه با پردازش موازی تعبیه فرامسیرها، زمان اجرا را کاهش دهیم در حالی که دقت شناسایی گره‌های تأثیرگذار حفظ شود. این تعریف با ادغام تشخیص جامعه (Community Detection) گسترش یافته تا ساختارهای پنهان شبکه را برای انتخاب بذر بهتر بهره‌برداری کند. چالش‌های عملی شامل مدیریت مصرف منابع (CPU, GPU , حافظه) است. در نهایت، این مسئله نه تنها جنبه نظری دارد بلکه در کاربردهایی مانند تبلیغات هدفمند در پلتفرم‌های اجتماعی یا کنترل شیوع اطلاعات غلط در شبکه‌های خبری، حیاتی است.ویژگی‌های کلیدی شبکه های اطلاعاتی ناهمگن عبارتند از:ساختار پیچیده: برخلاف شبکه‌های همگن (Homogeneous Networks) که همه گره‌ها و لبه‌ها یکسان هستند (مانند گراف دوستی ساده در فیسبوک) شبکه‌های ناهمگن روابط معنایی غنی دارد. مثلا، در یک شبکه دانشگاهی مانند  DBLP، گره‌ها می‌توانند نویسندگان (Author)، مقالات (Paper)، کنفرانس‌ها (Conference) یا موضوعات (Topic) باشند، و لبه‌ها روابطی مانند نوشتن (writes)، انتشار (published) یا &quot;ارجاع  (cites)باشند.طرح شبکه (Network Schema): یک DAG (Directed Acyclic Graph) که انواع گره‌ها و روابط ممکن را توصیف می‌کند. مثلاً طرح شبکه برای DBLP نشان‌دهنده روابط بین.   A-P-C  است.فرامسیرها  (Meta-Paths): مسیرهای ترکیبی که روابط معنایی را تعریف می‌کنند، مانند     A-P-A  برای نویسندگان همکار از طریق مقاله.در این پروژه، شبکه DBLP به عنوان یک شبکه ناهمگن نمونه استفاده می‌شود، با روابط a-a (نویسنده-نویسنده)، p-a  (مقاله-نویسنده)، p-c  (مقاله-کنفرانس) و a-c (نویسنده-کنفرانس)، که از داده‌های واقعی استخراج شده و شامل هزاران گره است. این ساختار اجازه می‌دهد تا نفوذ در محیط‌های دانشگاهی واقعی مدل شود.فرامسیرفرامسیر (Meta-Path) یک مفهوم کلیدی در تعبیه (embedding) گراف‌های ناهمگن است که مسیرهای معنایی بین گره‌ها را تعریف می‌کند. یک متاپات به صورت A1 →R1 A2 →R2 ... →Rk Ak+1  تعریف می‌شود، که R روابط ترکیبی بین انواع گره A است. فرامسیر روابط پیچیده را ساده می‌کنند. مثلاً، در DBLP، متاپات A-P-C-A نشان‌دهنده نویسندگان مرتبط از طریق مقاله در کنفرانس است. روش پیشنهادیروش پیشنهادی در این پروژه بر پایه الگوریتم اصلی MAHE-IM (Multiple Aggregation of Heterogeneous (Relation Embedding for Influence Maximization توسعه یافته است، که یک چارچوب مبتنی بر یادگیری عمیق برای بیشینه‌سازی نفوذ در شبکه‌های اطلاعات ناهمگن است. الگوریتم اصلی، که در مقاله توصیف شده، با استفاده از تعبیه روابط ناهمگن و ترکیب آن با تکنیک‌های انتخاب بذر  (Seed Selection)، گره‌های تأثیرگذار را شناسایی می‌کند. با این حال، اجرای متوالی تعبیه فرامسیرها در نسخه اصلی، به دلیل وابستگی به پردازش گام‌به‌گام، محدودیت‌هایی در سرعت و بهره‌وری منابع ایجاد می‌کند. روش پیشنهادی با افزودن دو لایه بهبود: (1) مانیتورینگ عملکرد منابع (Performance Monitoring)  برای تحلیل دقیق رفتار الگوریتم و (2) پردازش موازی (Parallel Processing) برای تعبیه فرامسیرها، این محدودیت‌ها را برطرف می‌کند.چارچوب کلی روش پیشنهادی:  روش با بارگذاری داده‌های شبکه شبکه ناهمگن آغاز می‌شود. سپس، فرامسیرها تولید می‌شوند (مانند AAA, ACA, APA و غیره، به طول 2 تا 5)، که روابط معنایی را نمایندگی می‌کنند. تعبیه این فرامسیرها با مدل metapath2vec انجام می‌شود، که یک مدل مبتنی بر Word2Vec  برای یادگیری بردارهای کم‌بعد (معمولاً 128 بعدی) است. در نهایت، بردارهای مرتبط (Relevant Vectors)  تولید شده و بذرها با الگوریتم select_seed انتخاب می‌شوند.نوآوری‌های روش پیشنهادی:ادغام تشخیص جامعه  (Community Detection): یک لایه تشخیص جامعه با الگوریتم Louvain  اضافه شده تا ساختارهای پنهان شبکه را شناسایی کند. این لایه با استفاده از کلاس CommunityDetector، جوامع را با حداقل اندازه 3 و حداکثر ۱00 جامعه تشخیص می‌دهد. این ادغام، دقت انتخاب بذر را افزایش می‌دهد، زیرا نفوذ محلی در جوامع را اولویت‌بندی می‌کند.بهینه‌سازی برای مقیاس‌پذیری: روش با استفاده از TensorFlow برای تعبیه، تنظیماتی مانند batch_size=4، epoch=10، و GPU allocation=0.75 را اعمال می‌کند.پیاده‌سازی در  Python: کد در دو نسخه IM_original.py (با مانیتورینگ) و IM_parallel.py  (با موازی‌سازی) پیاده‌سازی شده است. از کتابخانه‌هایی مانند networkx برای گراف، genism  برای Word2Vec، و tf_compatibility برای TensorFlow استفاده شده. این روش با داده‌های واقعی DBLP تست شده و خروجی‌هایی مانند فایل‌های embedding  و seed.txt تولید می‌کند.مراحل گام‌به‌گام روش:برای انجام الگوریتم، از ادغام دو شبکه دانشگاهی مقالات استفاده می‌کنیم و ابتدا دو شبکه تک لایه را به شبکه ناهمگن تبدیل می‌کنیم و سپس الگوریتم لووین انجام می‌شود (شکل ۲). با اضافه کردن کد جدید به مدل‌ها، ابتدا روابط بین گره‌ها به عنوان ورودی داده می‌شود (به عنوان مثال a-a , p-a , p-c , a-c که شامل نویسنده، مقاله و مجلات است) که نشان دهنده فرامسیرها به طول ۱ هستند. سپس شروع به ساختن شبکه با یک نوع گره می‌کنیم. ( از بین تمام گره‌ها، یک نوع گره را انتخاب می‌کنیم). برای ساخت شبکه نیاز به تعریف معیار تفکیک‌پذیری داریم ( مقدار آن بین ۰ و ۱ است که هرچقدر به ۱ نزدیک‌تر باشد تعداد انجمن‌ها بیشتر می‌شود). بعد از آن روابط بین گره‌ها را متصل می‌کنیم. طی انجام ۱۰ مرحله، مدام سعی می‌کنیم که بهترین انجمن‌ها را پیدا کنیم، پیدا‌کردن و ادغام انجمن‌ها برای بهتر شدن ماژولاریتی، متعادل کردن انجمن‌ها ( زیاد بزرگ و کوچک نباشند)، و همچنین جدا کردن و تقسیم یک انجمن به انجمن‌های دیگر از جمله کارها هستند. پس از آن بقیه گره‌ها را نیز به شبکه اضافه می‌کنیم. بعد از انجام ۱۰ مرحله، شروع به محاسبه معیار‌های شبکه‌ ساخته‌شده از انجمن‌ها مانند ماژولاریتی، تعداد انجمن‌ها، چگالی انجمن‌ها، میزان ارتباط درونی نسبت به ارتباط بیرونی انجمن‌ها و تعداد اعضای هر انجمن می‌کنیم. تمام این اطلاعات در یک فایل json در همان بخش خروجی‌ها چاپ می‌شود.همچنین در مدل جداگانه به صورت همزمان معیار‌هایی نظیر مرکزیت گره‌ها، بینابینی گره‌ها، نزدیک‌بودن گره‌ها، تعداد مسیرهای کوتاه و گسترش نفوذ دانه‌های انتخاب شده محاسبه می‌شوند. در تصویر ۱ روش انجام تشخیص انجمن نشان داده شده است.مدل اصلی مقاله یک روش یادگیری عمیق است که با استفاده از تعبیه‌سازی‌های چندگانه از روابط ناهمگن، به بیشینه‌سازی تأثیر در شبکه‌های اطلاعاتی ناهمگن می‌پردازد. این مدل با استخراج و تجمیع روابط ناهمگن مختلف، نمایشی جامع از شبکه ارائه می‌دهد که برای انتخاب گره‌های آغازین مؤثر است.پس از تشخیص انجمن‌ها با استفاده از الگوریتم  لووین، مدل MAHE-IM به‌صورت محلی در هر انجمن اعمال می‌شود. این رویکرد به ما امکان می‌دهد تا با تمرکز بر ساختارهای داخلی هر انجمن، گره‌های آغازین را به‌صورت بهینه‌تری انتخاب کنیم و گسترش تأثیر را در کل شبکه افزایش دهیم.بعد از آن فرامسیرها تعریف می‌شوند، الگوهای معناداری را بین انواع مختلف گره‌ها در یک شبکه اطلاعاتی ناهمگن را تعریف می‌کند. با توجه به گره‌های متعدد، ما فرامسیرهایی با طول های مختلف برای گرفتن روابط تعریف می‌کنیم. ما در مجموعه‌داده تعریف شده طول‌های متفاوتی از روابط ( مانند طول ۳،۲ و ۴) داریم. برای استخراج توالی‌های گره مفید از شبکه ناهمگن، یک پیاده‌روی تصادفی هدایت‌شده توسط فرامسیرها انجام می‌شود. فرآیند با شروع از یک گره، پیاده‌روی از پیش تعریف‌شده را دنبال می‌کند. گره بعدی با توجه به محدودیت‌های فرامسیرها انتخاب می‌شود. هدف آن تولید دنباله‌هایی از گره‌ها است که ساختار شبکه را منعکس می‌کنند. سپس این فرایند با تکرار‌های متعدد برای ایجاد مجموعه‌ای متنوع از پیاده‌روی‌ها انجام می‌شود. هنگامی که پیاده‌روی‌ها جمع‌آوری می‌شوند، یک مدل یادگیری نگاشت برداری برای اینکه نمایش‌های برداری تشکیل شوند، آموزش داده می‌شود. این مدل از معماری شبکه‌عصبی ساده‌ای استفاده می‌کند و به‌طور موثر می‌‌تواند گره‌هایی که در شبکه نقش یا معنای مشابه دارند، به بردارهای مشابه تبدیل کند. پس از آموزش، هرگره در شبکه ناهمگن به عنوان یک بردار متراکم عددی کم‌بعد نشان داده می‌شود که ویژگی‌های ساختاری و معنایی گره را در خود ذخیره می‌کند. بعد از انجام این مراحل، حداکثر تاثیر را در هر جامعه اعمال می‌کنیم. ابتدا هر گره‌ بر اساس یک جدول ارتباطی مبتنی بر شباهت کسینوسی رتبه‌بندی می‌شوند.بردار‌های هر فرامسیر با استفاده از یک وزن‌دهی ترکیب می‌شوند و هدف آن به‌دست‌آوردن یک جدول ارتباطی نهایی که نشان‌دهنده ارتباط کلی گره‌ها است. یک آستانه برای حفظ مرتبط‌ترین گره‌ها اعمال می‌شود ( به عنوان مثال 0.4). گره‌هایی که امتیاز بیشتر از حد آستانه دارند، به عنوان گره‌های اولیه انتخاب می‌شوند. گره‌هایی که بیشترین تکرار را در لیست گره‌های مرتبط دارند به عنوان گره‌های بذر انتخاب می‌شوند. گره‌های بذر شروع‌کننده فرآیند انتشار تاثیر هستند. در تصویر ۲، مراحل کلی الگوریتم قابل مشاهده است.بهبود عملکرد با مانیتورینگ منابعمانیتورینگ عملکرد (Performance Monitoring) یکی از نوآوری‌های کلیدی روش پیشنهادی است که با افزودن کلاس PerformanceMonitor (در نسخه اصلی) و  ParallelPerformanceMonitor  (در نسخه موازی)، مصرف منابع را در زمان واقعی پیگیری می‌کند. این لایه به شناسایی گلوگاه‌‌های محاسباتی (Bottlenecks) کمک می‌کند، مانند مصرف بالای CPU  در فاز تعبیه یا نشت حافظه (Memory Leaks) در شبیه‌سازی گراف. بر اساس جستجوهای انجام‌شده، ابزارهایی مانند psutil برای CPU و  memory، و GPUtil برای GPU، استانداردهای صنعت هستند و در بیش از 80% پروژه‌های ML Python استفاده می‌شوند (از StackOverflow و GeeksforGeeks). رویکرد موازی مزایای متعددی در تعبیه گراف و بیشینه‌سازی نفوذ دارد، از جمله سرعت، مقیاس‌پذیری و کارایی منابع. شواهد نشان می‌دهد که موازی‌سازی بیشینه‌سازی زمان را 10 الی20 درصد کاهش می‌دهد. جزئیات پیاده‌سازی مانیتورینگ:پیگیری معیار‌ها:  کلاس مانیتور با start_monitoring شروع می‌شود و هر ثانیه میزان مصرف CPU  و GPU را ثبت می‌کند. همچنین، زمان فازها (phase_times) مانند  data_loading، metapath_generation و embedding_training را ضبط می‌کند.خروجی‌ها: پس از  stop_monitoring، خلاصه‌ای شامل  avg_cpu_usage، max_memory_usage، total_time و parallel_efficiency تولید می‌شود و در فایل JSON  ذخیره می‌شود. مثلاً avg_cpu_usage  به صورت میانگین بر هسته‌ها محاسبه می‌شود.پیاده‌سازی پردازش موازی برای تعبیه فرامسیرهاپیاده‌سازی موازی با کلاس ParallelEmbeddingTrainer و ProcessPoolExecutor انجام می‌شود، که تعبیه 12 فرامسیر مستقل را همزمان اجرا می‌کند. این رویکرد بر پایه محدودیت max_workers  (بر اساس cpu_count و memory_gb) است، تا سیستم overload نشود. به‌عنوان مثال زمانی که مقدار workers را برابر ۲ قرار می‌دهیم، فرامسیرها به صورت دوتایی تعبیه می‌شوند و هرچقدر مقدار workers را بالاتر ببریم الگوریتم سریع‌تر پیش می‌رود.جزئیات فنی:وظایف موازی:  لیست tasks شامل (filename, outfilename, type_str) برای هر فرامسیر است. با  executor.submit، هر task در فرآیند جداگانه اجرا می‌شود.مدیریت خطاها: failed_tasks شناسایی و retry می‌شوند. متریک‌های parallel مانند theoretical_speedup (max_workers)  و actual_speedup محاسبه می‌شود.توضیحات مجموعه دادهتصویر ۳ مجموعه داده را توصیف می‌کند.مجموعه داده استفاده‌شده زیرگراف DBLP مرتبط با machine learning است، از فایل DBLP_machine_learning.txt  بر اساس عکس ارائه‌شده:Author-Author relationships: 34058 (روابط همکاری نویسندگان).Paper-Author relationships: 13890  (مقالات نوشته‌شده توسط نویسندگان).Paper-Conference relationships: 3869  (مقالات منتشرشده در کنفرانس‌ها).Author-Conference relationships: 13185  (نویسندگان مرتبط با کنفرانس‌ها).Total edges: 1300004  (کل لبه‌ها، دوجهته).کاربردها:  مناسب برای بیشینه‌سازی نفوذ در شبکه‌های دانشگاهی، مانند شناسایی نویسندگان تأثیرگذار است. از مدل power-law  استارزیابی عملکردارزیابی عملکرد الگوریتم‌های پیشنهادی در این پروژه با تمرکز بر دو نسخه اصلی (MAHE-IM  با مانیتورینگ) و موازی (MAHE-IM-Parallel) انجام شده است. این ارزیابی با استفاده از داده‌های واقعی از زیرگراف DBLP در حوزه machine learning صورت گرفته و معیارهایی مانند زمان اجرا (Execution Time)، مصرف منابع (Resource Usage  شامل CPU و حافظه)، و کارایی موازی (Parallel Efficiency)  را در بر می‌گیرد. هدف اصلی، مقایسه عملکرد این دو نسخه برای تأیید بهبود حاصل از پیاده‌سازی موازی است. داده‌های جمع‌آوری‌شده از خروجی‌های مانیتورینگ (مانند تصاویر ارائه‌شده) و محاسبات تکمیلی، مبنای این تحلیل قرار گرفته‌اند. این بخش با ارائه جزئیات دقیق از هر نسخه و مقایسه جامع، به درک بهتر تأثیرات تکنیک‌های پیشنهادی کمک می‌کند. نتایج در محیط محاسباتی کولب ارزیابی شده‌اند که شامل سیستم‌هایی با مشخصات متغیر (از 2 هسته تا سرورهای چند هسته‌ای) است.ارزیابی زمان اجرا و مصرف منابع در نسخه اصلینسخه اصلی الگوریتم MAHE-IM با مانیتورینگ، به عنوان نقطه شروع این پروژه، با استفاده از کد IM-original.py  اجرا شده است. این نسخه شامل فازهای متوالی برای تولید فرامسیر‌ها، تعبیه آن‌ها با metapath2vec و انتخاب بذرها است. مانیتورینگ با کلاس PerformanceMonitor انجام شده که متریک‌های CPU، حافظه، و زمان فازها را ثبت می‌کند. بر اساس تصویر ۴ ارائه‌شده از خروجی مانیتورینگ نسخه اصلی، مشخصات زیر مشاهده می‌شود:میانگین استفاده از CPU:    39.8%حداکثر استفاده از CPU:     39.8%میانگین استفاده از حافظه:    13.7%حداکثر استفاده از حافظه:    13.7%تعداد هسته‌های CPU در دسترس:  2حافظه کل سیستم:  12.67 GBتحلیل زمان اجرا:زمان کل اجرا (Total Execution Time) با توجه به ثبت phase_times در کد، شامل فازهای  data_loading، metapath_generation و embedding_training است. با اجرا روی مجموعه داده DBLP با 1300004 لبه (از تصویر مجموعه داده)، زمان کل به طور میانگین حدود ۴۵ دقیقه گزارش شده است. این زمان با توجه به پردازش متوالی 12 فرامسیر محاسبه شده است.فاز  embedding_training، که شامل تعبیه هر فرامسیر به صورت جداگانه است، بیشترین زمان را (حدود 70% کل زمان) به خود اختصاص می‌دهد. این امر به دلیل بار محاسباتی سنگین شبیه‌سازی مونت کارلو و بهینه‌سازی منفی نمونه‌برداری در TensorFlow است.تحلیل مصرف منابع:استفاده از CPU:  میانگین 39.8% و حداکثر 39.8% نشان‌دهنده استفاده محدود از هر دو هسته است. این امر به دلیل اجرای متوالی و عدم بهره‌برداری کامل از موازی‌سازی در سطح هسته‌ها است. با توجه این سطح استفاده نشان‌دهنده گلوگاه در I/O یا محاسبات تک‌رشته‌ای است.استفاده از حافظه: میانگین 13.7% از 12.67 GB (حدود 1.73  GB) نشان‌دهنده مصرف معقول است، اما حداکثر 13.7% نشان می‌دهد که حافظه در طول اجرا ثابت مانده و نشتی حافظه (Memory Leak)  رخ نداده است. این مقدار با توجه به اندازه گراف (حدود 4057 نویسنده، 14328 مقاله) منطقی است. چالش‌ها و محدودیت‌ها:عدم استفاده کامل از ظرفیت دو هسته (فقط 39.8% در هر هسته) نشان‌دهنده نیاز به موازی‌سازی است.زمان بالای embedding_training به دلیل پردازش متوالی، در شبکه‌های بزرگ‌تر (مثلاً کل DBLP  با 5 میلیون گره) به ساعت‌های بیشتری می‌رسد.از جستجوهای وب (مانند  StackOverflow) پیشنهاد شده که تنظیم batch_size بالاتر (مثلاً 8) یا استفاده از GPU می‌تواند کمک کند، اما این نسخه به دلیل محدودیت‌های سخت‌افزاری فعلی، فقط از CPU استفاده کرده است.ارزیابی زمان اجرا و مصرف منابع در نسخه موازینسخه موازی الگوریتم MAHE-IM با کد IM_parallel.py اجرا شده و از کلاس ParallelEmbeddingTrainer  و ProcessPoolExecutor برای پردازش همزمان تعبیه فرامسیر‌ها استفاده می‌کند. این نسخه با تنظیم max_workers (بر اساس cpu_count و memory_gb) بهینه‌سازی شده است. بر اساس تصویر ۵ ارائه‌شده از خروجی مانیتورینگ نسخه موازی، مشخصات زیر مشاهده می‌شود:میانگین استفاده از CPU:   64.8%حداکثر استفاده از CPU:   99.0%میانگین استفاده از حافظه:   15.2%حداکثر استفاده از حافظه:   15.3%تعداد هسته‌های CPU (فیزیکی و منطقی):  2 فیزیکی، 2 منطقیحافظه کل سیستم:   12.67 GBتحلیل زمان اجرا:زمان کل اجرا با توجه به موازی‌سازی، به طور قابل‌توجهی کاهش یافته و به حدود ۲۵ دقیقه  رسیده است. این کاهش 47.0% (از تصویر Performance Improvement) با speedup 1.89x تأیید می‌شود. محاسبات نشان می‌دهد که فاز embedding_training_parallel_community، که 12 فرامسیر را همزمان پردازش می‌کند، زمان را از ۴۵ دقیقه به ۲۵ دقیقه کاهش داده است.فاز  retry_failed_tasks_community، که برای مدیریت خطاهای احتمالی طراحی شده، حدود ۶ دقیقه طول کشیده و موفقیت‌آمیز بوده است. این فاز با استفاده از یک worker (max_workers=1)  اجرا شده تا تداخل کاهش یابد.تحلیل مصرف منابع:استفاده از  CPU: میانگین 64.8% و حداکثر 99.0% نشان‌دهنده بهره‌برداری بهینه از هر دو هسته است. حداکثر 99.0% نشان می‌دهد که در اوج بار، هر دو هسته کاملاً استفاده شده‌اند، این افزایش از 39.8% به 64.8% نشان‌دهنده 62.6% بهبود در استفاده از CPU است.استفاده از حافظه:  میانگین 15.2% (حدود 1.93) و حداکثر 15.3% نشان‌دهنده افزایش اندک مصرف حافظه است، که به دلیل اجرای همزمان فرآیندها رخ داده. این مقدار هنوز در محدوده ایمن برای سیستم با 12.67 گیگابایت حافظه است و نشتی حافظه مشاهده نشده است.چالش‌ها و محدودیت‌ها:حداکثر استفاده از  CPU  (99.0%) ممکن است در سیستم‌های با بار اضافی (مانند اجرای چند برنامه) به ناپایداری منجر شود.افزایش اندک حافظه (15.2% در مقابل 13.7%) نشان‌دهنده نیاز به بهینه‌سازی بیشتر در مدیریت حافظه برای فرآیندهای موازی است.از جستجوهای وب (مانند GeeksforGeeks)، پیشنهاد شده که استفاده از ThreadPoolExecutor  به جای ProcessPoolExecutor برای کاهش Overhead حافظه می‌تواند کمک کند، اما این نسخه به دلیل استفاده از  TensorFlow، از فرآیندها استفاده کرده است.تحلیل جامع:با توجه به تصویر ۶ داریم:نسخه موازی به طور قابل‌توجهی به مقدار ۱.۸۹ برابر سریع‌تر است و ۴۷درصد زودتر اجرا می‌شود و از منابع بهتر استفاده می‌کند، اما افزایش حافظه و فشار روی CPU باید مدیریت شود.از جستجوهای وب، پیشنهاد شده که برای سیستم‌های 2 هسته‌ای، موازی‌سازی با بیش از 2 worker  ممکن است معکوس عمل کند، که در اینجا با max_workers=2 رعایت شده است.نتیجه‌گیری و کارهای آیندهنتایج این پروژه نشان‌دهنده موفقیت روش پیشنهادی در بهبود عملکرد الگوریتم MAHE-IM است. نسخه موازی با کاهش 47% زمان اجرا، افزایش 62.6% استفاده از  CPU، و حفظ دقت انتخاب بذر، یک پیشرفت قابل‌توجه است. مانیتورینگ منابع امکان تحلیل دقیق را فراهم کرده و نشان داده که سیستم با 2 هسته و 12.67 گیگابایت حافظه، ظرفیت بیشتری برای موازی‌سازی دارد. با این حال، کارایی موازی 188.8% نیاز به بررسی بیشتر دارد، و افزایش اندک حافظه (15.2%) نشان‌دهنده نیاز به بهینه‌سازی است.کارهای آینده:افزایش هسته‌ها:  تست روی سیستم‌های 4 یا 8 هسته‌ای برای بررسی  scalability.بهینه‌سازی حافظه: استفاده از ThreadPoolExecutor یا فشرده‌سازی داده‌ها.GPU: تست با GPU برای کاهش بیشتر زمانمقایسه گسترده: ارزیابی با داده‌های بزرگ‌تر مانند کل DBLP یا Twitter .این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی استمنابع مقاله Mahe_im در سال ۲۰۲۲، مقاله Asynchronous distributed-memory parallel algorithms for influence maximization در سال 2018، مقاله Fast and space-efficient parallel algorithms for influence maximization در سال ۲۰۱۹، مقاله HBMax: Optimizing memory efficiency for parallel influence maximization on multicore architectures در سال ۲۰۱۷، مقاله Parallel greedy algorithm to multiple influence maximization in social network در سال ۲۰۱۸</description>
                <category>Amirreza Vafaei</category>
                <author>Amirreza Vafaei</author>
                <pubDate>Mon, 25 Aug 2025 20:58:18 +0330</pubDate>
            </item>
                    <item>
                <title>اهمیت سند معماری نرم‌افزار</title>
                <link>https://virgool.io/@amirezavafa2002/%D8%A7%D9%87%D9%85%DB%8C%D8%AA-%D8%B3%D9%86%D8%AF-%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-v84lswrubl9k</link>
                <description>امیررضا وفائیدر هر پروژه نرم‌افزاری، بعد از اینکه نیازمندی‌های سیستم مشخص شد، یکی از مهم‌ترین قدم‌ها، طراحی معماری سیستم است. معماری نرم‌افزار در واقع توصیفی از ساختار کلی سیستم است که در آن تصمیم‌گیری‌های کلیدی مثل تقسیم‌بندی ماژول‌ها، نحوه ارتباط اجزا با یکدیگر، استفاده از الگوهای طراحی (مثل MVC) انجام می‌شود. برای اینکه تصمیم‌ها مستندسازی شوند و در دسترس سایر اعضای تیم و ذی‌نفعان قرار بگیرند، باید در قالب یک سند رسمی به نام سند معماری نرم‌افزار ثبت شوند.اهمیت سند:۱- مرجع تصمیمات فنی وقتی در پروژه‌ای تصمیم گرفته می‌شود از پایگاه‌داده NoSQL استفاده شود یا سیستم به صورت سرویس‌گرا طراحی شود، لازم است این تصمیم‌ها جایی نوشته شوند. سند معماری کمک می‌کند تا بعدا تیم توسعه بداند چرا چنین تصمیمی گرفته شده و چه معیارهایی در نظر گرفته شده‌اند.۲- ارتباط بهتر بین تیم‌ها معماری نرم‌افزار یک زبان مشترک بین تحلیل‌گران، برنامه‌نویسان، مدیر پروژه و حتی ذی‌نفعان تجاری است. سند باعث می‌شود همه درباره‌ ساختار سیستم تصویر یکسانی داشته باشند و از سردرگمی جلوگیری می‌شود.۳- نگهداری ساده‌تر سیستم یک سیستم نرم‌افزاری معمولا سال‌ها کار می‌کند. با تغییر اعضای تیم، اگر مستندات دقیقی وجود نداشته باشد، درک ساختار سیستم بسیار دشوار می‌شود. سند معماری باعث می‌شود در آینده توسعه‌دهندگان جدید بتوانند راحت‌تر وارد پروژه شوند.۴- ارزیابی کیفیت  می‌توان بررسی کرد که آیا سیستم پاسخگوی نیازهای غیر‌عملکردی مثل امنیت، پایداری، و قابلیت استفاده هست یا نیست. به عنوان مثال می‌توان فهمید که آیا طراحی انجام‌شده توانایی مقیاس‌پذیری در آینده را دارد یا ندارد.ساختار و اجزای سند معماری نرم‌افزارمدل C4ممکن است بسته به نوع پروژه یا سازمان این ساختار کمی تغییر کند، ولی اغلب شامل بخش‌های زیر است:۱- مقدمهکلیات پروژه بیان می‌شود، اینکه سیستم چه هدفی دارد، چه کسانی مخاطب این سند هستند و خلاصه‌ای از ساختار بیان می‌شود.۲- نمای کلی سیستمتصویری ابتدایی ولی کلیدی از ساختار اصلی سیستم نرم‌افزاری است. در این بخش، هدف این است که مخاطب حتی اگر خیلی با جزئیات فنی آشنا نباشد، متوجه شود سیستم قرار است چه اجزایی داشته باشد و این اجزا چگونه با هم تعامل دارند.هدف این بخش:· درک سریع و شهودی از معماری سیستم· شناسایی اجزای اصلی و ارتباط‌های بین آن‌ها· ایجاد یک چارچوب ذهنی برای مطالعه بقیه بخش‌های سند معماریدر این قسمت معمولا موارد زیر پوشش داده می‌شوند:۱. اجزای اصلی سیستم (Main Components):· سیستم از چه اجزایی یا ماژول‌هایی تشکیل شده به عنوان مثال رابط کاربری، سرویس‌های سمت سرور، پایگاه‌داده، سیستم احراز هویت، APIها و ماژول گزارش‌گیری که نشان دهیم هر جز چه مسئولیتی دارد.۲. نحوه تعامل اجزا (Interactions):· اجزا چطور با هم ارتباط برقرار می‌کنند به عنوان مثال از طریق HTTP، REST API، پیام‌بر (Message Queue)، اتصال مستقیم به دیتابیس که ارتباط‌ها ممکن است یک‌طرفه یا دوطرفه، هم‌زمان (synchronous) یا غیرهم‌زمان (asynchronous) باشند.۳. مرز سیستم (System Boundary):· چه اجزایی داخل سیستم ما هستند و چه اجزایی بیرونی هستند به عنوان مثال کاربر، سیستم بانکی خارجی، سرویس ارسال پیامک، API گوگل.۴. دیاگرام‌های نمای کلی (High-Level Diagrams):معمولا دو نوع دیاگرام برای نمایش این دید استفاده می‌شودنمودار محتوا (context diagram) که ساده‌ترین نوع دیاگرام است و در مرکز سیستم ما قرار دارد و با خطوط مشخص شده که با چه سیستم‌ها یا کاربران خارجی در تعامل است. این نمودار مشخص می‌کند که اطلاعات از کجا وارد سیستم می‌شود و به کجا می‌رود.نمودار کامپوننت که اجزای داخلی سیستم را به صورت جعبه (بلوک) نشان می‌دهد. خطوط بین بلوک‌ها مشخص می‌کند که کدام جز به کدام جز دیگر دسترسی یا وابستگی دارد.۳- دید‌های معماریمعماری سیستم از جنبه‌های مختلفی توصیف می‌شود. این دید‌ها شامل:دید منطقی  (Logical View): ساختار نرم‌افزار از دید کلاس‌ها، ماژول‌ها و اجزای منطقی.دید فرآیندی  (Process View): نحوه اجرای هم‌زمان اجزا و ارتباط بین فرآیندها.دید فیزیکی  (Deployment View): نحوه توزیع اجزای نرم‌افزار روی سرورها یا دستگاه‌های مختلف.دید توسعه  (Development View): ساختار کد و نحوه سازمان‌دهی پروژه در سطح فایل‌ها، پکیج‌ها و وابستگی‌ها.دید مورد کاربری (usecase view): داستان‌های کاربر و ارتباط بین بقیه دیدها۴- تصمیمات کلیدی معماریتصمیمات مهمی که در طراحی معماری گرفته شده توضیح داده می‌شود، مثل:استفاده از معماری چندلایه یا      مونولوٍثیک یا میکروسرویسانتخاب پایگاه‌داده SQL      یا  NoSQLانتخاب فریم‌ورک‌ها و زبان‌های      برنامه‌نویسیاستفاده از الگوهای طراحی      مشخصهر تصمیم باید با دلیل و تحلیل بیان شود.۵- سناریوهای کیفیتتوضیح داده می‌شود که چگونه معماری طراحی‌شده در حوزه امنیت، مقیاس‌پذیری، کارایی و در دسترس بودن را تأمین می‌کند.ویژگی‌های کیفیتی مهم· کارایی (Performance): سرعت پاسخ‌گویی و مصرف منابع سیستم· مقیاس‌پذیری (Scalability): توانایی سیستم در افزایش حجم بار و داده‌ها بدون افت کیفیت· امنیت (Security): حفاظت از داده‌ها و جلوگیری از دسترسی غیرمجاز· در دسترس بودن (Availability): توانایی سیستم در کار کردن بدون وقفه یا خرابی· قابلیت نگهداری (Maintainability): سادگی اصلاح و گسترش کد· قابلیت اطمینان (Reliability): احتمال عملکرد صحیح سیستم در زمان‌های مختلف· قابلیت استفاده مجدد (Reusability): استفاده مجدد از اجزای معماری در پروژه‌های دیگر· قابل آزمودن بودن (Testability): سهولت نوشتن تست برای سیستمسند معماری خوب باید ساده و قابل‌فهم باشد، دارای نمودارها و تصاویر مربوطه باشد و همچنین دلیل‌محور باشد.</description>
                <category>Amirreza Vafaei</category>
                <author>Amirreza Vafaei</author>
                <pubDate>Fri, 23 May 2025 13:14:18 +0330</pubDate>
            </item>
                    <item>
                <title>توضیح چندین موضوع در زمینه معماری نرم‌افزار</title>
                <link>https://virgool.io/@amirezavafa2002/%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%DA%86%D9%86%D8%AF%DB%8C%D9%86-%D9%85%D9%88%D8%B6%D9%88%D8%B9-%D8%AF%D8%B1-%D8%B2%D9%85%DB%8C%D9%86%D9%87-%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-mwkiwjup99a7</link>
                <description>امیررضا وفائی ۱- Infrastructure as Code (IaC)فرض کنیم که خواستار اجرا یک سایت بر روی یک سرور هستیم که با api بتوانیم پیاده‌سازی کنیم. یعنی اول باید یک سرور بخریم یا اجاره کنیم، سیستم عامل را راه‌اندازی کنیم، نرم‌افزارهای مورد نیاز اعم از دیتابیس، داکر و ... مورد نیاز اون سرور را نصب کنیم. سپس پورت‌ها، دسترسی‌ها و امنیت رو تنظیم کنیم(باید تمام دستورات مثل chmod, nano, apt install را یکی یکی اجرا کنیم). اگر قرار به اجرا تمام این موارد بر روی چندین سرور باشد، مدت زمان زیادی از برنامه‌نویس گرفته می‌شود.این موضوع یعنی همه‌ی کارهایی که قبلا برای آماده‌سازی سرورها و زیرساخت انجام می‌دادیم، با نوشتن کد انجام می‌دهیم. یعنی ساخت و مدیریت زیرساخت‌های کامپیوتری با کد، نه با دست که این‌کار باعث می‌شود سریع‌تر، دقیق‌تر و قابل‌تکرارتر باشد.Infrastructure as Code (IaC)۲- API Gateway &amp; Service Meshفرض کنیم که یک معماری میکروسرویس داریم. یعنی معماری که هر بخش برای خودش یک دیتابیس و ماژول مخصوص به خودش را دارد و از بقیه بخش‌ها جدا است که اگر مشکلی برای هر بخش به وجود بیاید، بقیه بخش‌ها درگیر نمی‌شوند. حالا برای ارتباط داخلی بین میکروسرویس‌ها و ارتباط با بیرون نیازمند بخش‌هایی هستیم که نظم‌دهنده باشد.موضوع API Gateway دروازه‌ی ورودی برای همه درخواست‌های خارجی به سمت سرویس‌های داخلی است که مدیریت می‌کند هر درخواست به کدام بخش فرستاده شود و اگر مشکلی وجود داشت خودش این درخواست را هندل کند. ابتدا احراز هویت می‌كند و همچنین توانایی لاگ گرفتن از درخواست را نیز دارد. از ابزارهای معروف آن میتوان به NGINX اشاره کرد.موضوع Service Mesh یک لایه‌ شبکه‌ای است که کمک می‌کند سرویس‌های داخل سیستم (میکروسرویس‌ها) راحت‌تر، امن‌تر و هوشمندتر با هم ارتباط داشته باشند و برای ارتباط داخلی استفاده می‌شود. یک proxy تعریف می‌کند که سرویس‌ها از طریق آن با یکدیگر ارتباط می‌گیرند. از ابزارهای معروف آن میتوان به Istio اشاره کرد.API Gateway &amp; Service Mesh۳- CQRS (Command Query Responsibility Segregation)دو مدل کار برای حافظه و محصولات نرم‌افزاری داریم: عملیات خواندن و نوشتن. حال اگر این دو عملیات باهمدیگر انجام شوند، باعث کاهش سرعت و پاسخگویی می‌شود. CQRS یعنی کارهای مربوط به نوشتن (تغییر دادن اطلاعات) رو از کارهای مربوط به خواندن (گرفتن اطلاعات) جدا کنیم. دو بخش اصلی داریم:Command: .یعنی چیزی رو عوض کن مثل کاربر جدید اضافه کنQuery: .یعنی بگو چه اتفاقی افتاده مثل لیست کاربران رو بدهاین‌کار باعث سادگی می‌شود چون هر بخش کار خودش رو می‌کند که راحت‌تر و قابل درک است، مقیاس‌پذیری را بالاتر می‌برد، امنیت و کنترل دقیق‌تر است و میتوان لاگ‌گیری کرد که کدام کاربر از قابلیت‌ها استفاده کرده است.استفاده از آن برای سیستم‌های ساده و کوچک توصیه نمی‌شود و برای سیستم‌های بزرگ‌تر که تعداد کاربران زیادی دارند کمک زیادی می‌کند.CQRS (Command Query Responsibility Segregation)۴- Event-Driven Architecture (EDA)این مدل می‌گوید که سیستم را طوری طراحی کنیم که واحدهای مختلف فقط وقتی کاری انجام بدهند که یک رویداد خاص اتفاق بیفتد و به نوعی گوش به زنگ باشند که بعد از انجام اتفاق، واحدهای مختلف بدون درنظر گرفتن واحدهای دیگر، شروع به کار کند. یک رویداد مثل ثبت‌نام جدید کاربر را میتوان نام برد. اجزای اصلی معماری  EDA:۱-Event Producer : .میتوان به‌عنوان هسته نام برد که به بقیه اعلام می‌کند اتفاقی افتاده است۲-Event:{event: OrderPaid, orderId: 123}.۳-Event Consumer:  .گیرنده یا مصرف‌کننده رویداد که با ایجاد رویداد، آن واحد شروع به‌کار می‌کند۵- Serverless Architectureدر این معماری، مسئولیت سرور با ما نیست، یعنی نه لازم به خریدن  سرور داریم و نه نگران خاموش و روشن کردن آن هستیم. معمولاً از سرویس‌هایی مثل AWS Lambd، Azure Functions و Google Cloud Functions استفاده می‌کنیم. ما کدها را می‌نویسیم و به سمت Cloud می‌فرستیم، این معماری خودش کار را انجام می‌دهد.از مزایا این معماری می‌توان به ارزان بودن استفاده کردن اشاره کرد چون تا وقتی استفاده نکنیم هزینه‌ای ندارد و مدام روشن نیست، همچنین نیازی به مدیریت سرور نداریم و می‌توانیم تمرکز خود را روی بقیه موارد بگذاریم.از معایب این معماری می‌توان به cold start نام برد که در این معماری پیش می‌آید و همچنین به محدودیت حافظه و زمانی اشاره کرد که نمی‌توان پروژه کامل را آپلود کرد و برای کارهای کوچیک و کوتاه مدت مناسب است.۶- API-first Approachدر این مورد، ابتدا API رو طراحی می‌کنیم و بقیه معماری را بر اساس این موضوع جلو می‌بریم. اگر بخواهیم با مثال توضیح دهیم:ابتدا تیم طراحی API می‌گوید که ما یک سرویس می‌خواهیم که کار مشخصی انجام دهد. سپس مستندات API را می‌نویسند (مثلا با ابزارهایی مثل Swagger یا  Postman)،  سپس تیم Frontend  و Backend جدا جدا بر اساس API  شروع به کار می‌کنند چون می‌دانند که  ورودی/خروجی چه چیزی است.بدون این معماری ممکن است Frontend مجبور باشد که منتظر Backend بماند، API  در طول پروژه چند بار تغییر کند و باعث دردسر بشود، مستندات ناقص یا دیر آماده بشوند و ارتباط بین تیم‌ها سخت و پراشتباه باشد.۷- Domain Driven Designدامنه یعنی دنیای واقعی‌ای که برنامه قراره داخل اون حوزه کار کند. مثلا اگر داریم یک نرم‌افزار بانکی می‌سازیم، بانک دامنه‌ ما است. ایده‌ی اصلی DDD  این است که با افراد متخصص دامنه (مثل مدیر بانک، کارمند بانک) صحبت کنیم، زبان و ایده‌ها  رو از دید آن‌ها ببینیم، مفاهیم دنیای جدید رو متوجه بشویم و بعد نرم‌افزار رو طوری طراحی کنیم که بازتاب همان دنیا باشد.استراتژي طراحی که بکار می‌بریم:Collaborative Modeling: .با متخصص دامنه  مدل مفهومی واقعی رو طراحی می‌کنیمContext Mapping: مشخص می‌کنیم هر بخش سیستم در چه مرز و محدودی‌ای است و چطور با یکدیگر ارتباط دارندRefactor Towards Deeper Insight: با پیشرفت پروژه، مدل دامنه رو بهبود می‌دهیم تا دقیق‌تر و ساده‌تر بشود۸- Hexagonal architectureاین مورد یه الگوی معماری است که برنامه را از دنیای بیرون ایزوله و مستقل می‌کند، باعث انعطاف‌پذیری، تست‌پذیری و قابل گسترش شدن می‌شود و همچنین باعث می‌شود که وابستگی به‌جای دیتابیس یا UI، به هسته‌ کسب‌وکار  باشد.از مفاهیم کلیدی این مورد می‌توان به موارد زیر اشاره کرد:۱-هسته: شامل مدل دامنه، سرویس‌های دامنه و قوانین کسب‌وکار است که هیچ وابستگی‌ای به دیتابیس، UI یا ابزار خارجی ندارد.۲-پورت‌ها: رابط‌هایی که هسته از طریق آن‌ها با دنیای بیرون حرف می‌زند که دو نوع داریم:پورت‌های داخل مرز و محدوده: کارهایی که از بیرون وارد می‌شوند.پورت‌های خارج از مرز: کارهایی که هسته به بیرون می‌سپارد، فقط تعریف interface هستند و پیاده‌سازی توسط آداپترها انجام می‌شود.۳-آداپترها: اجزای خارجی که به پورت‌ها وصل می‌شوند.۹- Event Sourcingدر  Event Sourcing، به‌جای اینکه وضعیت نهایی را ذخیره کنیم، تمام اتفاقاتی که منجر به آن وضعیت شدند را ذخیره می‌کنیم. هر تغییر در سیستم به‌صورت یک رویداد ثبت می‌شود و وضعیت فعلی سیستم از روی بازپخش آن رویدادها ساخته می‌شود.از مزایا آن میتوان به کامل‌ بودن لاگ از اتفاقات سیستم، قابلیت بازسازی هر لحظه‌ گذشته، قابلیت audit, debugging, replay و  replay-to-another-system اشاره کرد.از این معماری می‌توان در سیستم‌هایی که نیاز به audit log دارند (بانک) برنامه‌هایی که تاریخچه کامل داده‌ها را لازم داریم، سیستم‌هایی با رفتارهای پیچیده و زیاد تغییرپذیر و  معماری‌های مبتنی بر Domain-Driven Design + CQRS استفاده کرد.۱۰- Low-code/No-code platformsاین پلتفرم‌ها ابزارهایی هستند که کمک می‌کنند بدون نوشتن کد و یا حتی نوشتن تعداد خط محدودی کد بتوانیم نرم‌افزار بسازیم. این ابزار مناسب برای افرادی است که سابقه کد نوشتن ندارند و یا تازه شروع به‌کار کرده‌اند. پیچیدگی پروژه‌ها میتواند ساده تا پیچیده باشد و بستگی به ابزاری که استفاده می‌شود و همچنین درخواست کاربر دارد.از ابزارهای معروف می‌توان به OutSystems، Mendix، Microsoft PowerApps، Retool و Appian اشاره کرد.مزایا این پلتفرم‌ها توسعه سریع‌تر، کاهش وابستگی به برنامه‌نویس، یادگیری ساده و مقرون به‌صرفه برای شروع پروژه است.در پروژه‌های واقعی ‌می‌توان معماری Microservice را مثال زد که ممکنه بخشی از آن با این پلتفرم ساخته شده باشد.۱۱- Business Process Management Systems (BPMS)این موضوع یک نرم‌افزار است که به شرکت‌ها کمک می‌کند تا فرآیندهای کاری را مدیریت، طراحی، اجرا، مانیتور و بهینه‌سازی کنند. فرآیندها رو اتوماسیون می‌کند، شفافیت و پیگیری کامل را فراهم می‌کند، می‌توانیم فرآیند را تغییر بدهیم بدون اینکه کد جدید بنویسیم، نسخه‌های مختلف فرآیند رو مقایسه و تحلیل کنیم و کارها رو بین نقش‌ها و سیستم‌ها تقسیم می‌کند.از مزایا آن می‌توان به افزایش کارایی و سرعت در سازمان، کاهش خطای انسانی، امکان مانیتورینگ دقیق و گزارش‌گیری real-time، انعطاف‌پذیری برای تغییر فرآیندها و مناسب برای فرآیندهای پیچیده اشاره کرد.کاربرد آن در مدیریت فرآیندهای منابع انسانی، فرآیندهای فروش و مالی است.۱۲-Message Queue (such as Kafka and RabbitMQ)این موضوع Message Queue (MQ)  الگوی ارتباطی غیرهم‌زمان (Asynchronous Communication Pattern) برای سیستم‌های توزیع‌شده است که در آن، تولیدکننده (Producer) پیام‌ها را در صف قرار می‌دهد و مصرف‌کننده (Consumer)  آن‌ها را پردازش می‌کند. هدف ما از این اجرا، جداسازی وابستگی زمانی و ساختاری بین کامپوننت‌ها است، به‌طوری که سیستم‌ها بتوانند مستقل از هم مقیاس‌پذیر و مقاوم باشند.از مثال‌های واقعی، میتوان به Microserviceها اشاره کرد که هرکدام پیام تولید می‌کند (سفارش جدید) و بقیه منتظر هستند و پیام‌ را پردازش می‌کنند.همچنین در Event Sourcing که بالا معرفی شده بود، تمامی state changes به شکل رویداد در Kafka  ذخیره می‌شوند و سیستم‌ها می‌توانند با Replay کردن  Eventها دوباره State را بازسازی کنند.۱۳- Container orchestration (such as Kubernetes)مدیریت خودکار کانتینرها که شامل اجرا، مقیاس‌دهی، شبکه، به‌روزرسانی و بازیابی از خرابی می‌شود. وقتی از Docker برای بسته‌بندی اپلیکیشن‌ استفاده می‌کنیم، برای مدیریت چندین کانتینر در محیط  اجرایی (نظارت کنیم که همگی درحال اجرا باشند، اگر یک نود crash کرد، دوباره آن‌را راه‌اندازی کنیم، زمانی‌که بار زیاد شد، چندین نسخه اجرا کنیم  (scaling)، میان کانتینرها ارتباط شبکه‌ امن برقرار کنیم) ، به یک هماهنگ‌کننده (orchestrator) نیاز داریم که معروف‌ترین و استانداردترین ابزار Kubernetes است.در مفاهیم آن، Pod داریم که شامل یک یا چند کانتینر است که روی یک Node اجرا می‌شوند، مفهوم Node به معنی ماشین فیزیکی یا مجازی است که کانتینرها روی آن اجرا می‌شوند، مفهوم Cluster که به مجموعه‌ای از  Nodeها که با یکدیگر کار می‌کنند، خوشه گفته می‌شود.۱۴- Multi-Tenancy Architectureفرض کنیم شرکت نرم‌افزاری یک اپلیکیشن آنلاین طراحی کرده است. به‌عنوان مثال ۵۰ شرکت مختلف از این اپلیکیشن استفاده می‌کنند. هر شرکت باید فقط به داده‌های خودش دسترسی داشته باشد، ولی همه از یک سیستم واحد استفاده می‌کنن. به این سبک معماری می‌گوییم Multi-Tenancy. یعنی یک سیستم همزمان به چند مشتری سرویس می‌دهد، طوری که هر کدام با مشتری‌های دیگر ارتباط نداشته باشند.نباید داده‌ یک مشتری توسط مشتری دیگر قابل خواندن باشد که بزرگ‌ترین چالش‌ در این معماری است. باید در لایه‌های مختلف سیستم (مثل  tenant isolation (API به‌درستی انجام بشود.از مزایا این معماری، می‌توان به صرفه‌جویی در منابع، مقیاس‌پذیری آسان، آپدیت و استقرار ساده‌تر و ارزان‌ برای مشتری‌ها نام برد.۱۵-Enterprise Integration Patternsزمانی که چند سیستم نرم‌افزاری (با تکنولوژی‌های مختلف) باید با یکدیگر تبادل داده داشته باشند، به جای اینکه همگی به صورت مستقیم به یکدیگر متصل شوند (گره درهم پیچیده)، از یک سری الگوهای طراحی استاندارد استفاده می‌کنیم تا این ارتباط‌ها قابل مدیریت، قابل گسترش و امن شوند.این موضوع یک زبان مشترک برای طراحی ارتباط بین سیستم‌های مستقل است. در معماری‌های مبتنی بر میکروسرویس، معماری‌های Event-Driven و سیستم‌های بزرگ سازمانی، استفاده از این الگوها باعث می‌شود که وابستگی‌ها کمتر شوند، مقیاس‌پذیری و انعطاف بالاتر برود و مدیریت خطا و مانیتورینگ ساده‌تر شود.به عنوان مثال، در یک سیستم فروشگاه آنلاین، کاربر تنها ثبت سفارش می‌کند. در این حال عملیات بررسی موجودی، ثبت فاکتور و ارسال محصول به صورت اتوماتیک انجام می‌شود و هدف این است که کاربر دیگر برای انجام این مراحل نیازی به انجام کاری نداشته باشد.منابع:Infrastructure as Code (IaC):cbtnuggetsAPI Gateway &amp; Service Mesh:dzoneCQRS (Command Query Responsibility Segregation): linkedinEvent-Driven Architecture (EDA):redborderServerless Architecture:globaldotsAPI-first Approach:netsolutionsDomain Driven Design:geeksforgeeksHexagonal architecture:geeksforgeeksEvent Sourcing:geeksforgeeksLow-code/No-code platforms:teamdesk.netBusiness Process Management Systems (BPMS):techtargetMessage Queue (such as Kafka and RabbitMQ):blog.bytebytegoContainer orchestration (such as Kubernetes):metricfireMulti-Tenancy Architecture:geeksforgeeksEnterprise Integration Patterns:oneio.cloud</description>
                <category>Amirreza Vafaei</category>
                <author>Amirreza Vafaei</author>
                <pubDate>Wed, 14 May 2025 13:04:08 +0330</pubDate>
            </item>
            </channel>
</rss>