Pastebin ডিজাইন: টেক্সট রাখা ও শেয়ার করা
Pastebin দেখতে URL shortener-এর বড় মানের সংস্করণ। পার্থক্য হলো কনটেন্ট কোথায় রাখবেন এবং মেয়াদ ও অপব্যবহার কীভাবে সামলাবেন।

লক্ষ্য: user টেক্সট paste করে লিংক পায়, আর লিংক যার কাছে আছে সে পড়তে পারে। Paste-এর মেয়াদ থাকতে পারে।
Requirement
- Paste তৈরি (আকার সীমা, যেমন ১ MB), ঐচ্ছিক মেয়াদ ও দৃশ্যমানতাসহ।
- লিংক দিয়ে দ্রুত পড়া।
- Read-ভারী, তবে URL shortener-এর চেয়ে বড় payload।
অনুমান
দিনে ১০ লাখ নতুন paste (প্রায় ১২ write/s) ও ৫০ লাখ read (৬০ read/s), গড় ১০ KB। Storage দিনে প্রায় ১০ GB, বছরে ৩.৬ TB। এটি primary database-এ রাখার মতো বেশি।
ডিজাইন
Metadata ও কনটেন্ট আলাদা করুন:
- Metadata database-এ:
id, content_key, created_at, expires_at, visibility, owner_id। - কনটেন্ট object storage-এ (S3-ধাঁচ),
content_key-এর নিচে।
এতে database ছোট ও সস্তা থাকে, আর বড় অংশ object storage সামলায়।
ID তৈরি
URL shortener-এর মতো: random base62 বা counter block। Private paste-এর জন্য লম্বা, অনুমান-অযোগ্য ID (যেমন ১২+ random অক্ষর), কারণ লিংকই একমাত্র সুরক্ষা।
Read পথ
- Cache-এ (Redis) ID খুঁজুন। মিললে ফেরত দিন।
- না মিললে metadata পড়ুন, মেয়াদ ও দৃশ্যমানতা যাচাই করুন, object storage থেকে কনটেন্ট এনে cache করুন ও ফেরত দিন।
- Public paste CDN দিয়ে সার্ভ করুন।
মেয়াদ
প্রতিটি read-এ expires_at যাচাই করুন যাতে মেয়াদোত্তীর্ণ paste কখনো না যায়। Data মুছুন background cleanup job দিয়ে (বা object storage lifecycle rule), যাতে storage চিরকাল না বাড়ে।
নিরাপত্তা ও অপব্যবহার
- Output escape করুন। XSS ঠেকাতে paste plain text বা sanitised HTML হিসেবে দেখান। নিরাপদ content type দিয়ে সার্ভ করুন।
- IP বা অ্যাকাউন্ট অনুযায়ী আকার ও rate সীমিত করুন।
- Secret ও malware স্ক্যান করুন। Pastebin-ধাঁচের সাইট প্রায়ই credential ফাঁসে ব্যবহার হয়, তাই takedown-এর পথ রাখুন।
- Private paste search engine-কে index করতে দেবেন না (
noindex)।
সম্ভাব্য বাড়তি
Client-এ syntax highlighting, "পড়ার পর মুছে যাবে", পাসওয়ার্ড-সুরক্ষিত paste এবং edit ইতিহাস।
মূল কথা: ছোট metadata আর বড় কনটেন্ট আলাদা রাখুন, কনটেন্ট object storage-এ, read-এ মেয়াদ কার্যকর ও পরে cleanup, আর paste করা প্রতিটি টেক্সটকে বিপজ্জনক input ধরুন।
System Design সিরিজ, পর্ব ৩ (case study): 2 নম্বর (মোট 16)। আগের লেখা: URL shortener ডিজাইন: requirement থেকে scale.


