System Design

معماری برای جهان: نگاهی عمیق به سیستم‌های توزیع‌شده جغرافیایی

در اقتصاد دیجیتال فزاینده‌ی بدون مرز، تأخیر تنها یک معیار عملکرد نیست؛ بلکه یک محدودیت حیاتی تجاری است. کاربران انتظار پاسخگویی زیر ۱۰۰ میلی‌ثانیه را دارند، صرف‌نظر از موقعیت جغرافیایی آن‌ها. دستیابی به این هدف مستلزم عبور از معماری‌های تک‌منطقه‌ای و پذیرش سیستم‌های توزیع‌شده جغرافیایی است. این پارادایم معماری شامل گسترش مراکز داده در چندین منطقه جغرافیایی برای ارائه خدمات به کاربران نزدیک‌تر به موقعیت فیزیکی آن‌ها می‌باشد. با این حال، توزیع داده چالش‌های عمیقی را در زمینه سازگاری، شکاف‌های شبکه و پیچیدگی عملیاتی ایجاد می‌کند.

چالش اصلی: فاصله و تأخیر

محدودیت فیزیکی بنیادین جهان ما، سرعت نور است. وقتی داده‌ها را در قاره‌ها توزیع می‌کنید، تأخیری که ناشی از پرش‌های شبکه است را وارد می‌کنید. یک درخواست که از نیویورک به لندن و سپس بازگشت می‌کند، می‌تواند حدود ۶۰ تا ۸۰ میلی‌ثانیه طول بکشد. اگر معماری شما تکثیر همزمان (سینکرون) را بین این مناطق فرض کند، عملیات نوشتن شما با تأخیرهای قابل توجهی مواجه خواهد شد. این مبادله مستقیماً ما را به سمت قضیه CAP هدایت می‌کند، که بیان می‌دارد در حضور شکاف شبکه (P)، یک سیستم باید بین سازگاری (C) و در دسترس بودن (A) انتخاب کند.

در زمینه‌های توزیع‌شده جغرافیایی، در دسترس بودن اغلب در اولویت قرار می‌گیرد. ما معمولاً به دنبال سازگاری نهایی یا سازگاری قوی در داخل یک منطقه هستیم و همزمان با تکثیر با تأخیر بین مناطق کنار می‌آییم. این انتخاب طراحی، کل مدل داده را دیکته می‌کند.

استراتژی‌های تکثیر: مستر-مستر در مقابل پرایمری-سکندری

یکی از الگوهای رایج برای پایگاه‌های داده توزیع‌شده جغرافیایی، استراتژی تکثیر فعال-فعال (چند مستر) یا فعال-غیرفعال (پرایمری-سکندری) است. هر استراتژی پیامدهای متمایزی برای حل تعارض و سادگی عملیاتی دارد.

در یک پیکربندی فعال-غیرفعال، عملیات نوشتن تنها در منطقه اصلی انجام می‌شود و داده‌ها به صورت ناهمگام به مناطق ثانویه تکثیر می‌شوند. این روش پیاده‌سازی ساده‌تری دارد، اما به این معنی است که مناطق ثانویه فقط می‌توانند عملیات خواندن را ارائه دهند. اگر منطقه اصلی از دسترس خارج شود، یک فرآیند تغییر وضعیت (Failover) باید یک منطقه ثانویه را ارتقا دهد که این امر مستلزم زمان از دست رفتن یا در دسترس نبودن کوتاه‌مدت است.

در یک پیکربندی فعال-فعال، عملیات نوشتن می‌تواند در هر منطقه‌ای انجام شود. این مورد کمترین تأخیر را برای کاربران در سراسر جهان ارائه می‌دهد، اما نیاز به مکانیزم‌های پیچیده حل تعارض دارد. سناریویی را در نظر بگیرید که در آن یک کاربر در توکیو یک سند را به‌روزرسانی می‌کند، در حالی که یک کاربر در لندن همزمان همان سند را به‌روزرسانی می‌کند.

// کد شبه‌نمایشی که یک استراتژی حل تعارض را نشان می‌دهد
function resolveConflict(localUpdate, remoteUpdate) {
  // استراتژی ۱: آخرین نویسنده برنده است (LWW)
  if (localUpdate.timestamp > remoteUpdate.timestamp) {
    return localUpdate;
  } else {
    return remoteUpdate;
  }

  // استراتژی ۲: ساعت‌های برداری (برای علیت قوی‌تر)
  if (localUpdate.vectorClock.isAfter(remoteUpdate.vectorClock)) {
    return localUpdate;
  } else if (remoteUpdate.vectorClock.isAfter(localUpdate.vectorClock)) {
    return remoteUpdate;
  } else {
    // نوشتن‌های همزمان: ادغام یا رد
    return mergeDocuments(localUpdate, remoteUpdate);
  }
}

همان‌طور که در قطعه کد نشان داده شد، حل تعارض ساده مبتنی بر زمان‌بند می‌تواند منجر به از دست رفتن داده شود اگر ساعت‌ها به طور کامل همگام‌سازی نشده باشند. سیستم‌های پیشرفته از ساعت‌های برداری یا تبدیل عملیاتی (OT) برای حفظ یکپارچگی داده در نوشتن‌های همزمان استفاده می‌کنند.

مثال عملی: شاردینگ بر اساس جغرافیا

شاردینگ جغرافیایی یک رویکرد عملی است که در آن داده‌ها بر اساس موقعیت کاربر پارتیشن‌بندی می‌شوند. به عنوان مثال، داده‌های کاربران اتحادیه اروپا ممکن است در فرانکفورت ذخیره شود، در حالی که داده‌های کاربران آمریکا در اورگان باقی می‌ماند. این کار نه تنها تأخیر را کاهش می‌دهد، بلکه به رعایت حاکمیت داده مانند GDPR نیز کمک می‌کند.

// منطق مسیریابی ساده‌شده در لایه پراکسی
function routeRequest(request) {
  const userRegion = geolocateUser(request.ipAddress);
  
  if (userRegion === 'EU') {
    return dbProxy.get('eu-cluster');
  } else if (userRegion === 'US') {
    return dbProxy.get('us-cluster');
  } else {
    return dbProxy.get('default-cluster');
  }
}

نتیجه‌گیری

ساخت سیستم‌های توزیع‌شده جغرافیایی یکی از دشوارترین وظایف در طراحی سیستم است. این کار نیازمند درک عمیقی از فیزیک شبکه، نظریه پایگاه داده و تجربه کاربری است. اگرچه این کار پیچیدگی‌هایی در سازگاری و حل تعارض ایجاد می‌کند، اما مزایای کاهش تأخیر، بهبود تحمل خطا و رعایت مقررات برای برنامه‌های کاربردی جهانی بی‌نظیر است. با انتخاب دقیق استراتژی تکثیر و پیاده‌سازی حل تعارض قوی، می‌توانید سیستم‌هایی بسازید که به راحتی در سراسر مرزها مقیاس‌پذیر باشند.

Share: