حملهها به FFmpeg رو درک نمیکنم. این پروژه تمام این سالها رایگان و اوپن سورس بوده و توسط داوطلبها توسعه داده شده. گوگل و باقی شرکتها به خاطر این پروژه کلی درآمد داشتن و بخش بزرگی از سرویسهای ویدیویی روی همین پروژه میچرخه.
خب همونقدر که زمان میذارید برای پیدا کردن مشکلات امنیتی، اگه اینقدر براتون مهمه خودتونم فیکس کنید.
@DevTwitter | <Farshad/>
خب همونقدر که زمان میذارید برای پیدا کردن مشکلات امنیتی، اگه اینقدر براتون مهمه خودتونم فیکس کنید.
@DevTwitter | <Farshad/>
👍75❤10👎1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
کمپانی مایکروسافت یه فریمورک متنبازخیلی جالب داده به اسم Agent Lightning که میتونه هر نوع ایجنت هوش مصنوعی رو با یادگیری تقویتی (RL) آموزش بده!
با همه فریمورک ها هم کار میکنه: LangChain، AutoGen، CrewAI، OpenAI SDK یا حتی پایتون خام.
چطوری کار میکنه؟
ایجنتت مثل همیشه اجرا میشه. فقط یه تابع کوچیک ()agl.emit اضافه میکنید، یا اینکه میذارید tracer خودش همهچیو جمع کنه.
بعد Agent Lightning تمام پرامپتها، فراخوانی ابزارها و پاداشها/reward ها رو ضبط میکنه و بهصورت ساختاریافته ذخیره میکنه.
بعدش یه الگوریتم انتخاب میکنید (RL، بهینهسازی پرامپت، یا فاینتیون). دادهها رو میخونه، الگوها رو یاد میگیره و پرامپت یا policy بهتر تولید میکنه. ماجول Trainer تغییرات رو به ایجنت برمیگردونه، بدون اینکه نیاز باشه چیزی از نو بنویسید.
نکته باحالتر: حتی میتونید هر ایجنت رو توی یه سیستم multi agent جداگونه بهینه کنید.
Github: https://github.com/microsoft/agent-lightning
@DevTwitter | <Mehdi Allahyari/>
با همه فریمورک ها هم کار میکنه: LangChain، AutoGen، CrewAI، OpenAI SDK یا حتی پایتون خام.
چطوری کار میکنه؟
ایجنتت مثل همیشه اجرا میشه. فقط یه تابع کوچیک ()agl.emit اضافه میکنید، یا اینکه میذارید tracer خودش همهچیو جمع کنه.
بعد Agent Lightning تمام پرامپتها، فراخوانی ابزارها و پاداشها/reward ها رو ضبط میکنه و بهصورت ساختاریافته ذخیره میکنه.
بعدش یه الگوریتم انتخاب میکنید (RL، بهینهسازی پرامپت، یا فاینتیون). دادهها رو میخونه، الگوها رو یاد میگیره و پرامپت یا policy بهتر تولید میکنه. ماجول Trainer تغییرات رو به ایجنت برمیگردونه، بدون اینکه نیاز باشه چیزی از نو بنویسید.
نکته باحالتر: حتی میتونید هر ایجنت رو توی یه سیستم multi agent جداگونه بهینه کنید.
Github: https://github.com/microsoft/agent-lightning
@DevTwitter | <Mehdi Allahyari/>
❤23🔥2
چطور PHP-FPM سرعت و کارایی سایت شما رو بهبود میده؟
چند وقت پیش وقتی داشتم برای بهبود عملکرد سایتم جستجو میکردم، سر از PHP-FPM درآوردم. بعد از اینکه یه مدت ازش استفاده کردم، دوباره برگشتم سراغش. واقعاً متوجه شدم چقدر میتونه سرعت سایت رو بالا ببره! اگر شما هم از NGINX یا Apache استفاده میکنید، پیشنهاد میکنم حتما این ابزار رو بررسی کنید.
چطور PHP-FPM کمک میکنه؟
سرعت بیشتر، حتی با ترافیک زیاد: میتونید تعداد پروسههایی که برای اجرای PHP استفاده میکنید رو تنظیم کنید، و وقتی ترافیک زیاد میشه، سایتتون هنوز سریع باقی میمونه.
استفاده بهینه از منابع: دیگه لازم نیست برای هر درخواست یه پروسه جدید راه بندازید. این یعنی منابع به صورت بهینهتر مصرف میشن.
پشتیبانی از نسخههای مختلف PHP: اگه سایتهاتون به نسخههای مختلف PHP نیاز دارن، PHP-FPM این کار رو خیلی راحت میکنه.
و جالبتر اینکه توی مقالهای که خوندم، فهمیدم PHP-FPM از یک مدل به نام master-worker استفاده میکنه. این یعنی یه پروسه اصلی (master) وجود داره که کارها رو بین چندین پروسه کارگر (worker) تقسیم میکنه تا همزمان درخواستها رو پردازش کنن. این مدل باعث میشه منابع بهینهتر استفاده بشه و سایت شما با کارایی بیشتری بالا بیاد. خیلی جالبه که اینجوری PHP-FPM میتونه کارایی رو به شدت بالا ببره!
من خودم وقتی اینو دوباره راه انداختم، واقعا دیدم سایت خیلی سریعتر و بهینهتر شد.
اگر شما هم دنبال راهی برای سریعتر کردن سایتتون هستید، PHP-FPM رو حتما تست کنید.
لینک مربوط به مقاله:
https://dev.to/emrancu/how-php-fpm-works-a-deep-dive-into-fastcgi-process-management-194i
@DevTwitter | <Reza Fereydouni/>
چند وقت پیش وقتی داشتم برای بهبود عملکرد سایتم جستجو میکردم، سر از PHP-FPM درآوردم. بعد از اینکه یه مدت ازش استفاده کردم، دوباره برگشتم سراغش. واقعاً متوجه شدم چقدر میتونه سرعت سایت رو بالا ببره! اگر شما هم از NGINX یا Apache استفاده میکنید، پیشنهاد میکنم حتما این ابزار رو بررسی کنید.
چطور PHP-FPM کمک میکنه؟
سرعت بیشتر، حتی با ترافیک زیاد: میتونید تعداد پروسههایی که برای اجرای PHP استفاده میکنید رو تنظیم کنید، و وقتی ترافیک زیاد میشه، سایتتون هنوز سریع باقی میمونه.
استفاده بهینه از منابع: دیگه لازم نیست برای هر درخواست یه پروسه جدید راه بندازید. این یعنی منابع به صورت بهینهتر مصرف میشن.
پشتیبانی از نسخههای مختلف PHP: اگه سایتهاتون به نسخههای مختلف PHP نیاز دارن، PHP-FPM این کار رو خیلی راحت میکنه.
و جالبتر اینکه توی مقالهای که خوندم، فهمیدم PHP-FPM از یک مدل به نام master-worker استفاده میکنه. این یعنی یه پروسه اصلی (master) وجود داره که کارها رو بین چندین پروسه کارگر (worker) تقسیم میکنه تا همزمان درخواستها رو پردازش کنن. این مدل باعث میشه منابع بهینهتر استفاده بشه و سایت شما با کارایی بیشتری بالا بیاد. خیلی جالبه که اینجوری PHP-FPM میتونه کارایی رو به شدت بالا ببره!
من خودم وقتی اینو دوباره راه انداختم، واقعا دیدم سایت خیلی سریعتر و بهینهتر شد.
اگر شما هم دنبال راهی برای سریعتر کردن سایتتون هستید، PHP-FPM رو حتما تست کنید.
لینک مربوط به مقاله:
https://dev.to/emrancu/how-php-fpm-works-a-deep-dive-into-fastcgi-process-management-194i
@DevTwitter | <Reza Fereydouni/>
❤13👎4👍1🔥1
امروز یه مشکل عجیب تو پروژه Next.js داشتم که کلی وقت من رو گرفت.
داشتم روی یه صفحه جدید کار میکردم، اما هرچی وارد اون صفحه میشدم، هیچ چیزی لود نمیشد! فقط با رفرش کردن صفحه بود که محتوا نمایش داده میشد.
بعد از کلی سرچ و کمک گرفتن از هوش مصنوعی، بالاخره ریشه مشکل رو پیدا کردم.
مشکل چیه؟
وقتی در یک صفحه از Layout مخصوص و جداگانه استفاده میکنید، به هیچ عنوان نباید تگهای <html> و <body> رو در اون صفحه تکرار کنید.
چرا؟
چون این تگها به صورت سراسری و در Root Layout پروژه شما تعریف میشن.وقتی شما دوباره اونها رو در یک Layout یا صفحه داخلی استفاده کنید، با Layout اصلی تداخل پیدا کرده و باعث به هم ریختن ساختار DOM و مشکلات رندر شدن میشن.
نتیجه گیری:
این شاید یه نکته ساده و ابتدایی به نظر بیاد،ولی تاثیر مستقیم روی عملکرد و تجربه کاربری (UX) سایت میذاره. همیشه به ساختار سلسله مراتبی Layout ها در فریمورکهایی مثل Next.js دقت کنید!
@DevTwitter | <Mohammed Milad Ahmadi/>
داشتم روی یه صفحه جدید کار میکردم، اما هرچی وارد اون صفحه میشدم، هیچ چیزی لود نمیشد! فقط با رفرش کردن صفحه بود که محتوا نمایش داده میشد.
بعد از کلی سرچ و کمک گرفتن از هوش مصنوعی، بالاخره ریشه مشکل رو پیدا کردم.
مشکل چیه؟
وقتی در یک صفحه از Layout مخصوص و جداگانه استفاده میکنید، به هیچ عنوان نباید تگهای <html> و <body> رو در اون صفحه تکرار کنید.
چرا؟
چون این تگها به صورت سراسری و در Root Layout پروژه شما تعریف میشن.وقتی شما دوباره اونها رو در یک Layout یا صفحه داخلی استفاده کنید، با Layout اصلی تداخل پیدا کرده و باعث به هم ریختن ساختار DOM و مشکلات رندر شدن میشن.
نتیجه گیری:
این شاید یه نکته ساده و ابتدایی به نظر بیاد،ولی تاثیر مستقیم روی عملکرد و تجربه کاربری (UX) سایت میذاره. همیشه به ساختار سلسله مراتبی Layout ها در فریمورکهایی مثل Next.js دقت کنید!
@DevTwitter | <Mohammed Milad Ahmadi/>
🍌53👍25❤8🔥1
وقتی پروژهها بزرگتر میشن، پیچیدگی کد فقط فنی نیست، بلکه کسبوکاریه.
قوانین، فرآیندها، استثناها و موجودیتها (Entities) از دنیای واقعی میان توی نرمافزار، و معمولاً جایی بین Controller و Service گم میشن.
معماری Domain-Driven Design (DDD) اومده تا این مشکل رو حل کنه.
لینک مقاله
@DevTwitter | <Erfan Yousefi/>
قوانین، فرآیندها، استثناها و موجودیتها (Entities) از دنیای واقعی میان توی نرمافزار، و معمولاً جایی بین Controller و Service گم میشن.
معماری Domain-Driven Design (DDD) اومده تا این مشکل رو حل کنه.
لینک مقاله
@DevTwitter | <Erfan Yousefi/>
❤21👍12🍌2🔥1
درود! اگر با کشف خودکار سرویسها (Service Discovery)، ارتباطات امن و نظارت بر سلامت نود ها در Express.js مشکل داشتید، پکیج express-micro یه پلاگین برای اکسپرس و یه راه حل سبک و کم دردسره! – با پروکسی API، وایتلیستینگ IP و امضای HMAC.
شما میتونید سرویسهاتون رو بدون هماهنگی دستی به طور خودکار متصل کنید و امنیت ارتباطات بین نودها رو با روشهای متعدد تضمین کنید.
لینک پروژه: https://www.npmjs.com/package/express-micro
مستندات: https://github.com/Tariux/Express-Micro
نصب: npm install express-micro
نمونه کد:
@DevTwitter | <madman/>
شما میتونید سرویسهاتون رو بدون هماهنگی دستی به طور خودکار متصل کنید و امنیت ارتباطات بین نودها رو با روشهای متعدد تضمین کنید.
لینک پروژه: https://www.npmjs.com/package/express-micro
مستندات: https://github.com/Tariux/Express-Micro
نصب: npm install express-micro
نمونه کد:
const expressMicro = require('express-micro');
const { services } = expressMicro(app, {
serviceName: 'my-service',
port: 3000,
peers: ['http://localhost:3001']
});
// فراخوانی سرویس:
await services.otherService.getData({ id: 123 });@DevTwitter | <madman/>
👍11🍌2👎1🔥1
یکی از جذاب ترین خبر برای باری کسانی که باگ بانتی کار میکنند یا علاقه دارند به این موضوع
مجموعهای از ایجنت های هوش مصنوعیبه اسم Strix که مثل یک هکر واقعی عمل میکنن! کد شما رو بهصورت پویا اجرا میکنن، حفرههای امنیتی رو پیدا میکنن، و حتی با نمونهی واقعی (Proof-of-Concept) اونها رو تأیید میکنه!
چرا مهمه؟
بزرگترین مشکل تست امنیتی سنتی اینه که با سرعت توسعهی نرمافزار هماهنگ نیست.
اما Strix مستقیماً در جریان کاری شما ادغام میشه:
اجرای خودکار در CI/CD برای کشف آسیبپذیریها قبل از انتشار!
دریافت PoC واقعی بهجای هشدارهای اشتباه تحلیلهای ایستا
تست کامل حملات تزریقی، کنترل دسترسی و باگهای منطقی
و بهترین بخش ماجرا:
نیازی نیست کارشناس امنیت باشید!
Strix با یک جعبهابزار کامل هک میاد از HTTP Proxy و مرورگر خودکار گرفته تا محیط اجرای Python برای توسعهی Exploit.
مثل اینه که یک تیم امنیتی حرفهای در سرعت خط CI/CD شما کار کنه!( البته فکر کنم بزرگنمایی شده ولی خب قطعا ارزش تست داره )!
یک نکته ی مهم دیگه هم اینه که میتونید اونو بصورت داکر و لوکال ران کنید !
آموزش نصب و توضیحات اولیه به فارسی:
https://github.com/xPOURY4/strix/blob/main/README_FA.md
نسخه اصلی:
https://github.com/usestrix/strix
@DevTwitter | <POURYA/>
مجموعهای از ایجنت های هوش مصنوعیبه اسم Strix که مثل یک هکر واقعی عمل میکنن! کد شما رو بهصورت پویا اجرا میکنن، حفرههای امنیتی رو پیدا میکنن، و حتی با نمونهی واقعی (Proof-of-Concept) اونها رو تأیید میکنه!
چرا مهمه؟
بزرگترین مشکل تست امنیتی سنتی اینه که با سرعت توسعهی نرمافزار هماهنگ نیست.
اما Strix مستقیماً در جریان کاری شما ادغام میشه:
اجرای خودکار در CI/CD برای کشف آسیبپذیریها قبل از انتشار!
دریافت PoC واقعی بهجای هشدارهای اشتباه تحلیلهای ایستا
تست کامل حملات تزریقی، کنترل دسترسی و باگهای منطقی
و بهترین بخش ماجرا:
نیازی نیست کارشناس امنیت باشید!
Strix با یک جعبهابزار کامل هک میاد از HTTP Proxy و مرورگر خودکار گرفته تا محیط اجرای Python برای توسعهی Exploit.
مثل اینه که یک تیم امنیتی حرفهای در سرعت خط CI/CD شما کار کنه!( البته فکر کنم بزرگنمایی شده ولی خب قطعا ارزش تست داره )!
یک نکته ی مهم دیگه هم اینه که میتونید اونو بصورت داکر و لوکال ران کنید !
آموزش نصب و توضیحات اولیه به فارسی:
https://github.com/xPOURY4/strix/blob/main/README_FA.md
نسخه اصلی:
https://github.com/usestrix/strix
@DevTwitter | <POURYA/>
👍15❤6🍌4🔥2
ترکیب CachyOs با Hyprland سریع، امن و راحت ترین تجربه ستاپی بود که داشتم
یه سری تست نیازه از بابت یه سری چیزا بگیرم که بتونم مهاجرت کنم بهش البته
فقط اینکه، کانفیگ hyprland بدهید
خودم از این استفاده میکنم و راضیم، ولی یه کم اوضاع توسعش خرابه ظاهرا
https://github.com/HyDE-Project/HyDE
@DevTwitter | <Taqi/>
یه سری تست نیازه از بابت یه سری چیزا بگیرم که بتونم مهاجرت کنم بهش البته
فقط اینکه، کانفیگ hyprland بدهید
خودم از این استفاده میکنم و راضیم، ولی یه کم اوضاع توسعش خرابه ظاهرا
https://github.com/HyDE-Project/HyDE
@DevTwitter | <Taqi/>
❤7👍6👎2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
یک browser جدید اپن سورس به اسم BrowserOS اومده که میتونید روش AI agent اجرا کنید. مثل browser کمپانی openai به اسم Atlas. یعنی اکثر کارهایی که میخواهید تو browser انجام بدید را به ایجنت میگید و اون انجام میده.
روی همه سیستم عامل ها نصب میشه و میتونید مدلهای لوکال را هم استفاده کنید. کلی کارهای جالب میشه باهاش انجام داد مثلا scrape کردن دیتا و ...
Github: https://github.com/browseros-ai/BrowserOS
@DevTwitter | <Mehdi Allahyari/>
روی همه سیستم عامل ها نصب میشه و میتونید مدلهای لوکال را هم استفاده کنید. کلی کارهای جالب میشه باهاش انجام داد مثلا scrape کردن دیتا و ...
Github: https://github.com/browseros-ai/BrowserOS
@DevTwitter | <Mehdi Allahyari/>
👎23👍4🍌2🔥1
این بهترین زبان برنامهنویسیه که تا حالا دیدم! به نظرم سیشارپ و جاوا و جاوای کوچک باید دیگه ماستهاشون رو کیسه کنند!
https://github.com/TodePond/GulfOfMexico
جوان ایرانی! وقتشه زبان خلیج فارس رو حتا قویتر کار کنید!
@DevTwitter | <Shilan/>
https://github.com/TodePond/GulfOfMexico
جوان ایرانی! وقتشه زبان خلیج فارس رو حتا قویتر کار کنید!
@DevTwitter | <Shilan/>
👎86🍌55👍8❤4
یکی از دوستام داشت یه فایل منیجر می ساخت. منم می خواستم یه ایده ای رو تست کنم. جفتمون به یه File Search Engine نیاز داشتیم. در نتیجه، یکی ساختم. می ذارمش اینجا شاید به کار بقیه هم بیاد
https://github.com/naseridev/omega
@DevTwitter | <Nima Naseri/>
https://github.com/naseridev/omega
@DevTwitter | <Nima Naseri/>
❤24👍6👎3🔥3
👍237❤17🍌6👎5
یه اکستنشن دارم برای لینکدین که متن پستها رو باهاش استخراج میکنم
این لینکدین هر روز DOM رو آپدیت میکنه و تغییر میده
زخم شدم یعنی، بس کن دیگه دو روز آروم بگیر
این لینکدین هر روز DOM رو آپدیت میکنه و تغییر میده
زخم شدم یعنی، بس کن دیگه دو روز آروم بگیر
👍32🍌11❤2🔥2
اگر دوست دارید سرویس ها مختلف مثل اور لیف و جوپیتر و ار استدیو و ... لوکال بیارید بالا و همشو باهم داشته باشید
این ریپو به دردتون میخوره
https://github.com/parvvareshInfrastructure/local-service
@DevTwitter | <Alireza Parvaresh/>
این ریپو به دردتون میخوره
https://github.com/parvvareshInfrastructure/local-service
@DevTwitter | <Alireza Parvaresh/>
🔥12❤1🍌1
https://w3schools.com
بچه ها این سایت برای یادگیری برنامه نویسی خیلی عالیه
نکته ای که متمایزش میکنه از بقیه 1-اکثر زبان های برنامه نویسی رو داره 2-ازت سوال میپرسه و عملی تمرینت میده
ترجیحا پایتون یا سی شارپ یادبگیرید (مرگ بر جاوااسکریپت)
@DevTwitter | <MaHdI/>
بچه ها این سایت برای یادگیری برنامه نویسی خیلی عالیه
نکته ای که متمایزش میکنه از بقیه 1-اکثر زبان های برنامه نویسی رو داره 2-ازت سوال میپرسه و عملی تمرینت میده
ترجیحا پایتون یا سی شارپ یادبگیرید (مرگ بر جاوااسکریپت)
@DevTwitter | <MaHdI/>
👎131🍌63👍16❤5
لیستی از پروژههای پیشنهادی GenAI که میتونه بهتون کمک کنه رزومه بهتری در این حوزه داشته باشید، از دستش ندید!
https://github.com/aishwaryanr/awesome-generative-ai-guide/blob/main/resources/60_ai_projects.md
@DevTwitter | <zhiwar/>
https://github.com/aishwaryanr/awesome-generative-ai-guide/blob/main/resources/60_ai_projects.md
@DevTwitter | <zhiwar/>
👍12🍌2
تاحالا با cli hashtag هوشمصنوعی qwen کار کردین؟
خب نصبش که خیلی راحته:
حالا تو ویندوز command prompt رو باز میکنید و به شاخه پروژه میرید
اونجا دستور qwen رو میزنید و عملیات لاگین رو با جیمیلتون انجام میدید
بعد از لاگین فقط کافیه بهش بگید که چیکار کنه
این cli هوشمصنوعی عالیه، حتی خیلی بهتر از gemini گوگل
من یک پروژه کامل رو با این cli نوشتم (laravel inertia)
بک و فرانت رو همزمان پشتیبانی میکنه
حتی کارهایی که من ازش نمیخواستم و به ذهن منم نمیرسید رو خودش انجام میداد
قبل از هر تغییری هم که بخواد ایجاد کنه، از شما سوال میکنه که آیا موافق هستید یا نه
@DevTwitter | <sina Khaghani/>
خب نصبش که خیلی راحته:
npm install -g @qwen-code/qwen-codeحالا تو ویندوز command prompt رو باز میکنید و به شاخه پروژه میرید
اونجا دستور qwen رو میزنید و عملیات لاگین رو با جیمیلتون انجام میدید
بعد از لاگین فقط کافیه بهش بگید که چیکار کنه
این cli هوشمصنوعی عالیه، حتی خیلی بهتر از gemini گوگل
من یک پروژه کامل رو با این cli نوشتم (laravel inertia)
بک و فرانت رو همزمان پشتیبانی میکنه
حتی کارهایی که من ازش نمیخواستم و به ذهن منم نمیرسید رو خودش انجام میداد
قبل از هر تغییری هم که بخواد ایجاد کنه، از شما سوال میکنه که آیا موافق هستید یا نه
@DevTwitter | <sina Khaghani/>
❤24👎4👍3🍌3
من یه ربات تلگرام ساختم برای دانلود فایلها از کانالها.
باهاش میتونید:
- همه فایلهای یه کانال رو دانلود کنید
- بر اساس نوع فایل فیلتر کنید (عکس، PDF، ویدیو و ...)
- تعداد فایلهایی که میخواین دانلود بشه رو مشخص کنید
یه اسکریپت ساده که با Python و Telethon نوشته شده
لینک گیت هاب:
https://github.com/erfanghorbanee/Telegram-File-Downloader
@DevTwitter | <Erfan/>
باهاش میتونید:
- همه فایلهای یه کانال رو دانلود کنید
- بر اساس نوع فایل فیلتر کنید (عکس، PDF، ویدیو و ...)
- تعداد فایلهایی که میخواین دانلود بشه رو مشخص کنید
یه اسکریپت ساده که با Python و Telethon نوشته شده
لینک گیت هاب:
https://github.com/erfanghorbanee/Telegram-File-Downloader
@DevTwitter | <Erfan/>
❤52👍6👎3🔥2
سرویسی که گفت: “من دیگه نمیکشم…” و ما رفتیم سراغ Go!
چند ماه پیش متوجه شدم که بار روی یکی از سرویسهامون که مسئولیت محاسبه قیمت، تخفیف و موجودی کالا را برعهده داشت، عجیب بالا رفته.
هی باید بهش ریسورس اضافه میکردیم و هی فاکتور پشتفاکتور… هی سعی می کردیم کد های سمت node js رو باز نویسی کنیم اما باز مشکل وجود داشت
اما یک جایی ایستادم و به مانیتور زل زدم:
«واقعاً تا کی Scale out ؟ تا کی پول بریزیم برای پادهای بیشتر؟»
با بررسی لاگ های کمی که تو سیستم داشتیم و کمی تعمل بیشتر دیدم مشکل ما فقط زبان نیست بلکه دید طراحی ما برای همچین فشاری آماده نشده بود.
و دیدم که مشکل فقط «بار زیاد» نیست؛ مشکل این بود که مدلِ اجرا (single-threaded event loop + heavy allocations) با الگوی کاری سرویس (محاسبهٔ همزمان قیمت/تخفیف/موجودی) همخوانی نداشت.
هرچقدر پاد اضافه میکردیم، هزینه افزایش مییافت اما مشکل اصلی — CPU-bound hot path و فشار GC — همچنان پابرجا بود.
وقتی اینطوری باشه، مهاجرت به runtimeی که برای concurrency و low-overhead execution طراحی شده (مثل Go) یک انتخاب فنی معقول و قابل دفاعه.
پس تصمیم گرفتم همهچیز را با Go دوباره بسازم؛
اما نه صرفاً rewrite — بلکه یک refactor درست در مون
اول از همه، متریکها را جمع کردم.(این کار برای شروع کار حیاتیه)
p95، مصرف CPU، ترافیک همزمان، صف درخواستها…
میخواستم دقیقاً بفهمم کجا درد میکنیم.
بعد شروع کردم به بازطراحی معماری:
سرویس باید کاملاً Stateless میشد
هر درخواست باید موازی و بدون dependency محلی قابل پاسخ باشد
عملیات سنگین محاسبات تخفیف باید Pipeline بشود
با کمک goroutineها و channelها در خواست ها را موازی و سبک تقسیم کردم و شد یک پازل برای گرفتن جواب نهایی
درخواستها را تقسیم کردم، هرکدام موازی، هرکدام سبک، و در نهایت مثل قطعات پازل کنار هم جواب نهایی را ساختیم.
می خواستم برم سمت gRPC که محدودیت زمان اجازه نداد پس رفتم سمت DB و ایندکس گزاری های بهنر و جدا کردن read , write از هم
کش کویری هم اورد وسط و بعد هم از ردیس واسه کش کمک گرفتم
برای invalidate کردن قیمت و موجودی هم معماری event driven کمک گرفتم (حالا هی بگید چرا مهمه بدونیمش)
خوب گفتیم قبل از این که سرور بیاد پایین بفهیم چه خبره تو سیستم… پس یک logging , metrics هم توی سیستم گذاشتم حتی گوروتین ها رو همو پروفایل کردم که oberservity رو افزایش بدم
خلاصه بعد از این کارها . latency تا ۶۰ درصد در پیک ها پایین امد…مصرف cpu قابل حدس شد و هزینه ها به شدت کم شد و بچه های محصول خوشحال (البته بعدش یک عالمه فیچر امد سمتمون)
در کل باید به " performance از همان ابتدای طراحی معماری فکر کرد"
@DevTwitter | <Hessam Zaheri/>
چند ماه پیش متوجه شدم که بار روی یکی از سرویسهامون که مسئولیت محاسبه قیمت، تخفیف و موجودی کالا را برعهده داشت، عجیب بالا رفته.
هی باید بهش ریسورس اضافه میکردیم و هی فاکتور پشتفاکتور… هی سعی می کردیم کد های سمت node js رو باز نویسی کنیم اما باز مشکل وجود داشت
اما یک جایی ایستادم و به مانیتور زل زدم:
«واقعاً تا کی Scale out ؟ تا کی پول بریزیم برای پادهای بیشتر؟»
با بررسی لاگ های کمی که تو سیستم داشتیم و کمی تعمل بیشتر دیدم مشکل ما فقط زبان نیست بلکه دید طراحی ما برای همچین فشاری آماده نشده بود.
و دیدم که مشکل فقط «بار زیاد» نیست؛ مشکل این بود که مدلِ اجرا (single-threaded event loop + heavy allocations) با الگوی کاری سرویس (محاسبهٔ همزمان قیمت/تخفیف/موجودی) همخوانی نداشت.
هرچقدر پاد اضافه میکردیم، هزینه افزایش مییافت اما مشکل اصلی — CPU-bound hot path و فشار GC — همچنان پابرجا بود.
وقتی اینطوری باشه، مهاجرت به runtimeی که برای concurrency و low-overhead execution طراحی شده (مثل Go) یک انتخاب فنی معقول و قابل دفاعه.
پس تصمیم گرفتم همهچیز را با Go دوباره بسازم؛
اما نه صرفاً rewrite — بلکه یک refactor درست در مون
اول از همه، متریکها را جمع کردم.(این کار برای شروع کار حیاتیه)
p95، مصرف CPU، ترافیک همزمان، صف درخواستها…
میخواستم دقیقاً بفهمم کجا درد میکنیم.
بعد شروع کردم به بازطراحی معماری:
سرویس باید کاملاً Stateless میشد
هر درخواست باید موازی و بدون dependency محلی قابل پاسخ باشد
عملیات سنگین محاسبات تخفیف باید Pipeline بشود
با کمک goroutineها و channelها در خواست ها را موازی و سبک تقسیم کردم و شد یک پازل برای گرفتن جواب نهایی
درخواستها را تقسیم کردم، هرکدام موازی، هرکدام سبک، و در نهایت مثل قطعات پازل کنار هم جواب نهایی را ساختیم.
می خواستم برم سمت gRPC که محدودیت زمان اجازه نداد پس رفتم سمت DB و ایندکس گزاری های بهنر و جدا کردن read , write از هم
کش کویری هم اورد وسط و بعد هم از ردیس واسه کش کمک گرفتم
برای invalidate کردن قیمت و موجودی هم معماری event driven کمک گرفتم (حالا هی بگید چرا مهمه بدونیمش)
خوب گفتیم قبل از این که سرور بیاد پایین بفهیم چه خبره تو سیستم… پس یک logging , metrics هم توی سیستم گذاشتم حتی گوروتین ها رو همو پروفایل کردم که oberservity رو افزایش بدم
خلاصه بعد از این کارها . latency تا ۶۰ درصد در پیک ها پایین امد…مصرف cpu قابل حدس شد و هزینه ها به شدت کم شد و بچه های محصول خوشحال (البته بعدش یک عالمه فیچر امد سمتمون)
در کل باید به " performance از همان ابتدای طراحی معماری فکر کرد"
@DevTwitter | <Hessam Zaheri/>
👍63❤16👎4🍌3
کتاب Apprenticeship Patterns راهنماییه برای برنامهنویسهایی که میخوان از یه تازهکار، تبدیل به یه حرفهای واقعی بشن.
این ترجمه فارسی، نسخهای روان و کاربردیه از کتاب اصلیه و بهت کمک میکنه مسیر رشد شخصی و فنیت رو آگاهانه طی کنی.
اگه دنبال اینی بدونی چطور باید یاد بگیری، چطور تجربه کسب کنی و چطور خودت رو بسازی، این کتاب دقیقاً همونه که باید بخونی.
github.com/hheydarian/apprenticeship-patterns-persian
@DevTwitter <Hamed Heydarian/>
این ترجمه فارسی، نسخهای روان و کاربردیه از کتاب اصلیه و بهت کمک میکنه مسیر رشد شخصی و فنیت رو آگاهانه طی کنی.
اگه دنبال اینی بدونی چطور باید یاد بگیری، چطور تجربه کسب کنی و چطور خودت رو بسازی، این کتاب دقیقاً همونه که باید بخونی.
github.com/hheydarian/apprenticeship-patterns-persian
@DevTwitter <Hamed Heydarian/>
1🔥20❤3👍2