✅ میخوام توی این پست یه خرده راجع به اینکه میگن همه چیز توی مهندسی نرم افزار ترید آفه صحبت کنم و یه کوچولو هم گریزی بزنیم Big O
✅ بیایین اینطوری شروعش کنیم که به نظرتون کد خوب چه کدی هست ؟
شاید بشه گفت کدی که دوتا ویژگی رو داشته باشه، میشه اسمش رو گذاشت یه کد خوب و مشتی
یکی اینکه Readable یا خوانا باشه و یکی دیگه اینکه Scalable باشه
✅ خوانایی کد که خب معلومه دیگه نیاز به توضیح نداره، کتاب clean code ماشالله تا دلتون بخواد راجبش گفته
اما Scalable بودن چطور ؟
✅ قبلش بیاین بفهمیم Big O چیه ؟
من طبق چیزایی که خوندم و دانش کمی که دارم دوتا تعریف به ذهنم میرسه:
1. درواقع Big O چیزیه که به ما این اجازه رو میده میزان scalebility کد رو بسنجیم
2. یا Big O چیزی که به ما میگه یه الگوریتم چقدر طول میکشه تا اجرا بشه
✅ نتیجه اینکه هرچقدر ما کد بهینه تر یعنی با Big O بهتر بزنیم، کدمون اسکیل بیشتری رو پوشش میده دیگه
خب الان یعنی دیگه همیشه بیایم کدی بزنیم که از نظر بهینگی سرعت (1)O یا (log n)O باشه؟ سعی ما اینه که کدمون به این دوتا نزدیک تر باشه ولی همیشه به این سادگی نیست
✅ باید یه نکته رو در نظر بگیریم، به نظرم هیچوقت نمیتونیم سرعت و حافظه رو باهم داشته باشیم همیشه یکی رو باید یه خرده بیشتر قربانی کنیم.
✅ فرض کنیم میخواییم از نقطه A بریم به نقطه B :
دوحالت وجود داره یا باید یه تاکسی بگیری و از جیب مبارک هزینه کنی تا سریع تر به نقطه B برسی یا بخوایی اقتصادی فکر کنی پیاده بری پولتو بزاری جیبت و به جاش تایم بیشتری صرف کنی تا به مقصد B برسی
میبینی، تو هیچوقت نمیتونی هم هزینه نکنی و هم سریعتر برسی، بالاخره یکی رو باید از دست بدی(مگر یه آشنا پیدا بشه با ماشین رایگان ببرتت😁)
✅ به نظرم مهندسی نرم افزارم همینه، یعنی ترید آفه بعضی وقتا تو حافظه برات مهمه بعضی وقتا سرعت، باید دید اون پروژه خاص، فیچر مورد نظر، انتخاب زبان، فریمورک یا هرچییی اصلا، توی او موقعیت چی میطلبه ازت
✅ توماس سوول یه جمله داره که میگه :
There are no solutions. There are only trade-off
یعنی هروقت به یک چیزی تو بله میگی در واقع داری به یه چیز دیگه نه میگی
پس به نظرم اگه با این دید که تصمیمات زندگیمون یا تصمیمات فنی مربوط به مهندسی نرم افزار مثل انتخاب زبان برنامه نویسی مورد نظرمون یا هرچی که توی زندگیمون هست رو بگیریم خیلی بهتر میتونیم اون مسعله یا مشکل رو حل کنیم
مخلصیم ❤️
#concept
@LearnByLearn
✅ بیایین اینطوری شروعش کنیم که به نظرتون کد خوب چه کدی هست ؟
شاید بشه گفت کدی که دوتا ویژگی رو داشته باشه، میشه اسمش رو گذاشت یه کد خوب و مشتی
یکی اینکه Readable یا خوانا باشه و یکی دیگه اینکه Scalable باشه
✅ خوانایی کد که خب معلومه دیگه نیاز به توضیح نداره، کتاب clean code ماشالله تا دلتون بخواد راجبش گفته
اما Scalable بودن چطور ؟
✅ قبلش بیاین بفهمیم Big O چیه ؟
من طبق چیزایی که خوندم و دانش کمی که دارم دوتا تعریف به ذهنم میرسه:
1. درواقع Big O چیزیه که به ما این اجازه رو میده میزان scalebility کد رو بسنجیم
2. یا Big O چیزی که به ما میگه یه الگوریتم چقدر طول میکشه تا اجرا بشه
✅ نتیجه اینکه هرچقدر ما کد بهینه تر یعنی با Big O بهتر بزنیم، کدمون اسکیل بیشتری رو پوشش میده دیگه
خب الان یعنی دیگه همیشه بیایم کدی بزنیم که از نظر بهینگی سرعت (1)O یا (log n)O باشه؟ سعی ما اینه که کدمون به این دوتا نزدیک تر باشه ولی همیشه به این سادگی نیست
✅ باید یه نکته رو در نظر بگیریم، به نظرم هیچوقت نمیتونیم سرعت و حافظه رو باهم داشته باشیم همیشه یکی رو باید یه خرده بیشتر قربانی کنیم.
✅ فرض کنیم میخواییم از نقطه A بریم به نقطه B :
دوحالت وجود داره یا باید یه تاکسی بگیری و از جیب مبارک هزینه کنی تا سریع تر به نقطه B برسی یا بخوایی اقتصادی فکر کنی پیاده بری پولتو بزاری جیبت و به جاش تایم بیشتری صرف کنی تا به مقصد B برسی
میبینی، تو هیچوقت نمیتونی هم هزینه نکنی و هم سریعتر برسی، بالاخره یکی رو باید از دست بدی(مگر یه آشنا پیدا بشه با ماشین رایگان ببرتت😁)
✅ به نظرم مهندسی نرم افزارم همینه، یعنی ترید آفه بعضی وقتا تو حافظه برات مهمه بعضی وقتا سرعت، باید دید اون پروژه خاص، فیچر مورد نظر، انتخاب زبان، فریمورک یا هرچییی اصلا، توی او موقعیت چی میطلبه ازت
✅ توماس سوول یه جمله داره که میگه :
There are no solutions. There are only trade-off
یعنی هروقت به یک چیزی تو بله میگی در واقع داری به یه چیز دیگه نه میگی
پس به نظرم اگه با این دید که تصمیمات زندگیمون یا تصمیمات فنی مربوط به مهندسی نرم افزار مثل انتخاب زبان برنامه نویسی مورد نظرمون یا هرچی که توی زندگیمون هست رو بگیریم خیلی بهتر میتونیم اون مسعله یا مشکل رو حل کنیم
مخلصیم ❤️
#concept
@LearnByLearn
👌12👍3
یه مدته دارم و داششتم در رابطه با distributed transaction ها میخوندم و مطلب جمع اوری میکردم(کلا تو فاز سیستم دیزاین رفتم😀)
قصد دارم اون چیزی که ازشون فهمیدم رو یه سری مجموعه ازشون بسازم
فعلا ایده ای ندارم مقاله محور(سایت ویرگول) باشه یا به صورت post توی لینکدین
حالا بازم نظری، پیشنهادی چیزی داشتین بگید ممنون میشم
مخلصیم❤️
@LearnByLearn
قصد دارم اون چیزی که ازشون فهمیدم رو یه سری مجموعه ازشون بسازم
فعلا ایده ای ندارم مقاله محور(سایت ویرگول) باشه یا به صورت post توی لینکدین
حالا بازم نظری، پیشنهادی چیزی داشتین بگید ممنون میشم
مخلصیم❤️
@LearnByLearn
👍9❤1
LearnByLearn📖
یه مدته دارم و داششتم در رابطه با distributed transaction ها میخوندم و مطلب جمع اوری میکردم(کلا تو فاز سیستم دیزاین رفتم😀) قصد دارم اون چیزی که ازشون فهمیدم رو یه سری مجموعه ازشون بسازم فعلا ایده ای ندارم مقاله محور(سایت ویرگول) باشه یا به صورت post توی لینکدین…
اولین قسمت از تراکنش ها:
Pessimistic 🆚 Optimistic
قبلش اینو بگم اگه دوست داشتید این پلی لیست مفاهیم دیتابیس رو که قسمت چهارمش ACID هست رو مطالعه کنید
بدون هیچ بحث اضافه دیگه ای بریم سر اصل مطلب
✅ توی Pessimistic Concurrency Control دیتابیس به صورت خیلی بدبینانه به تراکنش ها نگاه میکنه و این احتمال رو میده که تراکنش ها باهم تداخل داشته باشن پس میاد از سیستم lock اش استفاده میکنه
✅ فرض کنیم موجودی فعلی حساب ما 800 تاست و شخص A میخواد 200 تا برداشت کنه و شخص B هم 100 تا اضاف کنه
✅ اول ببینیم اگه دیتابیس چیزی رو lock نکنه و هردوتا درخواست همزمان برسه چی پیش میاد 🧐
🔹شخص A مبلغ 800 رو از دیتابیس میخونه و بعد 200 تومن ازش کم میکنه
🔹شخص B هم 800 تومن رو از دیتابیس میخونه(درحالیکه باید 600 میخوند) و 100 تا بهش اضاف میکنه
حالا نتیجه نهایی ما به جای 700 میشه 900😱 اینجوری خیلی خوشبحال طرف میشه نه؟😎
✅ حالا اگه دیتابیس از سیستم lock استفاده کنه و به صورت بدبینانه نگاه کنه چطور؟🤔
درخواست شخص A به دیتابیس ارسال میشه اما اینجا دیتابیس میگه وایسا وایسا من باید اول حسابتو lock کنم تا تراکنش دیگه ای همزمان اعمال نشه حالا:
شخص A مقدار 800 تومن رو از دیتابیس میخونه و 200 تومن از حساب کم میکنه پس موجودی میشه 600 تومن
✅ حالا lock ازاد میشه
درخواست شخص B میرسه و دوباره دیتابیس lock میکنه. اینبار 600 رو از دیتابیس میخونه و 100 تومن رو اضافه میکنه و در اخر موجودی حساب ما میشه 700(نه 900)🥳
☝️حالا کجا خوبه ؟ کجا بده؟ اونجایی خوبه که تراکنش ها زیاد دچار تداخل میشن و اونجایی بده که این قفل کردن های مکرر باعث کندی سیستم ما بشه
✅ چطور توی کد نویسی اعمالش کنیم؟
با استفاده از کوعری به اسم for update میتونی اعمالش کنی
به chat GPT بگی برات کدشو به هر زبونی که دلته میزنه🤩
اونجا هست که توی سایت دیجی کالا میزنه فقط یه دونه کالا توی انباره؟ و همزمان چند نفر درخواست خرید میکنن؟اونجاست که بکار میاد😏
✅ حالا بریم سراغ Optimistic Concurrency Control
✅ توی این روش دیتابیس ما پسر خوبی شده و خیلی خوشبینانه به موضوع نگاه میکنه و پیش خودش میگه بعید بدونم دوتا درخواست همزمان بیاد سمتم. ولی در عوضش توی برنامه نویس بیا یه زحمتی بکش
برای جدولت یه ستون به اسم version بزار که توی هر تراکنش اونو اپدیت کنیم و اینطوری از تداخل درخواست ها جلوگیری کنیم
✅ یعنی چک کنیم ایا ورژن همون ورژنه یا عوض شده؟ اگه عوض شده که خب درخواست میره تو دیوار اگه همون بود پس تراکنش رو انجام بده و بعد یکی بهش اضاف کن
(ورژن فعلی رو 0 در نظر بگیرید)
✅ طبق مثال قبل فرض کنیم موجودی حساب ما 800 هست و شخص A میخواد 200 برداشت کنه و شخص B هم 100 اضاف کنه
درخواست A و B همزمان به دیتابیس میرسه
1⃣ مرحله اول شروع تراکنش ها:
به صورت همزمان شخص A و B موجودی و version رو از دیتابیس میخونن
2⃣ مرحله دوم پردازش تراکنش ها:
به صورت همزمان شخص A مبلغ 800 تومن رو میخونه و 200 تا ازش کم میکنه و شخص B هم 800 تومن رو میخونه و 100 تومن بهش اضاف میکنه
ولی دقت کنید که فقط محسابه انجام میشه و هنوز چیزی توی دیتابیس commit نشده
3⃣ مرحله سوم کامیت:
ابتدا شخص A ورژن رو چک میکنه که ایا با ورژن خودش برابر یا نه(فرض کنیم برابره) پس commit انجام میشه و موجودی حساب میشه 600 و حالا یه دونه به ورژن اضاف میکنه، پس ورژن ما از 0 میشه 1
✅ حالا شخص B ورژن رو چک میکنه و میبینه عه عه، ور چه ژنی؟ ورژن خودش 0 عه در حالی که ورژن ردیف مورد نظرش توسط تراکنش دیگه ای تغییر کرده و شده 1 پس کامیت انجام نمیشه و درخواست B به دیوار میخوره🥴
✅ در نتیجه شخص B خطا بهش برمیگرده و باید دوباره درخواست رو بفرسته
✅ برای بار دوم که درخواست میره، دوباره موجودی (که 600عه) و version رو میخونه ولی اینبار دیگه ورژن ها اوکی هستن پس اعمال میشه و موجودی ما میشه 700 و دوباره ورژن یکی بهش اضاف میشه
✅ پس بدون اینکه قفلی از طرف دیتابیس اعمال بشه تونستیم تداخل تراکنش هارو مدیریت کنیم و چون lockایی درکار نیست سرعت بالاتر رفته، اما از اون طرف یکی از درخواست هامون همیشه میره تو دیوار
✅ پست بعدی وارد دنیای distributed ها میشیم و میریم سراغ outbox pattern 😎
@LearnByLearn
#transaction
#concurrency
Pessimistic 🆚 Optimistic
قبلش اینو بگم اگه دوست داشتید این پلی لیست مفاهیم دیتابیس رو که قسمت چهارمش ACID هست رو مطالعه کنید
بدون هیچ بحث اضافه دیگه ای بریم سر اصل مطلب
✅ توی Pessimistic Concurrency Control دیتابیس به صورت خیلی بدبینانه به تراکنش ها نگاه میکنه و این احتمال رو میده که تراکنش ها باهم تداخل داشته باشن پس میاد از سیستم lock اش استفاده میکنه
✅ فرض کنیم موجودی فعلی حساب ما 800 تاست و شخص A میخواد 200 تا برداشت کنه و شخص B هم 100 تا اضاف کنه
✅ اول ببینیم اگه دیتابیس چیزی رو lock نکنه و هردوتا درخواست همزمان برسه چی پیش میاد 🧐
🔹شخص A مبلغ 800 رو از دیتابیس میخونه و بعد 200 تومن ازش کم میکنه
🔹شخص B هم 800 تومن رو از دیتابیس میخونه(درحالیکه باید 600 میخوند) و 100 تا بهش اضاف میکنه
حالا نتیجه نهایی ما به جای 700 میشه 900😱 اینجوری خیلی خوشبحال طرف میشه نه؟😎
✅ حالا اگه دیتابیس از سیستم lock استفاده کنه و به صورت بدبینانه نگاه کنه چطور؟🤔
درخواست شخص A به دیتابیس ارسال میشه اما اینجا دیتابیس میگه وایسا وایسا من باید اول حسابتو lock کنم تا تراکنش دیگه ای همزمان اعمال نشه حالا:
شخص A مقدار 800 تومن رو از دیتابیس میخونه و 200 تومن از حساب کم میکنه پس موجودی میشه 600 تومن
✅ حالا lock ازاد میشه
درخواست شخص B میرسه و دوباره دیتابیس lock میکنه. اینبار 600 رو از دیتابیس میخونه و 100 تومن رو اضافه میکنه و در اخر موجودی حساب ما میشه 700(نه 900)🥳
☝️حالا کجا خوبه ؟ کجا بده؟ اونجایی خوبه که تراکنش ها زیاد دچار تداخل میشن و اونجایی بده که این قفل کردن های مکرر باعث کندی سیستم ما بشه
✅ چطور توی کد نویسی اعمالش کنیم؟
با استفاده از کوعری به اسم for update میتونی اعمالش کنی
به chat GPT بگی برات کدشو به هر زبونی که دلته میزنه🤩
اونجا هست که توی سایت دیجی کالا میزنه فقط یه دونه کالا توی انباره؟ و همزمان چند نفر درخواست خرید میکنن؟اونجاست که بکار میاد😏
✅ حالا بریم سراغ Optimistic Concurrency Control
✅ توی این روش دیتابیس ما پسر خوبی شده و خیلی خوشبینانه به موضوع نگاه میکنه و پیش خودش میگه بعید بدونم دوتا درخواست همزمان بیاد سمتم. ولی در عوضش توی برنامه نویس بیا یه زحمتی بکش
برای جدولت یه ستون به اسم version بزار که توی هر تراکنش اونو اپدیت کنیم و اینطوری از تداخل درخواست ها جلوگیری کنیم
✅ یعنی چک کنیم ایا ورژن همون ورژنه یا عوض شده؟ اگه عوض شده که خب درخواست میره تو دیوار اگه همون بود پس تراکنش رو انجام بده و بعد یکی بهش اضاف کن
(ورژن فعلی رو 0 در نظر بگیرید)
✅ طبق مثال قبل فرض کنیم موجودی حساب ما 800 هست و شخص A میخواد 200 برداشت کنه و شخص B هم 100 اضاف کنه
درخواست A و B همزمان به دیتابیس میرسه
1⃣ مرحله اول شروع تراکنش ها:
به صورت همزمان شخص A و B موجودی و version رو از دیتابیس میخونن
2⃣ مرحله دوم پردازش تراکنش ها:
به صورت همزمان شخص A مبلغ 800 تومن رو میخونه و 200 تا ازش کم میکنه و شخص B هم 800 تومن رو میخونه و 100 تومن بهش اضاف میکنه
ولی دقت کنید که فقط محسابه انجام میشه و هنوز چیزی توی دیتابیس commit نشده
3⃣ مرحله سوم کامیت:
ابتدا شخص A ورژن رو چک میکنه که ایا با ورژن خودش برابر یا نه(فرض کنیم برابره) پس commit انجام میشه و موجودی حساب میشه 600 و حالا یه دونه به ورژن اضاف میکنه، پس ورژن ما از 0 میشه 1
✅ حالا شخص B ورژن رو چک میکنه و میبینه عه عه، ور چه ژنی؟ ورژن خودش 0 عه در حالی که ورژن ردیف مورد نظرش توسط تراکنش دیگه ای تغییر کرده و شده 1 پس کامیت انجام نمیشه و درخواست B به دیوار میخوره🥴
✅ در نتیجه شخص B خطا بهش برمیگرده و باید دوباره درخواست رو بفرسته
✅ برای بار دوم که درخواست میره، دوباره موجودی (که 600عه) و version رو میخونه ولی اینبار دیگه ورژن ها اوکی هستن پس اعمال میشه و موجودی ما میشه 700 و دوباره ورژن یکی بهش اضاف میشه
✅ پس بدون اینکه قفلی از طرف دیتابیس اعمال بشه تونستیم تداخل تراکنش هارو مدیریت کنیم و چون lockایی درکار نیست سرعت بالاتر رفته، اما از اون طرف یکی از درخواست هامون همیشه میره تو دیوار
✅ پست بعدی وارد دنیای distributed ها میشیم و میریم سراغ outbox pattern 😎
@LearnByLearn
#transaction
#concurrency
👍9🔥2
👏4👌1
Audio
رادیو جادی ۱۸۸ - موقع خوب هیچوقت نمیاد؛ عمل کن
در رادیوی ۱۸۸ بازم ای آی همه جا هست. از کشف آنتی باکتری تا سرمایهگذاریها و خودروهای هوشمند؛ ولی آیا ای آی جای ما برنامهنویسها رو میگیره؟ ظاهرا نه!
00:00 – رادیو جادی ۱۸۸ که اشتباهی فکر می کنیم ۱۸۹ است
02:36 – حمله سازمانهای روسی علیه سیگنال
10:26 – سوء استفاده چین از چت جی پی تی، گزارش امنیتی فصلی
13:37 – آیا ای آی شغل ما رو میگیره
18:00 – ایمیل گرگ کرو هارتمن در مورد راست در کرنل لینوکس
27:55 – هوش مصنوعی در دو روز به نتایجی بیشتر از ۱۰ سال تحقیق در مورد سوپر باگ مقاوم به آنتی بیوتیکها رسید
32:59 – آیا تسلا در آمریکا تاکسی راه اندازی میکنه؟
34:25 – سرمایهگذاری ۵۰۰ میلیارد دلاری اپل در آمریکا
35:38 – تعویض سرمایهگذاری اینتل در آمریکا به ۲۰۳۰
37:00 – بخش آخر (شامل راهنمای تلفنهای کمک در مواقعی مانند خودکشی، آزار، خشونت و اعتیاد)
https://youtu.be/RTgaLe7ky54
در رادیوی ۱۸۸ بازم ای آی همه جا هست. از کشف آنتی باکتری تا سرمایهگذاریها و خودروهای هوشمند؛ ولی آیا ای آی جای ما برنامهنویسها رو میگیره؟ ظاهرا نه!
00:00 – رادیو جادی ۱۸۸ که اشتباهی فکر می کنیم ۱۸۹ است
02:36 – حمله سازمانهای روسی علیه سیگنال
10:26 – سوء استفاده چین از چت جی پی تی، گزارش امنیتی فصلی
13:37 – آیا ای آی شغل ما رو میگیره
18:00 – ایمیل گرگ کرو هارتمن در مورد راست در کرنل لینوکس
27:55 – هوش مصنوعی در دو روز به نتایجی بیشتر از ۱۰ سال تحقیق در مورد سوپر باگ مقاوم به آنتی بیوتیکها رسید
32:59 – آیا تسلا در آمریکا تاکسی راه اندازی میکنه؟
34:25 – سرمایهگذاری ۵۰۰ میلیارد دلاری اپل در آمریکا
35:38 – تعویض سرمایهگذاری اینتل در آمریکا به ۲۰۳۰
37:00 – بخش آخر (شامل راهنمای تلفنهای کمک در مواقعی مانند خودکشی، آزار، خشونت و اعتیاد)
https://youtu.be/RTgaLe7ky54
👍2
LearnByLearn📖
اولین قسمت از تراکنش ها: Pessimistic 🆚 Optimistic قبلش اینو بگم اگه دوست داشتید این پلی لیست مفاهیم دیتابیس رو که قسمت چهارمش ACID هست رو مطالعه کنید بدون هیچ بحث اضافه دیگه ای بریم سر اصل مطلب ✅ توی Pessimistic Concurrency Control دیتابیس به صورت خیلی…
🤩 دومین قسمت از تراکنش ها OutBox Pattern
فرض کنید یک سیستم توزیع شده(distributed) فروشگاهی داریم که شامل یک بروکر هست، حالا یا ربیت یا کافکا یا هرچی و این وسط یک دیتابیسم داریم
حالا توی این سیستم ما، وقتی سفارشی ثبت میشه باید دوتا اتفاق بیوفته:
☝️یکی اینکه اون سفارش توی دیتابیس ثبت بشه.
☝️یکی دیگه اینکه event مربوط به اون سفارش توسط broker ما منتشر یا publish بشه و سایر سرویس هارو از این eventمطلع کنه
✅مثلا سرویس نوتیفیکیشن وقتی event ثبت سفارش رو دریافت کرد یه پیام بفرسته به کاربر یا مثلا سرویس انبار داری هم مطلع بشه که سفارش ثبت شده و کارای اداریشو انجام بدین
اینجا ما دوتا سناریو داریم
✅سناریو اول
سفارشمون کاملا موفقیت آمیز توی دیتابیس ثبت شد اما درست قبل از ارسال به بروکر ، سرور کرش میکنه یا چه میدونم network دچار مشکل میشه(اونم تو ایران که یه لحظه هم اینترنتا قطع نمیشن 😊)
ای داد بیداد سفارش توی دیتابیس ثبت شده ولی هیچ پیامی به سرویس های دیگه(نوتیفیکیشن و انبار) ارسال نشده 😨!!!!
✅سناریو دوم
فرض کن پیام موفقیت امیز توسط broker ارسال شده ولی حین ثبت، سرور دیتابیس دچار مشکل شده و rollback میخوره و سفارشمون توی دیتابیس نمیشینه
از طرفی پیام ثبت موفق امیزش هم توسط بروکر ارسال شده !!!!
پس سرویس های دیگه فکر میکنن سفارشی ثبت شده درحالی که هیچی ثبت نشده🤥
راه حل چیه 🤔
✅راه حل اینه یه دلال داده رو بیاریم توی کار که اسم این دلال outbox هست، این outbox یه جدول توی دیتابیسه که رابط بین دیتابیس سفارشات ما و بروکرمون هست
✅درواقع وقتی سفارش ثبت میشه، outbox میگه آقا پیام ثبت سفارش رو مستقیم نده به بروکر، بیا مستقیم بدش به خودم بعد من میدمش بروکر که پابلیشش کنه
✅حالا ارتباط بین outbox و بروکر چطوری برقرار میشه؟
یه worker این وسط به صورت دوره ای هی میاد جدول outbox رو چک میکنه و رکورد های جدول رو میخونه و میفرسته به broker
بعدش اون رکورد طبق سیاست های توسعه دهنده یا از outbox حذف میشه یا به عنوان successful تگ میخوره که یعنی پردازش شده
✅اینطوری اگر پردازش پیام دچار مشکل بشه، پیام توی Outbox باقی می مونه و دوباره توسط اون worker پردازش میشه پس تضمین ارسال دقیق یکبار (Exactly Once Delivery)هم برای ما فراهم میشه
دیگه نه نگران از دست دادن داده هات باش و ناهماهنگی بین سرویس ها
لینک همین مقاله توی لینکدین 👈🏻 لینک
مخصلیم❤️
@LearnByLearn
#outbox_pattern
فرض کنید یک سیستم توزیع شده(distributed) فروشگاهی داریم که شامل یک بروکر هست، حالا یا ربیت یا کافکا یا هرچی و این وسط یک دیتابیسم داریم
حالا توی این سیستم ما، وقتی سفارشی ثبت میشه باید دوتا اتفاق بیوفته:
☝️یکی اینکه اون سفارش توی دیتابیس ثبت بشه.
☝️یکی دیگه اینکه event مربوط به اون سفارش توسط broker ما منتشر یا publish بشه و سایر سرویس هارو از این eventمطلع کنه
✅مثلا سرویس نوتیفیکیشن وقتی event ثبت سفارش رو دریافت کرد یه پیام بفرسته به کاربر یا مثلا سرویس انبار داری هم مطلع بشه که سفارش ثبت شده و کارای اداریشو انجام بدین
اینجا ما دوتا سناریو داریم
✅سناریو اول
سفارشمون کاملا موفقیت آمیز توی دیتابیس ثبت شد اما درست قبل از ارسال به بروکر ، سرور کرش میکنه یا چه میدونم network دچار مشکل میشه(اونم تو ایران که یه لحظه هم اینترنتا قطع نمیشن 😊)
ای داد بیداد سفارش توی دیتابیس ثبت شده ولی هیچ پیامی به سرویس های دیگه(نوتیفیکیشن و انبار) ارسال نشده 😨!!!!
✅سناریو دوم
فرض کن پیام موفقیت امیز توسط broker ارسال شده ولی حین ثبت، سرور دیتابیس دچار مشکل شده و rollback میخوره و سفارشمون توی دیتابیس نمیشینه
از طرفی پیام ثبت موفق امیزش هم توسط بروکر ارسال شده !!!!
پس سرویس های دیگه فکر میکنن سفارشی ثبت شده درحالی که هیچی ثبت نشده🤥
راه حل چیه 🤔
✅راه حل اینه یه دلال داده رو بیاریم توی کار که اسم این دلال outbox هست، این outbox یه جدول توی دیتابیسه که رابط بین دیتابیس سفارشات ما و بروکرمون هست
✅درواقع وقتی سفارش ثبت میشه، outbox میگه آقا پیام ثبت سفارش رو مستقیم نده به بروکر، بیا مستقیم بدش به خودم بعد من میدمش بروکر که پابلیشش کنه
✅حالا ارتباط بین outbox و بروکر چطوری برقرار میشه؟
یه worker این وسط به صورت دوره ای هی میاد جدول outbox رو چک میکنه و رکورد های جدول رو میخونه و میفرسته به broker
بعدش اون رکورد طبق سیاست های توسعه دهنده یا از outbox حذف میشه یا به عنوان successful تگ میخوره که یعنی پردازش شده
✅اینطوری اگر پردازش پیام دچار مشکل بشه، پیام توی Outbox باقی می مونه و دوباره توسط اون worker پردازش میشه پس تضمین ارسال دقیق یکبار (Exactly Once Delivery)هم برای ما فراهم میشه
دیگه نه نگران از دست دادن داده هات باش و ناهماهنگی بین سرویس ها
لینک همین مقاله توی لینکدین 👈🏻 لینک
مخصلیم❤️
@LearnByLearn
#outbox_pattern
👍5
Forwarded from Go Casts 🚀
This media is not supported in your browser
VIEW IN TELEGRAM
تصور کن کردیا جان، دختر ده ساله به این نازنینی تا به اینجای زندگی ش فقط ۵ بار عمل بالن انجام داده و ما چه می دانیم عمل بالن چیه
اگه برای حمایت مادی و معنوی از مظلوم ترین و معصوم ترین بچه های دنیا آماده اید، بسم الله، یه یا علی بگیم و شروع کنیم. ببینم چند نفریم، تا میتونید بازنشر بدید، کامنت بذارید و کمک کنید
در خانه ای بی حمایت های شما صرف هزینه های درمانی و معیشتی بیماران پروانه ای میشه، هر گونه سند و مدرکی هم لازم باشه ارائه میشه خدمت تون
لینک حمایت
https://ebhome.ngo/support?utm_campaign=gocasts140312
پیج اینستاگرام خانه ای بی
https://www.instagram.com/reel/DDr-RqRoqBI/?igsh=MW56MWh2cHJidDI5bA==
ان شاءالله که به برکت نگاه مهربان همین بچه ها سال جدید بهترین سال زندگی تون باشه ❤️❤️❤️
@gocasts
اگه برای حمایت مادی و معنوی از مظلوم ترین و معصوم ترین بچه های دنیا آماده اید، بسم الله، یه یا علی بگیم و شروع کنیم. ببینم چند نفریم، تا میتونید بازنشر بدید، کامنت بذارید و کمک کنید
در خانه ای بی حمایت های شما صرف هزینه های درمانی و معیشتی بیماران پروانه ای میشه، هر گونه سند و مدرکی هم لازم باشه ارائه میشه خدمت تون
لینک حمایت
https://ebhome.ngo/support?utm_campaign=gocasts140312
پیج اینستاگرام خانه ای بی
https://www.instagram.com/reel/DDr-RqRoqBI/?igsh=MW56MWh2cHJidDI5bA==
ان شاءالله که به برکت نگاه مهربان همین بچه ها سال جدید بهترین سال زندگی تون باشه ❤️❤️❤️
@gocasts
❤9💔5
عید همگی مباررررک🥳🥳🌺
امیدوارم امسال همهی باگهای زندگیتون فیکس بشه، performance زندگیتون بهینه بشه و happiness rate تون همیشه ۱۰۰٪ باشه!
@LearnByLearn
امیدوارم امسال همهی باگهای زندگیتون فیکس بشه، performance زندگیتون بهینه بشه و happiness rate تون همیشه ۱۰۰٪ باشه!
@LearnByLearn
❤13
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
101-steps-after-installing-linux.pdf
5.9 MB
🔹 هدیه نوروزی کتاب یازدهم از مجموعه ۱۰۰ کتاب لینوکسی خودم رو با عنوان:
🔸۱۰۱ گام بعد نصب لینوکس(مخصوص توزیع های دبیان بیس)
🔸ویرایش دوم 1404
🔸150 صفحه
🔸تماما رنگی
🔸قطع کتاب A4
🔸انتشارات یافته، ناشر کتب دانشگاهی
🔸نویسنده: حسین سیلانی
https://news.1rj.ru/str/linuxtnt
🔸۱۰۱ گام بعد نصب لینوکس(مخصوص توزیع های دبیان بیس)
🔸ویرایش دوم 1404
🔸150 صفحه
🔸تماما رنگی
🔸قطع کتاب A4
🔸انتشارات یافته، ناشر کتب دانشگاهی
🔸نویسنده: حسین سیلانی
https://news.1rj.ru/str/linuxtnt
👍6
linuxtnt(linux tips and tricks)
101-steps-after-installing-linux.pdf
اگه لینوکس یوزر هستید
پیشنهاد میکنم یه نگاهی حتی شده سرسری به این کتاب بندازید نکات خوبی داره
مخصوصا برای کسایی که تازه اومدن سمت لینوکس
پیشنهاد میکنم یه نگاهی حتی شده سرسری به این کتاب بندازید نکات خوبی داره
مخصوصا برای کسایی که تازه اومدن سمت لینوکس
✅ این مقاله خیلی ساده، خلاصه و قشنگ راجع به ساختار و فایل بندی یه پروژه گولنگی صحبت کرده
https://medium.com/@smart_byte_labs/organize-like-a-pro-a-simple-guide-to-go-project-folder-structures-e85e9c1769c2
⚠️ پ.ن:
اما قشنگ تر از اینا، یه ساختار باحال تر هست که ترکیبی از ساختار های همین مقاله بالا هستش.
بزودی توی پست بعدی راجع بهش مینویسم
مخلصیم❤️
#golang_structure_project
@LearnByLearn
https://medium.com/@smart_byte_labs/organize-like-a-pro-a-simple-guide-to-go-project-folder-structures-e85e9c1769c2
اما قشنگ تر از اینا، یه ساختار باحال تر هست که ترکیبی از ساختار های همین مقاله بالا هستش.
بزودی توی پست بعدی راجع بهش مینویسم
مخلصیم❤️
#golang_structure_project
@LearnByLearn
Medium
Organize Like a Pro: A Simple Guide to Go Project Folder Structures
When we talk about folder structure in Golang (or really any programming language), we’re referring to how we organize our files and…
👍1
Forwarded from Go Casts 🚀
تیم JetBrains دیروز مقاله ای رو منتشر کرده با این عنوان که «آیا گولنگ همچنان در حال رشده؟»
آمار جالبی رو منتشر کرده که میتونید کاملش رو تو مقاله خودشون بخونید.
مثلا گزارش شده که ۱ میلیون ۸۰۰ هزار برنامه نویس به عنوان زبان اصلی دارن از گولنگ استفاده میکنن.
نکته دیگه ای که گزارش شده اینه که میزان تقاضا برای برنامه نویس های گولنگ بالا و رو به افزایش هست و یکی از علت هاش اینه که شرکت ها بیش از پیش به سمت معماری cloud-native میرن.
Is Golang Still Growing? Go Language Popularity Trends in 2024
https://blog.jetbrains.com/research/2025/04/is-golang-still-growing-go-language-popularity-trends-in-2024/
چند وقت پیش هم گزارش نظرسنجی JetBrains برای سال ۲۰۲۴ منتشر شده که نتایج جالبش رو بررسی کرده بودیم.
https://news.1rj.ru/str/gocasts/601
@gocasts
Ai for Software
@aicasts_ir
آمار جالبی رو منتشر کرده که میتونید کاملش رو تو مقاله خودشون بخونید.
مثلا گزارش شده که ۱ میلیون ۸۰۰ هزار برنامه نویس به عنوان زبان اصلی دارن از گولنگ استفاده میکنن.
نکته دیگه ای که گزارش شده اینه که میزان تقاضا برای برنامه نویس های گولنگ بالا و رو به افزایش هست و یکی از علت هاش اینه که شرکت ها بیش از پیش به سمت معماری cloud-native میرن.
Is Golang Still Growing? Go Language Popularity Trends in 2024
https://blog.jetbrains.com/research/2025/04/is-golang-still-growing-go-language-popularity-trends-in-2024/
چند وقت پیش هم گزارش نظرسنجی JetBrains برای سال ۲۰۲۴ منتشر شده که نتایج جالبش رو بررسی کرده بودیم.
https://news.1rj.ru/str/gocasts/601
@gocasts
Ai for Software
@aicasts_ir
👎1
Audio
رادیوجادی ۱۹۱ - دیگه کسی ما رو نمیخره
https://youtu.be/BaNEBksgdR4
در رادیوی ۱۹۱ با درد و دل کامیار شروع میکنیم و از مهملات میگیم، از هوش مصنوعی مثبت و منفی و اینکه کسی دیگه برای اطلاعات ما پولی نمیده. واقعا دیگه اصلا نمیارزیم! اوه یه خبر فوق العاده جالب از یه بحث عجیب هم داریم: اکثر کهکشانها در جهت عقربه ساعت میچرخن؛ اما چرا؟!
00:00 - صحبتهای کامیار در مورد ابزارها
02:00 - رادیوجادی ۱۹۱ کسی ما رو نمی خره
04:35 هوش مصنوعی هنوز آماده دیباگ کردن نیست
10:00 - مایکروسافت میگه ۹۵٪ کدها رو هوش مصنوعی خواهد نوشت
12:15 - نظارت بر تهران با ۱۵ هزار دوربین جدید
13:30 - ویزا با صد میلیون دلار جای مسترکارت رو برای اپل میگیره
14:48 - بیشتر کهکشانها در خلاف جهت عقربههای ساعت میچرخن؛ واقعا چرا؟
22:10 - گفتن «لطفا» و «ممنون» میلیونها دلار هزینه داره
27:25 - ادعاهای هک ایران در مورد کدبرکرز بانک سپه و شدوبیتس همراه اول
32:00 - بخش آخر
37:48 - پیامهای شما
https://youtu.be/BaNEBksgdR4
در رادیوی ۱۹۱ با درد و دل کامیار شروع میکنیم و از مهملات میگیم، از هوش مصنوعی مثبت و منفی و اینکه کسی دیگه برای اطلاعات ما پولی نمیده. واقعا دیگه اصلا نمیارزیم! اوه یه خبر فوق العاده جالب از یه بحث عجیب هم داریم: اکثر کهکشانها در جهت عقربه ساعت میچرخن؛ اما چرا؟!
00:00 - صحبتهای کامیار در مورد ابزارها
02:00 - رادیوجادی ۱۹۱ کسی ما رو نمی خره
04:35 هوش مصنوعی هنوز آماده دیباگ کردن نیست
10:00 - مایکروسافت میگه ۹۵٪ کدها رو هوش مصنوعی خواهد نوشت
12:15 - نظارت بر تهران با ۱۵ هزار دوربین جدید
13:30 - ویزا با صد میلیون دلار جای مسترکارت رو برای اپل میگیره
14:48 - بیشتر کهکشانها در خلاف جهت عقربههای ساعت میچرخن؛ واقعا چرا؟
22:10 - گفتن «لطفا» و «ممنون» میلیونها دلار هزینه داره
27:25 - ادعاهای هک ایران در مورد کدبرکرز بانک سپه و شدوبیتس همراه اول
32:00 - بخش آخر
37:48 - پیامهای شما
⚡2❤1
❓لینک ها(link) در لینوکس چی هستن ؟
✅ توی لینوکس(یا هرسیستم عاملی)، لینک یه راهه برای اشارهکردن به یه فایل دیگه.
✅ یعنی به جای اینکه خود فایل رو دوباره بسازیم یا کپی کنیم، یه "میانبر" یا "اسم دیگه" براش درست میکنیم که بتونیم ازش استفاده کنیم.
اینطوری هم جا کمتر میگیره، هم مدیریت فایلها راحتتر میشه و هرزمان شما چه فایل اصلی و چه فایل لینک شده رو تغییر بدی، تغییرات توی هردو فایل اعمال میشه
✅ این لینک ها توی ویندوز همون shortcut ها هستن
❓هاردلینک ها(Hard Link):
✅ انگار که یه اسم دیگه اس برای همون فایل اصلیه. هر دو به یه جای واقعی توی حافظه (inode) اشاره میکنن. اگه یکی رو پاک کنی، اون یکی هنوز کار میکنه.
❓سافت لینک ها(Soft Link):
✅ مثل شورتکاته. فقط مسیر فایل رو نگه میداره(inode ها متفاوتن) و اگه فایل اصلی پاک بشه، اینم دیگه به کار نمیاد و در اصطلاح broken میشه.
👈🏻 در واقع inode ها یکسری اطلاعات اضافه(metadata) در رابطه با اون فایل هستن
@LearnByLearn
#linux
#soft_link
#hard_link
✅ توی لینوکس(یا هرسیستم عاملی)، لینک یه راهه برای اشارهکردن به یه فایل دیگه.
✅ یعنی به جای اینکه خود فایل رو دوباره بسازیم یا کپی کنیم، یه "میانبر" یا "اسم دیگه" براش درست میکنیم که بتونیم ازش استفاده کنیم.
اینطوری هم جا کمتر میگیره، هم مدیریت فایلها راحتتر میشه و هرزمان شما چه فایل اصلی و چه فایل لینک شده رو تغییر بدی، تغییرات توی هردو فایل اعمال میشه
✅ این لینک ها توی ویندوز همون shortcut ها هستن
❓هاردلینک ها(Hard Link):
✅ انگار که یه اسم دیگه اس برای همون فایل اصلیه. هر دو به یه جای واقعی توی حافظه (inode) اشاره میکنن. اگه یکی رو پاک کنی، اون یکی هنوز کار میکنه.
ln <file-address> <link-address>
❓سافت لینک ها(Soft Link):
✅ مثل شورتکاته. فقط مسیر فایل رو نگه میداره(inode ها متفاوتن) و اگه فایل اصلی پاک بشه، اینم دیگه به کار نمیاد و در اصطلاح broken میشه.
ln -s <file-address> <link-address>
👈🏻 در واقع inode ها یکسری اطلاعات اضافه(metadata) در رابطه با اون فایل هستن
@LearnByLearn
#linux
#soft_link
#hard_link
👍6
Audio
رادیوجادی ۱۹۲ - غیرمستقیم
حالا که کارهای غیرمستقیم آزاده ما چرا نکنیم؟ تو این شماره نه فقط سراغ ای آی و شرایط کاری ای که درست کرده میریم که به مدل کیبرد لینوس توروالدز نگاه می کنیم و بررسی می کنیم که چرا اسم پاپ؛ لئوی ۱۴ است و این اصلا چه ربطی به ما داره! با من باشین که جهان هکرهای بیشتری لازم داره.
00:00 - رادیوجادی ۱۹۲
01:22 - تاثیر ای آی و هوش مصنوعی و مدلهای زبانی بر مشاغل
07:17 - مایکروسات ۶۰۰۰ نفر رو اخراج میکنه
10:51 - بازم هم اخراج و بحث جی تی ای ۶
12:05 - مایکروسافت میخواد برای آپدیت سرورهاش هم پول بگیره
16:30 - خبر جلف کیبرد مورد استفاده لینوس توروالدز
20:32 - «نگرانی از هوش مصنوعی» دلیل انتخاب نام لئوی ۱۴ ام
23:52 - دیدار کشورهای جهان برای بررسی قوانین مرتبط با رباتهای قاتل
30:59 - بخش آخر
https://youtu.be/-UtzE7kEkUo
حالا که کارهای غیرمستقیم آزاده ما چرا نکنیم؟ تو این شماره نه فقط سراغ ای آی و شرایط کاری ای که درست کرده میریم که به مدل کیبرد لینوس توروالدز نگاه می کنیم و بررسی می کنیم که چرا اسم پاپ؛ لئوی ۱۴ است و این اصلا چه ربطی به ما داره! با من باشین که جهان هکرهای بیشتری لازم داره.
00:00 - رادیوجادی ۱۹۲
01:22 - تاثیر ای آی و هوش مصنوعی و مدلهای زبانی بر مشاغل
07:17 - مایکروسات ۶۰۰۰ نفر رو اخراج میکنه
10:51 - بازم هم اخراج و بحث جی تی ای ۶
12:05 - مایکروسافت میخواد برای آپدیت سرورهاش هم پول بگیره
16:30 - خبر جلف کیبرد مورد استفاده لینوس توروالدز
20:32 - «نگرانی از هوش مصنوعی» دلیل انتخاب نام لئوی ۱۴ ام
23:52 - دیدار کشورهای جهان برای بررسی قوانین مرتبط با رباتهای قاتل
30:59 - بخش آخر
https://youtu.be/-UtzE7kEkUo
❤2
✅ نحوه گرفتن Gemini Pro گوگل + 2 ترابایت حجم ذخیره سازی رایگان
✅ اگه از قبل اکانت گوگل دارید که هیچی
اگه ندارید یه اکانت گوگل بسازید
✅ بعد با ip آمریکا روی لینک زیر کلیک کنید و گزینه get student رو بزنید، یه اکانت یکساله pro بهتون میده
https://one.google.com/join/ai-student
✅ حالا ip آمریکا از کجا بیاریم؟ از اکستنشن veepn میتونید برای ip امریکا استفاده کنید
✅ وقتی کاربر pro بشید دور عکس اکانتتون رنگی میشه
👈 نکته: تا سه ماه رایگانه و بعد سه ماه نیازه کردیت کارت معرفی کنید تا 9 ماه دیگه رایگان بشه
@LearnByLearn
✅ اگه از قبل اکانت گوگل دارید که هیچی
اگه ندارید یه اکانت گوگل بسازید
✅ بعد با ip آمریکا روی لینک زیر کلیک کنید و گزینه get student رو بزنید، یه اکانت یکساله pro بهتون میده
https://one.google.com/join/ai-student
✅ حالا ip آمریکا از کجا بیاریم؟ از اکستنشن veepn میتونید برای ip امریکا استفاده کنید
✅ وقتی کاربر pro بشید دور عکس اکانتتون رنگی میشه
👈 نکته: تا سه ماه رایگانه و بعد سه ماه نیازه کردیت کارت معرفی کنید تا 9 ماه دیگه رایگان بشه
@LearnByLearn
🙏2❤1