Panic Dev – Telegram
Panic Dev
1.11K subscribers
123 photos
29 videos
2 files
132 links
Panic Dev; your Panic's solution 🔥

🍿 Telegram
🔰 t.me/PanicDev

🍿 Laravel Community
🔰 t.me/LaravelGroups

😇 Contact Me
🔰 t.me/MentionHex

Thanks for sharing us 💛
Download Telegram
1.4 میلیارد لاگ کاربر، بدون شاردینگ یا سیستم‌های پیچیده – فقط با PostgreSQL 18!

سیستمی ستاپ کردن که :

بیش از 1.4 میلیارد لاگ فعالیت کاربر رو مدیریت می‌کنه
همزمانی بالا در خواندن و نوشتن رو پشتیبانی می‌کنه
درخواست‌های مهم رو زیر 200ms پاسخ می‌ده

بدون شاردینگ
بدون چند دیتابیس یا معماری پیچیده
فقط PostgreSQL 18، با تنظیمات دقیق و بهینه‌سازی


لینک مقاله
#database #postgres

@panicdev
👍1
فیلامنت نسخه ۴ به صورت پایدار (stable) روز ۱۲ اگست ساعت ۱ بعد از ظهر (UTC) ریلیز و در دسترس میشه 🙌

به زمان ایران/تهران میشه سه شنبه هفته آینده (۲۱ مرداد) ساعت ۴:۳۰ بعد از ظهر 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍4🎉1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍1🤣1
وقتی پروژه PHP فقط روی سیستم خودت جواب می‌ده و حس می‌کنی همه چیز اوکیه، تازه نصف راه رو رفتی! توی محیط واقعی (سرور)، داستان فرق می‌کنه.
اینجا سرعت، پایداری و مدیریت منابع حرف اول رو می‌زنن.

🛠 چند تا نکته مهم که باید رعایت کنی:

🔹 فعال کردن OPcache
وقتی این قابلیت روشن باشه، کدها فقط یه بار کامپایل می‌شن و داخل حافظه می‌مونن. این یعنی سرعت بالاتر و فشار کمتر روی CPU.
داخل php.ini این خط‌ها رو اضافه یا اصلاح کن:

opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0


⚠️ یادت نره بعد از هر دیپلوی، PHP-FPM رو ریستارت کنی.

⚠️ یاد باشه که validate_timestamps روی ۱ نباشه ، اونوقت PHP شروع میکنه به چک کردن filesystem و بیشتر پتانسیل Opcache رو از دست میدی

🔹 تنظیم درست PHP-FPM
این سیستم چندتا «Worker» آماده نگه می‌داره تا درخواست‌ها رو سریع جواب بدن. تعداد Worker ها باید با مقدار رم سرور هماهنگ باشه.
یه مثال:

pm = dynamic
pm.max_children = 40
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 12
pm.max_requests = 1000
request_terminate_timeout = 30


چطور میتونی بفهمی هر ورکر چقدر مموری مصرف میکنه ؟

ps -o rss,cmd -C php-fpm | awk '{ sum+=$1 } END { print sum/NR/1024 " MB" }'


در این حالت روی سرور با ۸ گیگ رم و مصرف ۸۰ مگ برای هر php ورکر ،‌ شما تقریبا میتونید ۶۰ عدد max_children داشته باشید .

🔹 استفاده از realpath cache
این کار باعث می‌شه مسیر فایل‌ها رو PHP هی دوباره چک نکنه و سرعت بالاتر بره:

realpath_cache_size = 4096k
realpath_cache_ttl = 600


🔹 فعال کردن /status و slowlog
با /status می‌تونی ببینی چندتا کارگر فعاله و چندتا بیکار.
با slowlog هم می‌فهمی کدوم درخواست‌ها طولانی اجرا می‌شن تا مشکل رو پیدا کنی.

📌 نتیجه نهایی:
اگر اوپ‌کش فعال باشه، PHP-FPM درست تنظیم شده باشه، تایم‌اوت بذاری، کش مسیرها فعال باشه و مانیتورینگ رو جدی بگیری، اپلیکیشن PHP توی سرور خیلی سریع‌تر، پایدارتر و قابل اعتمادتر کار می‌کنه.



@panicdev

#laravel #php
🔥23👍7
Panic Dev
Filament Modular V4 - Production Ready - Enterprise Cache Layers - Zero Config usage - Ready to configure https://github.com/panicdevs/modulite
این پکیج فعلا توی نسخه 0.1 هست و تا ریلیز استیبل کمی فاصله داره - من بنا به نیاز خودم پکیج رو اپگرید کردم و با فیلامنت ورژن ۴ سازگارش کردم و همزمان با پیش بردن کارای خودم اگه به مسئله‌ای بربخورم توی روال توسعه و کار با این پکیج - اپدیت‌های جدیدی رو روش اعمال می‌کنم - می‌تونید Changelog پکیج رو از این لینک دنبال کنید

- ضمن این‌که به زودی توی وبسایت فیلامنت هم در دسترس میشه.

https://modulite.panicdevs.agency/
👌2🔥1
🚀 فرصت همکاری برای دولوپر PHP / Laravel

ما به دنبال یک دولوپر میدلول یا سنیور هستیم که هفته‌ای حداقل ۳۰ ساعت زمان برای همکاری داشته باشه.

🔹 مهارت‌ها و توانایی‌های مورد نیاز:

تسلط به Laravel و PHP
تجربه در توسعه وب‌سرویس‌ها با رعایت استانداردها و Best Practices
توانایی مستندسازی وب‌سرویس‌ها
توانایی تست‌نویسی برای وب‌سرویس‌ها
آشنایی و توانایی توسعه پنل ادمین با Filament
مهارت کافی در MySQL و Redis
آشنایی نسبی با Docker

فردی مسئولیت‌پذیر با روحیه کار تیمی

📩 اگر زمان و توانایی لازم رو دارید، لطفاً هزینه ساعتی به همراه رزومه خودتون رو به دایرکت همین کانال ارسال کنید.


🏢 نحوه همکاری به صورت دورکار است

⚠️ فقط پیام‌های ارسال شده به دایرکت همین کانال بررسی میشن.



با سپاس از همراهی شما ❤️
قابلیت جدید تلگرام برای کانال ها

دایرکت به ادمین کانال ها
🤣8👍2🔥2
۱️⃣ محافظ نامرئی جلوی SQL Injection
اشتباه مرسوم: استفاده مستقیم از کوئری خام.
راه‌حل: همیشه از بایندینگ استفاده کن. اینطوری هم امن‌تره، هم سریع‌تر.

//  Bad
DB::select("SELECT * FROM users WHERE email = '$email'");

// Secure
User::whereRaw("MATCH (bio) AGAINST (? IN BOOLEAN MODE)", [$searchTerm])
->where('is_public', true)
->get();php



۲️⃣ لیست سیاه برای توکن‌های Sanctum
توکن‌های دزدیده‌شده تا زمان انقضا معتبر می‌مونن.
با یه میان‌افزار ساده می‌تونی سریعاً توکن‌های مشکوک رو باطل کنی.
اگه Redis هم بذاری وسط، سرعت چک کردن میشه لحظه‌ای.


public function handle($request, $next) {
if ($this->isCompromised($request)) {
$request->user()->currentAccessToken()->delete();
}
return $next($request);
}


۳️⃣ دانلود استریم‌شده با cursor()
هیچوقت کل دیتابیس رو یه‌جا نیار بالا!
با cursor() و streamDownload می‌تونی میلیون‌ها ردیف رو با مصرف رم خیلی کم استریم کنی.

return response()->streamDownload(function () {
foreach (User::where('active', true)->cursor() as $user) {
echo json_encode($user) . "\n";
}
}, 'users.jsonl');


۴️⃣ لیمیت هوشمند با اثرانگشت کاربر
محدود کردن فقط بر اساس آی‌پی ساده‌ست و قابل دور زدن.
ترکیب آی‌پی + یوزر ایجنت رو هش کن، اون بشه کلید محدودیت. اینطوری حملات brute-force عملاً می‌ریزه.

RateLimiter::for('api', function (Request $request) {
$fingerprint = sha1($request->userAgent() . $request->ip());
return Limit::perMinute(100)->by($fingerprint);
});


۵️⃣ گرم کردن روت‌ها با Octane
لاراول به صورت پیش‌فرض روت‌ها رو در لحظه بوت می‌کنه.
با route:cache و Octane می‌تونی استارت سرور رو تا چند برابر سریع‌تر کنی.

php artisan route:cache
php artisan octane:start --workers=8


۶️⃣ محافظت از بلید جلوی XSS
وقتی HTML کاربر ذخیره میشه، {!! !!} خیلی خطرناکه.
راه‌حل: Purifier برای تمیز کردن کد + CSP nonce برای اسکریپت‌ها.


{!! Purifier::clean($html, ['HTML.Allowed' => 'a[href]']) !!}

<noscript nonce="{{ csp_nonce() }}">
var data = @json($safeData);
</noscript>


۷️⃣ شاردینگ دیتابیس برای مقیاس بی‌نهایت
وقتی ترافیک سنگین میشه، دیتابیس نفسش می‌گیره.
لاراول اجازه میده برای هر یوزر یا تننت یه کانکشن جدا تعریف کنی، بدون بازنویسی کل اپ.

User::on('user_shard')->find(15000);


۸️⃣ چرخش کلید رمزنگاری بدون داون‌تایم
عوض کردن APP_KEY قدیما یعنی همه لاگ‌اوت بشن.
با نگه داشتن کلید قبلی و تعریف کلید جدید، می‌تونی بدون مشکل کلید رو بچرخونی.

# .env
APP_KEY=new_key
PREVIOUS_APP_KEY=old_key

public function boot() {
Encrypter::rotate($this->app['config']['app.key'], 'new_key');
}


📎منبع

@panicdev

#laravel #tips
🔥10
#تامل

تاریخ نمونه‌ای را به یاد ندارد که فاتحی از فتوحاتش سیر شده باشد.
— STEFAN ZWEIG


فرض کن همه‌ی اهداف زندگی‌ات تحقق یافته باشند؛ همه‌ی تغییرات در نهادها و عقایدی که انتظارش را می‌کشی همین حالا کاملاً محقق شوند؛ آیا این برایت شادی و خوشبختی بزرگی خواهد بود؟
👍12👌7🕊4
#tips

هر موقع که فیچیر لازم و یا آماده بود مایگریشن ران میشه
🔥19👎2
ابزار NATS یک سیستم پیام‌رسان (messaging system) ساده، سبک و فوق‌العاده سریع است که برای ارتباط سرویس‌ها در معماری‌های مدرن مثل Microservices و Cloud-Native طراحی شده.
فلسفه‌ی NATS اینه که حداقل پیچیدگی رو بیاره، در عین حال مقیاس‌پذیر و قابل اعتماد باشه.

🔹 مزیت‌های NATS نسبت به Kafka

⚡️ سرعت و سبک بودن
این NATS خیلی سبک‌تر از Kafka هست و برای سناریوهایی که نیاز به latency پایین و سرعت بالا دارن، انتخاب بهتری محسوب میشه.

🛠 سادگی در راه‌اندازی
کافکا معماری پیچیده‌تری داره (Zookeeper، Brokerها و ...)، درحالی‌که NATS خیلی راحت‌تر بالا میاد و نیاز به سرویس‌های جانبی نداره.

☁️ طراحی Cloud-Native
همچنین NATS از اول برای محیط‌های cloud-native و containerized مثل Kubernetes ساخته شده و خیلی خوب باهاشون جور درمیاد.

📦 انعطاف در الگوهای ارتباطی
و NATS هم از Pub/Sub پشتیبانی می‌کنه، هم Request/Reply، هم Queue Groups. این یعنی می‌تونه بسته به نیاز شما مثل یک MQ ساده یا حتی یک سیستم event-driven پیچیده عمل کنه.

🔄 استفاده در سناریوهای کوتاه‌عمر
کافکا بیشتر برای پردازش داده‌های سنگین و ذخیره طولانی‌مدت مناسب هست، اما NATS عالیه برای ارتباطات لحظه‌ای (real-time communication) بین سرویس‌ها.


https://nats.io
صفحه اکسپشن جدید لاراول رو دیدید؟ 🤩
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36❤‍🔥2
سوال مصاحبه :

If you need to delete millions of records from a table in production database, what would you do ?

جوابش بنظرتون چیست ؟