Mahi in Tech – Telegram
Mahi in Tech
308 subscribers
195 photos
17 videos
8 files
251 links
Download Telegram
یکی از الگوریتم‌های پراستفاده برای Load Balancing, الگوریتم Round-Robin هست. همون‌طور که از اسم‌ش پیداست، خیلی ساده میاد و درخواست‌ها رو بین سرورها تقسیم می‌کنه تا فشار روی مقصد خاصی نیفته:

Request 1 -> Server A  
Request 2 -> Server B
Request 3 -> Server C
Request 4 -> Server A
Request 5 -> Server B
Request 6 -> Server C
...


اما این روش یک مشکل داره؛ اگه منابع یا توان پردازشی سرورها یکسان نباشه چی؟
در این حالت، وقتی تعداد درخواست‌ها زیاد بشه، سرورهایی با منابع کمتر ممکنه از کار بیفتن یا کند بشن، در حالی‌که سرورهای قوی‌تر هنوز ظرفیت خالی دارن.

برای حل این مشکل، از روشی به‌نام Weighted Round-Robin استفاده می‌کنیم. این روش خیلی ساده به هر مقصد یک وزن ثابت اختصاص می‌ده.
مثلاً اگه سرور A وزنش ۳ باشه و سرور B با منابع بیشتر وزنش ۵، در این صورت از هر ۸ درخواست، ۵‌ تا به سرور B و ۳ ‌تا به سرور A می‌رن.
از نظر پیاده‌سازی هم تفاوت خاصی از لحاظ پیچیدگی یا پرفورمنس نداره.

خب، به‌نظر میاد مشکل حل شد، نه؟ آره، ولی هنوز یه مسئله هست 😄
تعیین این وزن‌ها خودش کار سختیه،‌ هم از نظر پیدا کردن مقدار مناسب، هم به خاطر ایستا بودنشون. در عمل، به‌سختی می‌شه به نسبت بهینه رسید.

اینجا روش Dynamic Weighted Round-Robin وارد می‌شه.
این روش همون Weighted Round-Robin هست، با این تفاوت که وزن‌ها به‌صورت داینامیک و (مثلا) براساس سلامت سرورها (مثل response time، error rate و CPU load) به‌صورت تنظیم می‌شن.
در نتیجه، توزیع ترافیک به‌شکل adaptive و کارآمدتری انجام می‌گیره. مثلاً وزن هر سرور می‌تونه بین 0.2x تا 2x مقدار اولیه‌ش تغییر کنه و به‌صورت تدریجی در بک‌گراند با توجه به health score به‌روزرسانی بشه.
که خب، گزینه‌ی خیلی خوبی برای محیط‌های پویا و در حال تغییره.

نمونه‌ی عملی با CSharp:
یک نمونه‌ی واقعی از این روش رو اینجا سعی کردم پیاده‌سازی کنم، بر بستر YARP.
github.com/MahdiyarGHD/dwrr-loadbalancer
اگر هم مشکلی دیدید می‌تونید PR/Issue ایجاد کنید، باقی توضیحات توی readme پروژه هست.
1🔥8👍3🕊1🙊1
طبق روال هرسال، NET Conf. از امروز شروع شده و تا سه روز دیگه ادامه داره. بریم برای 10 NET. 😄

https://www.dotnetconf.net
🎉4🙊1
یکی از مواردی که توی EF 10 برام جالب بوده، قابلیت استفاده و تعریف چندین query filter هست.
همون‌طور که توی تصویر مشخص هست، می‌تونیم یک‌سری filterـهای همگانی تعریف کنیم و هرجا نیاز بود نادیده‌شون بگیریم.
🙊1
وقتی صحبت از سیستم‌های رزرو می‌شه، اولین چالشی که به ذهن میاد Race Condition هست. فرض کن دو نفر همزمان می‌خوان آخرین صندلی یک پرواز رو رزرو کنن، اگه سیستم درست طراحی نشده باشه، ممکنه هر دو رزرو ثبت بشه و بعد دردسر پیش بیاد.

برای همین، طی این پروژه (رزرو پرواز) سعی کردم با استفاده از Distributed Lock روی Redis جلوی این مشکل رو بگیرم. از طرف دیگه، معماری به شکل Vertical Slice و Feature-based طراحی شده تا هر فیچر مستقل و قابل توسعه باشه. روتینگ با Minimal API و Carter انجام شده، ولیدیشن‌ها با FluentValidation، و کل پروژه هم داکرایز شده هست تا راحت بالا بیاد. برای اطمینان از درست کار کردن بخش‌ها هم Integration Test و Unit Test نوشته شده.

سورس کامل این نمونه رو می‌تونید اینجا ببینید:
github.com/MahdiyarGHD/TravelBookingSystem

🌟 اگر هم ایرادی دیدید خوشحال می‌شم PR/Issue ایجاد کنید.
2🙊9🔥1
Forwarded from Akbari’s Channel
خب گوگل وی اس کد رو فورک کرده و اینو ساخته:

https://antigravity.google/
🙊9❤‍🔥1
ظاهراً مایکروسافت بالاخره تصمیم گرفته روند انتشار ویژوال استودیو رو عوض کنه. از این به بعد به‌جای این‌که هر دو سه سال یه نسخه‌ی جدید بده بیرون، قراره سالانه یه ریلیز جدید از این IDE منتشر کنه.

https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-rhythm
👍4👎1🙊1
net-interview-questions_copy.pdf
3.9 MB
۱۵۰ سوال مصاحبه‌ی فنی دات‌نت از antondevtips.com

پاسخ ندارند ولی خب فقط کافیه سوال رو کپی/پیست کنید برای هر LLM ای.
👍2🙊1
عجیب‌ترین مصاحبه‌‌ی فنی‌ای که تا حالا داشتم برای پوزیشن بک‌اند دولوپر |:
یک برگه A4 شامل تمام تکنولوژی‌هایی که می‌تونید تصورش رو کنید گذاشتن جلوم و گفتن بر حسب درصد بنویس به هرکدوم چقدر تسلط داری :)) حالا تکنولوژی‌ها چی‌ها بودن مثلا؟
PowerPoint, ASP.NET, Word, ASP.NET Core, ... :)))

داشتم خودم رو قانع می‌کردم که دیگه از این بدتر نمی‌شه که، و منتظر مصاحبه‌کننده بودم که بیاد مصاحبه‌ی اصلی رو انجام بده، دیدم یک نفر اومد ۵ صفحه A4 (هرکدوم ۵۰ سوال تشریحی) از تکنولوژی‌ها و لایبرری‌های مرتبط گذاشت جلوم و گفت ۴۰ دقیقه فرصت داری با خودکار و روی کاغذ این‌ها رو به انگلیسی (همین که نگفتند فارسی بی‌نظیره) جواب بدی 🥹 زیاد تلاش خاصی نکردم ولی حتی ۴۰ دقیقه هم فرصت ندادن و سر ۳۰ دقیقه برگشت 😂.
و دیگه احتمالا تا اینجا حدس زده باشید که کل زیرساخت‌شون روی net. framework و asp classic بود 😄

نمی‌دونم والا، شاید مشکل از ما هست و اون درصد تسلط به تکنولوژی‌ها رو ۱۰۰٪ نیستیم 😆.
💔15🤣52🙊1
👨‍💻 در پروژه‌های سی‌شارپی، برای دسترسی به تنظیمات (configuration) به‌صورت strongly-typed، می‌تونیم از سه نوع interface استفاده کنیم (معمولاً از طریق DI)، که هرکدوم کاربرد خاص خودشون رو دارن:


IOptions<T> 
🔹 تنظیمات فقط یک‌بار در زمان راه‌اندازی برنامه خونده و کش می‌شن. 
🔹 مناسب برای تنظیماتی که در زمان اجرا تغییر نمی‌کنن (مثل کلیدهای API یا مقادیر ثابت).


IOptionsSnapshot<T> 
🔹 تنظیمات رو به‌صورت scoped دریافت می‌کنه (مثلاً در هر درخواست HTTP جدید). 
🔹 مناسب برای پروژه‌های وب که نیاز دارن در هر درخواست، آخرین تغییرات تنظیمات رو دریافت کنن.


IOptionsMonitor<T> 
🔹 تنظیمات رو به‌صورت singleton اما real-time ارائه می‌ده. 
🔹 امکان ثبت event برای زمانی که تنظیمات تغییر می‌کنن (OnChange) رو فراهم می‌کنه. 
🔹 مناسب برای سرویس‌های background یا سناریوهایی که نیاز به واکنش به تغییرات تنظیمات در لحظه دارن.

اطلاعات بیشتر:
learn.microsoft.com/en-us/dotnet/core/extensions/options
Please open Telegram to view this post
VIEW IN TELEGRAM
532👌1
👀 چطور توی apiـهامون از درخواست‌های تکراری جلوگیری کنیم؟

سناریوی محتمل:
- کاربر قصد داره خریدی انجام بده و اتصال اینترنت ضعیفی داره
- روی دکمه‌ی «پرداخت» کلیک می‌کنه
- درخواست به سرور میره، پردازش می‌شه و پول از حساب کسر می‌شه
- اما ریسپانس به دلیل قطعی لحظه‌ای اینترنت به کاربر نمی‌رسه
- کاربر فکر می‌کنه دکمه کار نکرده و دوباره (یا چندبار) روی دکمه‌ی پرداخت کلیک می‌کنه
نتیجه: سرور شما تمام درخواست‌ها رو می‌گیره و هردفعه اعتبار رو کم می‌کنه.

راه حل: کلید Idempotency
به زبان ساده، Idempotency یعنی «مهم نیست یک درخواست چندبار به سمت سرور ارسال می‌شه، نتیجه‌ی نهایی باید همیشه یکسان باشه و تغییر اضافه در سیستم ایجاد نکنه»

برای پیاده‌سازی این مورد در متدهای POST یا PATCH، می‌تونیم از یک شناسه‌ی یکتا و Idempotency Key استفاده کنیم.

⚙️ پیاده‌سازی: این فرآیند نیاز به همکاری بین کلاینت و بک‌اند داره؛ به عنوان مثال هر زمان که کاربر فرم‌ای رو پر می‌کنه، کلاینت باید یک UUID یا شناسه‌ی یکتا تولید کنه و اون رو در هدر درخواست قرار بده.
X-Idempotency-Key: 123e4567-e89b-12d3-a456-426614174020

نکته‌ی مهم این هست که اگر درخواست به هردلیلی fail شد و کلاینت خواست retry انجام بده، باید همون کلید قبلی ارسال شه.

در سمت سرور هم، باید ‌یک middleware یا مکانیزمی طراحی شه که قبل از رسیدن درخواست به Controller، وجود اون کلید رو چک کنه و درصورت وجود، ریسپانس اون رو مستقیما از Redis برگردونه و کدهای اصلی بیزنس رو اجرا نکنه.
اگر هم وجود نداشت که خب اجازه می‌ده کد اجرا شه و سپس نتیجه‌ی اون رو توی Redis یا هر مکانیزم کش دیگه‌ای ذخیره می‌کنه.
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍4
Forwarded from رقصنده با کد (Ali KhodaeiDoost)
گویا جمنای پرو بدون کارت اعتباری یک ماه رایگان میده

https://business.gemini.google/
🚀 دستیار هوشمند سئو که کار ۳ نفر رو انجام میده!

یکی از دوستان کاربلد و تیمش مدتیه که روی یه سرویس جذاب به اسم «مثلث» کار می‌کنن؛ یه پلتفرم تولید محتوای خودکار با هوش مصنوعی (AI) که الان به بلوغ خیلی خوبی رسیده و نتایجش واقعاً دیدنیه.

چیزی که من از خروجی‌هاش دیدم، قشنگ کار ۳ نیروی انسانی رو براتون انجام میده 😄. انگار به‌جای استخدام چند نفر، یه سیستم خودکار دارید که:
- هر روز سایت‌تون رو با محتوای سئو شده و کامل به‌روز می‌کنه.
- مستقیماً به سرچ‌کنسول وصل میشه تا آمار واقعی بده.
- توی ۶۰ روز می‌تونه رشد ۳۰ تا ۵۰ درصدی توی کلیک و ایمپرشن ایجاد کنه.
- وقتی به صفحه اول گوگل (Top 10) برسید، خودش بهتون خبر میده.

اگه دنبال رشد بی‌دردسر سایت‌تون هستید، پیشنهاد می‌کنم تستش کنید.

رایگان امتحان کنید:
🌐 Mosallas.ir

کد تخفیف ۵۰٪ هم توی تصویر هست، می‌تونید استفاده کنید.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3
توی یکی از پروژه‌های فرانت‌اندی اخیر، قصد داشتم مثل همیشه از swagger codegen استفاده کنم تا از مزایاش برای ارتباط راحت‌تر با api بهره‌مند شم (در ادامه میگم)‌، ولی خب از اون‌جایی فایل executableش یک فایل jar بود و نیاز به نصب جاوا داشت و منطقی نبود 😁 تصمیم گرفتم دنبال پکیج جایگزینی بگردم، که با Orval آشنا شدم.
حالا این چی‌کار می‌کنه و چرا باید ازش استفاده کرد؟

سناریوی دردناک و رایج:
تیم بک‌اند تغییری در خروجی API میده (مثلاً userName تبدیل می‌شه به fullName).

فرانت‌‌اند کار از این تغییر بی‌خبره یا فراموش می‌کنه اینترفیس‌های TypeScript رو آپدیت کنه.

پروژه بیلد می‌شه، اما توی مرورگر کاربر به خطای undefined می‌خوره و کرش می‌کنه!

جدا از این، نوشتن دستی Typeها و Interfaceها برای هر API وقت‌گیر و خسته‌کننده‌ست.

راه حل: ابزار Orval به شما کمک می‌کنه به‌جای اینکه دستی کدهای ارتباط با API یا Schemaـها رو بنویسید، میاد و فایل Swagger/OpenAPI بک‌اند رو می‌خونه و تمام کدهای مورد نیاز فرانت‌‌اند (مثل هوک‌های React Query، کلاینت Axios و تایپ‌های TypeScript) رو به‌صورت خودکار و ساختاریافته تولید می‌کنه.

⚙️ چطوری کار می‌کنه؟ کافیه آدرس فایل swagger.json خروجی گرفته شده از ASP.NET (یا هر تکنولوژی دیگه‌ای) رو به Orval بدید.

نتیجه:

- تولید خودکار هوک‌ها: مثلاً به‌جای نوشتن دستی useQuery، خودش ()useGetUsers رو با تایپ دقیق ورودی و خروجی بهت میده.

- امن بودن تغییرات (Type Safety): اگر بک‌اند اسم فیلدی رو عوض کنه، کد فرانت‌‌اند دیگه بیلد نمی‌شه (Compile Error) و همون لحظه متوجه می‌شی، نه هنگام استفاده!

- هماهنگی ۱۰۰٪: فرانت‌‌اند همیشه با آخرین تغییرات داکیومنت بک‌‌اند سینک می‌مونه.

اطلاعات بیشتر:
github.com/orval-labs/orval
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍74
اینترنت برای امروز کافیه 😭

https://github.com/mmarinovic/tailwindsql
Please open Telegram to view this post
VIEW IN TELEGRAM
118😱2