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

লক্ষ্য: 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 প্রবাহ
- Client chunk hash হিসাব করে metadata service-কে জিজ্ঞেস করে কোনগুলো নেই।
- নেই এমন chunk সরাসরি object storage-এ upload করে (presigned URL)।
- Metadata-তে নতুন সংস্করণ commit করে (chunk তালিকার atomic আপডেট)।
- অন্য 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) ডিজাইন.


