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
📝 پیام صریح مایکروسافت به برنامهنویسان /هوش مصنوعی از کارمندان عزیزتر شد؟
در حالی که مایکروسافت بهتازگی ۶هزار موقعیت شغلی را حذف کرده و بیشترین آسیب را مهندسان نرمافزار دیدهاند، مدیر ارشد محصولات این شرکت بهروشنی اعلام کرده که با دیدگاههایی مبنی بر منسوخ شدن حرفه برنامهنویسی بهشدت مخالف است.
آپارنا چناپراگادا، مدیر ارشد بخش «تجربهها و دستگاهها» در مایکروسافت، معتقد است که هوش مصنوعی صرفاً «لایهی جدیدی از انتزاع» در مسیر تکامل برنامهنویسی است. او توضیح داد: «ما دیگر با اسمبلی کدنویسی نمیکنیم. بیشترمون حتی دیگه با زبان C هم کار نمیکنیم. ما با لایههای بالاتر و بالاتر از انتزاع کار میکنیم.»
او در ادامه پیشنهاد کرد که مهندسان نرمافزار ممکن است در آینده بیشتر نقش «اپراتورهای نرمافزار» را داشته باشند. چناپراگادا نیز پیشبینی کرده است که تعداد اپراتورهای نرمافزار ممکن است ده برابر شود و گفته است شاید در آینده بهجای ‘Cs’ چیز دیگری مانند ‘SOs’ داشته باشیم. اما این به این معنی نیست که نباید علوم کامپیوتر یاد گرفت.
📖 منبع خبر: مجله هوش مصنوعی homeai
@LearnByLearn
در حالی که مایکروسافت بهتازگی ۶هزار موقعیت شغلی را حذف کرده و بیشترین آسیب را مهندسان نرمافزار دیدهاند، مدیر ارشد محصولات این شرکت بهروشنی اعلام کرده که با دیدگاههایی مبنی بر منسوخ شدن حرفه برنامهنویسی بهشدت مخالف است.
آپارنا چناپراگادا، مدیر ارشد بخش «تجربهها و دستگاهها» در مایکروسافت، معتقد است که هوش مصنوعی صرفاً «لایهی جدیدی از انتزاع» در مسیر تکامل برنامهنویسی است. او توضیح داد: «ما دیگر با اسمبلی کدنویسی نمیکنیم. بیشترمون حتی دیگه با زبان C هم کار نمیکنیم. ما با لایههای بالاتر و بالاتر از انتزاع کار میکنیم.»
او در ادامه پیشنهاد کرد که مهندسان نرمافزار ممکن است در آینده بیشتر نقش «اپراتورهای نرمافزار» را داشته باشند. چناپراگادا نیز پیشبینی کرده است که تعداد اپراتورهای نرمافزار ممکن است ده برابر شود و گفته است شاید در آینده بهجای ‘Cs’ چیز دیگری مانند ‘SOs’ داشته باشیم. اما این به این معنی نیست که نباید علوم کامپیوتر یاد گرفت.
📖 منبع خبر: مجله هوش مصنوعی homeai
@LearnByLearn
👍2
LearnByLearn📖
✅ این مقاله خیلی ساده، خلاصه و قشنگ راجع به ساختار و فایل بندی یه پروژه گولنگی صحبت کرده https://medium.com/@smart_byte_labs/organize-like-a-pro-a-simple-guide-to-go-project-folder-structures-e85e9c1769c2 ⚠️ پ.ن: اما قشنگ تر از اینا، یه ساختار باحال تر…
✅ پروژه های گولنگی معمولا ساختار خیلی مشخصی ندارن و این ساختار بر عهده خود تیم یا برنامه نویسه
✅ میخوام توی این مقاله یه ساختار پروژه رو توضیح بدم که خیلی قشنگ دیزاین شده(مونوریپوعه که خیلی راحت تبدیل به میکروسرویس میشه)
✅ قطعا مثل همه ساختار ها و پروژه های دیگه بی عیب و نقص نیست ولی درکل چیز جوابیه
✅ سعی میکنم ریز به ریزشو با جزعیات توضیح بدم ولی در نهایت این شمایید که طبق پروژه خودتون کاستومش میکنید
✅ قبلش اینو باید بگم که این ساختار رو توی پروژه تیم سازی بوت کمپ گوکست، با کمک منتور و استاد عزیزم حسین نظری و بقیه دوستان شرکت کننده پیاده سازی کردیم.
چون پروژه private هست کد هارو نمیتونم بزارم و این ساختار هم با اجازه خود مهندس نظری share میکنم
این هم آدرس کانالشون هست @gocasts به واسطه حق کپی رایت
انشالله به کار دوستان بیاد
ساختار رو سعی میکنم امروز بنویسم
مخلص همه❤️❤️
@LearnByLearn
✅ میخوام توی این مقاله یه ساختار پروژه رو توضیح بدم که خیلی قشنگ دیزاین شده(مونوریپوعه که خیلی راحت تبدیل به میکروسرویس میشه)
✅ قطعا مثل همه ساختار ها و پروژه های دیگه بی عیب و نقص نیست ولی درکل چیز جوابیه
✅ سعی میکنم ریز به ریزشو با جزعیات توضیح بدم ولی در نهایت این شمایید که طبق پروژه خودتون کاستومش میکنید
✅ قبلش اینو باید بگم که این ساختار رو توی پروژه تیم سازی بوت کمپ گوکست، با کمک منتور و استاد عزیزم حسین نظری و بقیه دوستان شرکت کننده پیاده سازی کردیم.
چون پروژه private هست کد هارو نمیتونم بزارم و این ساختار هم با اجازه خود مهندس نظری share میکنم
این هم آدرس کانالشون هست @gocasts به واسطه حق کپی رایت
انشالله به کار دوستان بیاد
ساختار رو سعی میکنم امروز بنویسم
مخلص همه❤️❤️
@LearnByLearn
❤5🙏3
LearnByLearn📖
✅ پروژه های گولنگی معمولا ساختار خیلی مشخصی ندارن و این ساختار بر عهده خود تیم یا برنامه نویسه ✅ میخوام توی این مقاله یه ساختار پروژه رو توضیح بدم که خیلی قشنگ دیزاین شده(مونوریپوعه که خیلی راحت تبدیل به میکروسرویس میشه) ✅ قطعا مثل همه ساختار ها و پروژه…
✅ پوشه .air :
توی این پوشه با توجه به هر اپ(سرویس) که قراره بالا بیاد، یک فایل air.myApp.toml داریم
این برای اینه که وقتی توی دولوپمنت یه اپ رو توسط داکر یا کوبر یا هرچی بالا اوردیم(توی مرحله دولوپمنت) ومثلا تغییراتی دادیم، هربار نخواییم اون اپ رو برای اجرای تغییرات بیاریم پایین و دوباره بالا بیاریم.
✅ پوشه adapter :
توی این پوشه ابزار هایی رو استفاده میکنیم که قراره توی پروژه بقیه سرویس هامون ازش استفاده کنن.
مثلا فرض کنید توی پروژه، سرویس هامون میخوان از rabbitMQ استفاده کنن. ما نمیاییم که خود ربیت رو مستقمی توی اون سرویس ایمپورت کنیم و استفاده کنیم. چون بر فرض فردا اگه بخواییم مسیج بروکرمون رو تغییر بدیم کد های ربیت با اون سرویس couple شدن و سخته عوض کردنش
به همین خاطر یک لایه ابسترکت به اسم adapter استفاده میکنیم و هر ابزار خارجی رو که پروژه و سرویس هامون نیاز داره رو اون جا یه پوشه براش میسازیم و متد های مورد نیاز رو براش پیاده میکنیم و بعد اون اداپتر رو به سرویس مورد نظر تزریق میکنیم
حتی grpc یک اپلیکیشن هم که قراره سایر سرویس ها ازش استفاده کنن هم یه سرویس خارجی حساب میشه که توی این پوشه قرار داده میشه
✅ پوشه cli :
این پوشه برای تست endpoint ها استفاده میشه، که هرکس به هرسرویس نیاز داشت از طریق این cli درخواستش رو به سرویس مورد نظر بفرسته و به اعضای هر سرویس یه پوشه داریم
✅ پوشه cmd :
برای اکسترنال کامند ها هم به اعضای هر سرویس یه پوشه اینجا میسازیم(همون main.go) هر اپ
✅ پوشه config :
دقت کنید که این پوشه فایل های کانفیگ پروژه نیست. بلکه کانفیگوریشن منیجمنتی که خودمون برای پروژه نوشتیم
✅ پوشه deploy :
کلا کار های دیپلویمنت رو برای هر سرویس اینجا انجام میدیم. فایل های کانفیگ هر اپ توی این پوشه و در پوشه مخصوص به خودشون قرار میگیرن
✅ پوشه pkg :
هر چیزی که قرار باشه به صورت مشترک برای همه سرویس ها استفاده بشه رو اینجا مینویسم مثل یه پکیج که مربوط به request زدن باشه
✅ پوشه protobuf :
توی این پوشه فایل های مربوط به پروتوباف و grpc رو که برای ارتباط بین سرویس هاست میزاریم
✅ پوشه noscript :
اسکریپت های مورد نیاز رو اینجا میزاریم
✅ پوشه types :
تایپ های جنریک که قراره توی کل سرویس ها یکپارچه باشن مثلا ID رو توی این پوشه میسازیم
✅ app_name :
هر سرویس یا همون اپلیکیشنی که نیاز داریم، طبق الگو نام گذاری که تیم به توافق رسیده رو به این شکل درست میکنیم مثلا : notificationApp یا userApp
✅ فایل makefile :
از این برای بالا اوردن پروژه استفاده میکنیم مثلا اگه قراره سرویسی run بشه یا پیش نیازی داره اینجا اوکی میکنیم
حالا توی هر سرویس هم باز یه ساختار مشخص داریم که تمام اپ ها به علت یکپارچه بودن ملزم هستن از این ساختار پیروی کنن:
هر سرویس این فایل و پوشه هارو داره:
✅ پوشه delivery : راه های ارتباطی با بیرون. مثلا قراره سرور http باشه پس یه پوشه http میسازیم و و هندلر هامون رو اونجا اوکی میکنیم یا مثلا اگه ارتباط از نوع grpc باشه باز یه پوشه میسازیم و بقیه ماجرا و توی پوشه delivery یه پوشه به اسم middlewere هست که میدلور های مربوط به سرویس رو اونجا هندل میکنیم
✅ پوشه validation : برای ولیدیشن های موجود توی endpoint ها استفاده میشه
بقیه فایل ها مثل params ها و config مربوط به اون سرویس و entity و …. هم اگه نیاز بود میسازیم
برای هر سرویس هم یه فایل app.go داریم که مثل main اون سرویس میمونه
پوشه service : برای بیزینس لاجیک اون سرویس استفاده میشه
✅ پوشه repository : برای لایه دیتابیس استفاده میشه
✅ با توجه به نیاز اون پروژه ممکنه چیزایی این فایل ها اضافه یا کم بشه که دیگه بستگی به پروژه اتون داره ولی به راحتی با تغییرات کوچیک قابل تبدیل به میکروسرویس هستش
مخلص همه ❤️
@LearnByLearn
#golang
توی این پوشه با توجه به هر اپ(سرویس) که قراره بالا بیاد، یک فایل air.myApp.toml داریم
این برای اینه که وقتی توی دولوپمنت یه اپ رو توسط داکر یا کوبر یا هرچی بالا اوردیم(توی مرحله دولوپمنت) ومثلا تغییراتی دادیم، هربار نخواییم اون اپ رو برای اجرای تغییرات بیاریم پایین و دوباره بالا بیاریم.
✅ پوشه adapter :
توی این پوشه ابزار هایی رو استفاده میکنیم که قراره توی پروژه بقیه سرویس هامون ازش استفاده کنن.
مثلا فرض کنید توی پروژه، سرویس هامون میخوان از rabbitMQ استفاده کنن. ما نمیاییم که خود ربیت رو مستقمی توی اون سرویس ایمپورت کنیم و استفاده کنیم. چون بر فرض فردا اگه بخواییم مسیج بروکرمون رو تغییر بدیم کد های ربیت با اون سرویس couple شدن و سخته عوض کردنش
به همین خاطر یک لایه ابسترکت به اسم adapter استفاده میکنیم و هر ابزار خارجی رو که پروژه و سرویس هامون نیاز داره رو اون جا یه پوشه براش میسازیم و متد های مورد نیاز رو براش پیاده میکنیم و بعد اون اداپتر رو به سرویس مورد نظر تزریق میکنیم
حتی grpc یک اپلیکیشن هم که قراره سایر سرویس ها ازش استفاده کنن هم یه سرویس خارجی حساب میشه که توی این پوشه قرار داده میشه
✅ پوشه cli :
این پوشه برای تست endpoint ها استفاده میشه، که هرکس به هرسرویس نیاز داشت از طریق این cli درخواستش رو به سرویس مورد نظر بفرسته و به اعضای هر سرویس یه پوشه داریم
✅ پوشه cmd :
برای اکسترنال کامند ها هم به اعضای هر سرویس یه پوشه اینجا میسازیم(همون main.go) هر اپ
✅ پوشه config :
دقت کنید که این پوشه فایل های کانفیگ پروژه نیست. بلکه کانفیگوریشن منیجمنتی که خودمون برای پروژه نوشتیم
✅ پوشه deploy :
کلا کار های دیپلویمنت رو برای هر سرویس اینجا انجام میدیم. فایل های کانفیگ هر اپ توی این پوشه و در پوشه مخصوص به خودشون قرار میگیرن
✅ پوشه pkg :
هر چیزی که قرار باشه به صورت مشترک برای همه سرویس ها استفاده بشه رو اینجا مینویسم مثل یه پکیج که مربوط به request زدن باشه
✅ پوشه protobuf :
توی این پوشه فایل های مربوط به پروتوباف و grpc رو که برای ارتباط بین سرویس هاست میزاریم
✅ پوشه noscript :
اسکریپت های مورد نیاز رو اینجا میزاریم
✅ پوشه types :
تایپ های جنریک که قراره توی کل سرویس ها یکپارچه باشن مثلا ID رو توی این پوشه میسازیم
✅ app_name :
هر سرویس یا همون اپلیکیشنی که نیاز داریم، طبق الگو نام گذاری که تیم به توافق رسیده رو به این شکل درست میکنیم مثلا : notificationApp یا userApp
✅ فایل makefile :
از این برای بالا اوردن پروژه استفاده میکنیم مثلا اگه قراره سرویسی run بشه یا پیش نیازی داره اینجا اوکی میکنیم
حالا توی هر سرویس هم باز یه ساختار مشخص داریم که تمام اپ ها به علت یکپارچه بودن ملزم هستن از این ساختار پیروی کنن:
هر سرویس این فایل و پوشه هارو داره:
✅ پوشه delivery : راه های ارتباطی با بیرون. مثلا قراره سرور http باشه پس یه پوشه http میسازیم و و هندلر هامون رو اونجا اوکی میکنیم یا مثلا اگه ارتباط از نوع grpc باشه باز یه پوشه میسازیم و بقیه ماجرا و توی پوشه delivery یه پوشه به اسم middlewere هست که میدلور های مربوط به سرویس رو اونجا هندل میکنیم
✅ پوشه validation : برای ولیدیشن های موجود توی endpoint ها استفاده میشه
بقیه فایل ها مثل params ها و config مربوط به اون سرویس و entity و …. هم اگه نیاز بود میسازیم
برای هر سرویس هم یه فایل app.go داریم که مثل main اون سرویس میمونه
پوشه service : برای بیزینس لاجیک اون سرویس استفاده میشه
✅ پوشه repository : برای لایه دیتابیس استفاده میشه
✅ با توجه به نیاز اون پروژه ممکنه چیزایی این فایل ها اضافه یا کم بشه که دیگه بستگی به پروژه اتون داره ولی به راحتی با تغییرات کوچیک قابل تبدیل به میکروسرویس هستش
مخلص همه ❤️
@LearnByLearn
#golang
project
|
|- .air
|- adapter
| | redis
| | RabbitMQ
| | userapp
|- cli
|- cmd
| | userService
| | notificationService
|- config
| | config.go
| | default.go
| | load.go
|- deploy
|- noscript
|- pkg
|- protobuf
|- types
|- MakeFile
userapp
| delivery
| | grpc
| | |handlers
| | http
| | |handlers
| params
| validation
| repository
|__ service👏6👍1👎1
Forwarded from Infrastructure Artists
با درود و مهر خدمت همه عزیزان
چندتا ویدیو جدید تو کانال یوتیوب آپلود شد که میتونید از لینک زیر مشاهده کنید
https://youtube.com/@sudoix
مطالبی که در خصوصش صحبت شد
Cron, crontab
At
ممنون میشم با شیر و ری پست باعث بشید این مطالب به دست افراد بیشتری برسه
کانال و گروه تلگرام:
https://news.1rj.ru/str/sudoix_channel
.
https://news.1rj.ru/str/SudoSuDash
خیلی مخلصیم.
چندتا ویدیو جدید تو کانال یوتیوب آپلود شد که میتونید از لینک زیر مشاهده کنید
https://youtube.com/@sudoix
مطالبی که در خصوصش صحبت شد
Cron, crontab
At
ممنون میشم با شیر و ری پست باعث بشید این مطالب به دست افراد بیشتری برسه
کانال و گروه تلگرام:
https://news.1rj.ru/str/sudoix_channel
.
https://news.1rj.ru/str/SudoSuDash
خیلی مخلصیم.
👍3