تو این مدت داشتم یک سرویس ساده رو قدمبهقدم بهترش میکردم.
نسخهی اول خیلی مستقیم بود: چند متد CRUD، یک مقدار Optional، و یک Exception ساده.
کار میکرد، اما حس میکردم جای بهتر شدن داره.
بعدش دوباره نگاهش کردم و چیزهایی که تو مسیر یاد گرفته بودم رو کمکم اضافه کردم:
-استفاده از Lombok برای تمیزتر شدن کد و حذف constructorهای تکراری (@RequiredArgsConstructor)
-استفاده از @Transactional که مخصوص کارهای دیتابیسیه و باعث میشه رفتار سرویس قابلاعتمادتر بشه
-رمزنگاری پسورد با BCryptPasswordEncoder().encode(...)
-تمیز کردن کد با Optional.orElseThrow()
-ساختن یک GlobalExceptionHandler که خطاها رو استانداردتر و قابلکنترلتر میکنه
-جدا کردن مسئولیتها بین سرویس، ریپازیتوری و کنترلر
-معماری تمیزتر بدون شلوغ کردن کد با کلاسههای اضافی
این پروژه تمرینیه، اما سعی کردم واقعاً با استانداردهایی که تو شرکتها استفاده میشه جلو برم.
اگر کسی مثل خودم جونیوره و دوست داره کنار هم یک نمونهکار درست حسابی بسازیم—فرقی هم نداره بکاند یا فرانتاند باشه—خوشحال میشم بیاد تو گیتهاب و با هم کار کنیم:
https://github.com/AlirezaAkhavanJava/FatKidBoot
@DevTwitter | <Alireza Akhavan/>
نسخهی اول خیلی مستقیم بود: چند متد CRUD، یک مقدار Optional، و یک Exception ساده.
کار میکرد، اما حس میکردم جای بهتر شدن داره.
بعدش دوباره نگاهش کردم و چیزهایی که تو مسیر یاد گرفته بودم رو کمکم اضافه کردم:
-استفاده از Lombok برای تمیزتر شدن کد و حذف constructorهای تکراری (@RequiredArgsConstructor)
-استفاده از @Transactional که مخصوص کارهای دیتابیسیه و باعث میشه رفتار سرویس قابلاعتمادتر بشه
-رمزنگاری پسورد با BCryptPasswordEncoder().encode(...)
-تمیز کردن کد با Optional.orElseThrow()
-ساختن یک GlobalExceptionHandler که خطاها رو استانداردتر و قابلکنترلتر میکنه
-جدا کردن مسئولیتها بین سرویس، ریپازیتوری و کنترلر
-معماری تمیزتر بدون شلوغ کردن کد با کلاسههای اضافی
این پروژه تمرینیه، اما سعی کردم واقعاً با استانداردهایی که تو شرکتها استفاده میشه جلو برم.
اگر کسی مثل خودم جونیوره و دوست داره کنار هم یک نمونهکار درست حسابی بسازیم—فرقی هم نداره بکاند یا فرانتاند باشه—خوشحال میشم بیاد تو گیتهاب و با هم کار کنیم:
https://github.com/AlirezaAkhavanJava/FatKidBoot
@DevTwitter | <Alireza Akhavan/>
🔥8🍌5❤2👍1
#کدبوک
راهنمایی عملی برای یادگیری ساختار دادهها و الگوریتمها با دید و نیازهای توسعه وب:
- توضیح مفاهیم DSA با مثالهای شفاف در JavaScript
- پیادهسازی الگوریتمهای رایج مثل مرتبسازی، جستجو و کار با گراف
- تمرکز بر درک عملکرد و بهینهسازی کد در محیط وب
- مناسب برای توسعهدهندههایی که میخوان مهارت حل مسئلهشون رو در JS تقویت کنن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
راهنمایی عملی برای یادگیری ساختار دادهها و الگوریتمها با دید و نیازهای توسعه وب:
- توضیح مفاهیم DSA با مثالهای شفاف در JavaScript
- پیادهسازی الگوریتمهای رایج مثل مرتبسازی، جستجو و کار با گراف
- تمرکز بر درک عملکرد و بهینهسازی کد در محیط وب
- مناسب برای توسعهدهندههایی که میخوان مهارت حل مسئلهشون رو در JS تقویت کنن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
❤14👎1🔥1🍌1
آشنایی با فریم ورک Vaadin جاوا
فریم ورک Vaadin یه فریمورک مدرن برای ساخت رابطهای کاربری تحت وبه که کل دردسرهای فرانتاند مثل HTML، CSS و JavaScript رو از مسیر توسعهدهنده جاوا کنار میزنه. تو فقط با کامپوننتهای جاوایی کار میکنی و خود فریمورک رندر، مدیریت رویدادها و ارتباط Client-Server رو هندل میکنه. نتیجه؟ امنیت بالاتر، توسعه سریعتر و ساخت UIهای کاملاً استاندارد بدون خروج از اکوسیستم جاوا.
ساخت UI کامل با Spring Boot فقط در Java بدون حتی یک خط JavaScript!
اگه کنجکاوی ببینی ساخت یک UI جدی و کامل فقط با جاوا چطوریه، آموزش Catherine Edelveis در یوتیوب دقیقا نقطه شروع مناسبه.
توی این آموزش، یک CRUD کامل با Vaadin و Spring Boot ساخته شده که همهچیز رو از سمت سرور مدیریت میکنه و تجربه توسعهای خیلی تمیز ارائه میده.
چیا رو پوشش میده؟
Login + Spring Security
Data Grid با Lazy Loading و Filtering
Dialog Form با Validation
Role-based Access Control
Custom Theming
همراه با:
️ Spring Boot
️ Spring Security
️ MongoDB
️ CSRF Protection
️ Form Validation با JSR-303
کد پروژه هم روی GitHub هست و قدمبهقدم قابل دنبال کردنه.
https://www.youtube.com/watch?v=67oJxPRa3Mg
@DevTwitter | <Amir Rahimi Nejad/>
فریم ورک Vaadin یه فریمورک مدرن برای ساخت رابطهای کاربری تحت وبه که کل دردسرهای فرانتاند مثل HTML، CSS و JavaScript رو از مسیر توسعهدهنده جاوا کنار میزنه. تو فقط با کامپوننتهای جاوایی کار میکنی و خود فریمورک رندر، مدیریت رویدادها و ارتباط Client-Server رو هندل میکنه. نتیجه؟ امنیت بالاتر، توسعه سریعتر و ساخت UIهای کاملاً استاندارد بدون خروج از اکوسیستم جاوا.
ساخت UI کامل با Spring Boot فقط در Java بدون حتی یک خط JavaScript!
اگه کنجکاوی ببینی ساخت یک UI جدی و کامل فقط با جاوا چطوریه، آموزش Catherine Edelveis در یوتیوب دقیقا نقطه شروع مناسبه.
توی این آموزش، یک CRUD کامل با Vaadin و Spring Boot ساخته شده که همهچیز رو از سمت سرور مدیریت میکنه و تجربه توسعهای خیلی تمیز ارائه میده.
چیا رو پوشش میده؟
Login + Spring Security
Data Grid با Lazy Loading و Filtering
Dialog Form با Validation
Role-based Access Control
Custom Theming
همراه با:
️ Spring Boot
️ Spring Security
️ MongoDB
️ CSRF Protection
️ Form Validation با JSR-303
کد پروژه هم روی GitHub هست و قدمبهقدم قابل دنبال کردنه.
https://www.youtube.com/watch?v=67oJxPRa3Mg
@DevTwitter | <Amir Rahimi Nejad/>
🍌18❤4🔥2👍1
یکی از مواردی که برای ما هایی که از VPN استفاده می کنیم، دردسر شده، Fingerprint مرورگرها است!
مثلا گوگل میرید ولی خطای 403 میده با اینکه VPN دارید. یک دلیل به خاطر Leak شدن TimeZone اصلی شما هست.
چه موارد دیگه ای را ممکن است بررسی کنند؟
چک کنید:
https://neberej.github.io/exposedbydefault/
@DevTwitter | <VAHID NAMENI/>
مثلا گوگل میرید ولی خطای 403 میده با اینکه VPN دارید. یک دلیل به خاطر Leak شدن TimeZone اصلی شما هست.
چه موارد دیگه ای را ممکن است بررسی کنند؟
چک کنید:
https://neberej.github.io/exposedbydefault/
@DevTwitter | <VAHID NAMENI/>
1👍41❤5🍌3👎2
This media is not supported in your browser
VIEW IN TELEGRAM
با کرنلهای جدید RoPE و MLP Triton در Unsloth AI، میتونید مدلهای زبانی (LLM) رو ۳ برابر سریعتر و بدون هیچ افت دقتی Train کنید! مثلا مدل Qwen3-4B رو ۳ برابر سریعتر و فقط با ۲.۹ گیگابایت VRAM آموزش بدید. کرنلهای جدید به همراه قابلیت smart auto packing باعث میشه سرعت Training حدود ۳ برابر بیشتر بشه و مصرف VRAM هم نسبت به ستاپهای بهینه شده FA3 تا ۳۰٪ کاهش پیدا کنه.
تمام کدها توی وب سایتشون هست.
https://docs.unsloth.ai/new/3x-faster-training-packing
@DevTwitter | <Mehdi Allahyari/>
تمام کدها توی وب سایتشون هست.
https://docs.unsloth.ai/new/3x-faster-training-packing
@DevTwitter | <Mehdi Allahyari/>
🔥18👍5❤1
اگه دوست دارد میز کار یا میز کامپیوتر را ببرید توی یک لیگ دیگه از لحاظ کارایی و دیزاین این ویدیو را حتما ببینید. که چطور با 3D printing چه کارهای جالبی میکنه.
Youtube:
https://www.youtube.com/watch?v=6er5oSPUGOI
@DevTwitter | <Mehdi Allahyari/>
Youtube:
https://www.youtube.com/watch?v=6er5oSPUGOI
@DevTwitter | <Mehdi Allahyari/>
❤21🍌11🔥1
برای کسایی که میخوان وارد مهندسی نرم افزار بشن، این یه ویدیو خیلی خوبیه که Brad Traversy گذاشته، روش یادگیری جدید خودش برای 2025-2026 و تطابق اون با اکوسیستم در حال تغییر و تحول Tech و با مکملLLM ها برای یادگیری داره انجام میده.
https://www.youtube.com/watch?v=gQnBetuyktk
@DevTwitter | <Max Shahdoost/>
https://www.youtube.com/watch?v=gQnBetuyktk
@DevTwitter | <Max Shahdoost/>
❤24👍4👎1🔥1
چند روز پیش hkalbasi توی کامیونیتی Rust، یه ایده ای داد که منم به واسطه بیخوابی ناشی از کافئین پیادهسازیش کردم.
ایده یه ابزار مانیتورینگ حافظه لینوکس بود که PSS، RSS، Shared/Private، کش Swap، NUMA و حتی Delta لحظهای رو به صورت real-time نشون میده.
پ.ن: احتمالا به زودی یه آپدیت هم براش میدم.
https://github.com/naseridev/memz
@DevTwitter | <Nima Naseri/>
ایده یه ابزار مانیتورینگ حافظه لینوکس بود که PSS، RSS، Shared/Private، کش Swap، NUMA و حتی Delta لحظهای رو به صورت real-time نشون میده.
پ.ن: احتمالا به زودی یه آپدیت هم براش میدم.
https://github.com/naseridev/memz
@DevTwitter | <Nima Naseri/>
❤31👎12👍5🔥2
بعضی وقتا کلی تب تو مرورگرم باز دارم،یادم میره چرا بعضیاش هنوز بازه،دیشب یه اکستنشن ساختم که میتونی برای تب یه استیکی نوت بزاری و خیلی به نظرم کاربردیه!نحوه نصبش هم ساده هست اگه خواستید میتونید لینک repoرو بدید به aiبهتون بگه چجوری ادش کنید.
https://github.com/AMIRAK-code/StickyNOte-broswerExtenstion
@DevTwitter | <StarKid/>
https://github.com/AMIRAK-code/StickyNOte-broswerExtenstion
@DevTwitter | <StarKid/>
❤34🍌6👍2👎2
انتشار KeySender
ابزار متنباز ویندوز برای ارسال متن بهصورت کاراکتربهکاراکتر، مخصوص زمانی که Copy/Paste کار نمیکند.
مناسب برای KVM، VM، ترمینالهای امن و وبکنسولها.
https://github.com/saeedphr/keysender
@DevTwitter | <saeedphr/>
ابزار متنباز ویندوز برای ارسال متن بهصورت کاراکتربهکاراکتر، مخصوص زمانی که Copy/Paste کار نمیکند.
مناسب برای KVM، VM، ترمینالهای امن و وبکنسولها.
https://github.com/saeedphr/keysender
@DevTwitter | <saeedphr/>
👍8❤4👎2🔥1
ویروس توتال: ابزاری رایگان برای اسکن سریع فایلها و لینکهای مشکوک
گاهی فایلی از سایتی ناشناس یا منبعی نامطمئن دانلود میکنیم و دلمان شور میزند که نکند آلوده باشد؟ برای این مواقع سرویسی به نام VirusTotal وجود دارد که مثل یک آزمایشگاه آنلاین رایگان عمل میکند.
زمانی که با فایلها یا لینکهای مشکوک روبهرو میشوید، میتوانید با سر زدن به سایت http://VirusTotal.com ، آنها را خیلی سریع اسکن کنید و آلودگیهای احتمالی را تشخیص دهید.
این سرویس فایلهای شما را با بیش از ۷۰ آنتیویروس مختلف بررسی میکند و نتیجه را ظرف چند ثانیه نشان میدهد. اگر نتیجه به رنگ «سبز» بود یعنی میتوانید خیالی آسوده داشته باشید و اگر «قرمز» بود یعنی باید فایل را به صورت کامل حذف کنید!
خوب است بدانید که ما در «نوشدارو» راهنمای کامل پاکسازی کامپیوتر ویندوزی از ویروس و بدافزار (آن هم بدون هیچ هزینهای) را هم نوشتهایم که توصیه میکنیم مطالعهاش کنید:
https://nooshdaroo.ir/cybersecurity-basics/windows-malware-removal
@DevTwitter | <NooshDaroo | نوشدارو/>
گاهی فایلی از سایتی ناشناس یا منبعی نامطمئن دانلود میکنیم و دلمان شور میزند که نکند آلوده باشد؟ برای این مواقع سرویسی به نام VirusTotal وجود دارد که مثل یک آزمایشگاه آنلاین رایگان عمل میکند.
زمانی که با فایلها یا لینکهای مشکوک روبهرو میشوید، میتوانید با سر زدن به سایت http://VirusTotal.com ، آنها را خیلی سریع اسکن کنید و آلودگیهای احتمالی را تشخیص دهید.
این سرویس فایلهای شما را با بیش از ۷۰ آنتیویروس مختلف بررسی میکند و نتیجه را ظرف چند ثانیه نشان میدهد. اگر نتیجه به رنگ «سبز» بود یعنی میتوانید خیالی آسوده داشته باشید و اگر «قرمز» بود یعنی باید فایل را به صورت کامل حذف کنید!
خوب است بدانید که ما در «نوشدارو» راهنمای کامل پاکسازی کامپیوتر ویندوزی از ویروس و بدافزار (آن هم بدون هیچ هزینهای) را هم نوشتهایم که توصیه میکنیم مطالعهاش کنید:
https://nooshdaroo.ir/cybersecurity-basics/windows-malware-removal
@DevTwitter | <NooshDaroo | نوشدارو/>
❤20👍5🍌4🔥1
کد ادیتور Cursor در آخرین آپدیت خودش visual editor اضافه کرد که با این قابلیت میشه جزئیات دیزاین و چینش صفحه و استایل ها رو با استفاده از toolbar ای که در اختیار قرار میده، ویرایش کرد، چیزی شبیه المنتور یا ویکس به صورت درگ و دراپ!
@DevTwitter | <Max Shahdoost/>
@DevTwitter | <Max Shahdoost/>
👍64👎11🔥7❤6
ظاهرا قرار نیست داستان React تموم بشه
چند آسیب پذیری جدید بعد از 55182 منتشر شده
CVE-2025-55184 و CVE-2025-67779
که میتونن با یک درخواست مهاجم باعث کراش سرور بشن.
CVE-2025-55183
باعث لو رفتن سورس کد از طریق RSC میشه
مجدد به روز رسانی به نسخه های 19.0.3, 19.1.4 و 19.2.3 ضروری است.
لطفا اطلاع رسانی بفرمایید.
@DevTwitter | <Ali Saleh/>
چند آسیب پذیری جدید بعد از 55182 منتشر شده
CVE-2025-55184 و CVE-2025-67779
که میتونن با یک درخواست مهاجم باعث کراش سرور بشن.
CVE-2025-55183
باعث لو رفتن سورس کد از طریق RSC میشه
مجدد به روز رسانی به نسخه های 19.0.3, 19.1.4 و 19.2.3 ضروری است.
لطفا اطلاع رسانی بفرمایید.
@DevTwitter | <Ali Saleh/>
🍌42👍17❤9🔥1
دیسکو رونمایی شد؛ راهکار انقلابی گوگل برای تولید وباپ
«دیسکو» سرویسی برپایه جمنای است که تبهای باز مرورگر را به اپلیکیشن سفارشی تبدیل میکند. قابلیت اصلی آن، GenTabs، بر اساس محتوای صفحات در حال مشاهده، وباپهای تعاملی پیشنهاد میدهد.
برای مثال، GenTabs میتواند هنگام مطالعه یک موضوع، وباَپی برای بصریسازی دادهها پیشنهاد دهد تا درک مفاهیم آسانتر شود. همچنین، تنظیم برنامه غذایی بر اساس دستور پخت یا طراحی برنامه سفر از دیگر کاربردهای آن است.
برخلاف برخی چتباتها، GenTabs این تجربیات را بهصورت لحظهای با استفاده از جمنای ۳ و اطلاعات مرورگر و تاریخچه چت کاربر ایجاد میکند. امکان ویرایش خروجیها با دستورات طبیعی و لینک دادن به منابع اصلی فراهم است.
گوگل قصد دارد هوش مصنوعی را عمیقتر در تجربه وبگردی ادغام کند. «دیسکو» بر چندین تب باز و جریان کلی فعالیت کاربر (تحقیق، یادگیری) متمرکز است. این قابلیت در مرحله نخست برای تعداد محدودی از کاربران Google Labs فعال میشود.
@DevTwitter | <Zoomit/>
«دیسکو» سرویسی برپایه جمنای است که تبهای باز مرورگر را به اپلیکیشن سفارشی تبدیل میکند. قابلیت اصلی آن، GenTabs، بر اساس محتوای صفحات در حال مشاهده، وباپهای تعاملی پیشنهاد میدهد.
برای مثال، GenTabs میتواند هنگام مطالعه یک موضوع، وباَپی برای بصریسازی دادهها پیشنهاد دهد تا درک مفاهیم آسانتر شود. همچنین، تنظیم برنامه غذایی بر اساس دستور پخت یا طراحی برنامه سفر از دیگر کاربردهای آن است.
برخلاف برخی چتباتها، GenTabs این تجربیات را بهصورت لحظهای با استفاده از جمنای ۳ و اطلاعات مرورگر و تاریخچه چت کاربر ایجاد میکند. امکان ویرایش خروجیها با دستورات طبیعی و لینک دادن به منابع اصلی فراهم است.
گوگل قصد دارد هوش مصنوعی را عمیقتر در تجربه وبگردی ادغام کند. «دیسکو» بر چندین تب باز و جریان کلی فعالیت کاربر (تحقیق، یادگیری) متمرکز است. این قابلیت در مرحله نخست برای تعداد محدودی از کاربران Google Labs فعال میشود.
@DevTwitter | <Zoomit/>
❤26👍4👎1🔥1
نیاز دارید API هوش مصنوعی های مختلفو بگیرید ولی بخاطر ایرانی بودن دردسر پرداخت دارید؟
تو این سایت میتونید با کریپتو پرداخت کنید و نیاز به هیچ احراز هویتی نداره
حتی با IP ایرانی هم مشکلی نداره
هوش مصنوعی های مختلفو داره و فقط ۵ درصد بیشتر هزینه اصلی API اصلی میگیره
با متاماسک راحت میتونید پرداخت ها را انجام بدید
http://openrouter.ai
@DevTwitter | <Ali Baghernia/>
تو این سایت میتونید با کریپتو پرداخت کنید و نیاز به هیچ احراز هویتی نداره
حتی با IP ایرانی هم مشکلی نداره
هوش مصنوعی های مختلفو داره و فقط ۵ درصد بیشتر هزینه اصلی API اصلی میگیره
با متاماسک راحت میتونید پرداخت ها را انجام بدید
http://openrouter.ai
@DevTwitter | <Ali Baghernia/>
1❤30👍3👎2🔥2
در Github برای Search حرفه ای مثل استفاده از regex میتوانید از
https://github.com/search?type=code
یا از حالت Advanced search استفاده کنید
https://github.com/search/advanced
@DevTwitter | <MehrdadLinux/>
https://github.com/search?type=code
یا از حالت Advanced search استفاده کنید
https://github.com/search/advanced
@DevTwitter | <MehrdadLinux/>
❤9🍌2
تحلیل جالب Maximillian از فیچر جدید Cursor به عنوان Visual Editor درگ و دراپی، آیا به دوران Adobe Dreamweaver بر میگردیم؟!
یکی کامنت کرده بود اگر تیم کرسر سرعتش رو کمتر نکنه به زودی وورپرس جدید میده!
https://www.youtube.com/watch?v=1S8S89X-xbs
@DevTwitter | <Max Shahdoost/>
یکی کامنت کرده بود اگر تیم کرسر سرعتش رو کمتر نکنه به زودی وورپرس جدید میده!
https://www.youtube.com/watch?v=1S8S89X-xbs
@DevTwitter | <Max Shahdoost/>
👍37❤6🍌6🔥3
این مخزن رو هم اینجا میذارم که اگر کسی خواست، دو تا از تمرینهای درس طراحی الگوریتم رو به صورت کد Rust داشته باشه، راحت بتونه پیداشون کنه و استفاده کنه.
https://github.com/naseridev/algorithm-design
@DevTwitter | <Nima Naseri/>
https://github.com/naseridev/algorithm-design
@DevTwitter | <Nima Naseri/>
🍌20❤9👍3👎3
کمتر از یک سال از مشارکت من در پروژه جنگو جیسون ویجت میگذره و تو این مدت ۷ بار ریلیز دادم و ایشو فیکس کردم.
این پروژه هنوزم ایشوهای باز داره و هدفم حل تمام ایشوها و پیشرفت پروژه است، که بدون کمک جامعه امکان پذیر نیست.
https://github.com/jmrivas86/django-json-widget
@DevTwitter | <erfin/>
این پروژه هنوزم ایشوهای باز داره و هدفم حل تمام ایشوها و پیشرفت پروژه است، که بدون کمک جامعه امکان پذیر نیست.
https://github.com/jmrivas86/django-json-widget
@DevTwitter | <erfin/>
❤28🍌6👍2🔥1
بهینه سازی گولنگ برای سیستم های پردازشی با حجم بالای داده
این مقاله نکات جالبی نوشته برای وقتی که یه سرویس گولنگی داری که باید real-time از دیتابیس Postgres بخونه و به Elasticsearch بنویسه. البته نکاتی که گفته کاربردشون محدود به این ابزارها نمیشه و در سناریوهای مشابه هم میشه استفاده شون کرد.
طبق تجربه در این مسیر احتمالا سه تا چالش اصلی داری: دیسک دیتابیس که پر میشه اگه کند بخونی، حافظه که منفجر میشه اگه زیاد buffer کنی، و GC که CPU رو میبلعه اگه زیاد allocate کنی.
یکی از اولین جاهایی که باید بهینه کنی، JSON serialization هست. کتابخانه استاندارد encoding/json امن و راحته، ولی برای حجم بالا کند میشه. جایگزینهایی مثل jsoniter با کاهش reflection overhead میتونن توان عملیاتی رو به شکل محسوسی بالا ببرن. البته جایگزین کردنش چالش هایی هم داره و باید edge case ها رو تست کنی.
قدم بعدی sync.Pool هست. هر event که از replication slot میاد، struct میسازی، buffer برای JSON میگیری، slice و map میسازی. زیر لود بالا، این آبشار allocationها GC رو دیوونه میکنه. با pool کردن bufferها و structهای پرتکرار، تعداد allocationها رو به شدت کم میکنی و GC pause time میاد پایین.
همچنین GC tuning باید آخرین کار باشه، نه اولین. اول allocationها رو کم کن، بعد serialization رو بهینه کن، بعد اگه هنوز spike داشتی برو سراغ تنظیمات GC. از Go 1.25 هم یه GC آزمایشی جدید اومده که برای سرویسهای throughput-heavy مناسبه.
https://packagemain.tech/p/golang-optimizations-for-highvolume?triedRedirect=true
@DevTwitter | <Hossein Nazari/>
این مقاله نکات جالبی نوشته برای وقتی که یه سرویس گولنگی داری که باید real-time از دیتابیس Postgres بخونه و به Elasticsearch بنویسه. البته نکاتی که گفته کاربردشون محدود به این ابزارها نمیشه و در سناریوهای مشابه هم میشه استفاده شون کرد.
طبق تجربه در این مسیر احتمالا سه تا چالش اصلی داری: دیسک دیتابیس که پر میشه اگه کند بخونی، حافظه که منفجر میشه اگه زیاد buffer کنی، و GC که CPU رو میبلعه اگه زیاد allocate کنی.
یکی از اولین جاهایی که باید بهینه کنی، JSON serialization هست. کتابخانه استاندارد encoding/json امن و راحته، ولی برای حجم بالا کند میشه. جایگزینهایی مثل jsoniter با کاهش reflection overhead میتونن توان عملیاتی رو به شکل محسوسی بالا ببرن. البته جایگزین کردنش چالش هایی هم داره و باید edge case ها رو تست کنی.
قدم بعدی sync.Pool هست. هر event که از replication slot میاد، struct میسازی، buffer برای JSON میگیری، slice و map میسازی. زیر لود بالا، این آبشار allocationها GC رو دیوونه میکنه. با pool کردن bufferها و structهای پرتکرار، تعداد allocationها رو به شدت کم میکنی و GC pause time میاد پایین.
همچنین GC tuning باید آخرین کار باشه، نه اولین. اول allocationها رو کم کن، بعد serialization رو بهینه کن، بعد اگه هنوز spike داشتی برو سراغ تنظیمات GC. از Go 1.25 هم یه GC آزمایشی جدید اومده که برای سرویسهای throughput-heavy مناسبه.
https://packagemain.tech/p/golang-optimizations-for-highvolume?triedRedirect=true
@DevTwitter | <Hossein Nazari/>
❤13🍌5
برای یادگیری گولنگ تصمیم گرفتم به جای کورس دیدن، با https://gobyexample.com و study & learn جیپیتی جلو برم. با اینکه یه کورس هم دانلود کردم که اگر جایی رو واقعا نفهمیدم، برم سراغش
حس میکنم با یه سره کورس دیدن وقتم تلف میشه و دیگه اون دوران گذشته
@DevTwitter | <Matin SenPai/>
حس میکنم با یه سره کورس دیدن وقتم تلف میشه و دیگه اون دوران گذشته
@DevTwitter | <Matin SenPai/>
👍73🍌14👎9❤3