شورتشکن (Shortesh Kon)
کوتاهکننده لینک سریع، سبک و امن با کش Write-Behind و ۱۲۷ تست Vitest
توسعهدهنده فولاستک
۱۴۰۴ – ۱۴۰۵
توسعه وب
9 فناوری استفادهشده
جریان کوتاه کردن، تست ریدایرکت و بررسی آمار
میتونید یک لینک طولانی بدید، زمان انقضا براش تعیین کنید، کد QR اون رو بگیرید و سرعت ریدایرکت و ثبت آمار در داشبورد رو از نزدیک تست کنید.
راهنمای تست و بررسی
- 1لینک طولانی خودتون رو در کادر ورودی پیست کنید.
- 2در صورت تمایل زمان انقضا (مثلاً ۱ روزه، ۱ هفته یا دائمی) انتخاب کنید.
- 3کد کوتاه اختصاصی و تصویر بارکد QR رو تحویل بگیرید.
- 4با کلیک روی لینک کوتاه، سرعت ریدایرکت ردیس رو امتحان کنید.
- 5در داشبورد، بالا رفتن لحظهای آمار بازدیدها رو مشاهده کنید.
درباره این پروژه
یه وباپلیکیشن کاربردی و سریع برای کوتاه کردن لینکها که به جای یک پروژه آزمایشی ساده، با دید سیستمهای با ترافیک بالا مهندسی شده. با Next.js 16، React 19 و TypeScript ساخته شده و با ترکیب Upstash Redis و PostgreSQL 16 کار میکنه. ویژگیهای باحالی مثل ریدایرکت زیر یک میلیثانیه، شمارش اتمیک کلیکها در رم بدون فشار به دیتابیس، کدهای کوتاه بدون تداخل با الگوریتم Feistel + Sqids، پشتیبانی دوزبانه (فارسی و انگلیسی با تقویم جلالی)، و محافظت در برابر حملات SSRF داره.
ویژگیها و امکانات
ریدایرکت برقآسا و کشینگ Write-Behind
بازهدایت لینکها مستقیماً از رم ردیس انجام میشه تا تاخیر به صفر نزدیک بشه. کلیکها به صورت اتمیک در رم بالا میرن و بعداً در دستههای مجزا به دیتابیس منتقل میشن.
تولید کدهای کوتاه یکتا و بدون تصادم (Feistel + Sqids)
با استفاده از جایگشت ریاضی فیستل، شناسهها بدون نیاز به چک کردن مداوم دیتابیس یا تولید خطای تکراری، به رشتههای کوتاه و غیرقابل حدس تبدیل میشن.
پشتیبانی کامل و صمیمی از زبان فارسی و انگلیسی
چیدمان کاملاً هماهنگ راستچین و چپچین (RTL/LTR)، تاریخهای شمسی و نمایش اعداد فارسی برای راحتی کاربر ایرانی.
امنیت لایهای و سپر دفاعی SSRF
جلوگیری هوشمند از سوءاستفادههای شبکهای و درخواست به آیپیهای خصوصی یا متادیتای کلود، همراه با اعمال Rate Limit روی ردیس و سنجش دقیق با Zod.
حالت کاربری مهمان و ثبتنام
بدون نیاز به ثبتنام میتونید لینکها رو کوتاه کنید و در حافظه مرورگر داشته باشید، یا حساب بسازید و لینکهاتون رو مدیریت کنید.
داشبورد آمار کلیکها و تولید خودکار کد QR
نمودارهای تعاملی برای بررسی روند بازدیدها و کشورهای ارجاعدهنده، همراه با امکان دانلود فوری تصویر باکیفیت QR Code.
پشتصحنه فنی و معماری
شورتشکن روی معماری مدرن Next.js 16 App Router و React 19 با TypeScript پیاده شده. برای دستیابی به حداکثر سرعت، مسیرهای ریدایرکت اصلاً به دیتابیس سر نمیزنن و مستقیماً از Upstash Redis خوانده میشن. کلیکها با دستور اتمیک HINCRBY در حافظه موقت ردیس ثبت میشن و سپس با یک کرانجابِ دارای قفل توزیعشده، در دستههای منظم در PostgreSQL ذخیره میشن. لایهبندی پروژه بر اساس Data Access Layer و پترن Result انجام شده تا کد تمیز و خوانا بمونه.
نکات برجسته فنی
- بهرهگیری از Next.js 16 App Router و Server/Client Components
- الگوی Write-Behind Caching با ترکیب رم پرسرعت ردیس و پایداری PostgreSQL
- ردیابی اتمیک بازدیدها بدون تحمیل بار سنگین و همزمان به دیتابیس
- الگوریتم جایگشت ۳۲ بیتی فیستل برای تولید اسلاگهای بدون برخورد در زمان O(1)
- تفکیک شفاف لایهها با Data Access Layer (DAL) و استفاده از Result Pattern
- پوشش گسترده با ۱۲۷ تست واحد و یکپارچه Vitest برای تضمین کیفیت و رفتارها
فرانتاند و رابط کاربری
بکاند و لایه داده
امنیت و اعتبارسنجی
تست و ابزارهای توسعه
چالشها و راهحلهای مهندسی
پاسخگویی به درخواستهای پرشمار ریدایرکت و ثبت همزمان آمار کلیک بدون مسدودسازی مخزن کانکشنهای دیتابیس رابطهای.
پیادهسازی معماری کشینگ Write-Behind؛ ریدایرکتها بدون درنگ از حافظه Upstash Redis خوانده شده و شمارش کلیکها با HINCRBY اتمیک ذخیره میشوند، سپس یک کرانجاب با قفل توزیعشده تغییرات را در قالب تراکنشهای دستهای به PostgreSQL منتقل میکند.
جلوگیری از اسکرپ ترتیبی شناسهها و تضمین عدم وقوع تصادم در کدهای کوتاه بدون نیاز به کوئریهای مکرر پایگاه داده.
پیادهسازی یک شبکه جایگشت ۳۲ بیتی فیستل (Feistel Cipher) که شناسههای ترتیبی را بدون نیاز به ذخیره جداگانه به اعداد شبهتصادفی تبدیل کرده و سپس با Sqids کدگذاری میکند؛ در نتیجه هر کد کاملاً یکتا و در زمان ثابت O(1) تولید میشود.
خنثیسازی حملات جعل درخواست سمت سرور (SSRF) و مقابله با سوءاستفاده از سرویس در بستر اینترنت عمومی.
ایجاد دفاع چندلایه شامل فیلتر کردن رکوردهای DNS برای مسدودسازی بازههای IP خصوصی، لوپبک و متادیتای سرویسهای ابری به همراه اعمال Rate Limit با Redis و ارزیابی عمیق با Zod.
بررسی فنی عمیق: معماری کشینگ Write-Behind
وقتی درخواستی برای بازهدایت یک لینک کوتاه به مسیر /{slug} میرسد، هر میلیثانیه برای تجربه کاربر حیاتی است. در کوتاهکنندههای سنتی، هر بازهدایت شامل یک پرسوجوی سنگین از دیتابیس و بهروزرسانی بلافاصله شمارنده بازدید است که زیر بار ترافیک شدید منجر به اشباع استخر اتصالات دیتابیس (Connection Pool Exhaustion) میشود.
راهحل پیادهسازی شده در شورتشکن
- خوانش بدون وقفه از Redis: اسلاگ کوتاه بلافاصله از کش اینمموری با دستور
GET link:{slug}خوانده شده و پاسخ HTTP 307 در کمتر از چند میلیثانیه ارسال میگردد. - شمارش اتمیک در رم: به جای تراکنش سنگین دیتابیس، شمارش کلیکها به صورت اتمیک با
HINCRBY link:clicks {id} 1ثبت میشود. - تخلیه امن دستهای (Batch Flush): کرانجاب زمانبندیشده دادههای جمعآوری شده را به صورت دورهای و تحت قفل توزیعشده (Distributed Lock) در PostgreSQL ذخیره میکند.