Google Drive-এর মতো file storage ও sync ডিজাইন

Drive-ধাঁচের সেবা ফাইল রাখে ও প্রতিটি device-কে sync রাখে। chunk করা storage, metadata service ও conflict সামলানো ডিজাইন করি।

ল্যাপটপ, ফোন ও cloud-এর মধ্যে sync হওয়া ফাইল

লক্ষ্য: user ফাইল upload করে, যেকোনো device থেকে খোলে, শেয়ার করে এবং edit স্বয়ংক্রিয়ভাবে sync হয়।

Requirement

  • ফাইল upload, download, edit ও delete; বড় ফাইলও।
  • Device জুড়ে sync, offline edit সহ।
  • Permission সহ শেয়ারিং; সংস্করণের ইতিহাস।
  • টেকসই: ফাইল কখনো হারাবে না।

অনুমান

৫ কোটি user প্রত্যেকে ১০ GB রাখলে ৫০০ PB। Storage ও bandwidth-ই খরচের কারণ, তাই অপরিবর্তিত data আবার upload এড়াতে চাই।

Data ও metadata আলাদা

  • ফাইলের কনটেন্ট object storage-এ, chunk হিসেবে।
  • Metadata (নাম, folder, মালিক, permission, সংস্করণ, chunk তালিকা) metadata service-এর পেছনে database-এ।

Chunking

প্রতিটি ফাইল chunk-এ (যেমন ৪ MB) ভাঙুন, প্রতিটির পরিচয় তার কনটেন্টের hash।

  • Resumable upload: ব্যর্থ upload যে chunk বাকি সেখান থেকে চলে।
  • Delta sync: ফাইল বদলালে পুরো ফাইল নয়, শুধু বদলানো chunk upload।
  • Deduplication: chunk hash আগেই থাকলে আবার রাখবেন না, যা সংস্করণ ও user জুড়ে অনেক জায়গা বাঁচায়।

ফাইলের একটি সংস্করণ তখন metadata-তে শুধু chunk hash-এর ক্রমিক তালিকা।

Upload প্রবাহ

  1. Client chunk hash হিসাব করে metadata service-কে জিজ্ঞেস করে কোনগুলো নেই।
  2. নেই এমন chunk সরাসরি object storage-এ upload করে (presigned URL)।
  3. Metadata-তে নতুন সংস্করণ commit করে (chunk তালিকার atomic আপডেট)।
  4. অন্য device-দের জানানো হয়।

Sync

প্রতিটি device ফাইলের অবস্থার local database ও একটি cursor (শেষ দেখা পরিবর্তন) রাখে। পরিবর্তনে subscribe করে (long polling বা WebSocket), cursor-এর পরের পরিবর্তনের তালিকা আনে এবং দরকারি chunk নামায়। Local watcher ফাইল edit ধরে upload শুরু করে।

Conflict

দুই device একই ফাইল offline edit করেছে। সাধারণ নিরাপদ উপায়: দুটোই রাখুন, একটিকে "file (conflicted copy)" হিসেবে সেভ করে user-কে merge করতে দিন। Real-time যৌথ ডকুমেন্টে আলাদা কৌশল (operational transform বা CRDT) চলে।

Sharing ও নিরাপত্তা

ফাইল বা folder-ভিত্তিক access control list, মেয়াদসহ শেয়ারযোগ্য লিংক, transit ও rest-এ encryption, আর upload-এর virus স্ক্যান। প্রতিটি request-এ permission যাচাই করুন, শুধু ফাইল ID বিশ্বাস করবেন না।

অন্যান্য বিষয়

Versioning ও trash (মোছা ফাইল N দিন পুনরুদ্ধার), quota, এবং পুরোনো data সস্তা storage-এ সরানো।

মূল কথা: hash অনুযায়ী chunk object storage-এ রাখুন, transactional metadata service রাখুন, শুধু বদলানোটুকু upload করুন, এবং change cursor দিয়ে sync করুন।


System Design সিরিজ, পর্ব ৩ (case study): 10 নম্বর (মোট 16)। আগের লেখা: Search autocomplete (typeahead) ডিজাইন.

আরও পড়ুন

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

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

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