CloudyGo
описание
Software Engineering & Development Best Practices, Especially in Golang! https://cloudygo.ir @rezakhademix
194
подписчиков
Охват к подписчикам
132,0%
ERR
Реакции к просмотрам
2,20%
107 на 19 постов
Пересылки к просмотрам
1,32%
64
Постов в день
0,0
всего 20
Где отзываются чаще
доля реакций к просмотрам- 30 июл.بچه های ایرانی کارت، گمونم دیشب یه دیپلوی رفتید سر هر سفارش داره تا بی نهایت پیامک میفرسته! ریورت کنید تا فاکتور پیامک سر به فلک نکشیده تو ۱۲ ساعت گذشته برای من حداقل ۱۵۰ یا ۲۰۰ بار پیامک اومده احتمالا تو گلوی broker گیر میکنه، ارسال پیامک رو ack نمیده برمیگرده تو صف... نمیدونم چیه ولی هر چی هست چکش کنید لطفا دسترسی مستقیم نداشتم گفتم اینجا پیام بذارم شاید دیده بشه9,80%
- 29 июл.#یک_چالش #system_design ۱. فرض کنید میخواهید در انتهای هر ماه حقوق ۲۰ هزار نفر را پرداخت کنید، شما دیتا رو اعتبارسنجی کردین و مطمئن هستید که همهچیز صحیح است و حقوق باید به همه این افراد پرداخت شود به شما یک API بانکی اعلام میشود که نمیتوانید به صورت Bulk یا چند پارامتری آن را فراخوانی کنید و فقط مجبورید به شکل /pay/1 /pay/2 /pay/3 ... /pay/20000 این مسیر را فراخوانی کنید تا حقوقها پرداخت شود. شما موظف هستید از ساعت ۹ تا ساعت ۱۰ صبح، یکم هر ماه حقوق افراد را پرداخت کنید. چطور سیستم خود را با هر زبانی طراحی میکنید تا در این بازه زمانی حقوقها پرداخت کنید؟ اگر به فکر کافکا، کوبرنتیز افتادهاید سریعا بازنگری کنید چراکه هیچنیازی به طراحی عجیب و غریب نیست. به حل مسئله بپردازید نه افزودن ابزار و همیشه در مسیر و در صورت لزوم ابزارها را اضافه کنید نه به صورت کورکورانه... @cloudygo9,59%
- 30 июл.#یک_چالش #system_design ۱. فرض کنید میخواهید در انتهای هر ماه حقوق ۲۰ هزار نفر را پرداخت کنید، شما دیتا رو اعتبارسنجی کردین و مطمئن هستید که همهچیز صحیح است و حقوق باید به همه این افراد پرداخت شود به شما یک API بانکی اعلام میشود که نمیتوانید به صورت…9,21%
- 29 июл.#AI به دنیای مرگ تخصص سلام کنید! تا به امروز تخصص براساس تجربه چند ساله، پشتیبان اعتبار کاری و حرفهای بسیاری از افراد بوده و هست. اما با مدلهای اخیر کلاد (Claude) حقیقتا دیگه مدت زمان یادگیری، تمرکز و عمیق شدن در موضوعات بسیار کاهش پیدا کرده... تا همین چند سال گذشته اگر فردی تجربه ۱۰ ساله از گولنگ داشت، تقریبا در ۹۰ درصد مواقع میتونست شمارو شگفتزده کنه اما اخیرا با مدل Fable 5 یا Kimi K3 شما به منبعی دسترسی دارین که میتونین عجیبترین سناریوهای ممکن رو هم تست کنید و خروجی فوقالعادهای داشته باشید. نظر شخصی خودم اینه که در آینده نزدیک، کسی که از ترکیب موضوعات و سیستم دیزاین آگاهی کاملتری داره، موفقتر خواهد بود. ادامه در پست بعدی... @cloudygo7,89%
- 29 июл.#system_design تقریبا همه ما بارها سیستم دیزاین رو شنیدیم و در این مورد مطالعه داشتیم اما موضوعی که در بخش زیادی از افراد این حوزه فراموش شده، درک موقعیت به صورت صحیح و حل مسئله است! متاسفانه محتوای نامناسب هم به این موضوع بسیار دامن زده است. تجربه شخصی خودم در مصاحبهها این بوده که بسیاری از توسعه دهندگان تلاش میکنند تا با افزایش ابزارها و امکانات چالش را حل کنند به جای اینکه با کمترین کد و ابزار! در اکثر سناریوها، بارها شنیدهام که برای حل یک چالش کوچک، برنامه نویس دست به دامان کافکا و کوبرنتیز میشود. @cloudygo7,14%
- 30 июл.پاسخ چالش: فرض کنیم: • تعداد پرداختها: 20,000 • مدت زمان هر درخواست: 500ms • بازه زمانی: 1 ساعت (3600 ثانیه) حداقل نرخ موردنیاز: 20,000 ÷ 3600 ≈ 5.56 RPS ────────────────────────────────────────────── سناریوهای مختلف ────────────────────────────────────────────── ┌────────────┬─────────────┬────────────────────┬────────┐ │ ریت لیمیت│ Throughput │ زمان اتمام │ وضعیت │ ├────────────┼─────────────┼────────────────────┼────────┤ │ 5 RPS │ 5 req/sec │ 66.7 دقیقه │ ❌ │ │ 10 RPS │ 10 req/sec │ 33.3 دقیقه │ ✅ │ │ 20 RPS │ 20 req/sec │ 16.7 دقیقه │ ✅ │ │ 50 RPS │ 50 req/sec │ 6.7 دقیقه │ ✅ │ │ 100 RPS │ 100 req/sec │ 3.3 دقیقه │ ✅ │ └────────────┴─────────────┴────────────────────┴────────┘ ────────────────────────────────────────────── نکته مهم ────────────────────────────────────────────── اگر هر درخواست به طور متوسط 500ms طول بکشد، هر Worker حداکثر میتواند: 1 ÷ 0.5 = 2 Request/sec ارسال کند. در نتیجه: Workers ≈ RateLimit × ResponseTime که با ResponseTime = 0.5s میشود: Workers ≈ RateLimit × 0.5 مثال: ┌────────────┬────────────────┐ │ Rate Limit │ ورکر موردنیاز │ ├────────────┼────────────────┤ │ 10 RPS │ 5 │ │ 20 RPS │ 10 │ │ 50 RPS │ 25 │ │ 100 RPS │ 50 │ └────────────┴────────────────┘ اگر Worker بیشتری ایجاد کنید، افزایش کارایی نخواهید داشت؛ زیرا همه پشت Rate Limiter منتظر میمانند. ────────────────────────────────────────────── نتیجه ────────────────────────────────────────────── اگر بانک Rate Limit = 5 RPS داشته باشد: 5 × 3600 = 18,000 پرداخت بنابراین انجام 20,000 پرداخت در بازه 9 تا 10 صبح از نظر ریاضی غیرممکن است. اما اگر Rate Limit حداقل 6 RPS باشد: 6 × 3600 = 21,600 پرداخت در این حالت ظرفیت کافی برای انجام همه 20,000 پرداخت وجود دارد. البته در عمل بهتر است مقداری ظرفیت برای Retry، Timeout و خطاهای موقتی در نظر گرفته شود؛ بنابراین Rate Limit حدود 8 تا 10 RPS یا بیشتر انتخاب مطمئنتری خواهد بود. @cloudygo6,58%
- 30 апр.در سیستمهای اینترپرایز با رکوئستهای بالا مراقب کانسیومرها (consumers) باشید، همهچیز فقط هندل کردن ریکوئستها نیست! ممکن است در یک سیستم پرداخت هزاران درخواست روی درگاه آنلاین دریافت کنید اما آیا همه این درخواست با موفقیت پردازش خواهند شد؟ فرض کنید در بخش پرداخت تعداد زیادی ریکوئست، بهآسانی و بدون down شدن دریافت شد. حالا پابلیشر (publisher یا producer) حجم زیادی پردازش را به سمت کانسیومر میفرستد در سمت دیگر شما بخاطر ملاحظات فنی، تعداد کانسیومرهای مشخصی در اختیار دارید و ورکرها (workers) محدود هستند چون کانکشنهای دیتابیس محدودی دارید. خب: - شما از لیک در سمت کانسیومرها جلوگیری کردید - پابلیشرها بهدرستی کار میکنند - کانکشنهای دیتابیس مدیریت شده و مشخص هستند - حتی تعداد درخواستهای بالا در حال دریافت هستند پس مشکل کجاست؟ تصور کنید در حال راه رفتن به سمت سوپرمارکت برای خرید یک عدد کوکاکولا هستید دوستتان در مسیر شما را همراهی میکند و مدام کمر شما را فشار میدهد تا سریعتر بروید شما هم احساس میکنید دارید زمین میخورید اما هیچوقت به دوستتان نمیگویید که آرامتر هُل بده! تا جایی که ناگهان زمین میخورید و ارتباط شما با دوستتان قطع میشود و تا زمانی که دوباره سرپا بایستید همهچیز متوقف و کند میشود. چه اتفاقی افتاد؟ - آیا شما قادر به راه رفتن نبودید؟ - آیا شما نیروی خارجی مداوم را دریافت نمیکردید؟ - آیا قادر به دویدن نبودید؟ شما همه قابلیتهای بالا را داشتید اما هیچ سیگنالی به دوستتان ندادید که سرعت را کم کند و همین مسئله باعث زمین خوردن شما شد! در مثال بالا نیز پابلیشرها به درستی در حال انجام وظیفه هستند، اما کانسیومرها هیچ سیگنالی به پابلیشر نفرستادند که نرخ ارسال را کاهش دهد و کاربران متوجه کندی سرعت پردازش درخواستهای خود شدهاند کاربران گاها صفحه را رفرش میکنند تا مشکل برطرف شود اما همین مسئله (retry) نیز ممکن است موجب کندی بیشتر شود و حجم زیادی درخواست پردازش نشده ایجاد میشود! موضوع Back Pressure در سیستمهای اینترپرایز دقیقاً مکانیزمی است که در آن کانسیومر فعالانه به پابلیشر سیگنال میدهد که کُندتر ادامه دهد و پابلیشر این سیگنال را دریافت و رعایت میکند. اگر این مکانیزم وجود نداشته باشد یا کانسیومر نتواند بهدرستی سیگنال بدهد، سیستم دچار مشکل میشود. به یاد داشته باشید که همیشه با scale کردن کانسیومر موضوع حل نمیشود و در بعضی سناریوها باید نرخ انتشار را کنترل کرد، از rate limit استفاده کرد یا صفهای پردازشی ایجاد کرد. #tip @cloudygo3,57%
- 23 апр.شخصا همواره اگر تصمیم نداشته باشم از استاندارد لایبرری گولنگ استفاده کنم گزینهای که مدنظرم داشتم و سراغش رفتم Gin بوده. برخلاف دیگر روترها و فریمورکهای گولنگ که مدتی پرکار و پر زرق و برق هستند. جین مسیر متفاوتی داره. همیشه پایدار بوده، فیچرهای سلیقهای نداره، رفتار گولنگی داره و میشه کانتکست جین رو به جای context.Context گولنگ پاس داد که توسعه در سمت هندلرها رو خیلی سادهتر میکنه. چند وقتی میشه که توسعه دهندگان Gin بازهم بهبودهای زیرساختی خیلی خوبی به این روتر فریمورک دادن و در نتیجه بنچمارکها تونسته حتی از Fiber و Echo در رتبه بهتری قرار بگیره. شخصا بنچمارک رو تنها عامل استفاده از هیچ ابزاری نمیدونم، چراکه در این صورت از PHP استفاده نمیکردم اما Gin علاوهبر بنچمارک، کامیونیتی گسترده و فعال داره، برای تمام ابزارهای مانیتورینگ و... کارهارو رو ساده کرده و پکیجهای مناسبی برای استفاده از ابزارهای مختلف داره. لینک بهروزترین بنچمارک Gin: https://gin-gonic.com/en/docs/benchmarks #tip @cloudygo2,87%
- 7 февр.اگر شما هم از کلادکد (claude code cli) استفاده میکنید. دو ابزار زیر میتونن خیلی بهتون کمک کنه: 1. ابزار claude mem که برای شما یک persistent memory ایجاد میکنه و برای ریپازیتوریهایی که کدهای زیادی دارند، بسیار مفید و در تسکهای پیچیده واقعا کمککننده است ۲. وبسایت skills.sh در این وبسایت تعداد زیادی ایجنت AI وجود داره که با همه مدلهای هوش مصنوعی از کلاد تا کوپایلت سازگار هستند و میتونن کارهای تخصصی با خروجی بهتری تحویل بدن #ai #tip @cloudygo2,45%
- 23 авг. 2025 г.بعد از مدتها بالاخره Gorm آپدیتی که اکثر برنامهنویسان گولنگ منتظرش بودند رو در نسخه جدید منتشر کرد. در کامیونیتی گولنگ Gorm بخاطر عدم Type Safty و پیچیدگیهای مختلف آنچنان محبوب نیست. مدتها بود که Generic ها به زبان گولنگ اضافه شدن اما با وجود درخواستهای زیاد، همچنان در Gorm مورد استفاده قرار نگرفته بودند تا اینکه در ورژن جدید Gorm یعنی V1.30.0 بالاخره این قابلیت به Gorm اضافه شده و میتونه برگ برندهای برای این ORM باشه. شخصا از Gorm بخاطر عدم بهینه بودن، رفتار عجیب و… استفاده نمیکردم اما این آپدیت آنقدر جدی هست که در صفحه اول داکیومنت Gorm خیلی شفاف به این قابلیت پرداخته و تاکید کرده فقط در ورژنهای V1.30 به بالا قابل استفاده است. شخصا مایلم یک بار دیگه تستش کنم و ببینم تونسته مشکلات متعددی که داشت رو رفع کنه یا خیر! به نظرم بهزودی این سینتکس جدید، به روش پیشفرض کوئری نوشتن در Gorm تبدیل میشه! #gorm #golang @cloudygo2,17%
- 4 сент. 2025 г.گولنگ زبانی هستش که بسیاری از ساختارهای پیشفرض در زبانهای برنامهنویسی قبل از خودش رو زیر سوال میبره اما با نگاهی مثبت! حتی اگر شما هیچوقت قصد ندارید توسعهدهنده با زبان گولنگ باشید، یادگیری گولنگ تغییرات مثبتی رو در توسعه براتون ایجاد میکنه. یکی از بازرترین تغییرات فکری در توسعه با گولنگ، گذر از پیادهسازی لایههای مختلف بلااستفاده و ایجاد ساختارهایی هست که برای تغییر بسیار آمادهتر هستند. همه ما همواره تمایل داریم در مرحله اول توسعه، یک بخش کامل و اصطلاحا Bullet Proof رو توسعه بدیم اما باید بدونیم این یک خطای ذهنی است. نوشتن یک سرویس کامل و پاسخگو در مرحله اول توسعه کاملا غیرممکن هست. اکثر برنامهنویسان سعی دارند با ایجاد لایههای اینترفیس و Generalize کردن از همه اتفاقات آینده مصون بوده و کد توسعهپذیرتری داشته باشند اما همواره باید در ذهن داشته باشیم که کدهای ما باید آماده برای تغییر باشند تا یک چاقوی سوییسی همهکاره!1,90%
- 13 дек.تجربه ۲ ماه استفاده از antigravity استفاده از AI برای همه ما تبدیل به یک امر عادی شده... بهطوریکه شخصا وقتی برمیگردم و خیلی ساده و به روش قدیمی کد نویسی میکنم، حس میکنم واقعا پوینتی به جز آموزش دادن نداره! ترکیبی که من روزانه استفاده میکنم Claude CLI Context7 بههمراهChatGPT هستش اخیرا ادیتور antigravity رو به این ترکیب اضافه کردم سرعت توسعهام خیلی افزایش پیدا نکرد چون همون vscode بود با یک سری بهبودات اما خیلی همهچیز برام دسترسپذیرتر شد من از همون ابتدا بهصورت تماما agentic پیش رفتم. با انجام کارها یکسری review از من در خواست میکرد و برای تسکهای سنگین هم درنهایت یک فایل walkthrough برام میساخت تا روند رو بهتر درک کنم. به نظرم آنتیگراویتی پتانسیل زیادی داره و توصیه میکنم استفاده کنید و آرتیفکتهایی میسازه که دقیق هستند. اما همچنان sonnet و context7 خروجیهای خیلی خوبی دارن و برای نوشتن کدهای بهتر، ترکیب برندهای هستند @cloudygo #antigravity1,71%