Pastebin ডিজাইন: টেক্সট রাখা ও শেয়ার করা

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

শেয়ার লিংকসহ একটি টেক্সট snippet

লক্ষ্য: 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 পথ

  1. Cache-এ (Redis) ID খুঁজুন। মিললে ফেরত দিন।
  2. না মিললে metadata পড়ুন, মেয়াদ ও দৃশ্যমানতা যাচাই করুন, object storage থেকে কনটেন্ট এনে cache করুন ও ফেরত দিন।
  3. 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.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া