<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Arash Rahimi</title>
        <link>https://virgool.io/feed/@arashrahimi46</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 17:57:42</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/83639/avatar/e0fNXL.jpeg?height=120&amp;width=120</url>
            <title>Arash Rahimi</title>
            <link>https://virgool.io/@arashrahimi46</link>
        </image>

                    <item>
                <title>Event Sourcing چیست ؟</title>
                <link>https://virgool.io/@arashrahimi46/event-sourcing-%DA%86%DB%8C%D8%B3%D8%AA-cnnc6vwjqj2o</link>
                <description>راستش یکی از موضوعاتی که اخیرا درگیرم کرده بود همین event sourcing بود. که میخواستم بدونم  دقیقا چی هست و چجوری پیاده سازی میشه و اصلا خود مفهوم (concept) چیه . حالا که یکم دانش بهتری نسبت به این قضیه پیدا کردم دوست داشتم با همه به اشتراک بگذارم .مارتین فاولر(Martin Fowler) میگه :Capture all changes to an application state as a sequence of events.کل event sourcing رو میشه در همین جمله خلاصه کرد ، حالا بریم که با هم ببینیم معنی و مفهوم همین یه جمله یعنی چی و میخواد چجوری توی اپلیکیشن ما نمود پیدا کنه؟ترجمه عبارت بالارو بهتره اینجوری بگیم که هدف از ایونت سورسینگ اینه که رفتار نرم افزار رو با وضعیت های مختلف ثبت کرد و به عبارت دیگه یعنی تمامی اطلاعتی که نرم افزار با رویداد های مختلف براش پیش میاد رو نگهداری کنیم و هر زمان که رویداد جدیدی اتفاق میفته باید اون رو به انتهای لیست تغییرات در طول زمانمون اضافه کنیم، باید بتونید تشخیص بدید که دقیقا در چه مرحله ای رفتار و عملکرد نرم افزار (یا همون اپلیکیشن) اشتباه و غیر قابل انتظار بوده. ایونت سورسینگ فواید زیادی داره که از جمله مهمترینش میشه به دیباگ کردن منطقی پروژه و کنترل کیفی و رفتاری پروژه اشاره کرد.به عنوان مثال، در سیستم های حسابداری که به طور مستقیم با حساب های شرکت و میزان بدهکاری و بستانکاری ارتباط دارن، پیاده سازی همچین مکانیسمی برای درست محاسبه  کردن مقادیر مالی و کشف کسورات پولی در انتهای محاسبات و گزارشات بشدت حائز اهمیت هست. همچنین وقتی شما یک ورژن جدید از پروژه رو ارائه میکنید و طبیعتا انتظار دارید که در بعضی جاهاش که تغییرش دادید، این تغییرات رو در رفتار پروژه هم ببینید که با ایونت سورسینگ و مقایسه با دیتای ضبط شده سابق میشه به این مهم دست یافت.نرم افزار ها لیست رویداد ها رو در یک مخزن رویداد‌‌‌‌ها (event store) نگهداری میکنند که در واقع این مخزن رو یک پایگاه داده از رویداد های مختلف سیستممون هست (database of events) این پایگاه داده API و یا رابط نرم افزاری دارد که از طریق اون به ثبت و دریافت رویداد های مختلف یک قسمت از نرم افزار یا بیزینسمون میپردازیم .و این پایگاه داده در واقع همانند یک واسط پیام (Message Broker) عمل میکنه که  API دیگری رو هم برای سرویس های دیگه آماده میکنه که به این ایونت خاص وصل بشن و هر وقت تغییر یا رویدادی در سیستم برای این قسمت اتفاق افتاد اون ها هم از این رویداد مطلع بشن و کار های خودشون رو بکنن.خوب شاید بهتر باشه با مطرح کردن یک مثال ایونت سورسینگ رو بهتر بفهمیم و اون رو بهتر درکش کنیم سیستمی رو در نظر بگیرید که شامل دو سرویس Customer , Order باشه ما میخوایم که ایونت سورسینگ رو در این سیستم پیاده سازی کنیم در این تصویر به راحتی میشه فهمید که ایونت سورسینگ دقیقا چی کار میخواد بکنه در این سیستم ما به جای این که برای هر وضعیت سفارش بیایم و یک سطر از دیتابیسمون رو آپدیت کنیم وضعیت های مختلف رو در یک event store ذخیره میکنیم و این طوری پس از هر تغییر وضعیت سرویس مشتری یا customer هم از وضعیت سفارش اون مشتری مطلع میشه و میتونه کار های خودشو نسبت به هر تغییر وضعیت سفارش جلو ببره امیدوارم دقیقا متوجه شده باشین که ایونت سورسینگ دقیقا میخواد چیکار بکنه بد نیست با هم مزایا و معایب این سیستم رو هم ببینیم مزایا و سودمندی هاایونت سورسینگ یکی از چالش های بزرگ سیستم های رویداد محور event driven رو حل کرده که اون هم  این که ایونت ها پس از هر تغییری با اطمینان کامل در سیستم ثبت میشنیک تاریخچه (log) کامل رو برای ما به ارمغان میاره که میتونیم تغییرات یک قسمت از نرم افزارمون رو به راحتی مشاهده کنیم اگر شما در حال مهاجرت از معماری monolith به microservice هستین ایونت سورسینگ این مهاجرت رو برای شما راحت تر و شیرین تر میکنه مطابق با هر سیستمی ایونت سورسینگ هم معایب خودشو داره معایبایونت سورسینگ یک پترن خاص و نا آشناست و برای یادگیری و پیاده سازی و  درک مفهمومش باید تلاش زیادی بکنید همین طور کویری زدن به یک event store اصلن کار ساده ای نیست و برای همین منظور شما باید از CQRS استفاده کنید که اندکی به پیچیدگی سیستمتون اضافه میکنهEvent sourcing with CQRS Implخلاصه از نگاه یک مدیر فنی یا یک مالک محصول، و یا از نگاه یک برنامه نویسی که نگاه وسیعی داره، استفاده از ایونت سورسینگ کیفیت و دقت پروژه رو خیلی ارتقاء میده و ضریب خطا و از دست داده دیتا رو به حداقل میرسونه. شایان ذکره که با استفاده از ایونت سورسینگ event sourcing بعد از یک مدتی میشه یک سری نمودارها و چارت های تحلیلی هم از رفتار و عملکرد بخش های مختلف پروژه ترسیم کرد که در یک نگاه مختصر دیتا و اطلاعات زیادی رو به ما میده و میتونه توی تصمیم گیری‌ها و اولیت بندی توسعه محصول بهمون کمک کنه.</description>
                <category>Arash Rahimi</category>
                <author>Arash Rahimi</author>
                <pubDate>Thu, 21 Jan 2021 02:12:28 +0330</pubDate>
            </item>
                    <item>
                <title>مشاهده اطلاعات ذخیره شده در RAM توسط یک وب سایت</title>
                <link>https://virgool.io/@arashrahimi46/%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-ram-%D8%AA%D9%88%D8%B3%D8%B7-%DB%8C%DA%A9-%D9%88%D8%A8-%D8%B3%D8%A7%DB%8C%D8%AA-brkwycgmo362</link>
                <description>!مدتی بود در محل کارم دچار چالشی در محصولمون شده بودیم، استفاده ی بیش از حد از رم اما دقیقا نمیشد که تشخیص بدیم که این مشکل از کجا داره اذیتمون میکنه یعنی واضح تر بگم کدوم قسمت از کد رو خراب کردیم که همچین بلایی داره سرمون میاد چند وقت قبلش کلی تلاش کردیم برای این موضوع  سناریو های مختلفی رو هم برای ایجاد این مشکل حدس میزدیم مثلا میگفتیم وقتی کاربر روی دکمه بازگشت کلیک میکنه  استفاده از RAM زیاد میشه و به زعم خودمون مشکل رو پیدا کرده بودیم و با چند تا بهبود فکر میکردیم که دیگه همه چیز بهبود پیدا کرد این کار بار ها و بار ها تکرار شد ولی هر بار بعد از مدتی میفهمیدیم که مشکل هنوز پابرجاست و شاید حتی بدتر هم شده باشه یا اگر بهبودی هم بوده اون چیزی نبوده که ما می خواستیم این سری که رفتیم حلش بکنیم گفتیم تا داده ی صد در صد واقعی و درست نداشته باشیم چیزی رو عوض نمیکنیم و دست به کدمون نمیزنیم در حقیقت میخواستیم این سری تا مطمین نشدیم که کجا خرابه دست به کار نشیم اما سوال اصلی اینجاست :چجوری ؟ چجوری بفهمیم که چه داده ای رو توی رم ذخیره کردیم وقتی این تصمیم گرفته شد که داده ی درست و منطقی پیدا کنیم شروع کردم به جستجو کردن و هر چیزی که میگشتم اونی نبود که من میخواستم و اغلب به این میرسیدم که این امر امکان پذیر نیست و ناامید میشدیم تا این که به یک مقاله در سایت گوگل برخورد کردم که میگفت ما در آپدیت جدیدمون توی مرورگر کروم این قابلیت رو فراهم کردیم که بتونید اطلاعات ذخیره شده در RAM رو مشاهده کنید اولش فکر کردم شاید همون دسته بندی اطلاعاتی که از قبل میگفت در نسخه های قبلی کروم گزارشی بهت میداد که فقط میگفت چقدر از حجم حافظه رو آرایه ها و چقدر رو متن ها و ...... ذخیره کردن ولی نمیگفت که و نمیشد فهمید که دقیقا چه اطلاعاتی درون آرایه های من هستند یا چه متن هایی رو من در حافظه ام ذخیره کردم با این که کاملا نا امید بودم اما بعد که تست کردم کاملا شگفت زده شدم و از خوشحالی نمیدونستم چیکار کنم و فقط میگفتم ممنون آقای گوگل .حالا میخوام با هم این قابلیت رو مشاهده کنیم در ادامه کار به عنوان مثال نشون میدم که وقتی وارد وب سایت ویرگول میشیم چه اطلاعاتی درون حافظه ما ذخیره میشه بعد از این که وارد وب سایت ویرگول شدید با زدن کلید F12 ابزار توسعه دهنده یا  Developer tools مرورگر کروم براتون باز میشه یکی از تب هایی که قابل مشاهده است گزینه ی Memory است که با انتخاب این گزینه ما به صفحه ای همانند عکس پایین می رویم این قسمت اطلاعاتی در باره حافظه RAM  به توسعه دهنده می دهد با انتخاب گزینه TAKE SNAPSHOT یک کپی (رو نوشت) دسته بندی شدی از اطلاعات حافظه RAM به کاربر نشان داده می شود که در نگاه اول هر کدام از دسته بندی ها  به صورت درصدی نشان داده می شوند مثلا در تصویر ذیل مشاهده می کنید که این اطلاعات شامل آرایه ها ،‌ اطلاعات سیستم ، رشته ها و ...... استمثلا در وب سایت ویرگول 24٪ از حافظه توسط آرایه ها اشغال شده استحالا شما خیلی راحت میتونید یکی از گزینه ها رو انتخاب کنید و برین تو دلش و ببینید چه آرایه هایی و با چه مقادیری دارن ذخیره میشن یا چه رشته های متنی (String) هایی رو داریم توی حافظه امون نگه میداریم امیدوارم این مطلب برای شما مفید بوده باشه و بتونه کمکتون بکنه پ . ن : این اولین مطلب من در ویرگول بود لطفا با نظراتتون منو همراهی کنید و کمک کنین بتونم مطالب بهتری رو منتشر کنم </description>
                <category>Arash Rahimi</category>
                <author>Arash Rahimi</author>
                <pubDate>Sun, 16 Aug 2020 13:18:56 +0430</pubDate>
            </item>
            </channel>
</rss>