فیلم ارائه لینوس توروالدز، خالق لینوکس سال ۱۳۷۲ که نسخه Linux 1.0 اجرا و در هِلسینکی پایتخت کشور فنلاند به نمایش گذاشت
https://www.youtube.com/watch?v=Pd3P-68at9E
@DevTwitter | <MehrdadLinux/>
https://www.youtube.com/watch?v=Pd3P-68at9E
@DevTwitter | <MehrdadLinux/>
❤70👍4🍌4
Forwarded from DevTwitter Ads.
🍉 شب یلدا یه نشونه خیلی خوبیه که بهمون میگه هنوز هم میشه از فرصتهای از دست رفته استفاده کرد
🎁 لینگانو فرصت یادگیری زبان رو به مناسبت یلدا، بهت هدیه میده، فقط فرصتش محدوده و محدودیت ظرفیتی داره.
🚀 همین الان جوین شو و پیام پین شده رو بخون 👇👇👇👇👇
@lingano_com
@lingano_com
@lingano_com
🎁 لینگانو فرصت یادگیری زبان رو به مناسبت یلدا، بهت هدیه میده، فقط فرصتش محدوده و محدودیت ظرفیتی داره.
🚀 همین الان جوین شو و پیام پین شده رو بخون 👇👇👇👇👇
@lingano_com
@lingano_com
@lingano_com
🍌11👎4❤1👍1
اکستنشن claude در مرورگر chrome که امروز ریلیز شده رو اضافه کنید. به صورت sidebar باز میشه.
دسترسی read/write به همه تبها به صورت همزمان داره و می تونه کد JavaScript در صفحات مرورگر تون اجرا کنه.
و البته که صدها استارت آپ با همین اکستشن کشته شدن. خدا رحمتشون کنه
https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn
@DevTwitter | <shamshiri/>
دسترسی read/write به همه تبها به صورت همزمان داره و می تونه کد JavaScript در صفحات مرورگر تون اجرا کنه.
و البته که صدها استارت آپ با همین اکستشن کشته شدن. خدا رحمتشون کنه
https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn
@DevTwitter | <shamshiri/>
👍29👎3❤1🔥1
تلسکوپ، ابزاری از کلودفلر برای تست عملکرد وب در مرورگرهای مختلف است:
- ضبط ویدیو و فیلماستریپ از بارگذاری صفحه
- جمعآوری معیارهای زمانبندی، خروجی کنسول، HAR و screenshot
- امکان شبیهسازی شبکه، محدودیت CPU، غیرفعالکردن JS و تنظیم کوکی/هدر
https://github.com/cloudflare/telescope
@DevTwitter | <پروفشیونال/>
- ضبط ویدیو و فیلماستریپ از بارگذاری صفحه
- جمعآوری معیارهای زمانبندی، خروجی کنسول، HAR و screenshot
- امکان شبیهسازی شبکه، محدودیت CPU، غیرفعالکردن JS و تنظیم کوکی/هدر
https://github.com/cloudflare/telescope
@DevTwitter | <پروفشیونال/>
❤6👍1🔥1🍌1
Forwarded from Sepehr.cloud | ابر سپهر
💫 ابر سپهر - خرید سرور مجازی ابری
خرید روزانه و تمدید خودکار
انتخاب ناحیه و دیتاسنتر
ساخت منابع دلخواه
ارتقا و کاهش منابع
ترافیک ارسالی رایگان و نامحدود
بیش از ۱۰ توزیع لینوکس و ویندوز
اسنپ شات و بک آپ
وب سرویس REST
@sepehrdotcloud
خرید سرور ابری :
https://sepehr.cloud/cloud
خرید روزانه و تمدید خودکار
انتخاب ناحیه و دیتاسنتر
ساخت منابع دلخواه
ارتقا و کاهش منابع
ترافیک ارسالی رایگان و نامحدود
بیش از ۱۰ توزیع لینوکس و ویندوز
اسنپ شات و بک آپ
وب سرویس REST
@sepehrdotcloud
خرید سرور ابری :
https://sepehr.cloud/cloud
👍24🔥18👎8❤2
بمب دیگه که Anthropic توی ۲۴ ساعت گذشته انداخته اینکه، Agent Skills از الان تبدیل شده به یه Open Standard
با ساپورت این همه شرکت و پروژه!
https://agentskills.io
@DevTwitter | <Von Datawarehausen/>
با ساپورت این همه شرکت و پروژه!
https://agentskills.io
@DevTwitter | <Von Datawarehausen/>
👍31🔥5❤2🍌1
با این مدل حلقه؛ کدت رو خیلی خوانا کن
در آینده بابت اینکار از خودت تشکر میکنی
@DevTwitter | <Vahid Kaargar/>
در آینده بابت اینکار از خودت تشکر میکنی
@DevTwitter | <Vahid Kaargar/>
🍌62👍15👎12❤1
یک قدم جدیتر به سمت UIهای قابلمالکیت — Shadcn UI v2 منتشر شد
اگر با shadcn/ui کار کرده باشید، احتمالاً میدونید چرا بین توسعه دهنده های فرانت اند محبوب شده.
نسخهی 2 اما فقط یک آپدیت ساده نیست؛ بیشتر شبیه یک تغییر رویکرده.
مهمترین نکته برای من:
تمرکز واقعی روی customization و ownership
- رابط CLI جدید و ساخت UI از صفر
الان میتونید با یک دستور، کل ساختار UI پروژه رو بر اساس سلیقهتون بسازید:
استایل کلی، فونت، رنگها، spacing و حتی اینکه زیرساخت کامپوننتها Radix باشه یا Base UI.
خروجی هم کدی هست که کاملاً مال خود پروژهست، نه یک abstraction سنگین.
- اضافه شدن Base UI
این بخش خیلی جذابه.
برای پروژههایی که انعطافپذیری بیشتر و وابستگی کمتر میخوان، Base UI میتونه انتخاب تمیزتری نسبت به Radix باشه — مخصوصاً وقتی کنترل کامل روی behavior کامپوننتها مهمه.
- تجربه توسعه تمیزتر
ساختار آزادتر فایلها، CLI هوشمندتر و دردسر کمتر برای هماهنگی با فریمورکهای مختلف. shadcn داره از یک مجموعه کامپوننت آماده عبور میکنه و به یک پایهی واقعی برای ساخت UI تبدیل میشه — سریع، منعطف و کاملاً تحت کنترل توسعهدهنده.
@DevTwitter | <Hossein Akbari/>
اگر با shadcn/ui کار کرده باشید، احتمالاً میدونید چرا بین توسعه دهنده های فرانت اند محبوب شده.
نسخهی 2 اما فقط یک آپدیت ساده نیست؛ بیشتر شبیه یک تغییر رویکرده.
مهمترین نکته برای من:
تمرکز واقعی روی customization و ownership
- رابط CLI جدید و ساخت UI از صفر
الان میتونید با یک دستور، کل ساختار UI پروژه رو بر اساس سلیقهتون بسازید:
استایل کلی، فونت، رنگها، spacing و حتی اینکه زیرساخت کامپوننتها Radix باشه یا Base UI.
خروجی هم کدی هست که کاملاً مال خود پروژهست، نه یک abstraction سنگین.
- اضافه شدن Base UI
این بخش خیلی جذابه.
برای پروژههایی که انعطافپذیری بیشتر و وابستگی کمتر میخوان، Base UI میتونه انتخاب تمیزتری نسبت به Radix باشه — مخصوصاً وقتی کنترل کامل روی behavior کامپوننتها مهمه.
- تجربه توسعه تمیزتر
ساختار آزادتر فایلها، CLI هوشمندتر و دردسر کمتر برای هماهنگی با فریمورکهای مختلف. shadcn داره از یک مجموعه کامپوننت آماده عبور میکنه و به یک پایهی واقعی برای ساخت UI تبدیل میشه — سریع، منعطف و کاملاً تحت کنترل توسعهدهنده.
@DevTwitter | <Hossein Akbari/>
👍19❤5🔥1
یه پروژه جالب برای Agentic RAG
نمونه ساده و قابل فهم از سیستم RAG با استفاده از LangGraph.
این ریپو بهصورت قدمبهقدم نشون میده چطور:
ایندکسسازی سلسلهمراتبی ا
حافظه مکالمه
سوالهای مبهم رو خودش اصلاح کنه
https://github.com/GiovanniPasq/agentic-rag-for-dummies
@DevTwitter | <Amir Pournasserian/>
نمونه ساده و قابل فهم از سیستم RAG با استفاده از LangGraph.
این ریپو بهصورت قدمبهقدم نشون میده چطور:
ایندکسسازی سلسلهمراتبی ا
حافظه مکالمه
سوالهای مبهم رو خودش اصلاح کنه
https://github.com/GiovanniPasq/agentic-rag-for-dummies
@DevTwitter | <Amir Pournasserian/>
❤16👍1
اگه نیاز دارید فایل هاتون رو توی یه سرور درون شبکه Host کنید یه برنامه نوشتم شاید به کارتون بیاد.
دیشب دیدم USB ندارم فایل هامو انتقال بدم به لپتاپ ایده اش رسید به ذهنم ساختمش.
https://github.com/ThisIsDara/PortPal
@DevTwitter | <Dara/>
دیشب دیدم USB ندارم فایل هامو انتقال بدم به لپتاپ ایده اش رسید به ذهنم ساختمش.
https://github.com/ThisIsDara/PortPal
@DevTwitter | <Dara/>
🍌26❤12👍1👎1
تمرکز بیشتر روی Performance، Java مدرن و Cloud
Spring Boot 4:
فریمورک Spring Boot 4 رو میشه ادامهی منطقی مسیری دونست که از Boot 3 شروع شد؛
ولی این بار با تمرکز پررنگتر روی ویژگیهای جدید، سادهسازی عمیقتر و هماهنگی کامل با Java مدرن.
برخلاف نسخههای قبلی، Spring Boot 4 بیشتر روی «بهتر شدن تجربهی واقعی در پروژههای production» تمرکز داره تا اضافه کردن featureهای نمایشی.
پشتیبانی عمیقتر از Javaهای جدید
یکی از مهمترین تغییرات Spring Boot 4، وابستگی کامل به نسخههای جدید Java هست.
این یعنی:
استفادهی بهتر از قابلیتهای جدید JVM
حذف بخشهای قدیمی و legacy
کدی تمیزتر و آیندهدارتر
ابزار Spring Boot 4 عملاً برای پروژههایی ساخته شده که میخوان چند سال بدون دردسر نگهداری بشن.
پرفورمنس بهتر و Startup سریعتر
پرفورمنس همیشه یکی از دغدغههای اصلی پروژههای بکاند بوده و در Boot 4 جدیتر از قبل بهش پرداخته شده:
بهینهسازی فرآیند startup
مصرف حافظهی کمتر
هماهنگی بهتر با Native Image و GraalVM
این موضوع مخصوصاً برای microserviceها و سیستمهای cloud-based خیلی مهمه.
طراحی CloudNative واقعیتر
فریمورک Spring Boot 4 بیش از قبل برای اجرا در محیطهای Cloud و Kubernetes طراحی شده:
بهبود در health checkها
و observability قویتر (metrics, tracing, monitoring)
رفتار پایدارتر در محیطهای distributed
یعنی وقتی اپلیکیشن وارد production میشه، کمتر با رفتارهای غیرمنتظره مواجه میشی.
پیکربندی شفافتر و قابل فهمتر
یکی از تغییرات مهم Boot 4، کم شدن جادوی پنهان هست.
پیکربندیها واضحتر شدن و توسعهدهنده دقیقتر میفهمه چه اتفاقی داره میافته:
خطاهای واضحتر در زمان اجرا
کاهش وابستگیهای غیرضروری
کنترل بیشتر روی auto configuration
این موضوع توی پروژههای بزرگ واقعاً نجاتدهندهست.
فریمورک Spring Boot 4 همچنان روی DX تمرکز ویژه داره:
پیام خطاهای قابل فهمتر
دیباگ راحتتر
هماهنگی بهتر با ابزارهای مدرن توسعه
هدف اینه که توسعهدهنده زمانش رو صرف حل مسئله کنه، نه جنگیدن با فریمورک.
جمعبندی:
فریمورک Spring Boot 4 بیشتر از اینکه یک نسخهی پر زرقوبرق باشه، یک نسخهی بالغ و حرفهایه:
سریعتر
بهینهتر
سازگار با Java و Cloud امروزی
اگر با Spring Boot کار میکنی، Boot 4 قراره تجربهی تمیزتر و قابل اعتمادتری بهت بده.
@DevTwitter | <parham saghazadeh/>
Spring Boot 4:
فریمورک Spring Boot 4 رو میشه ادامهی منطقی مسیری دونست که از Boot 3 شروع شد؛
ولی این بار با تمرکز پررنگتر روی ویژگیهای جدید، سادهسازی عمیقتر و هماهنگی کامل با Java مدرن.
برخلاف نسخههای قبلی، Spring Boot 4 بیشتر روی «بهتر شدن تجربهی واقعی در پروژههای production» تمرکز داره تا اضافه کردن featureهای نمایشی.
پشتیبانی عمیقتر از Javaهای جدید
یکی از مهمترین تغییرات Spring Boot 4، وابستگی کامل به نسخههای جدید Java هست.
این یعنی:
استفادهی بهتر از قابلیتهای جدید JVM
حذف بخشهای قدیمی و legacy
کدی تمیزتر و آیندهدارتر
ابزار Spring Boot 4 عملاً برای پروژههایی ساخته شده که میخوان چند سال بدون دردسر نگهداری بشن.
پرفورمنس بهتر و Startup سریعتر
پرفورمنس همیشه یکی از دغدغههای اصلی پروژههای بکاند بوده و در Boot 4 جدیتر از قبل بهش پرداخته شده:
بهینهسازی فرآیند startup
مصرف حافظهی کمتر
هماهنگی بهتر با Native Image و GraalVM
این موضوع مخصوصاً برای microserviceها و سیستمهای cloud-based خیلی مهمه.
طراحی CloudNative واقعیتر
فریمورک Spring Boot 4 بیش از قبل برای اجرا در محیطهای Cloud و Kubernetes طراحی شده:
بهبود در health checkها
و observability قویتر (metrics, tracing, monitoring)
رفتار پایدارتر در محیطهای distributed
یعنی وقتی اپلیکیشن وارد production میشه، کمتر با رفتارهای غیرمنتظره مواجه میشی.
پیکربندی شفافتر و قابل فهمتر
یکی از تغییرات مهم Boot 4، کم شدن جادوی پنهان هست.
پیکربندیها واضحتر شدن و توسعهدهنده دقیقتر میفهمه چه اتفاقی داره میافته:
خطاهای واضحتر در زمان اجرا
کاهش وابستگیهای غیرضروری
کنترل بیشتر روی auto configuration
این موضوع توی پروژههای بزرگ واقعاً نجاتدهندهست.
فریمورک Spring Boot 4 همچنان روی DX تمرکز ویژه داره:
پیام خطاهای قابل فهمتر
دیباگ راحتتر
هماهنگی بهتر با ابزارهای مدرن توسعه
هدف اینه که توسعهدهنده زمانش رو صرف حل مسئله کنه، نه جنگیدن با فریمورک.
جمعبندی:
فریمورک Spring Boot 4 بیشتر از اینکه یک نسخهی پر زرقوبرق باشه، یک نسخهی بالغ و حرفهایه:
سریعتر
بهینهتر
سازگار با Java و Cloud امروزی
اگر با Spring Boot کار میکنی، Boot 4 قراره تجربهی تمیزتر و قابل اعتمادتری بهت بده.
@DevTwitter | <parham saghazadeh/>
👍20❤2👎2🔥1
یکی از اینفلوئنسرهای حوزه Ai بنام Robin Eber سایت پایین رو ساخته که بصورت رایگان، پرامپت شما رو آنالیز میکنه و بهش نمره میده.
بهتون میگه که آیا پرامپتتون رو خوب نوشتید یا نه و اگر نه، ایرادش کجاست و چطور میتونید بهترش کنید که بهترین خروجی ممکن رو بگیرید.
https://coach.robinebers.com/
@DevTwitter | <Amin Anvary/>
بهتون میگه که آیا پرامپتتون رو خوب نوشتید یا نه و اگر نه، ایرادش کجاست و چطور میتونید بهترش کنید که بهترین خروجی ممکن رو بگیرید.
https://coach.robinebers.com/
@DevTwitter | <Amin Anvary/>
❤23🍌5👎4👍3
مواردی که توی PHP8.6 مورد انتظار هستن توی این پست آورده شده.
البته هنوز خیلی زوده چون تازه php8.5 اومده.
ولی خب یک سری موارد با توجه به آپدیتها تایید شدن.
https://nabilhassen.com/php-86
@DevTwitter | <Milad Niroee/>
البته هنوز خیلی زوده چون تازه php8.5 اومده.
ولی خب یک سری موارد با توجه به آپدیتها تایید شدن.
https://nabilhassen.com/php-86
@DevTwitter | <Milad Niroee/>
🔥20🍌6👎2❤1
اقا ما بدلیل محدودیت های مادی یه اپی ساختیم برای تست برد های الکتریکی
خلاصه اینطوریه که با یه اردوئینو کار اسیلوسکوپمیکنه ،
https://github.com/Mooch3384/El-Board-Tester
@DevTwitter | <موچی/>
خلاصه اینطوریه که با یه اردوئینو کار اسیلوسکوپمیکنه ،
https://github.com/Mooch3384/El-Board-Tester
@DevTwitter | <موچی/>
1🔥27👍4❤2
لینوکس fedora نسخه 43 منتشر شد
فدورا لینوکس یکی از توزیعهای پیشرو دنیای لینوکس هستش که توسط پروژه fedora و با پشتیبانی شرکت Red Hat توسعه داده میشه. چرخه ریلیز جدید fedora حدودا هر شش ماه هست و هر ریلیز تا 13 ماه پشتیبانی میشه.
ویژگیهای مهم fedora 43:
- هسته لینوکس 6.17: پشتیبانی بهتر از سخت افزار های جدید و بهبود در مدیریت چند هسته ای.
- محیط دسکتاپ Workstation (GNOME 49): اجرای پیشفرض بر روی Wayland و پایان پشتیبانی از X11.
- نسخه KDE Plasma (Plasma 6.4.5): رفع باگ های KWin و مدیریت رنگ و خروجی بهتر در Wayland.
- مدیریت بستهها با RPM 6.0: افزایش امیت بسته ها و بهبود مدیریت امضا ها.
منبع:
https://fedoramagazine.org/whats-new-fedora-workstation-43
@DevTwitter | <Mohammad Mortazavi/>
فدورا لینوکس یکی از توزیعهای پیشرو دنیای لینوکس هستش که توسط پروژه fedora و با پشتیبانی شرکت Red Hat توسعه داده میشه. چرخه ریلیز جدید fedora حدودا هر شش ماه هست و هر ریلیز تا 13 ماه پشتیبانی میشه.
ویژگیهای مهم fedora 43:
- هسته لینوکس 6.17: پشتیبانی بهتر از سخت افزار های جدید و بهبود در مدیریت چند هسته ای.
- محیط دسکتاپ Workstation (GNOME 49): اجرای پیشفرض بر روی Wayland و پایان پشتیبانی از X11.
- نسخه KDE Plasma (Plasma 6.4.5): رفع باگ های KWin و مدیریت رنگ و خروجی بهتر در Wayland.
- مدیریت بستهها با RPM 6.0: افزایش امیت بسته ها و بهبود مدیریت امضا ها.
منبع:
https://fedoramagazine.org/whats-new-fedora-workstation-43
@DevTwitter | <Mohammad Mortazavi/>
🔥14👎6❤5
ایشون باگی رو در str_replace ورژن 8.5 php پیدا کرده که جالبه
باگ از xdebug میاد که اگر ورژن قدیمی باشه، باعث مشکل در این فانکشن میشه
مطالب خوبی در زمینه php میذاره کلا
https://www.youtube.com/watch?v=dWM1VkBtkA8
@DevTwitter | <hadi mirzaie/>
باگ از xdebug میاد که اگر ورژن قدیمی باشه، باعث مشکل در این فانکشن میشه
مطالب خوبی در زمینه php میذاره کلا
https://www.youtube.com/watch?v=dWM1VkBtkA8
@DevTwitter | <hadi mirzaie/>
👍13🔥1
از وقتی هوش مصنوعی قدرت گرفته بیشتر به این نتیجه میرسم که اشتباه کردم و سالها بجای زبان پایتون Python زبان های Asp , Php یاد گرفتم .
این که کد چیکار میکند همین قدر که با Proxy های مختلف و شبیه ساز دیوایس های مختلف از انواع گوشی تلفن همراه ، تبلت و ... را در سراسر جهان شبیه سازی میکند و ...
پایتون و هوش مصنوعی بسیار جذاب هستند و سطح امنیت در اینترنت روز به روز خطرناک تر می شود ، امروز افراد بیشتر حتی بدون داشتن دانش فناوری امکان انجام حملات هکری و تولید بد افزار های جدید را دارند که ممکن است نه تنها برای کاربران که برای سیستم های امنیتی هم چالش بزرگی محسوب شود .
@DevTwitter | <Hossein Eftekharrad/>
این که کد چیکار میکند همین قدر که با Proxy های مختلف و شبیه ساز دیوایس های مختلف از انواع گوشی تلفن همراه ، تبلت و ... را در سراسر جهان شبیه سازی میکند و ...
پایتون و هوش مصنوعی بسیار جذاب هستند و سطح امنیت در اینترنت روز به روز خطرناک تر می شود ، امروز افراد بیشتر حتی بدون داشتن دانش فناوری امکان انجام حملات هکری و تولید بد افزار های جدید را دارند که ممکن است نه تنها برای کاربران که برای سیستم های امنیتی هم چالش بزرگی محسوب شود .
@DevTwitter | <Hossein Eftekharrad/>
👎98👍17🍌14🔥1
فایل access.log باهامون حرف میزنه... :)))
چند وقت پیش توی شرایطی قرار گرفتم که لازم بود یک پروژهی کوچیکِ بدون مانیتورینگ رو بررسی کنم.
میدونستم که دیتای مورد نیازم داخل access.log هست ولی جمع بندی کردن و ارائهی یک گزارش قابل دفاع ازش سخت بود.
بعد از بوسیدن روی گل claude به یک ابزاری رسیدم که میتونه یه گزارش تمیز و شفاف از هر چیزی که اتفاق افتاده یا داره میوفته رو بده.
ابزار GoAccess این کار رو مثل آب خوردن انجام میده؛ بهت خروجی HTML هم میده.
اگر روی سرور نصبش کنی میتونی به صورت real-time ببینی چه خبره و داره چه اتفاقی میوفته، از همه چیز هم گزارش میده.
https://goaccess.io/
@DevTwitter | <Milad Niroee/>
چند وقت پیش توی شرایطی قرار گرفتم که لازم بود یک پروژهی کوچیکِ بدون مانیتورینگ رو بررسی کنم.
میدونستم که دیتای مورد نیازم داخل access.log هست ولی جمع بندی کردن و ارائهی یک گزارش قابل دفاع ازش سخت بود.
بعد از بوسیدن روی گل claude به یک ابزاری رسیدم که میتونه یه گزارش تمیز و شفاف از هر چیزی که اتفاق افتاده یا داره میوفته رو بده.
ابزار GoAccess این کار رو مثل آب خوردن انجام میده؛ بهت خروجی HTML هم میده.
اگر روی سرور نصبش کنی میتونی به صورت real-time ببینی چه خبره و داره چه اتفاقی میوفته، از همه چیز هم گزارش میده.
https://goaccess.io/
@DevTwitter | <Milad Niroee/>
🔥16❤5
به عنوان کسی که اول با php کار میکردم بعد اومدم سمت Java میخوام به یک مشکل بزرگ توی استک php اشاره کنم
مشکل اینه که phpرو حالت پیشفرض برای هر درخواست کاربر همه چیو از صفر load میکنه و مموری رو بین درخواست های مختلف share نمیکنه
چیزیو توی مموری نگه نمیداره و برای هر درخواست برنامه از اول bootstrap میشه
هر درخواست =
اجرای composer autoload
ایجاد connectionها
انجام task
حذف کامل state
در حالی که وقتی با جاوا کار میکنی اپلیکیشن یکبار توی مموری load میشه و هر درخواست توی thread جدید همون اپلیکیشن یا process هندل میشه و مموری process بین thread ها یعنی درخواست ها share میشه
و خب بنظرم توی اپلیکیشن های امروزی که تعداد کاربران که با وبسایت کار میکنن زیاده این یک مشکل بزرگ هست
چرا؟
چون Resource های سنگین مثل Connection هارو برای هر درخواست از اول باز میکنه و امکان Connection pooling نیست
یعنی اگه مثلا کد php ما میخواد یک api توی سرویس دیگه ای رو تحت پروتکل Http صدا بزنه برای هر درخواستِ کاربر، php باید کانکشن جدید بسازه و tcp handshake هر بار تکرار میشه
یا وقتی میخواد با دیتابیس ارتباط بگیره برای هر درخواست یهConnection جدید باز میکنه که به شدت کارایی برنامه رو میاره پایین. چون کانکشن های دیتابیس علاوه بر tcp handshake ها باید به ازای هر کانکشن که ایجاد میشه احراز هویت و لاگین هم انجام بشه. یا سمت سرور دیتابیس برای هر کانکشن یک process جدید توی سیستم عامل ایجاد میشه که یه بار اضافه روی سرور دیتابیس هم میندازه
در حالی که اگه state حفظ بشه میشه این Connection ها وResource های سنگین رو باز نگه داشت و چندین بار ازشون استفاده کرد و یا اصطلاحا Pool کرد که کارایی برنامه بشدت میره بالا
مطمعنا برای ارتباط به هر سرور و ابزار خاصی این مشکل ایجاد کانکشن های جدید هست
تو فکرم اینه که اگه کد php میخواد مثلا با gRPC با یک میکروسرویس دیگه ارتباط داشته باشه کل مزیت streaming این پروتکل از دست میره و نمیتونه اون Persistent connection رو داشته باشه و همه تعاملات رو با اون انجام بده در واقع Multiplexing از بین میره. و برای هر درخواست gRPC یک کانکشن جدید ساخته میشه!!!!!
البته وقتی از php-fpm برای serve اپلیکیشن استفاده میکنید. php-fpm میتونه به ازای هر woker process کانکشن هارو توی مموری نگه داره (پیشفرض اینکارو نمیکنه)
اما خب این کانکشن به ازای هرworker process هست و باز بین درخواست ها share نمیشه. صرفا درخواست جدیدی که با اونworker process هندل بشه این کانکشن رو میتونه داشته باشه.
و خب برای هندل کردن درخواست های همزمان تعداد زیادی کانکشن به دیتابیس ایجاد میشه که باز میتونه یه مشکل دیگه باشه و اپلیکیشن ما میتونه به تنهایی کل توان پردازشی دیتابیس رو مصرف کنه(کنترلی روی حداکثر تعداد کانکشن ها نیست)
و تو این حالتم نمیشه از پروتکل هایی که همه تعاملات رو با یک کانکشن انجام میدن استفاده کرد. Multiplexing برای این ساخته شد که با یک کانکشن همه تعاملات انجام بشه. ولی تو این حالت به ازای هر worker processو درخواستی که هندل میکنه یک کانکشن داریم
فقط هم gRPC نیست، برای ارتباط گرفتن با کافکا هم کلاینت کافکا از یک کانکشن برای بهینه کردن و رد بدل اطلاعات با بروکر استفاده میکنه
حتی RabbitMQکه channel هارو توی یک تک کانکشنtcp هندل میکنه
ابزار های مختلفی مثل FrankenPHP/Swoole/RoadRunnner یا Laravel Octane برای حل چنین مشکلاتی ساخته شدن که phpرو تبدیل به اپلیکیشن سرور میکنن
@DevTwitter | <Hossein Soleimani/>
مشکل اینه که phpرو حالت پیشفرض برای هر درخواست کاربر همه چیو از صفر load میکنه و مموری رو بین درخواست های مختلف share نمیکنه
چیزیو توی مموری نگه نمیداره و برای هر درخواست برنامه از اول bootstrap میشه
هر درخواست =
اجرای composer autoload
ایجاد connectionها
انجام task
حذف کامل state
در حالی که وقتی با جاوا کار میکنی اپلیکیشن یکبار توی مموری load میشه و هر درخواست توی thread جدید همون اپلیکیشن یا process هندل میشه و مموری process بین thread ها یعنی درخواست ها share میشه
و خب بنظرم توی اپلیکیشن های امروزی که تعداد کاربران که با وبسایت کار میکنن زیاده این یک مشکل بزرگ هست
چرا؟
چون Resource های سنگین مثل Connection هارو برای هر درخواست از اول باز میکنه و امکان Connection pooling نیست
یعنی اگه مثلا کد php ما میخواد یک api توی سرویس دیگه ای رو تحت پروتکل Http صدا بزنه برای هر درخواستِ کاربر، php باید کانکشن جدید بسازه و tcp handshake هر بار تکرار میشه
یا وقتی میخواد با دیتابیس ارتباط بگیره برای هر درخواست یهConnection جدید باز میکنه که به شدت کارایی برنامه رو میاره پایین. چون کانکشن های دیتابیس علاوه بر tcp handshake ها باید به ازای هر کانکشن که ایجاد میشه احراز هویت و لاگین هم انجام بشه. یا سمت سرور دیتابیس برای هر کانکشن یک process جدید توی سیستم عامل ایجاد میشه که یه بار اضافه روی سرور دیتابیس هم میندازه
در حالی که اگه state حفظ بشه میشه این Connection ها وResource های سنگین رو باز نگه داشت و چندین بار ازشون استفاده کرد و یا اصطلاحا Pool کرد که کارایی برنامه بشدت میره بالا
مطمعنا برای ارتباط به هر سرور و ابزار خاصی این مشکل ایجاد کانکشن های جدید هست
تو فکرم اینه که اگه کد php میخواد مثلا با gRPC با یک میکروسرویس دیگه ارتباط داشته باشه کل مزیت streaming این پروتکل از دست میره و نمیتونه اون Persistent connection رو داشته باشه و همه تعاملات رو با اون انجام بده در واقع Multiplexing از بین میره. و برای هر درخواست gRPC یک کانکشن جدید ساخته میشه!!!!!
البته وقتی از php-fpm برای serve اپلیکیشن استفاده میکنید. php-fpm میتونه به ازای هر woker process کانکشن هارو توی مموری نگه داره (پیشفرض اینکارو نمیکنه)
اما خب این کانکشن به ازای هرworker process هست و باز بین درخواست ها share نمیشه. صرفا درخواست جدیدی که با اونworker process هندل بشه این کانکشن رو میتونه داشته باشه.
و خب برای هندل کردن درخواست های همزمان تعداد زیادی کانکشن به دیتابیس ایجاد میشه که باز میتونه یه مشکل دیگه باشه و اپلیکیشن ما میتونه به تنهایی کل توان پردازشی دیتابیس رو مصرف کنه(کنترلی روی حداکثر تعداد کانکشن ها نیست)
و تو این حالتم نمیشه از پروتکل هایی که همه تعاملات رو با یک کانکشن انجام میدن استفاده کرد. Multiplexing برای این ساخته شد که با یک کانکشن همه تعاملات انجام بشه. ولی تو این حالت به ازای هر worker processو درخواستی که هندل میکنه یک کانکشن داریم
فقط هم gRPC نیست، برای ارتباط گرفتن با کافکا هم کلاینت کافکا از یک کانکشن برای بهینه کردن و رد بدل اطلاعات با بروکر استفاده میکنه
حتی RabbitMQکه channel هارو توی یک تک کانکشنtcp هندل میکنه
ابزار های مختلفی مثل FrankenPHP/Swoole/RoadRunnner یا Laravel Octane برای حل چنین مشکلاتی ساخته شدن که phpرو تبدیل به اپلیکیشن سرور میکنن
@DevTwitter | <Hossein Soleimani/>
👍18👎11❤9🍌1