URL shortener ডিজাইন: requirement থেকে scale
ক্লাসিক প্রথম case study। bit.ly-র মতো সেবা ডিজাইন করি: ID তৈরি, দ্রুত redirect, storage ও scaling।

লক্ষ্য: লম্বা URL-কে ছোট করা (sho.rt/aZ3k9) এবং যে খোলে তাকে redirect করা।
Requirement
- লম্বা URL থেকে ছোট লিংক বানানো। ঐচ্ছিক custom alias ও মেয়াদ।
- দ্রুত ও নির্ভরযোগ্য redirect।
- খুব read-ভারী: তৈরির চেয়ে redirect অনেক বেশি।
- লিংক ব্যক্তিগত হলে বড় আকারে অনুমান করা কঠিন হওয়া চাই।
অনুমান
ধরুন মাসে ১০ কোটি নতুন লিংক, আর read-write অনুপাত ১০০:১। তাহলে প্রায় ৪০ write/s এবং ৪,০০০ redirect/s, peak সম্ভবত ৩ গুণ। প্রতি record প্রায় ৫০০ byte হলে মাসে ১০ কোটি লিংকে প্রায় ৫০ GB, কয়েক বছরে কয়েক TB। একটি database ধরে রাখতে পারে, কিন্তু read-এর জন্য caching লাগবে।
API
POST /links {url, alias?, expiresAt?} ছোট লিংক ফেরত দেয়। GET /{code} redirect দেয়।
ছোট কোড তৈরি
base62 (a-z, A-Z, 0-9) থেকে ৭ অক্ষরে 62^7, প্রায় ৩.৫ ট্রিলিয়ন কোড, যথেষ্ট।
- Counter + base62: global counter একটি অনন্য সংখ্যা দেয়, তাকে base62-এ রূপ দেওয়া হয়। সংঘাত নেই, কিন্তু ক্রমিক কোড অনুমানযোগ্য এবং একটি counter bottleneck। সমাধান: প্রতিটি server-কে একটি সংখ্যার block দিয়ে দেওয়া।
- URL-এর hash (৭ অক্ষর): একই URL একই কোড দেয়, কিন্তু collision হয় ও retry লাগে।
- Random কোড + unique যাচাই: সহজ। unique constraint-সহ insert করুন, সংঘাত হলে retry।
Redirect: 301 না 302?
301 (স্থায়ী) browser cache করতে দেয়, load বাঁচে কিন্তু পরের ক্লিক আপনার analytics-এ আসে না। 302 (অস্থায়ী) প্রতিবার আপনার server-এ আসে, তাই ক্লিক গোনা ও গন্তব্য বদলানো যায়। Analytics লাগলে দেখে বাছুন।
Data model
code (primary key), long_url, created_at, expires_at, owner_id। code দিয়ে key-value lookup। Relational database ভালোই চলে, আর key-value store ভালো scale করে।
Read দ্রুত করা
সামনে cache (Redis): code -> long_url। জনপ্রিয় লিংক memory থেকে যায়। বিশ্বব্যাপী গতির জন্য CDN বা edge function।
বাড়তি
- Analytics: ক্লিক queue-তে log করে পরে aggregate করুন, redirect-এর পথে নয়।
- অপব্যবহার: URL malware ও phishing তালিকায় মিলিয়ে দেখুন, তৈরিতে rate limit দিন, নিজের domain-এ loop আটকান।
- মেয়াদ: background job মেয়াদোত্তীর্ণ লিংক মোছে।
মূল কথা: মূল কাজ key-value lookup। ID-র block আগে থেকে দিন, জনপ্রিয় লিংক cache করুন, analytics হট পথের বাইরে রাখুন, আর অপব্যবহার ঠেকান।
System Design সিরিজ, পর্ব ৩ (case study): 1 নম্বর (মোট 16)।


