CloudyGo
СтатистикаSoftware Engineering & Development Best Practices, Especially in Golang! https://cloudygo.ir @rezakhademix
- Последний пост
- 30 июл.
- Последнее чтение
- 15 авг.
- Постов за неделю
- 0
- Всего постов
- 20
- Тип
- открытый
- Язык
- персидский
- В каталоге с
- 14 авг.
- 1/24сутки в ленте
- 66
- 1/48двое суток
- 75
- 1/72трое суток
- 81
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
بچه های ایرانی کارت، گمونم دیشب یه دیپلوی رفتید سر هر سفارش داره تا بی نهایت پیامک میفرسته! ریورت کنید تا فاکتور پیامک سر به فلک نکشیده تو ۱۲ ساعت گذشته برای من حداقل ۱۵۰ یا ۲۰۰ بار پیامک اومده احتمالا تو گلوی broker گیر میکنه، ارسال پیامک رو ack نمیده برمیگرده تو صف... نمیدونم چیه ولی هر چی هست چکش کنید لطفا دسترسی مستقیم نداشتم گفتم اینجا پیام بذارم شاید دیده بشه
پاسخ چالش: فرض کنیم: • تعداد پرداختها: 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 یا بیشتر انتخاب مطمئنتری خواهد بود. @cloudygo
#یک_چالش #system_design ۱. فرض کنید میخواهید در انتهای هر ماه حقوق ۲۰ هزار نفر را پرداخت کنید، شما دیتا رو اعتبارسنجی کردین و مطمئن هستید که همهچیز صحیح است و حقوق باید به همه این افراد پرداخت شود به شما یک API بانکی اعلام میشود که نمیتوانید به صورت…
#یک_چالش #system_design ۱. فرض کنید میخواهید در انتهای هر ماه حقوق ۲۰ هزار نفر را پرداخت کنید، شما دیتا رو اعتبارسنجی کردین و مطمئن هستید که همهچیز صحیح است و حقوق باید به همه این افراد پرداخت شود به شما یک API بانکی اعلام میشود که نمیتوانید به صورت Bulk یا چند پارامتری آن را فراخوانی کنید و فقط مجبورید به شکل /pay/1 /pay/2 /pay/3 ... /pay/20000 این مسیر را فراخوانی کنید تا حقوقها پرداخت شود. شما موظف هستید از ساعت ۹ تا ساعت ۱۰ صبح، یکم هر ماه حقوق افراد را پرداخت کنید. چطور سیستم خود را با هر زبانی طراحی میکنید تا در این بازه زمانی حقوقها پرداخت کنید؟ اگر به فکر کافکا، کوبرنتیز افتادهاید سریعا بازنگری کنید چراکه هیچنیازی به طراحی عجیب و غریب نیست. به حل مسئله بپردازید نه افزودن ابزار و همیشه در مسیر و در صورت لزوم ابزارها را اضافه کنید نه به صورت کورکورانه... @cloudygo
#system_design تقریبا همه ما بارها سیستم دیزاین رو شنیدیم و در این مورد مطالعه داشتیم اما موضوعی که در بخش زیادی از افراد این حوزه فراموش شده، درک موقعیت به صورت صحیح و حل مسئله است! متاسفانه محتوای نامناسب هم به این موضوع بسیار دامن زده است. تجربه شخصی خودم در مصاحبهها این بوده که بسیاری از توسعه دهندگان تلاش میکنند تا با افزایش ابزارها و امکانات چالش را حل کنند به جای اینکه با کمترین کد و ابزار! در اکثر سناریوها، بارها شنیدهام که برای حل یک چالش کوچک، برنامه نویس دست به دامان کافکا و کوبرنتیز میشود. @cloudygo
#AI به دنیای مرگ تخصص سلام کنید! تا به امروز تخصص براساس تجربه چند ساله، پشتیبان اعتبار کاری و حرفهای بسیاری از افراد بوده و هست. اما با مدلهای اخیر کلاد (Claude) حقیقتا دیگه مدت زمان یادگیری، تمرکز و عمیق شدن در موضوعات بسیار کاهش پیدا کرده... تا همین چند سال گذشته اگر فردی تجربه ۱۰ ساله از گولنگ داشت، تقریبا در ۹۰ درصد مواقع میتونست شمارو شگفتزده کنه اما اخیرا با مدل Fable 5 یا Kimi K3 شما به منبعی دسترسی دارین که میتونین عجیبترین سناریوهای ممکن رو هم تست کنید و خروجی فوقالعادهای داشته باشید. نظر شخصی خودم اینه که در آینده نزدیک، کسی که از ترکیب موضوعات و سیستم دیزاین آگاهی کاملتری داره، موفقتر خواهد بود. ادامه در پست بعدی... @cloudygo
#اصفهان #استخدام استخدام موقعیت شغلی برنامهنویس گولنگ https://jobvision.ir/jobs/job-detail/1429400?ReferrerJobPosition=8&row=7&pageSize=30&searchId=391824510673519924 @cloudygo
اگر برای توسعه از مکبوک با پردازشگرهای جدید سری M استفاده میکنید خیلی راحت و بی دردسر با نصب پکیج زیر https://github.com/Arthur-Ficial/apfel یا نصب با دستور brew install apfel میتونید از هوش مصنوعی اختصاصی اپل استفاده کنید. نیازی به API Key یا مدل مجزا نیست، هرچند میتونید مدلهای Pro رو بهش اضافه کنید اما در تستها برای ترمینال و کامندها بسیار خوب عمل میکنه، سریع هستش و نیازی به ارتباط با اینترنت نداره! به نظر میرسه اپل در پس پرده کارهای جالبی داره انجام میده و این همه سختافزارهای قوی بهزودی اپل رو به یک بازیگر جدی در حوزه AI تبدیل میکنه... #tip @cloudygo
در سیستمهای اینترپرایز با رکوئستهای بالا مراقب کانسیومرها (consumers) باشید، همهچیز فقط هندل کردن ریکوئستها نیست! ممکن است در یک سیستم پرداخت هزاران درخواست روی درگاه آنلاین دریافت کنید اما آیا همه این درخواست با موفقیت پردازش خواهند شد؟ فرض کنید در بخش پرداخت تعداد زیادی ریکوئست، بهآسانی و بدون down شدن دریافت شد. حالا پابلیشر (publisher یا producer) حجم زیادی پردازش را به سمت کانسیومر میفرستد در سمت دیگر شما بخاطر ملاحظات فنی، تعداد کانسیومرهای مشخصی در اختیار دارید و ورکرها (workers) محدود هستند چون کانکشنهای دیتابیس محدودی دارید. خب: - شما از لیک در سمت کانسیومرها جلوگیری کردید - پابلیشرها بهدرستی کار میکنند - کانکشنهای دیتابیس مدیریت شده و مشخص هستند - حتی تعداد درخواستهای بالا در حال دریافت هستند پس مشکل کجاست؟ تصور کنید در حال راه رفتن به سمت سوپرمارکت برای خرید یک عدد کوکاکولا هستید دوستتان در مسیر شما را همراهی میکند و مدام کمر شما را فشار میدهد تا سریعتر بروید شما هم احساس میکنید دارید زمین میخورید اما هیچوقت به دوستتان نمیگویید که آرامتر هُل بده! تا جایی که ناگهان زمین میخورید و ارتباط شما با دوستتان قطع میشود و تا زمانی که دوباره سرپا بایستید همهچیز متوقف و کند میشود. چه اتفاقی افتاد؟ - آیا شما قادر به راه رفتن نبودید؟ - آیا شما نیروی خارجی مداوم را دریافت نمیکردید؟ - آیا قادر به دویدن نبودید؟ شما همه قابلیتهای بالا را داشتید اما هیچ سیگنالی به دوستتان ندادید که سرعت را کم کند و همین مسئله باعث زمین خوردن شما شد! در مثال بالا نیز پابلیشرها به درستی در حال انجام وظیفه هستند، اما کانسیومرها هیچ سیگنالی به پابلیشر نفرستادند که نرخ ارسال را کاهش دهد و کاربران متوجه کندی سرعت پردازش درخواستهای خود شدهاند کاربران گاها صفحه را رفرش میکنند تا مشکل برطرف شود اما همین مسئله (retry) نیز ممکن است موجب کندی بیشتر شود و حجم زیادی درخواست پردازش نشده ایجاد میشود! موضوع Back Pressure در سیستمهای اینترپرایز دقیقاً مکانیزمی است که در آن کانسیومر فعالانه به پابلیشر سیگنال میدهد که کُندتر ادامه دهد و پابلیشر این سیگنال را دریافت و رعایت میکند. اگر این مکانیزم وجود نداشته باشد یا کانسیومر نتواند بهدرستی سیگنال بدهد، سیستم دچار مشکل میشود. به یاد داشته باشید که همیشه با scale کردن کانسیومر موضوع حل نمیشود و در بعضی سناریوها باید نرخ انتشار را کنترل کرد، از rate limit استفاده کرد یا صفهای پردازشی ایجاد کرد. #tip @cloudygo
شخصا همواره اگر تصمیم نداشته باشم از استاندارد لایبرری گولنگ استفاده کنم گزینهای که مدنظرم داشتم و سراغش رفتم Gin بوده. برخلاف دیگر روترها و فریمورکهای گولنگ که مدتی پرکار و پر زرق و برق هستند. جین مسیر متفاوتی داره. همیشه پایدار بوده، فیچرهای سلیقهای نداره، رفتار گولنگی داره و میشه کانتکست جین رو به جای context.Context گولنگ پاس داد که توسعه در سمت هندلرها رو خیلی سادهتر میکنه. چند وقتی میشه که توسعه دهندگان Gin بازهم بهبودهای زیرساختی خیلی خوبی به این روتر فریمورک دادن و در نتیجه بنچمارکها تونسته حتی از Fiber و Echo در رتبه بهتری قرار بگیره. شخصا بنچمارک رو تنها عامل استفاده از هیچ ابزاری نمیدونم، چراکه در این صورت از PHP استفاده نمیکردم اما Gin علاوهبر بنچمارک، کامیونیتی گسترده و فعال داره، برای تمام ابزارهای مانیتورینگ و... کارهارو رو ساده کرده و پکیجهای مناسبی برای استفاده از ابزارهای مختلف داره. لینک بهروزترین بنچمارک Gin: https://gin-gonic.com/en/docs/benchmarks #tip @cloudygo
اگر شما هم از کلادکد (claude code cli) استفاده میکنید. دو ابزار زیر میتونن خیلی بهتون کمک کنه: 1. ابزار claude mem که برای شما یک persistent memory ایجاد میکنه و برای ریپازیتوریهایی که کدهای زیادی دارند، بسیار مفید و در تسکهای پیچیده واقعا کمککننده است ۲. وبسایت skills.sh در این وبسایت تعداد زیادی ایجنت AI وجود داره که با همه مدلهای هوش مصنوعی از کلاد تا کوپایلت سازگار هستند و میتونن کارهای تخصصی با خروجی بهتری تحویل بدن #ai #tip @cloudygo
استفاده از گوروتینها (Goroutine) در گولنگ برای پرفورمنس بهتر بسیار حیاتی و مهم هست، اما اگر بهدرستی استفاده نشه همین گوروتینها باعث ایجاد مموریلیک و رفتار عجیب در نرمافزار شما خواهند شد. مقاله زیر ۲ پترن جالب و مهم رو برای جلوگیری از ایجاد لیک در گوروتینها آموزش میدهد: https://nsrip.com/posts/goroutineleak.html #golang #tip @cloudygo
تجربه ۲ ماه استفاده از antigravity استفاده از AI برای همه ما تبدیل به یک امر عادی شده... بهطوریکه شخصا وقتی برمیگردم و خیلی ساده و به روش قدیمی کد نویسی میکنم، حس میکنم واقعا پوینتی به جز آموزش دادن نداره! ترکیبی که من روزانه استفاده میکنم Claude CLI Context7 بههمراهChatGPT هستش اخیرا ادیتور antigravity رو به این ترکیب اضافه کردم سرعت توسعهام خیلی افزایش پیدا نکرد چون همون vscode بود با یک سری بهبودات اما خیلی همهچیز برام دسترسپذیرتر شد من از همون ابتدا بهصورت تماما agentic پیش رفتم. با انجام کارها یکسری review از من در خواست میکرد و برای تسکهای سنگین هم درنهایت یک فایل walkthrough برام میساخت تا روند رو بهتر درک کنم. به نظرم آنتیگراویتی پتانسیل زیادی داره و توصیه میکنم استفاده کنید و آرتیفکتهایی میسازه که دقیق هستند. اما همچنان sonnet و context7 خروجیهای خیلی خوبی دارن و برای نوشتن کدهای بهتر، ترکیب برندهای هستند @cloudygo #antigravity
یک بلاگ خیلی جالب در مورد مهاجرت Reddit از پایتون به گولنگ در سرویس کامنتها! مقاله نکات خوبی داره، از اینکه چطور این مایگریشن اتفاق افتاده! چقدر اسپایکهای ناگهانی سرویس قدیمی پایتون کمتر شده! سرویسهای جدید چطور بهبود یافتن و چالشهای پیشرو هنگام سوییچ از یک زبان به زبان برنامهنویسی دیگه برای سرویسی که بار سنگینی رو تحمل میکنه، چی میتونه باشه! https://lnkd.in/daQ8pxMd کانال تلگرام کلادیگو t.me/cloudygo
گولنگ زبانی هستش که بسیاری از ساختارهای پیشفرض در زبانهای برنامهنویسی قبل از خودش رو زیر سوال میبره اما با نگاهی مثبت! حتی اگر شما هیچوقت قصد ندارید توسعهدهنده با زبان گولنگ باشید، یادگیری گولنگ تغییرات مثبتی رو در توسعه براتون ایجاد میکنه. یکی از بازرترین تغییرات فکری در توسعه با گولنگ، گذر از پیادهسازی لایههای مختلف بلااستفاده و ایجاد ساختارهایی هست که برای تغییر بسیار آمادهتر هستند. همه ما همواره تمایل داریم در مرحله اول توسعه، یک بخش کامل و اصطلاحا Bullet Proof رو توسعه بدیم اما باید بدونیم این یک خطای ذهنی است. نوشتن یک سرویس کامل و پاسخگو در مرحله اول توسعه کاملا غیرممکن هست. اکثر برنامهنویسان سعی دارند با ایجاد لایههای اینترفیس و Generalize کردن از همه اتفاقات آینده مصون بوده و کد توسعهپذیرتری داشته باشند اما همواره باید در ذهن داشته باشیم که کدهای ما باید آماده برای تغییر باشند تا یک چاقوی سوییسی همهکاره!
видео или голосовое, без подписи
فرصتی که هوش مصنوعی در اختیار همه ما قرار داده باورنکردنی و بسیار شگفتانگیزه! کافیه کمی با MCPها با ایجاد Ruleهای مشخص باهاشون کار کنید، بهشون کانتکست بدین تا یک خروجی عالی رو داشته باشید. در زمانهایی که تایم آزاد دارین، تا میتونید، روشهای مختلف توسعه با AI رو برای خودتون تست کنید. لزومی نداره حتما مدلهای پریمیوم رو استفاده کنید و همین تجربه کردن، باعث میشه به راحتی بتونید مهارت استفاده از AI رو در خودتون افزایش بدین و تسکی که در ۲ روز انجام میشد رو در کمتر از نصف تکمیل کنید. × مدلهای پریمیوم Sonnet 4 و جمینای ۲.۵ پرو واقعا کاربردی هستند! دقت کنید ما در مورد شتکد نوشتن با AI صحبت نمیکنیم. اینکه بارها به AI تاکید کنیم Best Practiceهارو رعایت کن، هیچ فایدهای نداره! 1. سعی کنید از agentهایی استفاده کنید که امکان بازگشت به مراحل و رویدادهای قبلی حافظهشون رو دارن 2. بهخوبی کانتکست رو شرح بدین 3. موضوع رو به سابتسکهای کوچک تبدیل کنید 4. شفاف بگین براساس چه معماری و چه پرکتیسی (practice) باید کد نوشته بشه 5. سناریوهای شکست رو براش شرح بدین 7. در هر مرحله ازش بخواین برگرده و با تست مشخص کنه چه چیزهایی تا الان اشتباه بوده
بعد از مدتها بالاخره Gorm آپدیتی که اکثر برنامهنویسان گولنگ منتظرش بودند رو در نسخه جدید منتشر کرد. در کامیونیتی گولنگ Gorm بخاطر عدم Type Safty و پیچیدگیهای مختلف آنچنان محبوب نیست. مدتها بود که Generic ها به زبان گولنگ اضافه شدن اما با وجود درخواستهای زیاد، همچنان در Gorm مورد استفاده قرار نگرفته بودند تا اینکه در ورژن جدید Gorm یعنی V1.30.0 بالاخره این قابلیت به Gorm اضافه شده و میتونه برگ برندهای برای این ORM باشه. شخصا از Gorm بخاطر عدم بهینه بودن، رفتار عجیب و… استفاده نمیکردم اما این آپدیت آنقدر جدی هست که در صفحه اول داکیومنت Gorm خیلی شفاف به این قابلیت پرداخته و تاکید کرده فقط در ورژنهای V1.30 به بالا قابل استفاده است. شخصا مایلم یک بار دیگه تستش کنم و ببینم تونسته مشکلات متعددی که داشت رو رفع کنه یا خیر! به نظرم بهزودی این سینتکس جدید، به روش پیشفرض کوئری نوشتن در Gorm تبدیل میشه! #gorm #golang @cloudygo
چت با دیتابیس! یک ابزار متنباز و کاربردی که در خصوص نوشتن کوئریهای پیچیده، بهینه کردن عملکرد دیتابیس و ایجاد گزارشهای کاربردی مثل: کوئریهای کند، ایندکسهای بلااستفاده و ... بهتون کمک میکنه و فقط کافیه باهاش چت کنید. https://chat2db.ai #github
احتمالا شما هم دیتاهایی دارین یا وبسایتی دارین که اطلاعاتش رو نیاز دارین به یک ساختار LLM Ready تبدیل کنید تا در سادهترین سناریو بهراحتی بتونید براساسش ربات بسازید یا کارهای جالبتری انجام بدین! ریپازیتوری FireCrawl کل وبسایت مورد نظرتون رو به یک ساختار منظم و آماده برای LLM تبدیل میکنه و حتی فایلهای مدیا در وبسایت رو هم پردازش میکنه تا با روشهای مختلفی دیتای مورد نظر رو استخراج کنید. https://github.com/mendableai/firecrawl #llm #github