بازگشت به کتابخانهکتابخانه11.2Case Study: همگام‌سازی فایل (Dropbox)
طراحی سیستم نرم‌افزاریSYSTEM DESIGNاز صفر تا تسلط
v1.0.0
01مبانی و تصویر بزرگ
02Scalability و ظرفیت
03لایه داده
04Cache، Queue و جریان
05معماری نرم‌افزار
06قابلیت اطمینان و عملیات
07متد طراحی
08Case Study های واقعی
09سیستم‌های توزیع‌شده عمیق
10مهندسی تولید: داده، امنیت و کارایی
11تمرین پیشرفته و کیس‌استادی‌های مکمل
12زیر کاپوت دیتابیس و معماری داده
13وب بلادرنگ و پروتکل‌های مدرن
14سیستم‌های توزیع‌شده پیشرفته
15SaaS ،SRE ،امنیت و شبکه پیشرفته
16طراحی سیستم در عصر AI
17Case Study های تکمیلی
LESSON 11.2فصل ۱۱تمرین پیشرفته و کیس‌استادی‌های مکمل

Case Study: همگام‌سازی فایل (Dropbox)

  • ~۱۶ دقیقه
  • ۲ پرسش
  • متن را انتخاب کن تا هایلایت شود

مسئله: فایل لپ‌تاپ و گوشی کاربر را حتی با اینترنت قطع‌ووصلی همگام نگه داریم. خودِ فایل ممکن است چند گیگابایت باشد، اما نام فایل، نسخه و پوشه‌ها اطلاعات کوچکی هستند؛ این دو نوع داده را نباید یک‌جور پردازش کنیم.

طراحی

  • کلاینت فایل را chunk می‌کند و hash هر chunk را می‌فرستد؛ سرور فقط chunkهای نداشته را با upload multipart مستقیم به object storage می‌گیرد.
  • metadata شامل file_id، parent، version، manifest chunkها و ownership در DB تراکنشی است؛ commit نسخه جدید با optimistic concurrency روی revision انجام می‌شود.
  • deduplication با content hash ممکن است، اما حمله confirmation و حریم خصوصی را بررسی کن؛ encryption و domain dedup باید سیاست روشن داشته باشد.
  • کلاینت‌ها با change feed/cursor تغییرات را می‌گیرند؛ push notification فقط خبر بیدارباش است، منبع حقیقت نیست.

تعارض و بازیابی

اگر revision محلی با revision سرور فرق داشت، متن‌های قابل merge می‌توانند three-way merge شوند؛ برای فایل باینری معمولاً conflict copy امن‌تر است. حذف را tombstone/versioned delete نگه دار تا sync دیررس فایل را بی‌دلیل باززنده نکند. GC chunk فقط بعد از اطمینان از نبود reference و گذشت retention انجام می‌شود.

DIAGRAMمسیر آپلود کمینه
Client → manifest hashes
Metadata svc
Signed multipart URL
Object storage chunks
Commit revision + change feed

به زبان ساده

همگام‌سازی فایل یعنی جدایی متادیتا از محتوا: فایل به قطعات هش‌دار می‌شکند، فقط قطعه‌های نداشته آپلود می‌شوند و سرور متادیتا با نسخه (revision) حقیقت را نگه می‌دارد.

مثال واقعی

وقتی یک پاراگراف به فایل ۲گیگی اضافه می‌کنی، فقط همان یک قطعه تغییرکرده آپلود می‌شود نه کل فایل — هش هر قطعه مثل اثرانگشتش است.

دانش‌سنجی

آزمون درس

۲ Q
01
چرا chunking در sync فایل مهم است؟
02
برای فایل باینری با دو ویرایش همزمان، رفتار امن معمولاً چیست؟