<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های آرمان آذرنیک</title>
        <link>https://virgool.io/feed/@armanazarnik</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 12:54:32</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>آرمان آذرنیک</title>
            <link>https://virgool.io/@armanazarnik</link>
        </image>

                    <item>
                <title>معماری نرم‌افزار در نرم‌افزار‌های پردازش داده‌های حجیم (Big Data)</title>
                <link>https://virgool.io/@armanazarnik/%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-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%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-%D9%87%D8%A7%DB%8C-%D8%AD%D8%AC%DB%8C%D9%85-big-data-tgcgiesebaer</link>
                <description>چکیدهامروزه با افزایش حسگرها، گسترش اینترنت ودستگاه‌هایی که داده‌ها را تولید و جمع‌آوری می‌کنند (مانند تلفن‌های همراه، رایانه‌ها، خودروهای هوشمند و ...) و استفاده از این داده‌ها برای الگوریتم های پردازش هوش مصنوعی و یادگیری ماشین، ضرورت داشتن یک معماری نرم‌افزار مناسب برای تولید داده‌ها، ذخیره‌سازی آن‌ها، انتقال، پیش پردازش و پردازش و تجزیه وتحلیل این حجم از داده به نحوی که در آینده باعث بروز مشکلات نشود بیش از پیش شده است.معماری‌‌های نرم‌افزار مختلفی از ابتدای‌ زمان توسعه‌ی نرم‌افزارها وجود داشته و در حالی که نمی‌توان هیچ‌کدام را منقضی شده دانست اما همواره روش‌های جدید برای غلبه بر مشکلات جدید به وجود آمده تا کیفیت بالا را تضمین کنند. با توضیح مفهوم کلان داده و معماری‌نرم‌افزار و توضیح مفهوم کیفیت در این حوزه به سراغ ابزارها، روش‌ها و مراحل توسعه‌ی نرم‌افزارهای پردازش کلان‌داده خواهیم رفت و در انتها دو معماری معروف در این ضمینه را بررسی خواهیم نمود.کلمات کلیدی: کلان‌داده، حجیم، پردازش، معماری نرم‌افزار۱. مقدمهداده همیشه و همواره در حال تولید بوده است، اما ثبت داده را می‌توان از دوران لوح‌های سنگی و کتیبه‌ها دانست. با پیشرفت علم، این ثبت به صورت کاغذی، سپس نوارهای مغناطیسی و امروزه به صورت اسناد رایانه‌ای شامل متن‌ها، تصاویر، فیلم، صوت، جداول، بیت‌ها و ... درآمده و امکان تجزیه و تحلیل و پردازش آسان را برای انسان فراهم آورده است.افزایش تعداد دستگاه‌های تولید داده مانند حسگرها، تلفن‌های همراه، خودرو‌های هوشمند، دستگاه‌های اینترنت اشیا، و به موازات ‌آن گستردگی اینترنت و شبکه، سرعت تولید و ارسال داده‌ها را افزایش داده، همچنین پیشرفت سخت‌افزاری توان تولید و پردازش داده‌های حجیم را فراهم آورده است. داد‌ه‌هایی که با سرعت و تنوع و حجم‌های مختلف تولید می‌شوند به دلایل مختلفی دسته بندی، تجزیه و تحلیل و و ارسال می‌شوند تا از قدرت و پتانسیل نهفته در آن‌ها استفاده شود. پردازش این حجم داده نیازمند روش‌هایی متفاوت است تا خللی در کار سخت‌افزار، نرم‌افزار، شبکه و دیگر المان‌ها ایجاد نگردد. در حالیکه توان پردازشی سخت‌افزارها و پهنای باند شبکه افزایش یافته، نرم‌افزار‌ها نیز باید به گونه‌ای مناسب برای تعامل با این دو، داده‌ها و سایر نرم‌فزار‌ها تکامل یابند. این تکامل ها را به طور کلی در مفهومی به نام معماری نرم‌افزار پردازش داده‌های حجیم تعریف می‌کنیم.اما ابتدا باید مفهوم دو واژه‌ی اصلی این حوزه یعنی معماری نرم‌افزار و کلان‌داده را بررسی کنیم.۱.۱. معماری نرم‌افزارمعماری نرم‌افزار تعاریف مختلفی دارد که در اینجا به برخی از آن‌ها اشاره میکنیم:معماری نرم‌افزار به تکنیک‌هایی اطلاق می‌شود که سعی در برآورده کردن نیازمندی‌های نرم‌افزار با بهترین کیفیت ممکن دارند[ ۱]. یا در تعریف دیگر معماری نرم‌افزار تصمیم‌هاییست که بهتر است در ابتدای توسعه‌ی نرم‌افزار گرفته شده یا معماری نرم‌افزار نحوه‌ی ارتباط و تعامل بین اجزای مختلف نرم‌افزار است [۲].۱.۲. کلان دادهکلان‌داده، به مجموعه داده‌های بسیار بزرگ و پیچیده اطلاق می‌شود [ ۳ ]که قابل ذخیره سازی، انتقال، پردازش و تحلیل با روش‌های سنتی و معمولی نبوده و به طور خاص دارای سه ویژگی حجم بالا، سرعت تولید زیاد و تنوع بالایی هستند[۴]. البته امروز تقریبا دو ویژگی دیگر ارزشمندی و صحت‌مندی نیز به عنوان ویژگی‌های کلان‌داده پذیرفته شده‌اند [۵].این پنج ویژگی که به دلیل یکسان بودن حروف ابتدایی کلمات آن‌ها در زبان انگلیسی به 5V معورف هستند به شرح زیراند:حجم (Volume):این مهم‌ترین ویژگی کلان‌داده که در خود این کلمه نیز وجود دارد به حجم بسیار بالای داده‌ها اشاره دارد.تنوع (Variety): با توجه با گسترش ابزار‌های تولید داده‌، انواع مختلفی از آن‌ها نیز توسط دوربین‌ها، حسگر‌ها، ربات‌ها و ... تولید می‌شوند.سرعت (Velocity): با توجه به گسترش سخت‌فزارها و اینترنت و راه‌های ارتباطی، این داده‌ها می‌توانند در لحظه‌ی به تعداد بالا تولید شده و انتقال یابند.ارزش (Value): داده‌هایی ارزشمند هستند که بتوان از پردازش آن‌ها در مرحله‌ی اول اطلاعات و سپس دانش و خرد مناسبی به دست‌ آورد.صحت (Veracity): این ویژگی به کیفیت داده‌ها اشاره دارد، بدیهی است که تولید، ذخیره سازی و پردازش حجم بالای داده هزینه‌های گزافی خواهد داشت که در صورت غلط و غیرقابل اعتماد بودن داده‌ها، این هزینه‌ها اتلاف شده‌اند.۱.۳. معماری نرم‌افزار کلان دادهمعماری سرویس داده‌ حجیم را می‌توان مدلی مقرون به صرفه دانست که داده‌ را از منابع مختلف جمع‌آوری و استخراج کرده و متدهای مختلف و سفارشی پردازش ، تحلیل و بصری سازی داده را برای مصرف کنندگان فراهم می‌آورد[۶].معماری سرویس کلان داده متشکل از سه لایه اصلی است، لایه‌ی جمع آوری و ذخیره سازی داده که در آن داده از منابع با تجیهزات مربوطه جمع آوری شده و پیش پردازشی روی داده‌ به صورت توزیع شده (مانند Hadoop) انجام و ذخیره سازی  می‌شود. در لایه‌ی پردازش چهارچوب‌های پردازش مختلفی بر اساس انواع مختلف داده (مانند Apache Spark) به کار گرفته می‌شوند. لایه‌ی آخر نیز تحلیل و ارائه است که در آن ابزارهای بصری ساز وجود دارند [۷].این لایه‌ها به صورت سرویس‌های ابری  (SaaS, PaaS, IaaS)نیز وجود دارند که در شکل زیر قابل مشاهده است:۱.۴. اهمیت معماری کلان دادههمانگونه که پیش‌تر ذکر شدکلان داده‌ها با حجم، سرعت و تنوع بالا تولید شده و ارزش و صحت آن‌ها اهمیت بالایی دارد، پس نرم‌افزار هایی که در چرخه‌ی تولید، جمع آوری، ذخیره‌سازی، پردازش، تحلیل و ارائه‌ی آن‌ها قرار دارند نیز باید توانایی تعامل با کلان‌داده‌های با این ویژگی‌ها را داشته باشند، بدیهی است که کلان‌داده‌ای که به طور کامل، با سرعت و دقت انتقال نیابد، ذخیره سازی نشده و پردازش و تحلیل نگردد برای کسب و کار مخاطره ایجاد خواهد نمود. در پایین به برخی از ویژگی‌های مهم یک معماری نرم‌افزار کلان داده می‌پردازیم[۸]:۱.۴.۱. دسترسی پذیریاحتمالا برای شما نیز پیش آمده است که وارد یک سایت ورزشی، خبری یا ... شده ولی با خطای http 503یا در دسترس نبودن مواجه‌ شده‌اید. احتمالا چنین وضعیتی را در زمان انتخاب واحد دانشگاه نیز مشاهده کرده باشید، اما این خطا به چه معناست و چرا در صورت رفرش کردن صفحه ممکن است دیگر آن را ندیده و به راحتی به ادامه‌ی کار خود بپردازید؟برنامه‌های تلفن‌همراه، وبسایت‌ها و ... روی رایانه‌های قدرتمندی که ممکن است در سراسر جهان در مراکز داده پخش شده باشند اجرا می‌شوند و از طریق شبکه‌ مانند اینترنت با تلفن‌همراه و یا رایانه‌ی شخصی شما درخواست رد و بدل می‌کنند. به عبارتی اگر شما در زمان انتخاب واحد، درسی را انتخاب کنید، این درخواست شما از طریق اینترنت به یکی از آن رایانه‌های قدرتمند که اصطلاحا سرور نام دارد رسیده، سرور موارد لازم مانند مجاز بودن شما برای انتخاب این درس، ظرفیت کلاس و عدم تداخل با دیگر کلاس‌های شما را بررسی نموده و پاسخ (موفقیت یا عدم موفقیت در انتخاب آن درس) را دوباره از طریق اینترنت به رایانه‌ و مرورگر شما اعلام می‌کند. در زمانی مانند انتخاب واحد، بعد از مسابقه فینال جام جهانی یا حمله نظامی به یک کشور، افراد زیاد به سایت دانشگاه، سایت ورزشی و سایت خبرگزاری هجوم می‌آورند تا انتخاب واحد کرده، نتیجه مسابقه فینال و گل‌ها را دیده و یا از صحت آن خبر نظامی-سیاسی مطمئن شوند. این وبسایت‌ها با توجه به میانگین تعداد کاربران و درخواست‌های ساعتی و روزانه‌ی خود، و بر اساس میزان قدرتی که سرورهایشان دارند (مانند قدرت پردازشی cpu و ram) برای پاسخ گویی به آن تعداد میانگین و معمول کاربر و درخواست تنظیم شده‌اند و در چنین زمان هایی که تعداد بسیار بیشتری از کاربران و درخواست‌ها به سمت‌ آن‌ّا سرازیر می‌شوند این رایانه‌ها قدرت لازم برای پاسخ‌گویی به همه را نداشته و بر اساس تمهیدات قبلی، همه یا تعدادی از درخواست‌ها را پاسخ نمی‌دهند، در این زمان است که شما خطای ۵۰۳ را در مرورگر خود میبینید. همانطور که گفته شد برخی از این افزایش درخواست‌ها مانند زمان انتخاب واحد یا پس از یک فینال جام جهانی قابل پیش‌بینی است و می‌توان از قبل قدرت یا تعداد سرور‌ّا را بیشتر کرد اما در موردی مانند حمله نظامی احتمالا قابل پیش‌بینی نباشد.همچنین شما احتمالا چنین خطایی را در زمان بازکردن جیمیل خود یا جستجو در گوگل بسیار کم مشاهده کرده‌اید طبیعتا با داشتن میلیاردها کاربر جهانی از سراسر دنیا با فرهنگ، زبان و سلایق متفاوت و درخواست‌های آن‌ها گوگل شاید نتواند به راحتی زمان‌ّای افزایش درخواست و کاربران را پیشبینی کند، پس چگونه است که این غول فناوری اغلب سال در دسترس است؟ وجود سرور‌های بسیار بسیار زیاد و بسیار بسیار قدرتمند؟ قطعا بله، اما روشن و آماده به کار نگه داشتن این همه سرور‌ هزینه‌های گزاف مدیریتی، برق و خنک سازی برای این شرکت به دنبال خواهد داشت. پس گوگل باید سرور‌های مختلف خود را به سرعت و در زمان لازم روشن و خاموش کند اما به گونه‌ای که کاربران دچار عدم دسترسی و خطای ۵۰۳ نشوند، چنین کاری مستلزم داشتن یک معماری نرم‌افزار فوق العاده است خصوصا زمانی که بدانیم گوگل خدمت‌های پردازش و تحلیل کلان داده‌ای را ارائه می‌دهد که گاها غیر رایگان و پولی بوده و مشتری انتظار دارد همواره این خدمات در دسترس باشند. البته جالب است بدانید که دسترسی پذیری ۱۰۰ درصدی نیز برای هیچ برنامه و وبسایتی ممکن نیست و گوگل بالاترین دسترسی پذیری دنیا را  با بیش از 99.999% دسترسی پذیری در سال دارد.۱.۴.۲.مقیاس پذیریبرای یک سامانه‌ی خاص، اگر فرض بر یکسان بودن انواع و حدود حجم داده داشته باشیم، بازهم سرعت تولید داده ممکن است در زمان‌های مختلف کاهش یا افزایش داشته باشد، برای مثال در دیجی کالا در زمان تخفیف‌هایی کانند حراج جمعه‌ی سیاده و یا حراج‌های یلدایی و آخرسال تعداد جستجو‌ها، مقایسه‌ها، ثبت سفارش‌ها و ... افزایش چشمگیری دارند. یا برای برنامه‌ای مانند تاکسی اینترنتی اسنپ طبیعتا تعداد درخواست‌ّها از ساعت ۶ صبح تا ۱۲ شب بسیار بیشتر از بازه‌ی ۱۲ شب تا ۶ صبح است. پس برای این سازمان‌ها و هرسازمان دیگری که چنین حالتی داشته باشد به صرفه نیست که تمام طول روز و سال تمامی سرور‌های قدرتمند خود را روشن و آماده به کار نگه دارد زیرا هزینه‌ی برق و سرمایش اتاق سرور‌ها حداقل هزینه‌ی تحمیلی به آن‌ها خواهد بود. یا برای شرکت‌های کوچکی که از سرور‌های ابری استفاده می کنند نیز بهتر است تا همیشه مطابق نیاز‌ لحظه‌آی خود منابع داشته باشند تا هزینه کمتری بپردازند. در یک سامانه دارای معماری نرم‌افزار کلان داده‌ی مناسب، در صورتی که مثلا منابع به میزان ۱۰ درصد افزایش یابند، سامانه‌ نیز باید قابلیت خدمت رسانی به حدود ۸ درصد درخواست بیشتر را داشته باشد و به همین نسبت مثلا اگر منابع ۲۰ درصد افزایش پیدا کنند، باید بتوان به حدود ۱۶ درصد درخواست بیشتر جواب داد. چنین سیستمی مقیاس پذیری مناسبی دارد. از دلایل اهمیت مقیاس پذیری در معماری نرم‌افزار کلان داده توزیع شده بودن منابع و مجازی سازی است که سامانه باید آن را به صورت مناسبی مدیریت کند.۱.۴.۳.کاراییزمانی که با کلان داده که دو ویژگی مهم حجم و سرعت تولید بالا دارد سروکار پاشته باشیم، سرعت انتقال (جستجتو، خواندن، نوشتن) و سرعت پردازش کاهش چشمگیری خواهند داشت و این مطلوب ما نیست. با افزایش منابع می‌توان سرعت را افزایش داد اما هنگامی که منابع توزیع شده باشند، معماری نرم‌افزاری که به صورت مناسب بتواند زمان‌پاسخ دهی ما را در حد مطلوب نگه دارد.۱.۴.۴.سایر معیارهامانند هر نرم‌افزار دیگری، معیارهای زیادی مانند قابلیت استفاده، امینت، تغییر پذیری، قابلیت نگه‌داری، تست پذیری، قابلیت‌ تغییر، قابلیت انتقال و ... برای معماری نرم‌افزارهای پردازش کلان داده نیز وجود دارند، اما با توجه به تفاوت اساسی این نرم‌افزار‌ها با نرم‌افزار پردازش‌ کلان داده (تفاوت در حجم و سرعت داده‌ها)، موارد مقیاس پذیری و دسترسی پذیری و کارایی اهمیت بیشتری دارند.۲.لایه‌های نرم‌افزار پردازش کلان داده۲.۱. لایه‌ی جمع‌آوری و ذخیره سازیبرای فرآیند ETL (Extract, Transfer, Load) که شامل جمع‌آوری، انتقال و بارگزاری در لایه‌ی اول است، داده‌های حجیم با فرمت‌های حختلف از منابع گوناگون به صورت دسته‌ای و یا به صورت جریانی برخط و آنی رسیده و در صورت دسته‌ای بودن، داده در قالب‌های استاتیک ذخیره شده و در صورت برخط بودن ابتدا یک پردازش جزیی  برای پاک سازی داده‌های خراب و یا کثیف شده و سپس داده در یک انبار داده (Data warehouse)ذخیره می‌شود ابزارهایی مانند Kettle, Datastage, Informatica برای ETL  استفاده می‌شوند .فرآیند دیگر ELT(Extract, Load, Transfer) است که در آن که ابتدا تمام داده ها با تمام فرمت ها و ساختار ها در یک مکان به نام Data Lake بارگذاری می شوند. سپس هر موقع نیاز به پردازش و تخلیل داشتیم، باید داده های مورد نظر را از این دریاچه داده برداشته و پردازش و تحلیل را روی آن انجام می دهیم.پس تفاوت انبار داده و دریاچه داده در مرتب و تمیز بودن داده‌های ذخیره‌ شده در آنهاست[۹] .ابزار Apache Hadoop ابزاری متن باز از این شرکت است که ببا استفاده از شبکه‌ای از رایانه‌های توزیع شده، برای کار با کلان‌داده‌ها توسعه داده شده است و از HDFS برای بخش ذخیره‌سازی به صورت گره‌های توزیع شده استفاده می کند. این ابزار نسبت به خرابی دیسک مقاوم بوده و با پشتیبانی از فرمت های مختلف ذخیره سازی، امکان پردازش سریع را فرآهم می‌اورد[۱۰-۱۱].زمانی که جریانی از داده‌ها داریم، آنی بودن، تحمل خطا، پایداری و قابلیت اطمینان اهمیت بالایی دارند، Flume ابزاری است که برای چنین شرایطی توسعه داده شده و معمولا به همراه Hadoop استفاده شده و به عنوان ابزاری بین منبع ارسال و دریافت داده عمل می‌کند[۱۰و۱۲].ابزار Kafka  نیز ابزاری متن باز برای پیام رسانی است که کاربرد آن ساخت خطوط انتقال داده برای انتقال‌های به صورت جریان است و می‌توان به کمک آن و استفاده از صف سرعت پردازش جریان داده را بهینه نمود تا ناهمزمانی بین سرعت تولید و سرعت پردازش کنترل شود[۱۳و۱۰] .ابزار Google File System &#40;GFS&#41; یک سیستم ذخیره‌سازی مقیاس بزرگ و توزیع شده‌ی توسعه داده شده توسط گوگل است که برای کار با داده‌های حجیم توسعه داده شده است[۱۴]. HDFS  نیز که بخشی از پروژه‌ی Apache Hadoop است بر اساس GFS توسعه داده شده و پراستفاده ترین ابزار این حوزه است.امروزه که داده‌ها فرمت‌های مختلف و بدون ساختاری دارند، استفاده از پایگاه‌ داده‌های رابطه‌ای برای داده‌های حجیم کم‌تر مرسوم بوده و از سیستم‌های NoSQL  و NewSQL استفاده می‌شود. پایگاه داده‌های‌ NoSQL  غیر رابطه‌ای هستند و شامل مدل‌های جفت کلید- مقدار (مانند Redis و Memcached)، گراف (مانند Neo4j و GraphDB)، مبتنی بر ستون (مانند Hbase و Cassandra) و مبتنی بر سند (مانند MongoDB و CouchDB) هستند.پایگاه داده‌های جفت کلید-مقدار دارای ساختار ساده، مقیاس پذیری بالا و بهره وری پایین برای پرسوجوهای به‌هنگام سازی ولی کارایی بالا برای خواندن و نوشتن داشته و برای کاربردهایی مانند اتصال اطلاعات کاربر به شناسه کاربری مناسب هستند .پایگاه داده‌های سند محور برای پردازش‌های مبتی بر سند مناسب بوده و از انواع داده مختلفی مانند JSON و XMLپشتبانی می‌کنند. این نوع پایگاه‌ داده سرعت دسترسی بالا، بهره‌وری بالای پرسوجو و همزمانی را فراهم می‌سازند اما در حجم‌های بالا فضای زیادی را اشغال کرده و بهره‌وری پایین خواندن و نوشتن و نگه‌داری سخت دارند و به طور کلی برای ذخیره‌سازی فایل‌های لاگ و داده‌های تحیلی به صورت بلادرنگ مناسب هستند.پایگا‌ه داده‌های مبتنی بر ستون همبستگی زیاد در همان ستون را فراهم آورده و برای بارگزاری‌های سریع و ذخیره‌سازی داده‌های بسیار حجیم مناسب هستند اما خواص ACID و پرسوجو‌های دارای چندین شرط و همینطور زبان SQL را پشتیبانی نمی‌کنند. به طور کلی برای همزمانی بالا روی داد‌های بزرگ و دسترسی بلادرنگ خواندن و نوشتن مناسب هستند.در پایگا‌ه‌ داد‌ه‌های مبتنی بر گراف، موجودیت‌ها راس‌ها بوده و همبستگی زیادی بین ‌آن‌ها وجود دارد. کارایی پرسوجو‌ها بهینه بوده و در عین پشتبانی از خواص ACID، الگوریتم‌های گرافی به‌ خوبی روی آن‌ها اعمال می‌شوند اما پیچیدگی بالایی دارند. این نوع پایگاه های داده برای ذخیره سازی داده‌های رابطه‌ای و موتور‌های پیشنهاد دهنده و انجمن‌ها مناسب هستند.پایگاه داده‌های‌ NewSQLرابطه‌ای بوده و از خواص ACID و زبان SQLپشتیبانی کرده و در عین حال مقیاس پذیری پایگاه داده‌های‌ NoSQL  را نیز دارند [۱۵]مانند پایگاه‌داده‌های Spannerو MemSQL.۲.۲. لایه‌ی پردازشدر ابتدای پردازش داده، داده‌ی خام باید تمیز، جداسازی و با دیگر داده‌ها یکپارچه شود تا کارایی مناسبی داشته باشد. به دلیل حجم بسیار زیاده داده، پردازش و تحلیل همه‌ی آن هزینه‌ی بالایی داشته و شاید در زمان مناسب امکان پذیر نباشد.چهار روش مختلف پردازش داده وجود دارد:۲.۲.۱.پردازش دسته‌ای (Batch processing)در زمان بسیار حجیم بودن دسته‌های داده و شبیه به هم بودن آن‌ها، از این روش غیربرخط استفاده می‌شود، سرعت پردازش این روش در حدود دقیقه بوده و برنامه‌ نویسی آن ساده است. برای برقراری ارتباط از پروتکل RCP/HTTP و برای ذخیره سازی از HDFSاستفاده می‌شود. MapReduce نیز بر اساس این روش توسط گوگل توسعه داده شده و مدلی توزیع شده برای پردازش داده‌های حجیم بدون نگرانی از همزمانی انجام پردازش‌ها، تحمل خطا، قابلیت اطمینان و دسترسی پذیریست. در MapReduce داده‌ها طی بخش Map به بخش‌های مستقلی تقسیم می‌شوند که به طور موازی طی بخش Reduce مورد پردازش قرار می‌گیرند و پاسخ بخش‌های مختلف به طور مناسب برای رسیدن به پاسخ کلی با هم ترکیب می‌شوند. مانند زمانی که بخواهیم تعداد تکرار هر کلمه را در متن بلندی پیدا کنیم، متن به بخش‌های کوچکتری تقسیم شده (Split). سپس در هر قسمت به صورت مجزا تعداد تکرار هر کلمه در متن کوچک شده را به صورت (key, value) که key خود کلمه و value تعداد تکرار آن است محاسبه می کنیم (Map). در گام بعدی نتایج را مرتب سازی می کنیم تا برای جمع زدن آماده بشوند (Shuffle). در نهایت نیز نتایجی که از هر قسمت به دست آمده بود با یکدیگر جمع می شوند تا نتیجه نهایی که تعداد تکرار هر کلمه در متن اصلی است به دست بیاید (Reduce).۲.۲.۲.پردازش جریان (Stream processing)این نوع پردزش مناسب زمانی است که نیاز به پاسخ درلحظه و تاخیرکم داریم.ابزار Storm یک ابزار متن‌باز توسعه داده شده توسط Apache بر اساس این مدل پردازش و شبیه به Hadoop است که در لحظه کار می‌کند اما به دلیل عدم نیاز به زمانبندی پیچیده، تاخیر را کاهش می‌دهد. Storm دارای برنامه نویسی ساده، مقیاس پذیری بالا، قابلیت اطمینان بالا، تحمل پذیری خطاست.ابزار Apache Samza  نیز ابزار دیگری برای پردازش بهینه جریان داده‌های کلان بوده و توسط لینکدین استفاده می‌شود. Samza معمولا همراه با Kafka استفاده می‌شود تا تحمیل پذیری خطا، بافر کردن داده و دیگر مزایا نیز به آن اضافه شود. (مانند ارتباط MapReduce و HDFS)۲.۲.۳.پردازش دوگانه (Hybrid processing)این نوع پردازش مناسب زمانیست که نیاز به هر دو پردازش دسته‌ای و جریانی داریم. Apache Sparkیک ابزار پردازش دسته‌ای داده‌ است که قابلیت‌هایی برای پردازش جریان داده نیز فرآهم می‌اورد.Spark با قابلیت Resilient Distributed Dataset یا RDD توان انتقال پردازش به حافظه و افزایش سرعت مانند پردازش جریانی را داشته و تحمل پذیری خطا و متعادل سازی بارگزاری خوبی دارد. Spark نسبت به Hadoop کارایی بهتری در زمان محدودیت حافظه دارد.ابزار Apache Flink ابزار متن بازی برای تحلیل داد‌ه‌های دسته‌ای و جریانی بوده و همراه یک صف پیام مداوم مانند Kafkaاستفاده می‌شود.۲.۲.۴.پردازش داده‌ی گرافی (Graph processing)برخی داده‌ها را می‌توان به صورت یال و گره به یکدیگر ارتباط داد تا شبکه‌ای از داده‌ها ایجاد شود و زمانی که تعداد راس‌ها و یال‌ها ممکن است در حدود چندصد میلیون شود دیگر روش‌های سنتی پردازش جوابگو نخواند بود.امروزه دو روش به طور کلی برای این نوع پردازش‌ها مرسوم است:پایگاه داده‌ی گرافی که قابلیت پردازش لحظه‌ای داده را دارد مانند: Neo4j, OrientDB, DEXروش دیگر موتورهای محاسباتی هستند که قابلیت پردازش موازی دسته‌های داده‌ها را دارند مانند: Hama, Giraph, Regelابزار Pregelنیز یک سامانه‌ی محاسباتی توسعه داده شده توسط گوگل است قادر به پردازش موازی و همزمان دسته‌ای است و برای پردازش گراف های تکرار شوند کارایی بالاتری نسبت به MapReduceداشته و برای مواردی چون یافتن کوتاه‌ترین مسیر، پیمایش، پیج رنک و دیگر الگوریتم‌های مورد نیاز در شبکه بسیار عالی عمل می‌کند.برای پردازش داده‌های دسته‌ای که حجم بالایی دارند، از روش‌های پردازش غیربرخط و توزیع شده که قابلیت پردازش همزمان دارند استفاده می‌شود. گوگل برای این مورد نیز ابزار MapReduce  را توسعه داده که مدلی توزیع شده برای پردازش دسته‌های داده است و اجازه‌ی اجرای محاسبات سنگین بدون نگرانی در مورد ناهمزمانی، تحمل خطا، قابلیت اطمینان و دسترسی پذیری را می‌دهد.۲.۳.تحلیل داده و بصری سازی۲.۳.۱.یادگیری ماشینمواردی مانند یادگیری ماشین برای کاوش در داده‌ها و استخراخ اطلاعات و دانش مفید و ارزشمند مانند شناسایی الگوها و پیشبینی استفاده می‌شود. این الگوریتم‌ها در ۴ دسته‌ی یادگیری نظارت شده، یادگیری نظارت نشده، یادگیری نیمه نظارت شده و یادگیری تقویتی قرار می‌گیرند.۲.۳.۲.ابزار‌های بصری سازابزارهای بصری سازی داده‌ها در سه دسته‌ی زیر جای میگیرند:ابزارهای ترسیم نمودار مانند: D3, RawGraphs, Google Chartsابزارهای ترسیم کلاس نقشه مانند: Modest Maps, Openheatmap, ColorBrewerابزارهای ترسیم خط زمانی مانند: Cube, Timeflow, Dipity۳.سامانه‌های پردازش کلان داده ابریرایانش ابری بستری برای فرآهم سازی دسترسی فراگیر و آسان به استخری از منابع قابل تنظیم مانند شبکه، قدرت پردازشی، حافظه‌های ذخیره سازی، خدمات و .. است که می‌تواند با کمترین تلاش مدیریتی به سرعت تهیه شده و آزاد گردد.[12]قدرت این سامانه‌ها در توزیع شده بودن موتورهای پردازشی، پایگاه‌های داده و مجازی سازی آن‌هاست.معماری سامانه های پردازش کلان داده ابری باید به گونه‌ای باشند تا هزینه، سرعت و مقیاس پذیری سیستم را مدیریت کنند. سه دسته کلی خدمت ابری برای حل این مشکلات وجود دارد:نرم افزار به عنوان خدمت (SaaS)در ساده ترین حالت بدین شکل، کاربر تنها داده‌های خود را روی سرور ابری بارگزاری کرده و کلیه‌ی پردازش و تحلیل‌ها به صورت برخط انجام و سپس در صورت غیررایگان بودن تنها به میزان مصرف منابع هزینه پرداخت می‌شود. مانند Google Analyticsسکو به عنوان خدمت (PaaS)برای فراهم سازی خدمت مقیاس پذیر، خطاپذیرو توزیع شده که کاربر نیازدارد تا تنظیمات رو خود انجام داده و شخصی سازی نماید و همه چیز مانند SaaS آماده در اختیارش نباشد مانند برخی پایگاه‌ داده‌ها، Kubernetes، داکر، Google App Engineزیرساخت به عنوان خدمت (IaaS)مناسب برای زمانی که کاربر لازم دارد تا همه چیز را از صفر طبق نیاز خود فراهم سازد. مانند انتخاب میزان حافظه، توان پردازشی، سیستم عامل و .. در واقع شبیه داشتن یک رایانه‌ی کامل همیشه آماده به کار است که تنها باید از طریق شبکه‌ به آن متصل شد.۴.کاربردهای کلان دادهاز حاصل پردازش کلان‌داده‌ّا در حوزه‌های مختلفی استفاده می‌شود که برخی از آن‌ها عبارتند از:سامانه‌های توصیه گر:با افزایش انفجاری انواع داده در سال‌های اخیر، تصمیم گیری بر اساس داده سختتر شده(مشکلی که از آن به عنوان سربار اطلاعاتی یاد می‌شود) و سامانه‌های توصیه‌گر وظیفه‌ی استخراج اطلاعات مفید از کلان‌ داده‌های باارزش و کم ارزش و بی‌ارزش را دارند. ایده‌ی اصلی تحلیل تاریخچه‌ رفتار کاربر و سپس توصیه‌ی خودکار محصولات به اوست.شبکه هوشمند:اطلاعات بسیار زیاد از طریق شبکه حسگرهای بیسیم برای تصمیم گیری خودکار استفاده در باره گذشته یا در لحظه می‌شود.تحلیل احساسات:تحلیل احساسات و نظرات مردم۵.معماری‌های معروف نرم‌افزارهای پردازش کلان داده۵.۱.معماری لامبدایک معماری نرم‌افزار پردازش داده‌ی حجیم معروف ارائه شده توسط Nathan Marz که متخصص علم داده‌ی شرکت توییتر(X) است، معماری لامبداست که قابلیت پردازش دسته‌ای و جریانی را داشته و تاخیر بسیارکم، تحمل پذیری خطا و مقیاس پذیری بالایی دارد[۱۶و۱۷].در معماری لامبدا که در شرکت توییتر، نتفلیکس و یاهو استفاده می‌شود، با استفاده از سه لایه، توابع مختلف روی‌ داده‌ی مشخص در لحظه اعمال می‌شود. این لایه‌ها عبارتند از:۵.۱.۱.لایه‌ی دسته (Batch)این لایه‌ی ذخیره سازی با استفاده از سیستم فایل توزیع شده HDFS است که  مدیریت دسترسی داده را انجام داده و برای پردازش از Hadoop  که مانند MapReduce است استفاده می‌کند. داده‌های در معماری لامبدا در ساختاری به نام نمای دسته‌ای ذخیره شده و همه‌ی داده‌ها به نوعی یک کپی داشته و تغییرات در ابتدا فقط در یکی از این کپی‌ها انجام شده و داده‌های اصلی  که در این لایه هستند تغییر نمی‌کنند، پس بازیابی خطا بسیار آسان خواهد بود. این لایه را می‌توان شبیه یک دریاچه‌ی داده در نظر گرفت.۵.۱.۲.لایه‌ی خدمت دهنده (Serving)در این لایه بارگذاری و نمایش داده‌ در مبنع داده‌ انجام شده و پاسخ دهی به پرسوجوها در آن انجام می‌شوند. در این لایه به‌هنگام سازی دسته‌ای و خواندن تصادفی وچود دارد.۵.۱.۳.لایه‌ی سرعت (Speed)این لایه فقط مخصوص جبران تاخیر به‌هنگام سازی در لایه‌ی خدمت‌دهنده بوده و با استفاده از پردازش جریانی  Stormداده‌های جدید را برای محاسابت بلادرنگ استفاده می کند و پاسخ این محاسبات در این لایه تا زمان انتقال به لایه‌ی دیگر می‌ماند.۵.۱.۴.مزایای معماری لامبداکاهش احتمال وقوع خطا به علت وجود لایه batchفراهم سرعت بیشتر بدون کاهش ویژگی قابل اتکا بودنمقاوم بودن در برابر وقوع خطا۵.۱.۵.معایب معماری لامبدا· پیچیدگی بالا به علت لایه‌های مختلفت و مدیریت آن‌ها· محاسبات بیشتر برای آماده سازی داده در مرحله تحلیل· دشواری استفاده و ترکیب با خدمات ابری و یا منبع‌باز۵.۲.معماری کاپاچالش‌های معماری لامبدا باعث تا معماری کاپا توسعه داده شود که همانند معماری لامبدا بستری برای پردازش جریان و دسته داده فراهم میکند ام در آن لایه‌ی دسته برای سادگی حذف شده است. در این معماری به طور کلی، داده دریافتی از جریان داده ورودی، ابتدا در یک message engine ( مثلا apache kafka ) ذخیره میشود و سپس توسط یک موتور پردازش جریان داده پردازش میشود و خروجی به صورت ساختاری مناسب برای تحلیل ذخیره میشود. با توجه به این که در این معماری، رویکردی نزدیک به رویکرد بلادرنگ استفاده میشود، (یعنی داده ورودی پس از دریافت سریعا برای تحلیل اماده میشود)، تحلیل داده‌ های جدید به سرعت برای درخواست کاربران ذخیره میشوند[۱۸ و ۱۹].بنابراین این معماری بیشتر برای کاربرد‌هایی مناسب است که منطق سازمانی حاکم بر آن‌ها کاملا مشخص و بدون تغییر است. مثلا برای بررسی و پردازش خطا‌های نرم افزار، پایش شبکه‌های اجتماعی و همچنین پایش وضعیت سرو‌ها می‌توان از این معماری استفاده کرد چون غالب تصمیمات باید در لحظه گرفته شود و آمار مورد نیاز هم در همان حین دریافت اطلاعات قابل استخراج و ذخیره سازی است. در واقع این معماری محدودیت بیشتری دارد و شکل خلاصه شده‌ی معماری لامبدا است.۵.۲.۱.مزایای معماری کاپاپردازش بلادرنگ و بدون تاخیر دادهمقیاس پذیری بالامعماری نرم‌افزار نسبتا سادهقابلیت پردازش به دو صورت دسته‌ای و جریانیقابلیت اطمینان بالاقابلیل استفاده برای کاربرد‌های جدیدنیاز به منابع کمتر برای پردازش‌های یادگیری ماشین۵.۲.۲.معایب معماری کاپاافزایش احتمال خطا و کاهش ریکاوری به دلیل حذف لایه‌ی دسته‌ای۶.نتیجه گیریامروزه ما در دنیای انفجار اطلاعات زندگی‌ می‌کنیم، افراد و کسب‌وکار‌هایی که به درستی از این داده‌ها استفاده کنند، همیشه پیشگویی در کنار خود خواهند داشت که آینده، روندها، الگوها و علایق را قبل از دیگران دانسته و یک قدم جلوتر خواهند بود. اما استخراج دانش درست از حجم بالای داده نیازمند رهیافت درستی است که کیفیت مراحل آن تضمین شده باشد، داده‌ها باید به سلامت از منابع تولید انتقال یافته، بدون از دست رفتن و خرابی در پایگاه ّهای داده ذخیره شده، داده‌های نامربوط و کثیف پاکسازی شده و داده‌های سالم به سرعت مورد پردازش و تجزیه تحلیل قرار گیرند بدون آنکه پردازنده‌ای معطل حافظه مانده و یا سامانه‌ به دلیل خاموشی یک سرور با بار زیاد یا پر شدن یک حافظه دسترسی پذیری مناسب خود را از دست دهد، و همه‌ی این‌ها ممکن نیست به جز با داشتن یک معماری نرم‌افزار پردازش کلان داده‌ی مناسب که از ابتدا تا انتها برای آن سامانه تصمیمات مهندسی مناسب اتخاذ کرده باشد.۷.منابع[1] Solms, F., 2012, October. What is software architecture?. In Proceedings of the south african institute for computer scientists and information technologists conference (pp. 363-373).[2] Richards M, Ford N. Fundamentals of software architecture: an engineering approach. O&#x27;Reilly Media; 2020 Jan 28.[3] Al-Mekhlal, M. and Khwaja, A.A., 2019, August. A synthesis of big data definition and characteristics. In 2019 IEEE International Conference on Computational Science and Engineering (CSE) and IEEE International Conference on Embedded and Ubiquitous Computing (EUC) (pp. 314-322). IEEE.[4] Cappa, F., Oriani, R., Peruffo, E. and McCarthy, I., 2021. Big data for creating and capturing value in the digitalized environment: unpacking the effects of volume, variety, and veracity on firm performance. Journal of Product Innovation Management, 38(1), pp.49-67.[5] Hariri, R.H., Fredericks, E.M. and Bowers, K.M., 2019. Uncertainty in big data analytics: survey, opportunities, and challenges. Journal of Big Data, 6(1), pp.1-16.[6] Wang J, Yang Y, Wang T, Sherratt RS, Zhang J. Big data service architecture: a survey. Journal of Internet Technology. 2020 Mar 1;21(2):393-405[7]P. Karunaratne, S. Karunasekera, A. Harwood, Distributed Stream Clustering Using Micro-clusters on Apache Storm, Journal of Parallel and Distributed Computing, Vol. 108, pp. 74-84, October, 2017.[8] Barbacci M, Klein MH, Longstaff TA, Weinstock CB. Quality attributes. Software Engineering Institute, Carnegie Mellon University, Pittsburgh, Technical Report CMU/SEI-95-TR-021. 1995 Dec 1.[9] Tayade DM. Comparative study of ETL and E-LT in data warehousing. Int. Res. J. Eng. Technol. 2019 Jun;6:2803-7.[10] https://www.apache.org[11] Borthakur D. The hadoop distributed file system: Architecture and design. Hadoop Project Website. 2007 Aug;11(2007):21.[12] B. Shu, H. Chen, M. Sun, Dynamic Load Balancing and Channel Strategy for Apache Flume Collecting Real-Time Data Stream, IEEE International Symposium on Parallel and Distributed Processing with Applications (ISPA), Guangzhou, China, 2017, pp. 542-549.[13] Thein KM. Apache kafka: Next generation distributed messaging system. International Journal of Scientific Engineering and Technology Research. 2014 Dec 1;3(47):9478-83.[15] M. Wang, B. Li, Y. Zhao, G. Pu, Formalizing Google File System, IEEE 20th Pacific Rim International Symposium on Dependable Computing (PRDC), Singapore, Singapore, 2014, pp. 190-191.[16] Kiran M, Murphy P, Monga I, Dugan J, Baveja SS. Lambda architecture for cost-effective batch and speed big data processing. In2015 IEEE international conference on big data (big data) 2015 Oct 29 (pp. 2785-2792). IEEE.[17] Munshi AA, Mohamed YA. Data lake lambda architecture for smart grids big data analytics. IEEE Access. 2018 Jul 23;6:40463-71.[18] Lin J. The lambda and the kappa. IEEE Internet Computing. 2017 Sep 1;21(05):60-6.[19] Sanla A, Numnonda T. A comparative performance of real-time big data analytic architectures. In2019 IEEE 9th International Conference on Electronics Information and Emergency Communication (ICEIEC) 2019 Jul 12 (این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.</description>
                <category>آرمان آذرنیک</category>
                <author>آرمان آذرنیک</author>
                <pubDate>Fri, 02 Feb 2024 22:24:00 +0330</pubDate>
            </item>
                    <item>
                <title>مروری بر تعدادی سخرانی درباره‌ی معماری نرم‌افزار</title>
                <link>https://virgool.io/@armanazarnik/software-architecture-conference-z0sauivaspzu</link>
                <description>1. https://youtu.be/j_WTlMq6VPs?si=b8F7HDbmTsgHtf-Pآقای Leo Mattos  در گفتوگو با آقای Imran Khan درکنفرانس XConf 2021 NA درباره حکمرانی معماری سبک برای همه حتی نرم‌افزارهای عظیم صحبت نمودند که چگونه مراحل مختلف توسعه‌ی محصول و توپولوژی تیم‌ها بر نحوه ای که مدل معماری را تعریف می‌کنیم تاثیر گذار است.به نظر عمران معماری تصمیمات کلیدی مهم، ساختار فرآیند، نیازمندی‌های کلیدی غیرکارکردی یا اصلول طراحی هستند که چگونگی توسعه‌ی نرم‌افزار را تعیین می کنند. عمران سخت‌تر شدن انتخاب معماری مناسب با افزایش تعداد تیم‌ها را امری طبیعی داسته و ابتدا نکاتی را درباره‌ی یک معماری نامسناب مطرح می‌کند. در یک معماری نامناسب تصمیمات یا دیرهنگام گرفته می شوند، اصلا گرفته نمی‌شوند یا اینکه بدتر از همه چیزهایی که باید ثابت بمانند را مدام تغییر می دهند. در یک معماری بد با افزایش تعداد تیم‌ها، تعداد کانال‌های ارتباطی و نیاز تیم‌ها به هماهنگی با یکدیگر به صورت نمایی افزایش می‌یابد.اما در یک معماری خوب، تصمیمات بر اساس داده‌ها در لحظه بوده و پذیرایی بالایی برای انتقادات و نظرات وجود دارد، افراد تنها در بخش‌های تخصصی خود کنترل تصمیمات را بر عهده داشته و زمان لازم برای تصمیم گیری و هماهنگی تیم‌ها با افزایش تعداد آن‌ها با شیب کمی افزایش می‌یابد.عمران در رابطه با اینکه چه ویژگی‌های محصول نرم‌افزاری بر روی حکمرانی معماری تاثیر گذار است میگوید که اگر مدل عمر محصول نرم‌افزاری را مدل 3X Kent Beck در نظر بگیریم که در آن محصول دارای سه مرحله‌ی کاوش Explore و توسعه  Expandو استخراج Extract در نظر بگیریم، باید برای هر مرحله یک معماری مناسب بر اساس هدف‌های کسب و کار و نیازمندی ها و توپولوژی تیم در نظر بگیریم.در مراحل ابتدایی توسعه با ۱ تا ۵ تیم که نیاز به ورود سریع به بازار رقابتی داشته ولی از تصمیماتی که میگیریم مطمئن نیستیم در عین حال قدرت تغییر بالایی داشته و باید مزایا و معایب هر تصمیم را سبک سنگین نموده و تصمیمات برگشت پذیری گرفته و آنان را مستند کنیم. برای این مرحله می‌توان از Tech radar استفاده کنیم تا بین مشکلات و تکنولوژی‌های راه حل آن‌ها ارتباط برقرار کنیم.در مرحله‌ی بعدی نرم‌افزار کمی بزرگ تر شده و ویژگی‌های جدیدی میخواهیم به آن اضافه کنیم. در این مرحله بین ۵ تا ۱۵ تیم داریم و تصمیماتی که میگیریم سریع بوده و باید رضایت کاربران فعلی محصول را در نظر بگیریم زیرا انتظارات از محصول بالاست. معمولا دردر مرحله از معماری مونولوتیک به معماری میکروسرویس مهاجرت می‌کنیم تا مقیاس پذیری افزایش یابد. تصمیات جدید باید در راستای تصمیمات قبلی و حقایق بوده و مشکلات و تصمیمات را به بخش‌های کوچکتری بشکنیم. تصمیمی درست خواهد بود که ۶ ماه دیگر نیز منطقی به نظر برسد.در بخش پایانی چرخه عمر محصول بیش از ۱۵ تیم داریم و ممکن است برخی پلتفرم‌های ما کهنه شده و نیاز به استفاده از ابزارهای جدیدی داشته باشیم در حالی که نباید خدمت رسانی به مشتریان متوقف شود. یک نقشه ی راه با هدف‌های میان مدت ترسیم شده و همه‌ چیز در تیم‌ها باید به گونه‌ای باشد که هیچ تیم و فردی تبدیل به گلوگاه پیشرفت نشود. این تصمیات نیز باید سریع گرفته شده و هزینه نگه داری کاهش یابد.2. https://youtu.be/j6ow-UemzBc?si=pDzTlgnnmOFc4424آقای Micheal Bryzek در کنفرانس QCon ۲۰۱۸ نیویورک درباره‌ی نحوه‌ی درست طراحی معماری میکروسرویس سخرانی خود را با طرح مثالی از کارفرمای خود که از او تغییری در یک لینک URL خواسته بود و برخلاف تصور کارفرما این تغییر به ظاهر ساده نیازمند چند هفته زمان بود شروع کرد. تغییرات ممکن است زمانبر باشند زیرا سرویس‌های زیادی وحود دارند که مدت زمان زیادی است به‌هنگام سازی نشده و وابستگی‌ها و کتابخانه‌های آن‌ها نیز نیاز به تغییرات خواهند داشت.مایکل یکی از مشخصه‌های یک معماری عالی را این می‌داند که احتمالا تا سال‌ها مشکلی بابت تغییرات نخواهید داشت.او سخرانی خود را با تعدادی باور اشتباه درباره‌ی معماری نرم‌افزار ادامه می‌دهد:۱ – معماری میکروسرویس به تیم‌ها اجازه می‌دهد تا بهترین زبان برنامه نویسی برای وظایف خود را استفاده کنند:اما در حقیقت انتخاب زبان جدید کاری بسیار هزینه بر بوده و باید بر اساس سرمایه‌ها و سایز تیم این موضوع انتخاب شود.۲ – گزارش و لاگ‌ّهای وقایع باید به عنوان منبع حقایق در نظر گرفته شوند:اما در حقیقت هرچند لاگ‌ها بسیار مهم هستند اما می‌توان از پایگاه‌داده‌ها نیز استفاده نمود.۳ – هر توسعه‌ دهنده نباید روی نگه‌داری بیش از ۳ سرویس کار کند:حقیقت آنست که با وجود ابزارهای خودکارسازی هر توسعه دهنده می‌تواند روی نگه داری ۵ سرویس کار کرده و تنها درصدی از زمان خود را به این کار اختصاص دهد.و اما نکات توسعه‌ی میکروسرویس به نحوه مناسب:در API ها از کلماتی استفاده کنید که در پایگاه‌داده نیز استفاده شده است.موارد یکتا مانند نام کاربری ایمیلی را در سراسر پروژه ردیابی کنید.مهم نیست که API ها توسط یک یا چند تیم توسعه داده شوند، یکپارچگی و سازگاری آن‌ها با هم مهم است.با کمک ابزارهایی مانند API Builder  نقاط احتمالی شکست در زمان تغییرات API ها را در فاز طراحی مشخص کنید.تست پذیری میکروسوریس ها نیز باید قبل از توسعه‌ی آن‌ها مورد بررسی قرار گیرد.ماک‌ها در عین اینکه بسیار کمک کننده هستند اما به طور ۱۰۰ درصدی نباید جایگزین حالت واقعی شوند زیرا در این صورت بسیاری از باگ‌ها را نخواهیم دید.برای خودکارسازی فرآیندها هزینه کنیم.هر میکروسرویسی باید پایگاه‌داده‌ی مخصوص و خصوصی خود را داشته باشد و دیگر میکروسرویس‌ها تنها اجازه‌ی استفاده از واسط کاربری (API + Events) آن را خواهند داشت.در صورت استفاده از تعداد زیادی میکروسرویس حتما باید از فرآیند CI/CD  استفاده کنیم.تمامی تغییرات باید به صورت جدولی در مستند ذخیره شوند یعنی هم چیزی که بوده، هم چیزی که هست و هم چیزی که قرار است بشود.این Eventهای جدید باید در یک پایگاه داده محلی ذخیره و دسته بندی شوند تا پاک کردن آن‌ها راحت باشد. همچنین ایونت‌ّایی که میرسند باید در یک صف قرار گیرند. این ایونت های داخل صف باید در برهع زمان‌های کوچک (نه در لحظه) مانند هر ۲۵۰ میلی ثانیه پردازش شوند.مشکلات و شکست‌ها نیز باید به صورت محلی ذخیره شوند.وابستگی‌های سرویس‌ها را باید همیشه به روز نگه داریم، خصوصا وابستگی‌های امنیتی را حتی اگر هزینه بیشتری برای ما داشته باشد.3. Five Things Every Developer Should Know about Software Architecture • Simon Brown • GOTO 2020 (youtube.com)آقایSimon Brown در کنفرانس 2020 goto درباره‌ی ۵ چیزی که هر توسعه‌دهنده باید درباره‌ی معماری نرم‌افزار بداند می‌گوید:۱ – معماری نرم‌افزار یک طراحی یکباره ، کامل و برای همیشه نیست.هرچند تا اولین سال‌های هزاره‌ی جدید میلادی چنین رویکردی و مدل توسعه آبشاری وجود داشت اما امروزه خصوصا با وجود مدل‌های توسعه‌ی چابک و نیاز به تغییرات در برابر نیازمندی‌های جدید و فناوری‌های به روز، امکان تعیین یک مدل قطعی و ثابت از معماری نرم‌افزار قبل از شروع توسعه وجود نداشته و باید در برابر تغییرات انعطاف پذیر باشیم. مقدار معماری که قبل از توسعه مشخص و قطعی می‌شود بسته به این دارد که چقدر از چیزی که میخواهیم توسعه دهیم و ویژگی‌های آن مطمئن هستیم. چونکه کعکولا یک نرم‌افزار جدید را برای ورود به بازار طراحی میکنیم، اطمینان کمی داریم و باید خیلی از موارد را بر اساس آزمون و خطا پیش ببریم.او این نظر را با نقل قولی از آقای گردی بوچ ادامه می‌دهد:”معماری نرم‌افزار تصمیمات کلانی است  که گرفته می‌شوند و معیار کلان بودن آن‌ها بر اساس هزینه‌های تغییرات مشخص می‌شوند” پس تنها تصمیمات لازم و کافی گرفته شده و درباره چیزهایی که مطمئن نیستیم کاری نمیکنیم.آقای بروان با تاکیید بر جداسازی تصمیمات در سطوح معماری، طراحی و پیاده سازی درخواست دارد تا معماری اولیه تنها بر اساس نیازمندی‌ها درست شده و سفر خود را سبک شروع کنیم تا در آینده بر اساس آزمایش‌های صریح آن را تکامل دهیم.۲ – تمام تیم‌های نرم‌افزاری باید از معماری نرم‌افزار آگاه بوده و آن را در نظر بگیرند.اگر این ایده رعایت نشود ما به هرج و مرج خواهیم رسید، شلوغی و بینظمی در کد، ناسازگاری تصمیمات با مشکلات، نادیده گرفتن ویژگی‌های کیفی و مشکلات استقرار برخی از پیامد‌های نادیده گرفتن معماری خواهند بود.۳- نقش معماری نرم‌افزار هم کدنوشتن و هم هدایت و همکاری تیم است.روش دیکتاتور گونه‌ی معمار نرم‌افزار منسوخ شده و دیگر نباید یک معمار تنها مانند یک رییس معماری را به صورت سند بر تیم توسعه تحمیل کند. این جریان نباید یکطرفه بوده بلکه باید همواره معمار بازخورد تصمیمات خود را دریافت کرده و مشکلات آن را حس کند، بدین منظور یک معمار نرم‌افزار باید دارای مهارت‌های نرم بسیاری باشد.۴- نیازی به استفاده از UML نیست.آقای براون این نمودارها را بسیار وقت گیر و پیچیده می‌داند و در عین حال ممکن است به قدر کافی کمک کننده نباشند. او روش C4 را برای مستندسازی پیشنهاد می‌کند.۵- یک معماری نرم‌افزار خوب قابلیت چابک بودن را به ما اضافه می‌کند.آقای براون چابک بودن را حرکت سریع، مواجه با تغییرات، انتشار مداوم و گرفتن بازخورد دانسته و برهمین اساس چابکی را به عنوان یک ویژگی کیفی توصیف می‌کند.4. The Problem with Microservices • Dave Farley • GOTO 2021 (youtube.com)آقای Dave Farley در کنفرانس goto 2021 درباره‌ی مشکل میکروسرویس‌ها سخرانی کرده و علیرغم محبوبیت بسیار، درک نکردن درست آن‌ها را خطری برای شرکت می‌داند.به عقیده‌ی او میکروسرویس‌ها، سرویس‌های کوچک نبوده و یک معماری سیستم توزیع شده است  که همین امر آن‌ها را پیچیده تر و مستعد مشکلات فراوان می‌کند. میکروسرویس‌ها، rest API های ساده نیستند، هرچند فناوری rest میتواند در میکروسرویس‌ها مورد استفاده قرار گیرد.میکروسرویس‌ها، سرویس‌های کوچکی هستند که روی انجام یک وظیفه تمرکز کرده‌، خودکار و به صورت مستقل قابل استقرار بوده و همبستگی کمی با دیگر سرویس‌ها دارند.آقای فارلی معیار کوچک بودن میکروسرویس‌ها را توانایی توسعه آ‌ن‌ها از صفر در چند روز یا حداکثر دو هفته می‌داند. از دید یک کاربر خارجی هر میکروسرویس‌ تنها باید یک کار را انجام داده و ایجاد تغییرات در آن‌ها نیازمند تغییر در چیز دیگری نباشد.آقای فارلی در مجموع مشکل معماری میکروسرویس را این موضوع می‌داند که تیم‌ها و شرکت‌ها کورکورانه و صرفا به تقلیدی از محبوبیت این معماری در دیگر شرکت‌ها و موفقیت آن‌ها به دنبال آن بروند بدون آنکه این نوع معماری رو به درستی شناخته باشند و بدانند که آیا این نوع معماری به آن‌‌ها کمک خواهد کرد یا نه.5. The Role of QA in Agile Software • Dave Farley • GOTO 2022 (youtube.com)آقای Dave Farley در کنفرانس goto 2022  نیز درباره‌ی نقش تضمین کیفیت در فرآیند توسعه‌ی چابک نرم‌افزار سخنرانی داشته که خلاصه‌ی آن را میتوانید بخوانید:استفاده از روش‌های توسعه‌ی چابک و CI/CD مزایای بسیاری مانند کارایی و کیفیت بالا را به دنبال داشته و تیم‌ها بازخورد خوبی از اعمال خود میگیرند با استفاده از این روش، نرم‌افزار همیشه قابل انتشار است. اما این نوع توسعه نقش‌های افراد و باور‌های ما درباره‌ی این نقش‌ها را دگرگون می‌سازد یک از این نقش‌ها تضمین کیفیت است.افراد با نقش تضمین کیفیت (Quality Assurance) یا QA در این فرآیند دیگر تنها کنترل کننده‌ی خروجی نهایی و انتشار نرم‌افزار نیست زیرا در صورت که QA کیفیت یک محصول را مردود اعلام کند، دیگر انتشار مداوم و چرخه‌ی فرآیند CI/CD  معنی نخواهد داشت.برای اینکه یک نرم‌افزار بعد از تغییرات منتشر شود دو هدف در مورد آن باید محقق شوند:۱ – آیا نرم‌افزار کاری که به علت آن تغییر کرده را انجام می‌دهد؟۲ – آیا نرم‌افزار کار‌هایی را که قبل از تغییر انجام می‌داده و هنوز هم باید انجام بدهد را انجام می‌دهد؟به عبارتی جمله دوم تا حدی اشاره به اثرات نخواسته‌ی تغییرات در یک بخش بر بخش‌های دیگر دارد که همواره باید قبل از انتشار از عملکرد آن‌ها اطمینان یابیم. به عبارت دیگر در فرآیند توسعه چابک QA وظیفه دارد تا در سریع ترین زمان ممکن پس از اعمال تغییرات، درستی آن‌ها و عدم ایجاد عوارض جانبی را بررسی کند و این روش به افزایش کیفیت محصول منجر خواهد شد.آقای فارلی قرار دادن تیم QA در انتهای چرخه‌ی توسعه را موجب تبدیل شدن این نقش به گلوگاه انتشار می‌داند، زمانی که چندین تغییر در محصول ایجاد شده و تست آن‌ها به انتهای چرخه موکول شود، حتی در صورتی که مشکلی در تغییرات وجود نداشته باشد، سایر تیم‌ها باید چندین روز تا چند هفته منتظر اعلام نتیجه‌ی آزمون‌ها توسط QA بمانند.آقای فارلی جداکردن تیم QA از توسعه‌دهنده‌ها را نیز مضر و باعث ناسازگاری دانش در مورد محصول می‌داند.--------------------------------------------------------------------------------------------------------------------------------------این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.</description>
                <category>آرمان آذرنیک</category>
                <author>آرمان آذرنیک</author>
                <pubDate>Fri, 29 Dec 2023 22:41:14 +0330</pubDate>
            </item>
                    <item>
                <title>روش مستند سازی نرم‌افزار C4</title>
                <link>https://virgool.io/@armanazarnik/%D8%B1%D9%88%D8%B4-%D9%85%D8%B3%D8%AA%D9%86%D8%AF-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-c4-z5o5intskqiy</link>
                <description>سایمون براون ابداع ککنده روش c4در توسعه‌ی یک نرم‌افزار ذینفعان فنی و غیرفنی زیادی وجود دارند که باید برای تعامل مناسب و درست، درک یکسانی از نرم‌افزار در حال توسعه‌ی خود داشته باشند.بدیهی است که میزان دانش فنی برنامه‌نویس، تستر، مدیر محصول، تیم بازاریابی، سهام‌دار و مدیران و همچنین انتظارات آن‌ و نیاز‌های آن‌ها از برنامه متفاوت است، در هر لحظه و مرحله از توسعه‌ی نیز برخی نیازمندی‌ها توسعه یافته، برخی در حال تست و برخی در حال طراحی اولیه و یا مستند سازی هستند.شمای فنی و نمودارهای برنامه معمولا توسط معمار نرم‌افزار یا دیگر افراد فنی تیم طراحی و ترسیم می‌شود اما این طرح‌ها معمولا به قدری پیچیپده هستند که تنها خود معمار نرم‌افزار و یا برخی افراد فنی قادر به درک کامل آن هستند.طرح معماری یک سیستمطرح معماری یک سیستمطرح معماری یک سیستمطرح معماری یک سیستم
همانگونه‌ که تقریبا تمام برنامه‌نویسان و افرادی که دانشجوی رشته‌های کامپیوتر بوده و درس مهندسی نرم‌افزار را گذرانده‌اند، می‌دانند یکی از بهترین روش‌ها برای ساده سازی انتزاعی از نرم‌‌افزار، استفاده از شکل،‌نمودار و تصاویر است. معروف ترین این موارد نیز نمودار UML (Unified Modeling Language) است که انواع مختلفی داشته و در عین سادگی اطلاعات مفیدی از کلاس‌ها، ماژول‌ها، توابع، اشیا، بسته‌ها و ... را به صورتی قابل فهم برای تیم‌های فنی و غیرفنی فراهم می‌سازد  که امروزه که اکثر شرکت‌ها و تیم‌ها از روش‌های چابک برای فرآیند تولید نرم‌افزار خود استفاده می‌کنند و عملا فرصت زیادی برای آنکه تیم‌های فنی و غیرفنی نیازمندی‌های خود را توضیح دهند وجود ندارد این روش‌های نموداری بسیار پرکاربرد و مفید هستند.اما هر نمودار UML  به خودی خود دارای سطح مشخصی از انتزاع بوده و برای تمامی افراد فنی و غیرفنی مناسب نیست. نمودارهایی مناسب هستند که مانند نقشه ی گوگل مپ که با کوچک نمایی و بزرگ نمایی و افزودن و برداشتن لایه‌ها بتوان یک قسمت مشخص را در سطوح مختلفی از انتزاع و جزییات مشاهده کرد تا برای همه‌ی افراد با نیازمندی‌ها و دانش مختلف قابل درک باشد.نقشه یک منطقه با سطح بسیار بالای انتزاعنقشه یک منطقه با سطح بالای انتزاعنقشه یک منطقه با سطح متوسط انتزاعنقشه یک منطقه با سطح پایین انتزاعنقشه یک منطقه با سطح بسیار پایین انتزاعاما یکی دیگر از روش‌های توصیف معماری نرم‌افزار استفاده از روش C4  است که توسط سایمون براون مطرح شده و نسبت به نمودار UML دارای notation  های کمتری است. C4 قابلیت توصیف نرم‌افزار در سطح‌های مختلف انتزاع را دارد. این سطوح از بالاترین سطح انتزاع به پایین ترین سطح (کد) عبارتند از:Context, Containers, Components, Codeسطوح انتزاع C4که چون ابتدای هر ۴ کلمه دارای C  است، سایمون این روش را C4 نام گذاری کرده است.این سطوح مختلف می‌توانند در زمان‌های لازم برای توضیح موارد مختلف به افراد فنی و غیرفنی استفاده شوند.نمودار context  نرم‌افزار را به صورت جعبه‌ای در وسط که در حال تعامل با کاربران و سایر سیستم‌هایی که خارج از مرز و محدوده کنترل ماست نشان می‌دهد. این نمودار برای تمامی افراد فنی و غیرفنی و در تمامی مراحل توسعه مناسب و مفید است.  رنگ آبی نشان دهنده‌ی سیستم‌های در حال توسعه و رنگ خاکستری سیستم‌های آماده را نشان می‌دهند.نمودار context بانکنمودار container نشان دهنده‌ی یک برنامه‌ی قابل اجرا به تنهایی است که انتزاع سطح بالایی از کد و فناوری‌های به کار رفته را نشان می‌دهد و مناسب افراد فنی داخل و خارج تیم است.نمودار container بانکنمودار component نشان دهنده‌ی مولفه‌های سازنده‌ی container  است که برای افراد فنی داخل تیم مفید است.نمودار component بانکنمودار code  که قابل تولید به صورت خودکار است معمولا به شکل نمودارهای UMLمانند نمودار کلاس ساخته می‌شود.این نمودار تنها برای توسعه‌دهندکان همان بخش مفید است.نمودار code بانکاز مزایای روش C4 می‌توان موارد زیر را برشمرد:قابل فهم‌تر بودن نمودار‌ها، قابلیت تغییر سطح انتزاع، کاهش شکاف طراحی و پیاده‌سازینمودار‌های C4 را می‌توان به کمک draw.io و gliffy.com و Microsoft Visio و Structurizrاین نمودار‌ها برای قابل درک‌تر بودن توسط همه بهتر است از نوتیشن‌های UML هم استفاده کرده و دارای عنوان مناسب، شرحی کوتاه و خطوط یک طرفه برچسب دار باشند.</description>
                <category>آرمان آذرنیک</category>
                <author>آرمان آذرنیک</author>
                <pubDate>Sun, 26 Nov 2023 21:30:20 +0330</pubDate>
            </item>
                    <item>
                <title>مفاهیمی از دنیای معماری نرم‌افزار</title>
                <link>https://virgool.io/@armanazarnik/%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85%DB%8C-%D8%A7%D8%B2-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-a7syfjzgzic1</link>
                <description>Modular Monolithicاین معماری که به سادگی و قابلیت نگه‌داری بالا معروف است ترکیبی از معماری ماژولار و معماری مونولوتیک است. در این معماری کد بزرگ برنامه اصلی بر اساس منطق کسب و کار به تعدادی بخش با ارتباط کم (loosely coupled) تقسیم می‌شود تا در صورت نیاز به تغییر یا توسعه‌ی هر بخش از کسب و کار، تاثیرهای ناخواسته بر کل برنامه کم شده و نیاز به بررسی کل کد برای سازگاری با هر تغییر نباشد.هرچند این معماری شباهت زیادی به معماری میکروسرویس دارد اما در معماری میکروسرویس استقلال بیشتری وجود داشته و هر میکروسرویس می‌تواند پایگاه داده‌، زبان برنامه نویسی و چهارچوب جدایی داشته باشد. اما معماری مونولوتیک ماژولار این تفاوت‌های بین ماژول‌ها وجود نداشته و بیشتر شبیه آنست که برنامه‌ای که از ابتدا یک کد بزرگ بوده را به بخش‌های کوچک‌تر بکشنیم. هرچند مقیاس پذیری معماری ماژولار مونولوتیک کمتر از معماری میکروسویس است اما در عوض پیچیدگی کمتری نسبت به آن دارد.این معماری قابلیت استفاده مجدد، نگه داری، refactor کردن، کپسوله سازی و مدیریت برنامه را ساده‌تر می‌سازد. [1,2]مقایسه معماری‌هاAWSوب سرویس آمازون یا Amazone Web Service، نام مجموعه‌ای از خدمات ابری شرکت آمازون شامل سرویس‌های محاسباتی، ذخیره‌سازی، شبکه‌، امینت و ... است که به توسعه‌دهندگان و استفاده‌کنندگان این امکان را می‌دهد تا به جای صرف انرژی و هزینه بر روی زیرساخت، بر روی ایده‌ی خود متمرکز شوند. این سرویس‌ها قابلیت آن را دارند که مصرف کننده تنها به میزانی که از آن‌ها استفاده می کند پول پرداخت کند و برای زمان‌هایی که استفاده‌ای ندارد هزینه محاسبه نشود. Elastic Compute Cloud (EC2) ، Simple Storage Service (S3)، Amazon RDS, DynamoDB, Redshift، Virtual Private Cloud (VPC), Route 53تعدادی از زیرمجموعه‌های سرویس AWSآمازون هستند. [3,4]پراکندگی جغرافیای AWSآمازونAPI-first Approachدر این روش توسعه‌ی نرم‌افزار، ابتدا APIها توسعه داده شده و سپس بقیه‌ی بخش‌هایی که از این APIها استفاده می‌کنند را توسعه می‌دهیم.این روش توسعه‌ انهطاف پذیری، قابلیت استفاده مجدد، تست پذیریو سرعت توسعه را افزایش داده و اجازه‌ی توزیع شده بودن را به ما می‌دهد. [5, 6]NoSQL Databasesاین نوع پایگاه داده که برای داده‌های غیر ساختاریافته و نیمه ساختاریافته مناسب است، در مواردی که نیاز به انعطاف پذیری بالا، کار با داده حجیم و متنوع است این نوع پایگاه داده به ذخیره و بازیابی و جستجتوی بهینه کمک شایانی می‌کند. [7,8]برخی پایگاه‌داده‌های غیررابطه‌ایServerless Architectureاین نوع معماری نرم‌افزار برای جداسازی دغدغه‌های سروری از نرم‌افزاری ساخته شده تا این مسئولیت‌های بر دوش ارائه دهنده‌ی خدمات ابری و نه توسعه دهنده باشد. توسعه دهنده برنامه را به صورت سرویس‌ها پیاده‌سازی کرده و مدیریت سرور به عهده توسعه دهنده نیست. این معماری چندین نوع دارد از جمله :این نوع معماری کاهش هزینه و افزایش مقایس پذیری و بهره‌وری را به دنبال دارد. [9,10]Domain Driven DesignDomain Driven Design یا DDDطراحی دامنه مجور نرم‌افزار است که در آن برنامه با توجه بیشتری به موضوعات و مفاهیمی که در دامنه وجود دارند طراحی می‌شوند. مسائلی مانند کلاس‌ها و متدها و اشیا از این دست موارد هستند. در این نوع توسعه به مفاهیم کسب‌پ کار توجه بیشتری می‌شود و هر ماژول برابر با یک دامنه مسئله خواهد بود. این نوع توسعه شامل Aggregate، Entity، Value Object و Repository است.طراحی دامنه محور قابلیت نگه‌داری و تغییر در نرم‌افزار را افزایش می‌دهد اما افزایش هزینه‌ی توسعه و پیچیدگی را به دنبال دارد. [11,12]Hexagonal architectureاین نوع از معماری که در آن برنامه از طریق پورت‌ها و یا آداپتورها با دیگر اجزا تعامل برقرار می‌کند به نام‌های معاری پورت و معماری آداپتور هم معروف است. ورودی‌ها و خروجی‌های نرم افزار از هسته اصلی جدا هستند و معماری مستقل از رابط هم به آن گفته می‌شود.مزیت بزرگ این معماری قابل تغییر و جایگزین بودن اجزای آن است. در این نوع معماری دامنه‌اصلی به صورت هسته‌ای در وسط قرار داشته و آن را از جزییات فنی جدا می‌کنیم. با این جداسازی تست پذیری و توسعه آسان تر می‌شود. [13,14]Event Sourcingگاهی اوقات به دلایل مختلفی مانند پایش عملکرد برنامه و رفع باگ لازم است تا استیت برنامه مانند مقادیر متغییر‌ها را ذخیره و تحلیل کنیم. بدیهی است که هر برنامه تعداد بسیار زیادی متغییر دارد و این مقادیر متغییرها با کمک الگوی نرم‌افزاری مدیریت رویدادها به صورت بهتری مدیریت می‌شوند.از معایب استفاده از این روش می‌توان به هزینه و پیچیدگی بالا اشاره نمود. [15,16]Low code platformsامروزه برنامه نویسی و تولید نرم‌افزار تنها مختص به دانش آموختگان رشته‌ی مهندسی کامپویتر نیست و هر کسی ممکن است نیار به توسعه‌ی نرم‌افزاری برای کار خود داشته باشد. جدای از افرادی که از طریق کانال ها و کتب آموزشی برنامه نویسی را یاد میگیرند، افرا بسیار زیادی نیز هستند که تنها یک بار در تمام عمر خویش ممکن است نیاز به توسعه‌ی یک نرم‌افزار نسبتا ساده پیدا کنند و نمی‌خواهند مدت زمان زیادی را صرف آموزش مفاهیم پایه‌ای و حتی پیچیده‌ی دنیای کامپیوتر و نرم‌افزار کنند. ابزارهای توسعه‌ی برنامه‌ی بدون نیاز به کد نویسی یا نیاز کم به کد نویسی مخصوص این افراد هستند. از جمله‌ی این ابزارها می‌توان به موارد زیر اشاره نمود: [17,18]Salesforce Platformو Google AppSheet و ‌ Microsoft Power Appsو Appianو OutSystemsBusiness Process Management Systems (BPMS)با کمک سیستم‌های مدیریت فرآیند تجاری، نقاط ضعف و قوت سازمان و فرآیندها شناسایی شده و از هدر رفت انرژی و زمان حلوگیری می‌شود تا با صرف هزینه و انرژی انسانی و ماشینی کمتر بازدهی بیشتری به دست بیاوریم. [19,20]Message Queue (such as Kafka and RabbitMQ)هنگامی که معماری‌هایی مانند معماری میکرو سرویس برای شکستن برنامه به اجزای کوچک تر استفاده می‌:نیم، این روش عیوب خود را نیز دارد، مواردی مانند افزایش پیچیدگی برنامه به دلیل افزایش تعامل میان میکروسرویس‌ها این تعاملات و پیام‌ها ممکن است قابلیت دریافت و پردازش و پاسخ دهی در لحظه‌ را به دلایلی مانند محدودیت منابع نداشته باشند. برای اینکه خللی در این پیام‌ها به وجود نیاید می‌توان از یک صف پیام مانند Apache Kafkaو RabbitMQ استفاده نمود به طوریکه پیام‌ها بدون آنکه بلاک شوند با میکروسرویسی منتظر پیامی بماند بقیه بخش ها به درستی کار خود را انجام دهند. [21,22]&#x27;=Container orchestration (such as Kubernetes)امروزه که اکثر برنامه‌های خصوصا بزرگ و دارای چندین لایه مانند پایگاه داده، لاجیک و فرانت به صورت کانتینرهایی در محیط هایی مانند داکر اجرا می‌شوند، هماهنگی این کانتینرها نیازمند مدیریت خاصی است که ابزارهایی برای آن‌ها وجود دارد. [23,24]Log Management Tools (such as ELK)زمانی که برنامه به صورت توزیع شده بر روی بیش از یک سرور قرار گرفته باشد، مدیریت و بررسی لاگ‌ها نیازمند هزینه و زمان بیشتری است. ابزارهای مدیریت و پایش لاگ ابزارهایی هستند که برای جمع‌آوری، ذخیره، تجزیه و تحلیل، نمایش و مدیریت لاگ‌ها و رویدادهای سیستمی در یک سیستم نرم‌افزاری استفاده می‌شوند. این ابزارها به توسعه‌دهندگان و مدیران سیستم کمک می‌کنند تا به راحتی دسترسی به اطلاعات لازم برای مشاهده و تحلیل عملکرد سیستم‌ها داشته باشند و مشکلات و مسائل عملیاتی را شناسایی کنند. ابزارهای مدیریت لاگ به صورت خودکار داده‌های لاگ را از منابع مختلف سیستم، برنامه‌ها، و سرویس‌ها جمع‌آوری می‌کنند. این شامل پیام‌های سیستم، خطاها، و رویدادهای مختلف می‌شود.ابزار ELK (Elasticsearch, Logstash, Kibana) یکی از معروف‌ترین مجموعه‌های ابزار مدیریت لاگ است. Elasticsearchبرای ذخیره و جستجوی لاگ‌ها و داده‌های سیستمی استفاده می‌شود، Logstash برای تجمیع و پردازش لاگ‌ها، و Kibana برای تصویرسازی و نمایش داده‌ها به صورت گرافیکی و تحلیلی استفاده می‌شود.[25,26]Monitoring tools (such as Prometheus)نظارت و مانیتور بخش مهمی از فرآیند نگه‌داری نرم‌افزار برای یافتن باگ‌ها و مشکلات پس از انتشار است. در برخی از این نرم‌افزارهای مانیتورینگ می‌توان متریک‌هایی را تعریف نمود تا برخی باگ‌ها مانند باگ‌های امنیتی قبل رخدادن یا در زمانی که به میزان مشخصی رخ دهند هشداری داده شود. پرومتئوس یکی از ابزارهای مانیتورینگ است که اطلاعات را از منابع متعددی مانند سرورها، کانتینرها، سیستم‌های ابری، و برنامه‌ها جمع‌آوری می‌کند و امکان تجزیه و تحلیل آنها را فراهم می‌کند.ابزار پرومتئوس معمولا به همراه Kubernetesاستفاده می‌شود. [27, 28]Static Code Analysis (such as SonarQube)این روش تحلیل برنامه که زیرشاخه‌ از white box testing است زیرا به کدبرنامه دسترسی داریم و جز اولین مراحل فرآیند CI/CD است به افزایش کیفیت و امینت برنامه کمک می‌کند. این ابزارها به توسعه دهندگان کمک می‌کند تا بدون نیاز به اجرای کد خطاهای اشتباهات نحوی و سینتکسی آن را پیدا کنند. مواردی مانند استفاده اشتباه از متغیرها، تعریف نادرست توابع و ...اما از عیب های این روش می‌توان به وجود موارد مثبت و منفی کاذب اشاره نمود.SonarQube یکی از ابزارهای معروف  تحلیل ایستای کد است که قابلیت تحیلیل برنامه نوشته شده به زبان‌های مختلف و بررسی کیفیت کد، تست‌ها، باگ‌ها و آسیب‌پذیری‌های امنیتی  را دارد. [29, 30]1- Microservices Killer: Modular Monolithic Architecture | by Mehmet Ozkaya | Design Microservices Architecture with Patterns &amp;amp; Principles | Medium2 - Modular Monolithic vs. Microservices (fullstacklabs.co)3 - What is AWS (amazon.com)4 - Overview of Amazon Web Services - Overview of Amazon Web Services5 - Understanding the API-First Approach to Building Products (swagger.io)6 - What is API-first? The API-first Approach Explained | Postman7 - What Is NoSQL? NoSQL Databases Explained | MongoDB8 - What is NoSQL? | Nonrelational Databases, Flexible Schema Data Models | AWS (amazon.com)9 - Serverless Architectures (amazon.com)10 - Serverless Architecture: What It Is &amp;amp; How It Works | Datadog (datadoghq.com)11 - Best Practice - An Introduction To Domain-Driven Design | Microsoft Learn12 - معرفی معماریDomain Driven Design (sokanacademy.com)13 - Hexagonal Architecture, there are always two sides to every story | by Pablo Martinez | SSENSE-TECH | Medium14 - Hexagonal architecture – overview and best practices (tsh.io)15 - Event sourcing (microservices.io)16 - Event Sourcing pattern - Azure Architecture Center | Microsoft Learn17 - outsystems.com/guide/low-code/18 - What is Low-Code Development? | Mendix19 - Business process management - Wikipedia20 - What is business process management software? (techtarget.com)21 - Apache Kafka Vs RabbitMQ: Main Differences You Should Know (simplilearn.com)22 - RabbitMQ vs Kafka - Difference Between Message Queue Systems - AWS (amazon.com)23 - Beginner’s Guide to Containers and Orchestration (pluralsight.com)24 - What is container orchestration? (redhat.com)25 - Log Management Tools(such as ELK) - ویرگول (virgool.io)26 - What Is ELK Stack: Tutorial on How to Use It for Log Management - Sematext27 - BrowserStack Test Observability28 - Remote Hands, server support and monitoring – CloudSolution (solutions-cloud.net)29 - Static + Dynamic Code Analysis with SonarQube | by Sandeep Kumar | Medium30 - SonarQube — Static Code Analysis. Code quality is important for overall… | by Nikhil karkra | Code To Express | Medium</description>
                <category>آرمان آذرنیک</category>
                <author>آرمان آذرنیک</author>
                <pubDate>Fri, 24 Nov 2023 16:40:23 +0330</pubDate>
            </item>
                    <item>
                <title>خلاصه فصل های ۱۵ تا ۳۴ کتاب معماری تمیز اثر رابرت مارتین (عمو باب)</title>
                <link>https://virgool.io/@armanazarnik/%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%D9%81%D8%B5%D9%84-%D9%87%D8%A7%DB%8C-%DB%B1%DB%B5-%D8%AA%D8%A7-%DB%B3%DB%B4-%DA%A9%D8%AA%D8%A7%D8%A8-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-%D8%AA%D9%85%DB%8C%D8%B2-%D8%A7%D8%AB%D8%B1-%D8%B1%D8%A7%D8%A8%D8%B1%D8%AA-%D9%85%D8%A7%D8%B1%D8%AA%DB%8C%D9%86-%D8%B9%D9%85%D9%88-%D8%A8%D8%A7%D8%A8-yzlil96wcpyu</link>
                <description>معمار نرم‌افزار یک برنامه نویس بوده و هیچ وقت ارتباط خود با کد و کدنویسی را قطع نمی‌کند  تا نتایج و تاثیرات تصمیمات خود در سطح معماری را در سطح پیاده‌سازی مشاهده کند. معماری نرم‌افزار ترکیب بندی، شکل دهی و ایجاد ارتباطات بین اجزاست به نحوی که توسعه، استقرار، هزینه‌ نگه‌داری نرم‌افزار و بهره‌وری توسعه دهندگان را با حداکثر کردن انتخاب‌ها و راه‌حل‌های قابل اتخاذ برای آینده بهبود دهد. معماری باید کمک کند تا تیم‌های مختلف حدالامکان بدون نیاز به دخالت در کار یک دیگر کار‌های خود را انجام دهند. درست کار کردن برنامه هرچند حیاتی است اما نسبت به قابل تغییر و نگه‌داری بودن در اولیت پایین‌تری قرار می‌گیرد.تیم‌های کوچک توسعه (۵ نفره و کمتر) معمولا زمان گذاشتن برای معماری را در اوایل توسعه کاری بیهوده و وقت گیر می‌دانند زیرا در ابتدای توسعه همه چیز به راحتی و سرعت و بدون مشکل به پیش می‌رود. تیم‌های بزرگ توسعه‌ (مثلا ۵ تیم ۷ نفره) نیز بدون داشتن یک معماری خوب نباید کار خود را شروع کنند زیرا احتمال زیاد هر تیم متناسب با کامپوننت تحت توسعه‌ی خود یک معماری را انتخاب کرده و نهایتا منجر به ۵ معماری مختلف غیرقابل سازگار با یکدیگر خواهد شد که توسعه و نگه‌داری سیستم را دشوار و پیچیده می‌کند.هرچند استفاده از معماری میکرو سرویس در ابتدا یک تصمیم معماری مناسب به نظر می‌رسد اما با گذشت زمان رفته رفته به دلیل نیاز به ایجاد همکاری و ارتباط بین سرویس‌ها و مدیریت آن‌ها و خطاها این تصمیم چالش برانگیز خواهد شد. عملیات را می‌توان هم کارایی در سخت‌افزار در نظر گرفت که در صورت مناسب بودن معماری با افزایش منابع مشکلات آن را برطرف کرد و هم فهم کاری که نرم‌افزار انجام می‌دهد.نگه‌داری یک سیستم نرم‌افزاری بیشترین هزینه را دارد که شامل دو بخش غارشناسی (بررسی نرم‌افزار موجود برای کشف باگ‌ها یا افزودن ویژگی جدید) و ریسک (افزایش ریسک احتمال اضافه کردن باگ در زمان تصحیح باگ قبلی یا اضافه کردن ویژگی جدید با پیچیده‌تر شدن نرم‌افزار) است. در یک سطح بالا، یک سیستم نرم‌افزاری را می‌توان به دو بخش سیاست‌ها (قوانین کسب‌و‌کار و فرآیند‌ها) و جزییات (مواردی که لازم است انسان‌ها و دیگر سیستم‌ها با سیاست‌ها ارتباط برقرار کنند اما هرگز آن‌ را تحت تاثیر قرار ندهند) دسته‌بندی نمود.  بر این اساس هدف معماری نرم‌افزار را می‌توان شکل دهی نرم‌افزار به نوعی دانست که سیاست‌ها بخش اصلی آن را تشکیل داده ولی جزییات را از آن جدا کند.برای جزییاتی که اهمیت زیادی ندارند بهتر است تصمیمی در ابتدا گرفته نشود تا به مرور زمان با آگاهی بهتری تصمیمات بهتر گرفته شده و حالات مختلف برای بهترین عملکرد امتحان شوند. مانند نوع پایگاه‌داده‌ها، زبان جستوجوی کوئری، نوع وب سرور. حتی اگر شرکتی قبلا این جزییات را مشخص کرده باشد و یک معمار خوب استخدام کند، او بدون توجه به این جزییات معماری را انجام داده و این کار او برنامه را مستقل از سکو و دستگاه خواهد کرد.نرم‌افزار را می‌توان به صورت لایه‌های عمودی (کاری که سیستم انجام می‌دهد و موارد کاربری که برای دلایل مختلف تغییر می‌کنند و باید از تاثیر گرفتن از هم مصون باشند) و افقی (برای اهداف عملکردی داخل کد) نیز بررسی کرد. جداسازی افقی به تیم‌های مختلف اجازه‌ می‌دهد تا روی بخش‌های مختلف بدون تاثیر گزاری بر روی کار یکدیگر کار کنند.دو نوع مضاعف شدن در نرم‌افزار وجود دارد، نوع واقعی (بد) که در آن یک کد یا منطق دقیقا در مکان‌های مختلف تکرار شده و با هر نیاز به تغییر باید همه‌ی آن‌ها را تغییر دهیم. نوع دیگر مضاعف شدن نادرست (اتفاقی) است که دو کد به ظاهر یکسان به صورت موازی تکامل یافته و هر یک به دلایل متفاوتی تغییر خواهند کرد. این مضاعف شدن اتفاقی می‌تواند هم در لایه‌های عمودی باشد هم در لایه های افقی. جداسازی حالت‌ها که با تغییر روش ارتباط بین کامپوننت‌ّها رخ می‌دهد نیز می‌تواند در سه سطح منبع (کل کد در یک فایل قابل اجرا بوده و اتباط از طریق صدا زدن مستقیم توابع است)، توسعه (برخی کامپوننت‌ها توزیع شده و با صدا زدن مستقیم تابع و یا به صورت مستقل با سوکت یا حافظه‌ی مشترک ارتباط دارند) و سرویس (برخی کامپوننت‌ها روی سرورهای دیگر و یا ماشین‌های مجازی بوده و از طریق نتورک شبکه ارتباط دارند) رخ دهد.کاپلینگ به چیز‌هایی که جزیی از منطق کسب‌وکار و موارد کاربری نیستند (مانند پایگاه‌داده‌ها، وب سرور و فریم‌ورک)باعث دشوار شدن نگه‌داری نرم‌افزار می‌شود. پردازش‌های محلی و سرویس‌ها مرز محسوب می‌شوند در حالیکه نخ ها مرز محسوب نمی‌شوند و پرداز‌ش‌های سطح بالا نباید شامل نام آدرس فیزیکی پرداز‌ش‌های سطح پایین باشند بلکه پردازش‌های سطح پایین باید به عنوان افزونه برای سطح‌ بالاها عمل کنند. طبق یک تعریف ساده سطح کامپوننت حداقل تعداد گام‌های لازم برای رسیدن از یک ورودی به خروجی است و در سطوح بالاتر با نرخ کمتری ولی به دلایل مهم تری تغییر می‌کنند در حالیکه سطوح پایین‌تر با نرخ بیشتری و به دلایل کم‌اهمیت تری تغییر می‌کنند.طبق یک تعریف ساده، یک قانون کسب و کار روندی است که به ذخیره‌سازی یا ایجاد سود مالی منجر شود. روندهایی که حتی درصورت خودکارسازی نشدن هم به صورت دستی انجام می‌شوند روندهای حیاتی کسب و کار هستند و این روندها با داده‌هایی کار می کنند که حتی در صورت خودکارسازی نشدن هم وجود دارند و داد‌های حیاتی نام دارند. موجودیت (قوانین مستقل کسب و کار)شیئی  در نرم‌افزار است که ارائه دهنده‌ی تجمیعی از روندهای حیاتی که روی داده‌های حیاتی اعمال انجام می‌دهند می‌باشد که در زبا‌ن‌های شی‌گرا موجودیت‌ها می‌توانند کلاس باشند و در زبان‌های غیر شی‌گرا ساختاری که داد‌ه‌ها را به رفتار مرتبط سازد.موارد کاربری (قوانین کسب و کار صریح و دقیق) قوانین کسب و کاری هستند که با تعریف روش خودکارسازی عملیات‌های سیستم باعث خلق سرمایه می‌شوند و در صورتی که کسب وکار دستی باشد وجود نخواهند داشت. موارد کاربری ورودی، گام‌های پردازش و خروجی را مشخص می‌کنند (احضار موجودیت‌ها). موجودیت‌ها نسبت‌ به مواردکاربری در سطح بالاتری بوده و به آن‌ها وابستگی ندارند.در یک معماری تمیز سطح‌ها از بالاترین سطح به پایین بدین شکل هستند: موجودیت‌ها(قوانین تجاری کسب و کار)، موارد کاربری(قوانین کاربردی کسب و کار)، آاپتورهای واسط کاربری مانند درگاه ها و کنترلرها و پرزنترها، فریمورک‌ها و درایورها مانند دیتابیس و دستگاه‌ها و ui و وب. هیچ چیزی در یک سطح نباید چیزی درمورد سطوح پایین‌تر بداند و به آن وابسته باشد.داده‌ها که می‌توانند بین این سطح‌ها حرکت کنند باید برای بالاترین سطح مناسب باشند.مواردی که استفاده از معماری تمیز توصیه می‌شود: پروژه‌ّای بلند مدتی که باید با تکنولوژی‌های جدید سازگار شوند، پروژه‌ّایی که باید دستگا‌های ورودی خروجی مختلف را ساپورت کنند، پروژه‌هایی که توسط تیم‌های مختلف توسعه می‌یابد،‌ وقتی که احتمال دهیم که در آینده باید حالت decopling  خود را عوض کنیم، وقتی که مسئله پیچیدگی ذاتی زیادی دارد، وقتی که احتمال تغییرات زیادی را داریم، وقتی که احتمال اشتباه کردن زیاد باشد.مواردی که استفاده از معماری تمیز توصیه نمی‌شود: مواردی که سیستم فقط عملیات ساده‌ی CRUD دارد، وقتی پیچیدگی ذاتی مسئله کم است، وقتی که پروژه همیشه توسط یک تیم کوچک توسعه داده خواهد شد، وقتی که سیستم پس از توسعه و انتشار تغییرات کمی خواهد داشت، وقتی که تیم به حد کافی مهارت نداشته یا برای استفاده از معماری تمیز به حد کافی قانع نشده‌اند.مرزبندی جزیی که به ما اجازه‌ی کاهش پیچیگی را می‌دهد اما همچنان می‌توان آن را محدودتر کرد سه نوع دارد:‍۱- استفاده از حالت دیکاپلینگ در سطح منبع: کمترین محدودیت را دارد.۲ – واسط‌های کاربری گروهی یا پیاده‌سازی‌ها۳ – کاهش بار شناختی با پیاده سازی نمادر معماری تمیز کلاس main خارجی ترین لایه و سطح پایین ترین پلاگین ‌است.معماری‌های سرویس‌گرا و میکروسرویسی به دو دلیل به تازگی محبوبیت بالایی یافته‌اند: ۱ – سرویس‌ها کاملا از یکدیگر جدا و ایزوله هستند ۲ – سرویس‌ها اجازه‌ی توسعه و استقرار مستقل را می‌دهند.نرم افزار‌های تعبیه شده مغمولا به دلیل وابستگی به سخت افزار، یک نرم افزار با طول عمر طولانی در نظر گرفته نمی‌شوند. سیستم عامل به دلیل درهم تنیدگی با سخت افزار، باید در صورت تغییر سخت افزار تغییر کند.یک عرف خوب برای ساخت نرم‌افزار آنست که ۱-ابتدا برنامه‌ای بسازید که کار کند، سپس ۲- آن را بهتر و قابل فهم تر کنید و سپس ۳- آن را سریع تر کنید.در نرم‌افزارهای تعبیه شده گام دوم معمولا انجام نمی‌شود. در این نرم‌افزارها مدیریت حافظه به دلیل محدودیت آن، واکنش بلادرنگ، ورودی‌و خروجی‌ّهای محدود، واسط‌های کاربری غیر متعارف، حسگر‌ها و ارتباط با دنیای واقعی اهمیت دارد.فصل های ۳۰ تا ۳۴پایگا‌ه داده‌ها جزییات نرم‌افزار محسوب شده و جزیی از مجودیت‌ها محسوب می‌شود. هرچند کار با پایگاه‌داده های رابطه‌ای و ذخیره سازی و بازیابی داده‌ها از آن‌ها راحت است اما به لحاظ معماری نرم‌افزار هیچ مزیت بزرگی نسبت به دیگر نوع ‌های پایگاه داده از نظر سامان دهی داده‌ها ندارند.موارد کاربری نباید به نوع ذخیره سازی داده‌ها وابستگی داشته باشند و ساختار جدول‌ها نیز باید از لایه‌ها و درگاه‌های ارتباطی پنهان بماند، هرچند کتابخانه‌هایی وجود دارند که می‌توانند خود جدول‌ها را انتقال دهند اما اصلا چنین کاری توصیه نمی‌شود.بسته به متمرکز بودن (صفحات رندر شده از سرور) یا توزیع شده بودن (اپ های فرانت اند) وب ، معماران سعی در جلوگیری از تاثیر این نوسان بر منطق کسب و کار دارند. وب نوعی واسط کاربری گرافیکی است و واسط‌های کاربری گرافیکی جزییات هستند پس باید از تاثیر وب بر منطق کسب و کار جلوگیری کرد. در برنامه‌هایی که بخش فرانت تبادل زیادی با سرور دارد شاید این کار سخت باشد بنابراین یه راه کارآمد در نظرگرفتن تعملات بخش برنامه و واسط کاربری گرافیکی به دو صورت زیر است:１- تعاملات کوچک و ثابتی که مجموعه ورودی ها را ساخته و برای شروع یک موردکاربری ضروری هستند.２- تعملات حیاتی کسب و کار که پس از رسیدن ورودی‌ها به مواردکاربری اتفاق افتاده و نتایج پردازش آن‌ها به به صورت خروجی به واسط گرافیکی کاربر برمی‌گردند.چهارچوب‌ها نیز در عین قدرت و کارآمدی بخشی از جزییات و نه معماری هستند و نباید به آن ها وابسته شد زیرا آن‌ها نیز تغییر می‌کنند و توسعه دهندگان چهارچوب‌ها تغییرات خود را متناسب با نیازهای شخصی برنامه‌ی مورد استفاده‌ی ما انجام نخواهند داد و در آینده، باید احتمال ایجاد ناسازگاری‌ با برنامه‌ی خود را داشته باشیم. استفاده از چهارچوب‌ها معمولا ما را وابسته به آن‌ها خواهد نمود و در صورتی که نسخه‌ی جدید چهارچوب متناسب با نیاز‌های برنامه‌ی ما نباشد، تغییر برنامه به نحوی که دیگر به این چهارچوب‌ها وابسته نباشیم بسیار سخت و پیچیده خواهد بود برای همین در صورت نیاز به چهارچوب‌ها بهتر است از آن‌ها با پروکسی و پالاگین به منطق اصلی کسب و کار استفاده شود و نه به صورت مستقیم.کتابخانه‌های زبان های برنامه نویسی مانند چهارچوب‌ها نبوده و با اطمینان بیشتری می‌توانیم به‌ آن‌ها تکیه کنیم.اما جدای از معماری، افراد نیز به چند صورت می‌توانند کد خود را سازماندهی کنند:۱ – بسته بندی لایه‌ها: جداسازی کد از جنبه های تکنیکی مانند کنتلر، ویو و مدل که نوعی لایه‌بندی افقی است.مثلا در جاوا لایه‌ها پکیج‌ها هستند.۲ – بسته‌بندی ویژگی‌ها: تکه کردن عمودی بخش‌ها و ویژگی‌ها و مفاهیم که برای تغییر یک ویژگی راحت‌تر خواهیم بود.۳ – پورت‌ها و آداپتور‌ها: تمامی موارد جز منطق و قوانین کسب و کار داخلی و سایر جزییات و زیرساخت‌ها را خارجی می‌دانیم.مواردی که مستقل از پیاده سازی تکنیکی هستند مانند چهارچوب‌ها و پایگاه داده داخلی، و چیز‌های که به داخلی‌ها وابسته‌اند را خارجی می‌دانیم.</description>
                <category>آرمان آذرنیک</category>
                <author>آرمان آذرنیک</author>
                <pubDate>Thu, 19 Oct 2023 17:06:21 +0330</pubDate>
            </item>
                    <item>
                <title>تشخیص پولشویی در رمزارزها به کمک تحلیل شبکه تراکنش ها</title>
                <link>https://virgool.io/@armanazarnik/aml-gjf6twnzuiik</link>
                <description>نویسنده: آرمان آذرنیک چکیدهرمزارزها که امروزه با حذف واسطه در انتقال پول به رقیبی قدر برای بانک ها تبدیل شده اند به دلیل ناشناس بودن و سختی یا در برخی موارد غیرممکن بودن ردیابی به ارز ایده آل برای بازارهای سیاه تبدیل شده ا ند. گسترش روزافزون مقبولیت آنها از سوی جوامع و راحت تر شدن خرج کردن دلیل دیگری برای محبوبیت رمزارزها در میان مجرمان است. یکی از موارد پر استفاده از رمزارزها برای پولشویی و فرار مالیاتی بوده و اکثر دولت ها و نهادهای بین المللی شدیدا به دنبال راهکارهایی برای شناسایی این دست موارد هستند. امروزه که پولشویی به روش های سنتی انجام نمی شود، روش های سنتی نیز برای کشف آن ناکارآمد بوده و ساخت گراف تراکنش ها و استفاده از روش های یادگیری ماشین در کندوکاو ویژگی های این گراف ها به بهترین راه حل تشخیص این موارد بدل گردیده است.  پژوهش های مختلفی در دهه اخیر در این خصوص صورت گرفته و محققان روش های مختلفی برای تشخیص پولشویی با استفاده از یادگیری ماشین ارائه کرده و با انجام مقایسه، کارایی این روش ها را به اثبات رسانده اند. در این گزارش به بررسی برخی از پژوهش ها در حوزه ی پولشویی و کلاهبرداری پرداخته و خط مشی برای کارهای آینده ترسیم می کنیم.واژگان کلیدی: رمزارز، پولشویی،علم شبکه، یادگیری ماشینمقدمهپس از فروپاشی افتصادی بانک‌های آمریکا در سال ۲۰۰۸ و خارج کردن سرمایه‌ها از بانک، بی اعتمادی به نظام پولی بیشتر شده و افراد به دنبال راهکارهای جایگزین برای نگهداری و انتقال پو های خود گشتند . با توجه به پدیده نوظهور شبکه جهانی اینترنت ، رمزارزها به دلیل امنیت بالا، تمرکز زدای و تحت کنترل فرد و نهاد و کشورها نبودن محبوبیت بالابی یافته و ارزش و استفاده از آن ها به طور میانگین همواره افزایشی بوده است. اما ماند هر فناوری دیگر، بشر به دنبال سو استفاده از رمزارزها نیز بوده چه بسا افرادی که به دنبال شکستن امنیت رمزارزها، استفاده از آن ها برای موارد غیر قانونی و غیر اخالاقی ماند قاچاق، مواد مخدر، پولشویی و تقلب بوده‌اند. با توجه به اهمیت این موضوع، جلوگیری و تشخیص این موارد نیز اهمیتی دو چندان یافته و پژوهش‌های بسیاری در سراسر دنیا برای جلوگیری و تشخیص این سو استفاده‌ها انجام شده و در حال انجام است.تبهکاران اکثرا اعمال مغایر قانون خود را با اهداف مالی همراه کرده و یا حداقل نیازمندی های مالی (مانند اعمال تروریسمی) دارند. قاچاقچیان، دزدان و سایر قانون شکنان، همگی نیاز یه خرج کردن پول کثیف خود داشته و در صورتی که قادر به انجام آن نباشند انگیزه اصلی ارتکاب جرم را از دست می دهند، بنابراین تشخیص و مبارزه با پولشویی اهمیتی دو چندان می یابد.با توجه به اینکه شبکه تراکنش‌های رمزارزها و صاحبان حساب ها قابلیت مدل سازی به صورت ‌شبکه‌های پیچیده پویا را دارند، شناخت و تحلیل این شبکه ها کمک بسیاری به شناسایی متقلبان می‌کند.ادبیات موضوعپولشویی پولشویی که از زمان های اسکناس های کاغذی وجود داشته، تکنیکی است که مختص به مجرمان بوده و آن ها با کمک این تکنیک، پولی که از راه های غیرقانونی (قاچاق مواد مخدر، فعالیت های تروریستی، قاچاق کالا، کلاهبرداری، دزدی و...) به دست می آورند را به شیوه ای قانونی به بدنه اقتصادی تزریق می کنند و به این ترتیب حجم عظیم پول های نقد را در جریان روند قانونی بانکی وارد نموده تا از پول نامشروع خود استفاده کنند. این عمل مجرمانه، تقریبأ در تمام کشورهای دنیا اتفاق می افتد و معمولأ پول، بین چند کشور جا به جا خواهد شد.  با توجه به این نکته که در این فرآیند پول کثیفی که از راه های غیرقانونی به دست آمده به پول تمیز تبدیل می شود، در اصطلاح به آن پولشویی می گویند.  بر اساس تعریف وزارتخانه خزانه داری آمریکا[۱]، پولشویی به عمل پنهان و یا تبدیل کردن دارایی های مالی به قسمی گفته می شود که بتوان از آن ها استفاده کرد بدون آنکه فعالیت غیر قانونی که باعث تولید آن ها شده است قابل تشخیص باشد.مراحل تبدیل پول کثیف به تمیز به شرح زیر است:تزریق پولبا توجه به این نکته که بانک ها موظفند تا تراکنش های با مبلغ بالا را گزارش دهند، مرحله تزریق پول، معمولأ پرخطرترین مرحله پول شویی به حساب می آید. در این مرحله، پول کثیف به شکل سپرده های نقدی بانکی، وارد یک مؤسسه مالی قانونی می شود. البته خلافکاران برای وارد کردن اولیه پول به حساب های بانکی، از روش های مختلفی استفاده می کنند تا به این ترتیب، نیاز به ارایه گزارش برای پول ها را نداشته باشند. از جمله این روش ها می توان به کوچک و خرد کردن تراکنش های واریزی اشاره کرد.لایه بندیلایه بندی، پیچیده ترین مرحله است و در صورتی که موفقیت آمیز باشد، گرفتن رد پول کثیف، تقریبأ غیرممکن خواهد بود. در این مرحله، برای تغییر ماهیت پول های کثیف، آن ها را از طریق تراکنش های مختلف مالی به حساب های مختلف ارسال می کنند و به این ترتیب، پیگیری آن ها دشوار می شود. لایه بندی از طریق چندین تراکنش بانک به بانک در کشورهای مختلف، امکان پذیر است و به واسطه آن، ماهیت وجه پولی که در حساب های مختلف است تغییر می کند.ادغام و یکپارچه سازیدر مرحله ادغام، پول کثیف وارد چرخه عادی اقتصاد می شود و به نظر می رسد که از یک منبع قانونی به دست آمده است. به این ترتیب که در این مرحله، سرمایه گذاری هایی که در بخش لایه بندی انجام شده بود، به پول نقد تبدیل می شود و مجرم بدون آن که درگیر قانون شود می تواند از پول شسته شده استفاده کند.مراحل پول‌شوییفناوری زنجیره بلوکیفناوری زنجیره بلوکی را شاید بتوان یکی از مهم ترین ابداعات بشر در دهه های اخیر و به لحاظ کاربرد و منظر انقلابی بودن هم سطح با اینترنت دانست. برای درک چیستی این فناوری بهتر است از واژه شناسی آن شروع کنیم که به معنی زنجیره ای متصل از بلاک هایی است که اطلاعات در آن ها ثبت می شوند. زنجیره بلوکی را می توان یک پایگاه داده ی توزیع شده در نظر گرفت که بین گره های یک شبکه ی رایانه ای به اشتراک گذاشته می شوند. اهمیت این فناوری در غیرقابل دستکاری و امن بودن اطلاعات ذخیره شده در آن است.این فناوری کاربردهای بسیاری دارد از جمله:خدمات مالی: زنجیره بلوکی به ثبت تراکنش های مالی و اطمینان از عدم دستکاری آن ها کمک می کند.بهداشت و درمان: برای ثبت اطلاعات بیماران در بلاک ها از فناری زنجیره بلوکی استفاده می شود.حکمرانی: در زمینه هایی مانند رای دهی و جلوگیری از تقلب در انتخابات از این فناوری استفاده می شود.کاربردهای فناوری زنجیره بلوکیکاربردهای فناوری زنجیره بلوکی در خدمات مالیشاید بتوان این حوزه را مهم ترین کاربرد فناوری زنجیره بلوکی دانست زیرا همانگونه که پیشتر ذکر شد، اطمینان از عدم دستکاری اطلاعات مهمترین ویژگی این فناوری بوده و از طرفی حوزه های مالی نیز بیشترین انگیزه را برای این دستکاری ایجاد می کنند، پس به نوعی این فناوری یکی از بهترین استفاده های خود را در این حوزه خواهد داشت. از کاربردهای این فناوری در این حوزه می توان به موارد زیر اشاره نمود:رمزارزها: رمزارزها، ارزهای دیجیتال رمزنگاری شده ای هستند که برای معاملات از آن ها استفاده شده و هرروزه در حال گسترش هستند.کیف پول دیجیتال: کیف پول های دیجیتال الزاما برای حوزه مالی نبوده ولی کاربرد اصلی آن ها در نگه داری موجودی رمزارزها و انجام تراکنش هاست.امور وراثت: در این سری مواردی که خود فرد احتمال عدم پایبندی به وصیت را پس از فوت خود می دهد، از این فناوری و قرارداد هوشمند استفاده می شود.وام و اعتبار: برای ثبت وام و اطمینان از بازپرداخت آن ها، اطلاعات آن در یک بلاک به صورت قرارداد هوشمند ثبت می شود.حسابداری: برای جلوگیری از دستکاری حساب ها و تراکنش ها خصوصا برای مبحث مالیات، ثبت آن ها در بلاک یک روش پرکاربرد است.رمزارزرمزارز ها را شاید بتوان محبوب ترین و پرکاربردترین استفاده ی فناوری زنجیره بلوکی دانست. از سال ۲۰۰۹ و پس از انتشار مقاله سفید بیت کوین۱ توسط خالق آن ساتوشی ناکاموتو[۲]، حوزه ی رمزارزها به شدت رواج یافته و هر ساله رمزارزهای جدیدی توسط افراد و نهادها معرفی می شوند. رمز ارز یا ارز رمزنگاری شده یک نوع ارز دیجیتال است که به وسیله فناوری رمزنگاری امنیت آن تضمین می شود.رمزارز نوعی ارز دیجیتال است که امکان انتقال ارزش در محیط دیجیتال را برای افراد فراهم می کند. رمز ارز نوعی ارز دیجیتال است. خیلی از افراد این دو مفهوم را به جای هم استفاده می کنند. این در حالی است که رمزارزها فقط یک دسته از ارزهای دیجیتال را شکل می دهند. ارز دیجیتال شکلی از پول است که فقط در فضای دیجیتال و الکترونیک وجود دارد. برای استفاده از ارزهای دیجیتال در معاملات باید از کامپیوتر یا کیف پول متصل به اینترنت استفاده کنید.یادگیری ماشینمفهوم یادگیری ماشین به عنوان یکی از زیرشاخه های هوش مصنوعی که در آن سعی بر آموختن به ماشین(رایانه) بدون برنامه نویسی صریح و از طریق مثال هایی است که به آن داده مي شود، بیش از ۶۰ سال پیش مطرح شده است. اما اکنون به دلیل پیشرفت بسیار زیاد قدرت محاسباتی رایانه ها و روش های حل مسائل و الگوریتم ها و خصوصا افزایش سرعت و حجم تولید داده ها که رکن اصلی و ورودی یادگیری ماشین است؛ بسیار مورد توجه قرار گرفته است.انواع روش های یادگیری ماشین را می توان در چهار دسته جای داد:انواع یادگیری ماشینیادگیری نظارت شدهداده هایی برچسب گذاری شده به عنوان ورودی به ماشین داده شده و خروجی نیز مشخص می گردد؛ ماشین الگوی رسیدن از ورودی به خروجی را یاد می گیرد. مانند تشخیص هرزنامه های الکترونیکی و سایر نامه های الکترونیکی؛ که تعداد بسیار زیادی نامه الکترونیکی از قبل آماده شده با برچسب های هرزنامه و غیرهرزنامه به ماشین داده می شود تا خود ماشین به دنبال ویژگی های مشترک آن دسته ها گشته و در آینده بتواند نامه های الکترونیکی را که از قبل برچسب گذاری نشده اند را در یکی از این دو دسته جای دهد. یادگیری نظارت شده قابل تقسیم به دو دسته کلی، دسته بندی و رگرسیون است.یادگیری نظارت نشدهداده ها بدون برچسب گذاری یا دسته بندی به ماشین داده شده و هدف دسته بندی داده های ورودی براساس شباهت ها و تفاوت ها و تشخیص الگو بین آن هاست. مثلا تعداد بسیار زیادی تصویر سیب و پرتقال برچسب گذاری نشده به ماشین داده شده و ماشین شباهت و تفاوت های آن ها را یافته و آن ها را در دو دسته جدا قرار می دهد بدون آنکه هیچ تصوری از مفهوم سیب و یا پرتقال داشته باشد. یادگیری نظارت شده قابل تقسیم به دو دسته کلی، قوانین انجمنی و خوشه بندی است.یادگیری تقویتیاین نوع یادگیری با تشویق رفتار مطلوب و تنبیه رفتار نامطلوب انجام می شود؛ ماشین با بازخوردهایی که از اعمال خود می گیرد به صورت آزمون و خطا مسائل مختلف را درک و تفسیر می کند؛ هدف ماشین به حداکثر رساند پاداش است و برچسب گذاری در این روش وجود ندارد. این روش در بازی های رایانه ای بسیار استفاده می شود و همان روشی است که باعث برد رایانه در بازی شطرنج در برابر انسان می شود.کارهای مرتبطکولادون و همکاران [۳] برای تحلیل پولشویی در شبکه ی افراد،از داده های واقعی جمع آوری شده ی یک کارخانه در ایتالیا در طول ۱۹ ماه استفاده کرده و به کمک علم شبکه، به تحلیل پولشویی در آن شبکه پرداختند.آن ها ابتدا داده های خود را به صورت مدلی از تراکنش ها، افراد و عملیات های کسب و کار درآورده و در آخر صحت کار خود را با کمک دادگاه های ایتالیا و بررسی پرونده برخی افراد آن کارخانه آزمودند. در این کارخانه، صورتحساب برای خدماتی که انجام نشده یا کالاهایی که فروخته یا خریداری نشده بودند صادر می شد.   پولشویی در کارخانه ایتالیاییطبق یافته های آن ها، افراد مجرم معمولا سریع وارد شبکه شده، ارتباط سازی لازم خود را با افراد مهم شبکه انجام داده و سریع از شبکه خارج می شوند بنابراین افراد و کسب و کارهای تازه وارد و افرادی که به تازگی از شبکه خارج شده اند مشکوک به پولشویی هستند. طبق تحلیل های آن ها، مواردی که اطلاعات ناقص دارند نیز با احتمال بالاتری درگیر پولشویی هستند. همچنین آن ها با مقایسه ی شبکه ی خود و ویژگی های آن با چندین شبکه ی دچار پولشویی دیگر دریافتند که استخراج این ویژگی ها و مقایسه ی آن ها با یکدیگر در شبکه های مالی، به تشخیص زودهنگام پولشویی در شبکه ی جدید کمک می کند.ترتیچنی و همکاران [۴] برای تشخیص پولشویی در شبکه ها، با علم به ناکامل بودن اطلاعات گره ها و یال ها در اکثر شبکه ها، تشخیص مخاطره بر اساس رفتار جمعی یک گروه را پیشنهاد کرده و روش خود را با داده هایی که از سه حوزه قضایی مختلف دریافت کرده بودند آزمایش کردند.آنان ابتدا داده های خود را جمع آوری نموده و مدلی به شکل گراف از تراکنش ها ساختند. سپس از الگوریتم غیرنظارت شده ی تشخیص انجمن استفاده کردند تا گروه ها را در شبکه ی تراکنش های خود بیابند، سپس از گروه ها ویژگی هایی استخراج کرده و آن ها را همراه با ویژگی های قبلی که در تراکنش ها موجود بود، به الگوریتم غیرنظارت شده داده تا خوشه ی ناهنجار را تشخیص داده و نهایتا یک متخصص پولشویی، داده های ناهنجار را برای اطمینان بررسی می کند.روش ترتینچیبرای تشخیص انجمن ها و برچسب گذاری آن ها از الگوریتم نیمه نظارت شده ی انتشار برچسب استفاده نموده و برای تشخیص ناهنجاری ابتدا از الگوریتم ماشین بردار پشتیبان استفاده نمودند که آن را با توجه به حجم بالای داده ها بسیار کند دانسته، سپس به سراغ الگوریتم غیرنظارت شده ی عامل دور افتاده محلی برای تشخیص ناهنجاری رفتند که آن هم علاوه بر مناسب نبودن برای چنین داده هایی، کارایی پایینی داشت و نهایتا از الگوریتم جنگل ایزوله بدین منظور استفاده کردند. ترتینچی با مقایسه ی روش خود با دیگر روش ها در زمانی که اطلاعات شبکه ناقص باشد نتیجه مطلوبی را دریافت کرده است.ژو و همکاران[۵] با تحلیل ابربرنامه ی چینی Tecent QQ به بررسی پولشویی با استفاده از ارز مخصوص این برنامه یعنی Q پرداختند. این ابربرنامه چینی با بیش از ۸۶۰میلیون کاربر، یکی از محبوب ترین برنامه ها بوده و قابلیت گفتوگو، بازی، تماشای فیلم و گوش دادن به موسیقی و ... را دارد. ارز این برنامه توسط مجرمان با قیمتی بسیار پایین یا حتی رایگان و یا حتی با دخل و تصرف حساب دیگران جمع آوری شده و برای مشکوک نشدن صاحب برنامه در حساب های زیادی نگه داری شده، سپس مجرم در پایگاه های اینترنتی مختلفی مانند Ebay فروش آن ها را با تخفیفی بسیار زیاد برای وسوسه کردن خریداران تبلیغ کرده و به فروش می رسانند، سپس ارز فروخته شده را از حساب های مختلف خود به حساب خریدار درون برنامه انتقال می دهد.پولشویی در Teccentمجرم پول کثیف خود را با اختلاف قیمتی که این رمزارز را به دست آورده و قیمت اصلی آن پاک می کند. ژو برای این آزمایش، تبلیغات فروش این ارز را ردیابی نموده و آن را خریداری نموده، سپس حساب هایی که در برنامه از آن ها ارز به حساب خریدار انتقال داده شده را برچسب گذاری کرده و ویژگی های این حساب ها را همراه دیگر حساب های فعال در آن بازه ثبت کرده اند. ویژگی هایی مانند فعالیت های ورود و خروج به حساب کاربری، پرداخت های حساب شامل مقدار، تاریخ، سرویس خریداری شده، نوع پرداخت و تعداد روز های فعال حساب و .. سپس گرافی از حساب های کاربری دریافت کننده و پرداخت کننده این ارز ساخته و با حذف دریافت کنندگان ارز و تبریل گراف اولیه، گراف جدیدی ساخته و تحلیل های علم شبکه و الگوریتم یادگیری ماشین خود را روی آن انجام می دهند.تبدیل گرافآن ها همچنین مطالعه ای روی پولشویی در دنیای واقعی داشته تا رفتارها و الگو های کلیدی آن را پیدا کنند، نهایتا روش خود را روی مجموعه ای از ۴۹۴۴۱۴ داده ی کاربران که ۱۱۴۸۹۱ مورد آن ها مشکو به پولشویی بوده و شامل ۵۶ ویژگی می شدند را با الگوریتم های رگرسون خطی، جنگل تصادفی و ماشین بردار پشتیبان آزموده و با جنگل تصادفی و ماشین بردار پشتیبان بهترین نتیجه را گرفتند.لیما و همکاران[۶] با تاکید بر اهمیت جلوگیری از پولشویی در جلوگیری از خلاف، روش SNA۱ را معرفی کردند تا به حسابرسان قانونی در ردیابی پول ها کمک کنند.آن ها با مصور سازی حرکت پول در یک شبکه.۳ ۶ و شفاف سازی افراد و مسیرهای کلیدی، به بررسی این شبکه با استفاده از علم شبکه پرداخته و نتیجه گرفتند که افراد زیادی پول کمی جابه جا کرده و افراد کمی پول زیادی را جابه جا می کنند.لیما و همکاران نیز تاکید داشتند که شناسایی ویژگی های یک شبکه ی دچار پولشویی و مقایسه ي آن با دیگر نمونه های پیشین به تحلیل بهتر این شبکه کمک می کند.کلاچالا و همکاران [۷] ضمن بررسی برخی چالش ها روش های ایجاد لیست سیاه را نیز مقایسه کرده اند لیست سیاه در رمزارزها، فرآبند تشخیص تراکنش هایی است که در اعمال مجرمانه مانند دزدی و پولشویی دخیل بوده و سکه های آن تراکنش را آلوده کرده اند و جلوی مبادله آن در جای دیگری را می گیرند.این ایده از لیست سیاه وزات خزانه داری آمریکا [۸] الهام برداری شده که در آن، اسامی افراد و شرکت هایی که نباید با آن ها مبادله تجاری داشت منتشر می شود. اما از چالش های آن، بی تاثیر بودن ابزارهای تنبیهی رمزارزهایی مانند بیت کوین است، زیرا هر فرد قادر به ساخت تعداد نامحدودی حساب بوده و در صورت جریمه شدن یک حساب، حساب دیگری می سازد.مشکل دیگر روش لیست سیاه با توجه به فراسزمینی بودن شبکه رمزارزها، فراسرزمینی و متحد شدن سازمان های مختلف از کشورها و حوزه های قضایی مختلف مانند FATF و پلیس بین الملل است. چالش دیگر این روش با توجه به توزیع شده بودن و به طول انجامیدن فرآیند ثبت بلوک ها، آنست که شاید سکه ای ابتدا در لیست سیاه نبوده و کاربر آن را دریافت نماید اما در ادامه با بررسی بیشتر شبکه وارد لیست سیاه شده و کاربر غیر خاطی از این امر متضرر شود، با ایجاد تاخیر در ساخت بلاک ها میتوان اثر این امر را کاهش داد اما دچار مشکلات دیگری خواهیم شد.چالش بعدی تعدد رمزارزهاست که در صورتی که مجرم دارایی خود را به ارزهای مختلف در حساب های مختلف تقسثیم کند، ردیابی آن ها را دشوارتر می کند. مورد دیگر سازمانی است که همه بر روی آن برای ایجاد لیست سیاه توافق داشته باشند که با توجه به کثرت نظرها دشوار است.از چالش های دیگر می توان از خرابکاری عمدی در این حالت یاد کرد که فرد دارای سکه های آلوده با توزیع سریع آن در یک شبکه ی چگال، کل شبکه را آلوده سازد.کلاچا همچنین دو روش زیر مجموعه لیست سیاه یعنی زهر و کوتاهی مو را نیز بررسی کرد، در روش زهر هر سکه ای که در تراکنشی مشکوک بوده نشان گذاری شده و هر تراکنشی که حتی شامل یکی از این سکه ها بشود نیز نشان گذاری خواهد شد.روش کوتاهی مو اینقدر سختگیر نبوده و تنها سکه های انتقال مشکوک را نشان گذاری می کند. طبق نظر کلاچا این لیست سیاه رمزارزها باید به طور عمومی منتشر شود تا با کاهش انگیزه ی افراد به مبادله ی ّ ای خودشان، نهایتا آن سکه ها از دور و استفاده عمومی خارج شده و اقبال مجرمان آن به دلیل لکه دار شدن سکه برای انجام جرم با کاهش انگیزه مالی کاهش پیدا خواهد کرد.گراف پرداختبداوی و همکاران [۹] به شناسایی الگو های تراکنش های قانونی و غیر قانونی پرداخته و با استفاده از روش های نظارت شده ي یادگیری ماشین مانند شبکه های عصبی کم عمق و درخت تصمیم به دستبدی تراکنش ها در سه دسته ي قانونی، غیرقانونی و نامعلوم پرداخته و به ترتیب به دقت ۸۸/۹ و ۹۳/۴ درصدی رسیدند.آن ها آزمایش خود را روی ۲۰۰ هزار داده ی تراکنش با ۱۶۶ ویژگی شامل زمانمهر، کارمزد تراکنش، حداقل و حداکثر و میانگین مبلغ تراکنش هاانجام داده و داده ها را به صورت ۷۵ درصد برای تعیلم، ۱۵ درصد برای آزمون و ۱۰ درصد برای اعتبار سنجی تقسیم بندی کردند.شبکه عصبی بداوی و همکارانآنها ابتدا داده های خود را به صورت گرافی با ۲۰۳۷۶۹ گره نمایشگر افراد و ۲۳۴۳۵۵ یال نمایشگر تراکنش ها مدل سازی کرده و سپس از الگوریتم های یادگیری نظارت شده ی ذکر شده استفاده کردند. شکل.۳ ۸ مدل الگوریتم شبکه عصبی کم عمق ساخته شده برای ساخت دسته بند را نشان می دهد.وبر و همکاران [۱۰] با مجموعه داده ي ELLIPTIC که گرافی از تراکنش های شبکه ی بیت کوین است که در آن گره ها تراکنش ها و یال ها جریان ها تراکنش هستند، برای دسته بندی آن ها به دو دسته ی قانونی و غیر قانونی از روش های یادگیری ماشین نشارت شده ی رگرسیون خطی، پرسپترون چند لایه و جنگل تصادفی استفاده کرده و با تقسیم بندی داده ها به صورت -۷۰ ۳۰ برای تعلیم و آزمودن الگوریتم شبکه گراف کانولوشنال که شبه پرسپترون چند لایه است استفاده کرده و به دقت ۹۰ درصدی رسیدند.عزیز و همکاران [۱۱] برای تشخیص تراکنش های غیر قانونی در شبکه اتریوم از روش LGBM که بر پایه ی درخت تصمیم بوده استفاده کرده و آن را با سایر روش های یادگیری ماشین مقایسه کرده و به کارایی روش خود پی برده اند.داده های آن ها شامل ۹۸۴۱ تراکش قانونی و غیر قانونی با ۱۷ویژگی بوده که به صورت -۸۰ ۲۰ به مجموعه داده های تعلیم و آزمون تقسیم شدند. آن ها روش خود را با رگرسیون خطی، k نزدیک ترین همسایه، پرسپترون چند لایه، جمگل تصادفی، ماشین بردار پشتیبان،ADABoost ، XGBoost مقایسه کرده و روش آن ها با ۹۸/۶ درصد و سپس XGBoost با .۹۷ ۷ درصد دقت (شکل .۳ ۹)بهریت کارایی را داشته و با تغییر برخی آرگمان ها دقت روش خود را تا ۹۹/۰۳ درصد بالا بردند. همچنین روش آن ها با وجود آنکه با تعداد داده های بالا بهتر کار می کند، نیازمند اشغال فضای حافظه ي کمتری است.نتایج کار عزیزبیناگاری و همکاران [۱۲] کاربرد الگوریتم درخت مانند XGBoost را برای تشخیص پولشویی آزمایش کرده و از مجموعه داده ی elliptic به دلیل بزرگی و در دسترس عموم بودن استفاده کرده اند. در این مجموعه داده که به شکل گراف مدل سازی شده، ۲۰۳۷۹۵ گره نمایشگر تراکنش ها و ۲۳۴۳۵۴ یال جهت دار نمایشگر جریان های تراکنش هستند که دارای برچسب قانونی و غیر قانونی بوده و می توان از آن ها در الگوریتم یادگیری ماشین نظارت شده استفاده نمود.۴ داده با برچسب غیرقانونی و ۴۲۰۱۸ داده با برچسب قانونی نشان گذاری شده و سایر داده ها برچسب ندارند. هر تراکنش نیز تا ۱۶۶ ویژگی داشته که شامل مواردی مانند کارمزد تراکنش، مبلغ تراکنش، زمانمهر آن و ... می شود.الراب و همکاران [۱۳] برای شناسایی پولشویی در شبکه ی بیت کوین از روش های یادگیری ماشین نظارت شده روی داده های ellipticاستفاده کرده و برای کاهش تعداد موارد مثبت کاذب تلاش کرده اند.داده‌های Ellipticآن ها ابتدا داده های خود را پیش پردازش کرده و آن را بر اساس زمانمهرها به دو دسته ی تعلیم و آموزش تقسیم بندی کرده اند. الراب برای ارزیابی کار خود از الگوریتم های یادگیری ماشین نظارت شده ی جنگل تصادفی، k نزدیک ترین همسایگی، AdaBoost و Gradient Boosting استفاده کرده و الگوریتم های ماشین بردار پشتیبان و رگرسیون خطی را از ابتدا به دلیل نامتعادل بودن برچسب های مجموعه داده و عدم کارایی کنار گذاشته اند. آن ها روش ترکیبی خود را بهتر از الگوریتم های ذکر شده یافته و به دقت ۹۸/۱۳ درصدی با تنها ۷ مورد مثبت کاذب رسیدند.بهومیک و همکاران [۱۴] با پژوهش بر روی شبکه ی بلاکچین به منظور تشخیص کلاهبرداری، هشت الگوریتم مختلف یادگیری ماشین شامل رگرسیون خطی، پرسپترون چندلایه، درخت تصمیم، ماشین بردار پشتیبان، جنگل تصادفی و شبکه عصبی عمیق را استفاده کرده و به دقت ۹۷ درصدی رسیدند.روش شناسی بهومیکآن ها برای انجام این آزمایش پس از تایید اولیه یک تراکنش در شبکه کار خود را شروع می کنند تا سربار کمی برای سیستم داشته باشد، ابتدا داده های خود را پیش پردازش کرده و به صورت -۸۰ ۲۰ برای تعلیم و آزمایش جداسازی کرده و سپس الگوریتم های خود را روی آن ها اعمال می کنند.نتایج کار بهومیکالراب و همکاران [۱۵] روشی بر اساس تاگوریتم یادگیری ماشین شبکه گراف کانولوشنال تقویت شده با شبکه پرسپترون پیشنهاد داده تا تراکنش های غیرقانونی در شبکه ی بیت کوین را شناسایی کنند. آنان از مجموعه داده ی Elliptic استفاده کرده و داده ها را بر اساس مهرزمانی به مجموعه ی آموزش و آزمون تقسیم بندی کرده اند.آن ها شبکه گراف کانولوشنال را توسعه داده زیرا خود آن ذاتا بر روی گراف بدون جهت کار کرده اما مدل مجموعه ای از تراکنش های جهت دار شبکه ی بیت کوین است و با این بهبود نهایتا به دقت ۹۷/۴ درصدی رسیدند.جمع‌بندیپولشویی عملی مجرمانه است که خود شاید در ادامه یا شروع کننده ي اعمال تبهکارانه دیگری مانند تروریسم، قاچاق انسان و کالا، مواد مخدر، دزدی، گروگانگیری و ... باشد[۱۷]. اهمیت مبارزه با پولشویی در آنست که اگر تبهکاری از پول کثیف و خلافی که به دست می آورد نتواند استفاده کند و این پول برای او قابل خرج کردن نباشد، انگیزه ی انجام اعمال خلاف برای وی به شدت کاهش می یابد.پولشویی از زمان های بسیار قدیم و به صورت انتقال و نگه داری و خرج کردن اسکناس های کاغذی و طلا و جواهرات رایح بوده اما با افزایش حسابرسی های نهادهای داخلی و بین المللی و نظارت شدید، جابه جایی فیزیکی این اموال سخت تر شده و تبکاران رو به استفاده از روش های جدیدتر پولشویی مانند ایجاد کسب وکارهای سوری و لایه گذاری تراکنش های بانکی خود آورده اند[۱۸].اما با شروع هزاره سوم میلادی و تصویب قوانین پولشویی جهانی مانند FATF و الزام کشورها برای پیوستن و پذیرفتن این قوانین جدید، در حالی که دنیای پول کثیف مجرمان در حال کوچکتر شدن و محدود به چندین کشور و حوزه قضایی بود، اختراعی جدید دنیا را تکان داده و دریچه هایی بدون مرز جغرافیایی برای این مجرمان گشود، خصوصا که این بار هیچ نهاد متمرکزی برای مبارزه با پولشویی و سایر این دست جرایم وجود نداشته و مهمتراز آن علاوه بر حذف نیاز به واسطه، گمنامی تبکاران را تضمین می کند.فناوری زنجیره بلوکی و رمز ارزهایی که بر بستر آن پیاده شده اند،همه گیری و دسترسی پذیری بالای اینترنت در سراسر دنیا و روش های ناپدید ساختن ردگیری همراه با ویژگی بی هویت بودن حساب های کاربری رمزارزها که امکان ساخت تعداد بیشمار حساب را با هر فرد می دهد، به نظر می رسد مبارزه با پولشویی را سال ها عقب انداخته باشد، اما فناوری و علومی مانند علم شبکه و یادگیری ماشین آماده اند تا با دقت و سرعت بالا به کمک کشور ها و حسابرسان قانونی آمده و جلوی پیروزی تبکاران در این جدال را بگیرند.با توجه به ماهیت غیر فیزیکی رمزارزها و تعداد بسیار زیاد کاربران و تراکنش ها و روش های جدیدی که هر روزه برای دور زدن قوانین پولشویی ابداع می شوند، دیگر علوم ساده رایانه ای و محاسباتی مانند چند ده خط برنامه برای تشخیص پولشویی کافی نبوده و روش های یادگیری ماشین با انعطاف پذیری بالای خود قدرت مواجه با این تغییر پذیری روش های پولشویی را دارند.با توجه به اهمیت شدید مبارزه با پولشویی، سالانه انجمن ها و سخرانی ها و پژوهش های بسیاری در این زمینه انجام شده و کشور ها و سازمان ها و بانک های بین المللی، پلیس بین الملل و سازمان های داخلی کشور های آمریکایی و اروپایی که حساسیت بسیاری روی این موضوع دارند حمایت ویژه ای از پژوهشگرانی که دستاوری در این حوزه ها داشته باشند انجام می دهند.پژوهش های بسیاری هر ساله در این حوزه ها انجام می شود که برخی از آن ها را در فصل قبل مرور کردیم. اکثر پژوهشگران از داده های آماده ی Elliptic که به صورت مدلی از گراف تراکنش ها در شبکه ي بیت کوین است استفاده کرده که دارای بیش از ۲۰۰ هزار داده ي برچسب خورده بوده و قابلیت اعمال الگوریتم های مختلف یادگیری ماشین نظارت شده ای مانند درخت تصمیم بر روی آن ها را دارد. همچنین برخی پژوهشگران صرفا پولشویی را مورد مطالعه قرار نداده و همه ی انواع کلاهبرداری هایی که در تراکنش های بانکی یا رمزارزی قابل انجام است را مطالعه کرده اند. اما چیزی که اکثر این مقالات مشترک بود، استفاده از روش های مدل سازی افراد، شبکه و تراکنش ها، استفاده از علم شبکه برای تحلیل و استفاده از یادگیری ماشین برای تشخیص بود.با توجه به اینکه تمهیدات قانونی و پژوهش های کافی برای مبارزه با پولشویی به روش های سنتی و حتی بانکی وجود داشته و سایر اقدامات لازم اکثرا اجرایی هستند اما پولشویی به وسیله ی رمزارزها نسبتا جدید محسوب شده و هنوز تا رسیدن به نتیجه مطلوب فاصله بسیاری داریم، برآنیم تا در آینده با به کار گیری علوم ذکر شده و کمک گرفتن از پژوهش های پیشین، روشی موثرتر و سریع تر برای مبارزه و تشخیص پولشویی در رمزارزها ابداع کرده که روش شناسی انجام آن به شرح زیر خواهد بود:۱- ابتدا مجموعه داده ای بزرگ، قابل اطمینان و با تعداد نمونه های کافی برچسب خورده جمع آوری شود. سعی خواهد شد تا روشی برای استخراج مستقیم داده ها به شکل و تعداد دلخواد از شبکه ی رمزارز دلخواه انجام شود.۲- مجموعه داده با تعدادی از روش های مورد مطالعه ی ذکر شده آزمایش شده تا کارایی آن روش ها با این مجموعه داده سنجیده شده و ملاک ارزیابی کار آینده ی ما قرار گیرد.۳- مجموعه داده به شکلی مناسب از شبکه و یا گراف مدلسازی شده به نحوی که بتوان بر روی آن از هر دو دسته الگوریتم های یادگیری ماشین و تحلیل شبکه استفاده نمود.۴- با انجام آزمایش، تغییر در آرگمان های الگوریتم ها، استفاده از الگوریتم های جدید و روش های ترکیبی، به جستوجوی الگوریتمی با بازده و دقت بالاتر خواهیم پرداخت.۵- با توجه به اهمیت تعداد موارد مثبت کاذب و منفی کاذب، سعی در بهبود این معیارها خواهیم داشت.مراجع[1] https://www.treasury.gov/ofac/downloads/sdnlist.pdf[2] Nakamoto, S. and Bitcoin, A., 2008. A peer-to-peer electronic cash system. Bitcoin.–URL: https://bitcoin. org/bitcoin. pdf, 4(2).[3] Colladon, A.F. and Remondi, E., 2017. Using social network analysis to prevent money laundering. Expert Systems with Applications, 67, pp.49-58.[4] Tertychnyi, P., Lindström, T., Liu, C. and Dumas, M., 2022, December. Detecting Group Behavior for Anti-Money Laundering With Incomplete Network Information. In 2022 IEEE International Conference on Big Data (Big Data) (pp. 2383-2388). IEEE.[5] Zhou, Y., Wang, X., Zhang, J., Zhang, P., Liu, L., Jin, H. and Jin, H., 2017. Analyzing and detecting money-laundering accounts in online social networks. IEEE Network, 32(3), pp.115-121.[6] Sousa Lima, R., Marques Serrano, A.L., Onome Imoniana, J. and Medeiros Cupertino, C., 2022. Identifying financial patterns of money laundering with social network analysis: A Brazilian case study. Journal of Money Laundering Control, 25(1), pp.118-134.[7] Kolachala, K., Simsek, E., Ababneh, M. and Vishwanathan, R., 2021, August. SoK: money laundering in cryptocurrencies. In Proceedings of the 16th International Conference on Availability, Reliability and Security (pp. 1-10).[8] https://www.fincen.gov/what-money-laundering[9] Badawi, A.A. and Al-Haija, Q.A., 2021, November. Detection of money laundering in bitcoin transactions. In 4th Smart Cities Symposium (SCS 2021) (Vol. 2021, pp. 458-464). IET.[10]  Weber, M., Domeniconi, G., Chen, J., Weidele, D.K.I., Bellei, C., Robinson, T. and Leiserson, C.E., 2019. Anti-money laundering in bitcoin: Experimenting with graph convolutional networks for financial forensics. arXiv preprint arXiv:1908.02591.[11] Aziz, R.M., Baluch, M.F., Patel, S. and Ganie, A.H., 2022. LGBM: a machine learning approach for Ethereum fraud detection. International Journal of Information Technology, pp.1-11.[12] Ahmed, A., 2021. Anti-money laundering recognition through the gradient boosting classifier. Academy of Accountingand Financial Studies Journal, 25(5).[13] Alarab, I., Prakoonwit, S. and Nacer, M.I., 2020, June. Comparative analysis using supervised learning methods for anti-money laundering in bitcoin. In Proceedings of the 2020 5th international conference on machine learning technologies (pp. 11-17).[14] Bhowmik, M., Chandana, T.S.S. and Rudra, B., 2021, April. Comparative study of machine learning algorithms for fraud detection in blockchain. In 2021 5th international conference on computing methodologies and communication (ICCMC) (pp. 539-541). IEEE.[15] Alarab, I., Prakoonwit, S. and Nacer, M.I., 2020, June. Competence of graph convolutional networks for anti-money laundering in bitcoin blockchain. In Proceedings of the 2020 5th international conference on machine learning technologies (pp. 23-27).[16] Möser, M., Böhme, R. and Breuker, D., 2013, September. An inquiry into money laundering tools in the Bitcoin ecosystem. In 2013 APWG eCrime researchers summit (pp. 1-14). Ieee.[17] Mei, D., Ye, Y. and Gao, Z., 2014. Literature review of international anti-money laundering research: a scientometrical perspective. Open Journal of Social Sciences, 2(12), p.111.[18] Al-Suwaidi, N.A. and Nobanee, H., 2021. Anti-money laundering and anti-terrorism financing: a survey of the existing literature and a future research agenda. Journal of Money Laundering Control, 24(2), pp.396-426.</description>
                <category>آرمان آذرنیک</category>
                <author>آرمان آذرنیک</author>
                <pubDate>Tue, 04 Jul 2023 17:32:03 +0330</pubDate>
            </item>
                    <item>
                <title>شبکه‌های پیچیده‌ی پویا (Complex Networks)</title>
                <link>https://virgool.io/@armanazarnik/%D8%B4%D8%A8%DA%A9%D9%87-%D9%87%D8%A7%DB%8C-%D9%BE%DB%8C%DA%86%DB%8C%D8%AF%D9%87-%DB%8C-%D9%BE%D9%88%DB%8C%D8%A7-complex-networks-zwg6ljveltis</link>
                <description>سلام امروز میخوام درباره علمی اینجا بنویسم که همه‌ی ما باهاش سروکار داریم، ولی شاید مثل خود من تا چند وقت پیش، ندونیم یه علمه و چه کاربردهایی داره. اول از همه نظرم لازمه بگم علم شبکه رو با شبکه اینترنت (Internet Network) که در اون مفاهیمی مثل روتر و مودم و ip وجود داره اشتباه نگیرید! هرچند علم شبکه در اینترنت هم کاربرد داره و یه جوری زیرساخت اونه. علم شبکه یه علم غیر کامپیوتریه و در زمینه‌ها و ابعداد مختلفی امکان استفاده از اون هست اما تحلیل شبکه‌های بزرگ چون به صورت دستی و چشمی ممکن نیست نیاز به برنامه‌نویسی، هوش‌مصنوعی و بقیه علوم کامپیوتری و یکم ریاضی داره.به نظرتون اینستاگرام، مغز، راه‌های ارتباطی بین شهرها، بازیگران هالیوود، حساب‌های بانکی و نویسندگان مقالات علمی چه شباهتی دارن؟ شاید بگید اصلا ربط این‌ها به هم چیه؟ پس با من همراه باشید تا برای جواب دادن به این سوال شما رو با دنیای علم شبکه (Network Science) آشنا کنم.برای شروع بهتره با یه مبحث ساده‌تر مثل گراف‌ها شروع کنیم، گراف‌ها شکل خیلی ساده‌تری از شبکه‌ها هستند که مثل اون‌ها از گره (Node) و یال (Edge) تشکیل شدند، یال‌ها که متصل کننده‌ی گره‌ها هستند می‌تونن جهت دار یا بدون جهت باشن، همچنین این یال‌ها میتونن قابل مشاهده یا مفهومی انتزاعی باشن. یال و گره‌ها می‌تونن ویژگی‌هایی هم داشته باشن. گیج که نشدین؟ الان چند تا مثال خوب میزنم!در یه مورد میشه شهرها رو به صورت گره و جاده‌های بین اون‌ها رو یال در نظر گرفت. جاده کاملا فیزیکی و قابل مشاهدست درسته؟ معمولا هم بین هر دو شهری یا جاده‌ای نیست یا به طورت دو طرفه و رفت و برگشتی جاده داریم، پس میتونیم یال‌های بین شهرها رو جهت‌دار (به صورت دو یال جدا و موازی کنارهم) در نظر بگیریم. هر جاده هم یک یا چند لاین حرکت خودرو داره و میشه تعداد لاین‌های هر جاده رو یه ویژگی برای اون در نظر گرفت.همین طور بین شهرهایی که فرودگاه دارن یک یا چند مسیر هوایی (یال) وجود داره که هواپیماها برای اینکه تداخلی با هم نداشته باشن فقط باید داخل اون مسیر بین شهرها حرکت کنن، درسته که ما با چشم چیزی مثل جاده‌ رو داخل آسمون نمیبینیم اما وجود دارن. این مسیر(کانال) هوایی هم به صورت رفت و برگشتی هستند هرچند برای جلوگیری از برخورد هواپیماها الزاما مسیرهای رفت و برگشت نزدیک هم نیستند. خود فرودگاه‌ها هم ظرفیت دارن و در لحظه تعداد خاصی هواپیما می‌تونه داخل یه فرودگاه باشه که میشه اونو به عنوان ویژگی گر‌ه فرودگاه در نظر گرفت.داخل شهرها هم همینطور، اگه ما ایستگاه‌های مترو رو گره در نظر بگیریم و بین هر دو ایستگاهی که مترو میتونه بینشون تردد کنه یه یال بکشیم به نقشه مترو میرسیم. طبیعتا در این مورد هم یال ها به صورت ریل فیزیکی قابل مشاهده و دو طرفه کنار هم هستن.مثال بعدی رو میخوام امروزی‌تر بزنم، تقریبا همه با شبکه‌های اجتماعی مثل توییتر و اینستاگرام آشنا هستیم، (بله شبکه های اجتماعی زیادن ولی الان میخوام مثالی بزنم که در همه شبکه‌ اجتماعی مصداق نداره) شما در اینستاگرام افراد رو دنبال (Follow) می‌کنین و توسط افراد دنبال می‌شید، این یه الزام دو طرفه نیست، یعنی شما ممکنه رونالدو یا نوید محمدزاده رو دنبال کنین اما خب اونا قاعدتا شما رو دنبال نمی‌کنن! همچنین ممکنه شما صفحه‌ای برای کسب‌وکارتون داشته باشین که افراد زیادی اون رو دنبال کردن اما شما اون‌ها رو با اون صفحه دنبال نمی‌کنین، ایجا صفحه‌ (حساب کاربری) اینستاگرام هر فرد یه گره بوده و اگه کسی از حساب کاربری خودش شخص دیگه‌ای رو دنبال کنه یه یال از گره فرد دنبال کننده به گره فرد دنبال شونده وجود داره، خب این یال‌ها فیزیکی یا قابل مشاهده نیستند و طبق توضیحات بالا الزاما هم دو طرفه نیستند.خب دیگه تقریبا باید فهمیده باشین داستان از چه قراره، تقریبا هر چیزی رو بتونیم به حالت مثال‌های بالا یعنی گره و یال مدل کنیم رو میتونیم به صورت گراف یا در حال پیشرفته‌تر یه شبکه در نظر بگیریم، بزارین همین‌جا تفاوت‌های گراف و شبکه رو بگم. به طور کلی یه شبکه پیچیده رو میشه یه گراف بزرگ و پیچیده در نظر گرفت که یه سری ویژگی‌های غیر بدیهی داره اما به طور کلی متر و معیاری خاصی نیست که بگیم فلان چیز یه گراف و دیگری یه شبکه پیچیدست و بیشتر مبنای تجربی دارن ولی خب به طور کلی شبکه‌های پیچیده تعداد گره و یال‌های بسیار زیادی دارن.معیارهای شبکه‌هابالاتر گفتیم که علم شبکه به تحلیل شبکه می‌پردازه و تحلیل شبکه شامل محاسبه کردن یه سری معیارهای شبکه میشه که برخی از این معیارها که ساده‌تر هستن رو توضیح میدم. یکی از این معیارها توضیع درجه (degree distributions)، البته قبل از اون باید مفهوم کلی degree رو بدونین. degree یا درجه‌ی مفهومیه که برای گره‌ها تعریف میشه و به معنای تعداد یال‌هاییه که به هر گره‌ متصله. اگه یال‌ها جهت دار باشن in-degree و out-degree داریم که به ترتیب به معنی تعداد یال‌های وارد شده و خارج شده به هر گره‌ هست.برای مثال شبکه‌ی اجتماعی اینستاگرام رو در نظر بگیرید، اکثر صفحه‌های کاربران تعداد کمی فالور دارن و تعداد کمی صفحه مانند رونالدو و مسی هستن که تعداد زیادی کاربر دارن. به این نوع توزیع درجه که در اون اکثر گره‌ها تعداد کمی یال دارن و تعداد کمی گره‌ هستن که تعداد خیلی زیادی یال بهشون وصله، توزیع درجه‌ی power-law میگن که داخل شبکه‌هایی که طبیعی نیستن و انسان در ساخت اونا دخالت داره این نوع توزیع درجه خیلی معموله. شکل زیر نمودار توزیع درجه‌ی power-law رو نشون میده که در اون محور افقی تعداد یال‌ها به ازای هر نود (node degree) و محور عمودی احتمال یا تعداد وقوع چنین گرهی با این تعداد یال داخل شبکست.توزیع درجه power-lawبه شبکه‌هایی که چنین توزیع در‌جه‌ای رو دارن شبکه‌های مقیاس پذیر (Scale-free) گفته‌ میشه. شبکه‌های اجتماعی مثل توییتر و شبکه‌های همکاری مثل نویسندگان مقالات نمونه‌هایی از شبکه های مقیاس پذیر هستند. در این شبکه‌ها ویژگی پولدارتر شدن پولدارها (rich get richer) وجود داره بدین معنی که گره‌هایی که یال های زیادی دارن، هموراه شانس بیشتری برای اضافه شدن یال های جدید نسبت به گره‌های با یال کمتر دارن.دسته‌ی دیگه‌ای از معیارهای مهم معیارهای مرکزیت (Centrality Measures) نام دارن که برای گر‌ه‌ها تعریف شده ولی با اندازه‌گیری اون‌ها برای کل گره‌ها و اعمال توابع آماری مثل میانگین گرفتن، معیارهای مرکزیت کل شبکه رو هم می‌تونیم به دست بیاریم. این معیار ها شامل چند نوع هستند که یکی از اون‌ها degree centrality که بالاتر توضیح دادیم، پیدا کردن گره‌هایی که بیشترین تعداد یال‌ متصل رو دارن اهمیت بالا در تحلیل شبکه داره. معیار دیگه‌ی این دسته betweenness centrality و برای اینکه مفهوم اون رو خیلی ساده و ابتدایی (نه علمی) توضیح بدم باید بگم این معیار مشخص میکنه که کدوم گره بیشتر به عنوان دزد سرگردنه عمل می‌کنه و اکثر گره‌ها برای اینکه به هم ارتباط داشته باشن باید از این گره بگذرن. در شکل زیر میتونین ببینین که گره‌ی وسط شبکه که اسم broker یا واسطه داره دارای معیار مرکزیت betweenness بالاییه و تموم گر‌ه‌هی سمت چپ و راست اون برای رسیدن به گر‌ه‌های سمت دیگه ناچارن از اون بگذرن. البته محاسبه‌ی این معیار با در نظر گرفتن کوتاه‌ترین طول مسیر ممکن بین هر دو گره در شبکه انجام شده، بدین صورت که کوتاه ترین مسیر برای تمامی جفت گره‌ها مشخص شده و در نظر میگیریم که هر گره ثالث (گره غیر ابتدایی و انتهایی در کوتاه ترین مسیر) چند بار در این کوتاه‌ترین مسیرها ظاهر شده، هر گره‌ای که در کوتاه‌ترین مسیرهای بیشتری ظاهر شده باشه معیار مرکزیت betweenness بالاتری داره.betweenness centrality معیار دیگه‌ی دسته‌ی Centralityها، closeness نام داره و به طور ساده گره‌ای که با طی تعداد یال‌های کمتری به بقیه‌ی گر‌ه‌ها برسه، closeness centrality بالاتری داره. برای مثال در شکل زیر گره‌ی مرکزی نسبت به بقیه‌ی گر‌ه ها closeness centrality بالاتری داره.closeness centralityضریب خوشه بندیضریب خوشه‌بندی میزان تمایل گره‌های یک شبکه به ایجاد اتصال به هم و تشکیل یه خوشه رو نشون میده و به عبارتی این احتمال را اندازه گیری میکنه که دو گره متصل به یک همسایه مشترک هم به همدیگه متصل شن مثل وقتی که یک نفر دو تا دوست داره که هر دوی اونا اهل سینما هستن اما با همدیگه دوست نیستن، احتمال اینکه این دو نفر با هم دوست بشن رو ضریب خوشه بندی میگن. ضریب خوشه‌بندی بالا نشون‌دهنده وجود گروه‌ها یا جوامع به‌هم پیوسته داخل شبکه است که نشون‌دهنده وجود ساختارها یا خوشه‌های محلیه. این نشون دهنده اندازه ایه که گره ها گروه های منسجمی رو تشکیل می دن، مثل حلقه های دوستان تو شبکه های اجتماعی یا طرفداران یک تیم فوتبال .خرد جمعییکی دیگه از مفاهیم مهم در شبکه‌ها، خرد جمعی نام داره و بدین معنیه که گاهی در شبکه‌ها، گره‌ها بدون حضور یک دانای کل می‌تونن جستوجویی رو انجام بدن که برای یک گره‌ی تنها یا حتی تعدادی گره‌ به تنهایی ممکن نیست، برای توضیح اون بهتره با مثالی که آزمایشی واقعی بوده پیش بریم. سال‌ها پیش که نامه نگاری تقریبا تنها راه‌ ارتباطی سراسری جهانی بود، میلگرام دانشمند پژوهشی رو روی شبکه‌ها شروع می‌کنه و شروع می‌کنه به فرستادن تعداد زیادی نامه به تعداد زیادی آدم مختلف و از اون‌ها می‌خواد تا از طریق آشنایانی که دارن این نامه رو به دست دوست میلگرم در ژاپن برسونن. خیلی افراد نامه رو دور میریزن و بی توجهی می‌کنن اما برخی شروع مي‌کنن نامه رو برای دوستی که دارن و به ژاپن نزدیک تره یا فکر می‌کنن ممکنه دوستی داشته باشه که بتونه نامه‌ رو به دست دوست میلگرم در ژاپن بفرسته پست می‌کنن. در مرحله‌ی بعدی بازم هم افرادی که نامه رو دریافت کردن برخی بی توجهی کرده و برخی نامه رو به دوستی ارسال می‌کنن. در آخر میلگرم با بررسی نامه‌هایی که به دست دوستش در ژاپن رسیده متوجه میشه که اون نامه‌ها به طور میانگین ۶ بار پست شدن تا به دست اون برسن، یعنی افراد مختلف با ایجاد میانگین ۶ یال تونستن جستجوی خودشون رو انجام بدن و به جواب برسن. این آزمایش دو تا نتیجه داشته که یکی از اونا اینه که جهان واقعی انسان‌ها در عین پراکنده بودن و فاصله‌ي زیاد جغرافیایی، خیلی هم بزرگ نیست و افراد مختلف خیلی هم از هم دور نیستن و یال و مسیر‌های کوتاهی بین انسان‌های حتی خیلی دور از هم دیگه‌هم وجود داره، این مورد خودش مفهومی در شبکه‌ها به نام small world یا جهان کوچکه. نتیجه دیگه‌ی این آزمایش هم این بود که گر‌ه‌ها و افراد بدون اینکه دانای کلی وجود داشته باشه که از کلیه‌ی گره‌ها و یال‌ها باخبر باشه با جستوجو در بین خودشون تونستن به هدف برسن. این شبکه‌های جهان کوچک علاوه بر داشتن متوسط طول مسیر‌های کوتاه بین گر‌ه‌ها، ضریب خوشه‌بندی بالایی هم دارن یعنی هر گره تمایل داره تا با گره‌های مجاورش انجمن تشکیل بده و به اون‌ها متصل بشه.مقاومت در شبکه‌هامففوم پرکاربرد دیگه در شبکه‌ها مقاومت شبکست. یه شبکه‌ی توزیع برق در صورت خرابی یک ایستگاه توزیع یا یک شبکه‌ي حمل و نقل مانند فرودگاه یا مترو در صورت تعطیلی یک پایانه به دلیل تعمیرات چقدر مقاومه و چقدر در کارایی اون تاثیر میزاره؟مقاومت شبکه در برخی موارد مثل شبکه‌های توزیع و حمل ونقل و اینترنت مفیده و با تحلیل شبکه و پیدا کردن نقاط ضعف دنبال تقویت مقاومت شبکه هستیم و در برخی موارد مانند شبکه های انتشار بیماری یا شبکه‌های تروریستی مقاومت شبکه مضره و به دنبال کاهش مقاومت شبکه هستیم.مقاومت شبکه در حالت خرابی تصادفی گره‌ها (مانند خرابی روتر‌ها در شبکه) و یال‌ها (مانند خرابی سیم‌های متصل کننده‌ي روتر‌ها) و یا حمله به گر‌ه‌ها و یال‌ها بررسی میشه که در حالت دوم فرد حمله کننده احتمالا قبلا شبکه رو بررسی کرده و به گر‌ه‌ها و یال‌های آسیب‌پذیر تر حمله می‌کنه که ممکنه گره‌های با درجه‌ی بالاتر، betweenness یا closeness بالاتر باشند.این خرابی و حمله ‌هم باز میتونه بار مثبت یا منفی داشته باشه، مثلا ممکنه یه خرابکار بخواد به یه شبکه‌ی توزیع برق حمله کنه یا یه دانشمند بخواد نقاط ضعف یه شبکه‌ی انتشار ویروس مثل کرونا رو برای تصمیم به اینکه کدوم گره‌ها (افراد) لازمه در اولویت واکسن زدن قرار بگیرن بررسی کنه.انجمن‌هاانجمن‌ها و تشخیص انجمن ها بحث دیگری بوده و گاها داخل یک شبکه‌ی اصلی چندین انجمن داریم. انجمن ها در تعریف شبکه ها، مجموعه گره‌هایی هستند که تعداد یا‌ل‌های آن گره‌ها بین خودشان بیشتر از تعداد یال‌های آن گر‌ها با گره‌های بیرون از انجمن است. انجمن‌ها می‌توانند هم‌پوشانی هم داشته باشند.مثلا داخل شبکه‌ی افراد یک شهر، یک فرد هم زمان ممکن است جز جامعه‌ی یک دانشگاه در شهر، انجمن طرفداران یک باشگاه فوتبال خاص، کارمندان یک شرکت و عضوی از خانوده‌ی خودش باشد.الگوریتم‌های مختلفی برای شناسایی انجمن‌ها داخل شبکه‌ها وجود داره مثل:الگوریتم Louvain که پیمانه بندی رو چرخه‌ای تکرار میکنه تا اونو افزایش بده و گره‌ها رو به انجمن ها دسته بندی کنه.الگوریتم دیگه الگوریتم انتشار برچسبه که گره‌ها رو بر اساس همسایه‌هاشون دسته بندی می‌کنه.الگوریتم بعدی، بهینه‌سازی پیمانه‌ای نام داره که هدف اون به حداکثر رسوندن  یک تابع کیفیت به نام ماژولاریتیه که درجه خوشه‌بندی را داخل انجمن‌ها  در مقایسه با اتصالات تصادفی اندازه‌گیری می‌کنه.مدلسازی شبکه‌هابرای تولید شبکه‌هایی که با نمونه های دنیای واقعی منطبق باشن تا به حال پژوهش‌های زیادی شده که بعضی از مهم‌ترین اون‌ها عبارتند از:مدل اردوش-رنی: به نام دو محقق سازنده‌ی این مدل یعنی پاول اردوش و آلفرد رنی نام گذاری شده که در اون مدل تعداد کل گره‌ها و احتمال ایجاد یال بین هر دو گره به عنوان ورودی مدل بوده و گرافی با چگالی تصادفی تولید می کنه. توی این مدل توزیع درجه دوجمله‌ایه و احتمال وجود گره‌ با درجه بالا همواره کاهشیه. این مدل ضریب خوشه بندی پایین و مسیر‌های کوتاهی داره.مدل بعدی اسمش واتز-اشتروگاتزه که اونم حاصل کار دو محقق به اسم دانکن  واتز و استیون اشتروگاتزه.مدل اون‌ها جهان کوچک بوده و در ابتدا عداد مشخصی گره داریم که به صورت حلقه‌ای کنار هم قرار گرفتن و هر گره در ابتدا به K تا از نزدیک ترین همسایه‌های خودش متصله اما برای ایجاد مسیر‌های کوتاه، هر یال با احتمالی به صورت تصادفی به گره‌ای غیر همسایه متصل میشه. توزیع درجه‌ی ای مدل به صورت نماییه و ضریب خوشه بندی بالا ومتوسط طول مسیر پایینی داره.مدل بعدی باراباشی-آلبرته که اونم حاصل کار فیزیکدانانی به همین اسمه و شبکه های مقیاس پذیر با توزیع درجه پاور-لاو تولید می‌کنه. در این مدل همه ی گر‌ه‌ها از اول وجود نداشته و هر گر‌ه‌ای یکی یکی به شبکه‌ اضافه شده و با احتمالی به گر‌ه‌ّای موجود متصل میشه که در این مدل هم احتمال ایجاد یال به گر‌های با درجه‌ی بالاتر بیشتره. این مدل ضری خوشه‌بندی محلی کمی داره و متوسط طول مسیرهای کوتاهی تولید می‌کنه. مصورسازی شبکه‌هاشبکه‌ها، خصوصا شبکه‌های بزرگ رو نمیشه به صورت دستی یا چشمی درست تحلیل کرد چون تعداد خیلی زیادی گره‌و یال دارن و مدلسازی و مصور سازی اون‌ها خیلی کمکی به ما نمیکنه. برای تحلیل شبکه امروزه اون‌ها رو به صورت مدل‌هایی در‌میارن که قابل استفاده به صورت ورودی یک برنامه کامپیوتری باشن. برای مثال شبکه‌ی ساده‌ی زیر رو در نظر بگیرید:یک شبکه‌ی ساده و ابتدییاین شبکه رو میشه به اشکال مختلف قابل درک برای برنامه مدلسازی کرد. یکی از روش‌های مدل سازی ماتریس مجاورته، که در اون به ازای هر گره یه سطر و یه ستون داریم و اگه از گره‌ای به گر‌ه‌ی دیگه یالی داشته بشیم، در محل تلاقی سطر و ستون اون گر‌ه‌ها عدد ۱ و در غیر این صورت عدد ۰ نوشته میشه. اگه یال‌ها بدون جهت باشن ماتریس متقارن میشه و اگه یال‌ها وزن داشته باشن میشه به جای ۱، وزن یال نوشته میشه. برای مثال ماتریس مجاورت شکل بالا به صورت زیر میشه:ماتریس مجاورتروش دیگه‌ی نمایش شبکه، لیست یال‌هاست. در این روش به ازای هر یال یه سطر که گره‌ی ابتدایی و انتهایی یال رو نشون میده. لیست‌ یال‌های شبکه‌ی قبلی به صورت زیر میشه:لیست یال‌هاروش مرسوم دیگه لیست مجاورته که در اون به ازای هر گره‌ یه سطر داریم و گر‌ه‌هایی که به اون وصل میشن رو جلوش می‌نویسیم. شکل زیر لیست مجاورت مثال قبلیه:لیست مجاورت ابزار‌های تحلیل شبکه‌هابرای کمک به علم شبکه و تحلیل بهتر، ابزارهای زیاد دیگه‌ای استفاده میشن، یکی از اون ابزارها Gephi که ابزاری منبع باز برای تصویرسازی شبکه‌هاست. این ابزار محیط کاربرپسندی داره و الگوریتم های مختلف تحلیل شبکه و خوشه بندی رو میشه باهاش اعمال کرد.ابزار دیگه Cytoscape نام داره که یه پلتفرم منبع باز برای تحلیل و مصورسازی شبکه‌های بیولوژیکیه اما برای انواع شبکه‌های دیگه هم میشه ازش استفاده کرد. این ابزار با افزونه‌های زیادی که داره برای خوشه‌بندی شبکه و تحلیل‌ معیارهای مرکزیت و مسیرها مناسبه.ابزار به شدت پر استفاده‌ی بعدی NetworkX که یه کتابخونه‌ی منبع باز برای زبان برنامه نویسی پایتونه و باهاش میتونین کد دلخواهتون رو برای تحلیل و مدلسازی شبکه و الگوریتم‌هاش بنویسید.کتابخونه igraph‌ که برای زبان‌های برنامه نویسی زیادی مثل C و C++ و R و پایتون وجود داره هم خیلی کاربردیه و الگوریتم‌های تحلیل شبکه‌ی زیادی مثل الگوریتم‌های تشخیص انجمن رو از پیش آماده دارهبسته‌ی نرم افزاری Pajeck برای تحلیل و مصورسازی شبکه‌های مقیاس وسیع استفاده میشه و الگوریتم‌های تحلیل شبکه‌ی پیچیده‌ای رو داره.افزونه‌ی NodeXL که برای نرم‌افزار Microsoft Excel ارائه شده هم قابلیت مصورسازی و تحلیل شبکه‌ رو داره و به کاربر اجازه‌ی وارد کردن داده‌ها با فرمت‌های مختلف و از منابع مختلف رو میده.کاربردهای علم شبکهعلم شبکه کاربردهای خیلی زیادی داره که برخی از کاربردهای جالب اون عبارتنداز :۱- شبکه‌های حمل و نقل: برای بهبود حمل و نقل افراد و کالاها، مدیریت و تحلیل ترافیک و کاهش اتلاف زمان. فرض کنید داخل شهری به شلوغی تهران تصمیم بگیرن یه خط متروی دیگه اضافه کنن، برای اینکه ببینن ازدحام جمعیت کدوم ایستگاها بیشتره و جمعیت روزانه توی کدوم مسیرها رفت و آمد دارن۲- تحلیل همه‌ گیری و شیوع بیماری‌ها: امروزه دیگه هممون به دلیل بیماری کرونا میدونیم همه‌گیری چیه و چقدر میتونه خطرناک باشه، هنوزم که هنوزه سر منشا به وجود اومدن این بیماری اختلاف هست.وقتی یه بیماری همه‌گیری مثل کرونا شروع بشه، با کمک علم شبکه می‌تونیم علاوه بر پیدا کردن منشا بیماری و اولین افراد بیمار شده، با شناسایی برخی گره‌های مهم داخل شبکه و واکسینه یا قرنطینه کردن اونا به جای واکسینه یا قرنطینه کردن کل افراد، با صرف هزینه خیلی کمتر و خیلی سریع تر جلوی انتشار بیماری رو بگیریم.۳- سیستم‌های پیشنهادگر: اگه تا به حال از سایت‌های خرید آنلاین مثل دیجی کالا خرید کرده باشید، موقع مشاهده یا سفارش یه کالا دیدید که کالاهای دیگه‌ای رو هم بهتون پیشنهاد می‌کنه که شاید خیلی هم ربطی به کالای فعلی که دارید می‌بینید نداشته باشه! این پیشنهاد از کجا میاد؟ هر خریداری که تعدادی کالا سفارش میده، سیستم در پشت صحنه یه گراف دو قسمتی (bipartite) به شکل زیر از افراد و خرید‌هاشون میسازهگراف دو قسمتیهمینطور که میبنید گراف دو قسمتی گرافیه شامل دو دسته گره، که بین گره‌های داخل هر دسته یالی وجود نداره (خریداران کالاهای مختلف داخل سایتی مثل دیجی‌کلا هم همدیگه رو نمیشناسن و ارتباطی با هم ندارن، کالا‌های داخل دیجی‌کالا هم جز اونایی که دسته بندی مشابه (مثل لوازم الکترونیکی یا پوشاک) دارن هم ارتباط دیگه‌ای با هم ندارن) اما بین گره‌های دو دسته یال وجود داره و در مثال ما هر فردی که کالایی رو سفارش داده‌ باشه یالی از گره‌ی اون به کالاها وجود داره. در مرحله بعدی با حذف گره‌های کالاها، گراف رو از حالت دو قسمتی خارج کرده و به شکل زیر در میارن.در این گراف افرادی که کالای مشترکی رو خریداری کردن با یال به هم وصل میشن و مثلا کالاهایی که گره‌ی آبی کمرنگ خریده به بقیه گره‌ها هم پیشنهاد میشن.۴- شبکه‌های تحلیل قدرت و تاثیر‌گذاری: به وسیله‌ی تحلیل علم شبکه و با یافتن گره‌ها یا انجمن‌های تاثیر گذار و رهبر و کلیدی در شبکه‌، می‌توان بر رفتار گره‌ها، انتخاب‌های آن‌ها و روند اطلاعات در شبکه تاثیر گذاشت. گره‌های مهم با اندازه‌گیری معیارهای مرکزیت (Centrality) در شبکه شناسایی شده و با کنترل کردن آن‌ها می‌توان در شبکه اثر گذاشت. فرض کنید میخوایم یه محصول رو داخل شبکه‌ی اینستاگرام تبلیغ کنیم، به جای اینکه هزینه‌ی زیادی رو صرف تبلیغ کالا داخل صفحه‌های زیادی کنیم، با شناسایی گره‌ها و صفحات مهم اینستاگرام مانند اینفوئنسرها، وظیفه تبلیغ کالا رو فقط به اون‌ها می‌سپریم.۵- کاربردهای شبیه سازی: برخی مواقع نیاز به پیشبینی در شبکه‌های واقعی داریم که با آزمایش واقعی به دلایل مختلفی امکان پذیر نیست. مثلا در یک کشور رییس جمهور قصد تغییر نرخ بهره بانکی، مالیات، نرخ حامل‌های انرژی، یارانه و ... را داشته اما نیاز دارد مقدار بهینه‌ی ‌آن‌ها را با توجه با بازخورد و واکنش افراد و بنگاه‌های اقتصادی دریابد. طبعیتا نمی‌توان در چنین موردی ریسک نموده و یا حتی مدتی به صورت آزمایشی این موارد را تغییر داد زیرا اشتباه در آن‌ها هزینه‌ي بالایی به دنبال خواهد داشت. در چنین مواردی شبکه‌ی اقتصادی و رفتار افراد و بنگاه‌ها در این شبکه شبیه‌سازی شده و تاثیر تغییرات در شبکه مورد بررسی قرار می‌گیرد.مثال ملموس‌تر، در رابطه با بیماری‌های مختلفه، برای بررسی حالت انتشار بیماری خاص در شبکه‌ای از افراد، هر فرد به صورت یک عامل تعریف شده که متغییر‌هایی مانند احتمال انتقال بیماری، تعداد روزهای نهفتگی بیماری، احتمال مرگ و احتمال ابتلای دوباره و ... را برای او مشخص کرده سپس به تعداد افراد جامعه از اون فرد نمونه و گره‌ ساخته و روند انتشار بیماری رو مورد بررسی قرار میدن.۶- مدل سازی شبکه بیولوژیکی:علم شبکه در شبکه های برهمکنش پروتئین-پروتئین یا شبکه های تنظیم کننده ژن کاربرد زیاد داشته و  با تجزیه و تحلیل این شبکه های پیچیده، ما بینشی در مورد فرآیندهای سلولی، مکانیسم های بیماری و پویایی تکاملی به دست می آوریم. علم شبکه در شناسایی بازیگران کلیدی، شناسایی ماژول های کاربردی، و پیش بینی تعاملات جدید، کمک به پیشرفت در پزشکی و بیوانفورماتیک کمک می کند.۷- شبکه‌های جستوجوی اطلاعات: موتورهای جستوجویی مثل گوگل با نشانه‌گذاری صفحات وب و در نظر گیری آنها به عنوان گره‌ها و لینک‌هایی که از هر صفحه به دیگر صفحات موجود است به عنوان یال، موتور جستوجوی خود را بهبود داده و نتایج قابل اعتماد تری به کاربران نمایش می‌دهد که قابل تاثیر از بات‌های اینترنتی و لینک‌های جعلی نباشند.۸- شبکه‌های مالی: روابط بین مؤسسات مالی؛ مثل بانک‌ها، شرکت‌های سرمایه‌گذاری و بورس اوراق بهادار رو مدلسازی کرده و تجزیه‌‌و‌تحلیل این شبکه‌ها به درک مخاطرات ، اثرات انتشار و ثبات سیستم‌های مالی کمک می‌کنه و  شناسایی بازیگران یا مؤسسات کلیدی که می‌تونن تأثیر قابل‌توجهی بر کل سیستم مالی داشته باشن مثل سرمایه‌گذاران اصلی، نهنگ‌های بازارهای مالی و خط دهنده‌ها.یکی از کاربردهای نوین و جالب و متفاوت شبکه، کمک به شناسایی پولشوییه! اگه با پولشویی آشنا باشین میدونین که معمولا توسط یه نفر انجام نشده و یه جرم گروهیه. حالا چجوری این عمل یا افراد شناسایی میشن؟ یک شبکه‌ی دارای تراکنش‌های مالی مثل شبکه‌ی تراکنش بانکی رو در نظر بگیرین که افراد به حساب‌های هم پول واریز می‌کنن، اگه یه مدل شبکه‌ای از این افراد و تراکنش‌ها بسازیم، جوریه که گر‌ه‌های شبکه افراد باشن و مثلا اگه فرد a پولی به فرد b انتقال داده، یالی جهت دار از a به b داشته باشیم که وزن یال (یه ویژگی برای یال که مثل برچسب روی یال قرار میگیره) مقدار پول انتقال داده شده رو نشون بده، در این صورت یه شبکه‌ی بزرگ تراکنشی داریم.مدل سازی تراکنشبا تحلیل این شبکه و محاسبه‌ی معیارها، همچین با اعمال الگوریتم‌های مختلفی مانند الگوریتم‌های تشخیص انجمن میشه دسته‌ها و گروه‌های مختلف افراد داخل شبکه رو جدا کرد و با اعمال الگوریتم‌های یادگیری ماشین مانند الگوریتم‌های نظارت نشده برای شناسایی ناهنجاری، میشه گروه‌هایی که تراکنش‌های غیر عادی دارن رو شناسایی کرد. همچنین با اعمال الگوریتم های یادگیری ماشین نظارت شده میشه تراکنش‌های غیرعادی رو شناسایی کرد.نتیجه گیریکاربردهای علم شبکه‌ فراوان بوده و هر روز کاربردهای بیشتری برای آن پیدا می‌شود تا نمونه‌هایی از دنیای واقعی را مدلسازی کرده و به تحلیل و پیش بینی رفتار و تعاملات آن‌ها با همدیگه بپردازیم. ترکیب این علم با علوم کامپیوتری خصوصا یادگیری ماشین نوید آینده‌ی روشنی رو برای این چه در عرصه آکادمیک و چه در عرصه تجربی و کاری داده و همواره فرصتی برای بهبود و پیشرفت در این حوزه وجود داره.اگر شما با خوندن این مطلب به این علم علاقه‌مند شدید پیشنهاد میکنم منابع زیر رو هم مطالعه کنین: Barabási, A.L., 2013. Network science. Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences, 371(1987), p.20120375.Easley, D. and Kleinberg, J., 2010. Networks, crowds, and markets: Reasoning about a highly connected world. Cambridge university press.Newman, M.E., 2003. The structure and function of complex networks. SIAM review, 45(2), pp.167-256.Girvan, M. and Newman, M.E., 2002. Community structure in social and biological networks. Proceedings of the national academy of sciences, 99(12), pp.7821-7826.Barabási, A.L. and Albert, R., 1999. Emergence of scaling in random networks. science, 286(5439), pp.509-512.Newman, M., 2018. Networks. Oxford university press.Albert, R. and Barabási, A.L., 2002. Statistical mechanics of complex networks. Reviews of modern physics, 74(1), p.47.</description>
                <category>آرمان آذرنیک</category>
                <author>آرمان آذرنیک</author>
                <pubDate>Wed, 21 Jun 2023 12:50:31 +0330</pubDate>
            </item>
            </channel>
</rss>