دسترس‌پذیری بالا در گیت هاب اینترپرایز سرور (GitHub Enterprise Server HA) مجموعه‌ای از معماری‌ها و پیکربندی‌ها است که تضمین می‌کند نسخه‌ی خودمیزبان گیت هاب، در محیط سازمانی، بدون وقفه‌ی قابل توجه در دسترس باقی بماند. در محیط‌های سازمانی، توقف سرویس گیت هاب به‌معنای توقف خط لوله‌های CI/CD (Continuous Integration/Continuous Deployment)، توقف فرایند بازبینی کد و توقف تحویل نرم‌افزار است؛ بنابراین، دسترس‌پذیری بالا یک ویژگی اختیاری نیست، بلکه یک الزام عملیاتی است. اگر با مبانی زیرساخت ابری آشنایی ندارید، مطالعه‌ی مزایای رایانش ابری نقطه‌ی شروع مناسبی است. در این نوشتار، از معماری چندنودی و لایه‌های تکرار، تا پیکربندی HA (High Availability)، تعادل بار، پایش و بازیابی، مسیر کامل را با تمرکز بر مهندسی و پایداری عملیاتی ترسیم می‌کنم.

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

دسترس‌پذیری بالا چیست؟

دسترس‌پذیری بالا (High Availability) به مجموعه‌ای از طراحی‌ها و پیکربندی‌ها گفته می‌شود که تضمین می‌کنند سیستم در برابر خرابی‌های سخت‌افزاری، نرم‌افزاری یا شبکه‌ای، به‌طور پیوسته در دسترس باقی بماند. این مفهوم معمولاً بر پایه‌ی چند شاخص کلیدی اندازه‌گیری می‌شود:

  • Uptime: نسبت زمانی که سیستم در دسترس است (معمولاً بر حسب درصد).
  • MTTR (Mean Time To Recovery): میانگین زمان بازیابی پس از خرابی.
  • RPO (Recovery Point Objective): حداکثر مقدار داده‌ای که می‌توان از دست داد.
  • RTO (Recovery Time Objective): حداکثر زمان قابل قبول برای بازیابی سرویس.

دسترس‌پذیری بالا معمولاً به شکل چندین سطح ارائه می‌شود؛ از ۹۹.۵٪ (معادل حدود ۴۳ ساعت توقف در سال) تا ۹۹.۹۹٪ (معادل حدود ۵۲ دقیقه توقف در سال). انتخاب سطح مناسب، به نیازهای کسب‌وکار و بودجه بستگی دارد. برای مطالعه‌ی بیشتر در این حوزه، بهترین سرویس‌های ابری و مهاجرت به کلاد کمک‌کننده است.

معماری گیت هاب اینترپرایز سرور

گیت هاب اینترپرایز سرور (GHES) در حالت تک‌نودی، تمامی سرویس‌ها را روی یک ماشین اجرا می‌کند. اما در حالت دسترس‌پذیری بالا، معماری به چندین گره (Node) تقسیم می‌شود:

گرهوظیفهنقش در HA
Primaryپردازش اصلی درخواست‌هاگره فعال
Replicaهمگام‌سازی داده با Primaryگره پشتیبان
Load Balancerتوزیع ترافیک میان گره‌هاورودی واحد
Redisمدیریت کش و صفکاهش بار پایگاه داده
Elasticsearchجستجوی پیشرفتهکاهش بار Primary

در این معماری، Primary و Replica به‌طور پیوسته داده را همگام‌سازی می‌کنند. در صورت از کار افتادن Primary، Replica به‌سرعت جای آن را می‌گیرد و سرویس بدون وقفه ادامه می‌یابد. برای مطالعه‌ی بیشتر در این حوزه، انواع معماری وب و طراحی معماری مقیاس‌پذیر کمک‌کننده است.

تکرار داده و همگام‌سازی

تکرار داده (Data Replication) قلب معماری HA در GHES است. سه سطح تکرار وجود دارد:

تکرار در سطح پایگاه داده

داده‌ی اصلی در یک پایگاه داده‌ی PostgreSQL یا MySQL (MySQL) ذخیره می‌شود و به‌طور پیوسته به Replica منتقل می‌گردد. این انتقال معمولاً بر پایه‌ی replication باینری یا streaming انجام می‌شود.

تکرار در سطح فایل‌سیستم

مخازن گیت، فایل‌های LFS (Large File Storage) و فایل‌های پیوست به‌طور پیوسته تکرار می‌شوند. برای درک ساختار داخلی گیت که در این تکرار نقش دارد، مطالعه‌ی درک اشیاء داخلی گیت کمک‌کننده است.

تکرار در سطح سرویس

سرویس‌هایی مانند Redis، Elasticsearch و Git LFS نیز به‌طور مستقل تکرار می‌شوند. هر یک از این سرویس‌ها، مکانیزم تکرار خاص خود را دارد.

نکته‌ی مهم: همگام‌سازی در سطح data durability، RPO را تعیین می‌کند. اگر تکرار در سطح ثانیه باشد، RPO در حد چند ثانیه خواهد بود؛ اگر دقیقه‌ای باشد، RPO بیشتر می‌شود. برای مطالعه‌ی بیشتر در این حوزه، پشتیبان‌گیری امن از پایگاه داده کمک‌کننده است.

در دسترس‌پذیری بالا، داده‌ای که تکرار نشده باشد، داده‌ای نیست که می‌توان روی آن حساب کرد.

تعادل بار و مدیریت ترافیک

تعادل بار (Load Balancing) در GHES HA، وظیفه‌ی توزیع ترافیک میان گره‌های فعال را بر عهده دارد. سه سناریوی اصلی:

  1. حالت عادی: تمام ترافیک به Primary منتقل می‌شود و Replica در حالت آماده‌به‌کار است.
  2. حالت خواندن توزیع‌شده: بخشی از ترافیک خواندنی به Replica منتقل می‌شود تا بار Primary کاهش یابد.
  3. حالت Failover: در صورت از کار افتادن Primary، Load Balancer ترافیک را به Replica منتقل می‌کند.

ابزارهای رایج برای این منظور، HAProxy، NGINX و F5 هستند. پیکربندی درست این ابزارها، از جمله Health Check و Timeout، تأثیر مستقیمی بر زمان Failover دارد. برای مطالعه‌ی بیشتر در این حوزه، مونولیتیک و میکروسرویس و نقش CDN در معماری وب کمک‌کننده است.

مکانیزم‌های Failover

Failover فرایندی است که در آن، در صورت از کار افتادن گره فعال، گره پشتیبان نقش آن را بر عهده می‌گیرد. سه نوع Failover در GHES:

Failover دستی

در این حالت، مدیر سیستم به‌صورت دستی فرایند Failover را فعال می‌کند. این روش، امکان بررسی دقیق پیش از تغییر را فراهم می‌کند، اما زمان بازیابی بیشتری دارد.

Failover خودکار

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

Failover ترکیبی

در این حالت، سیستم پایش هشدار می‌دهد و مدیر سیستم تصمیم نهایی را می‌گیرد. این روش، تعادل مناسبی میان سرعت و کنترل فراهم می‌کند.

نکته‌ی مهم: Failover خودکار، باید با مکانیزم Split-Brain مقابله کند؛ وضعیتی که در آن، هر دو گره خود را Primary می‌دانند و باعث تداخل داده می‌شوند. برای مطالعه‌ی بیشتر در این حوزه، افزایش امنیت سرور و بهترین شیوه‌های امنیت سرور کمک‌کننده است.

پایش و هشدار

پایش (Monitoring) در GHES HA، سه لایه دارد:

  • پایش زیرساخت: منابع سیستم مانند CPU، حافظه، دیسک و شبکه.
  • پایش سرویس: وضعیت سرویس‌های گیت هاب، از جمله Git، Web، API و Git LFS.
  • پایش عملکرد: زمان پاسخ، نرخ خطا و throughput.

ابزارهای رایج پایش، Prometheus، Grafana و Datadog هستند. GHES به‌طور پیش‌فرض یک endpoint متریک ارائه می‌دهد که می‌تواند به Prometheus متصل شود. برای مطالعه‌ی بیشتر در این حوزه، پایش عملکرد سرور و مقایسه ابزارهای پایش سرور کمک‌کننده است.

پشتیبان‌گیری و بازیابی

دسترس‌پذیری بالا، جایگزین پشتیبان‌گیری نیست. سه اصل کلیدی:

  1. پشتیبان‌گیری منظم: پشتیبان‌گیری باید در بازه‌های زمانی مشخص و به‌طور خودکار انجام شود.
  2. پشتیبان‌گیری خارج از سایت: نسخه‌ی پشتیبان باید در مکانی جغرافیایی متفاوت نگهداری شود.
  3. آزمون بازیابی: پشتیبان‌ها باید به‌طور دوره‌ای آزمون شوند تا اطمینان حاصل شود که در لحظه‌ی نیاز، قابل استفاده هستند.

GHES ابزار ghe-backup را ارائه می‌دهد که امکان پشتیبان‌گیری کامل از تمامی داده‌های سیستم را فراهم می‌کند. برای مطالعه‌ی بیشتر در این حوزه، پشتیبان‌گیری از سرور و مزایای پشتیبان‌گیری ابری کمک‌کننده است.

پشتیبان‌گیری که آزمون نشده باشد، پشتیبان نیست؛ فرض است.

امنیت در HA

امنیت در محیط HA، چالش‌های خاص خود را دارد:

  • رمزنگاری ارتباط بین گره‌ها: تمامی ارتباطات بین Primary و Replica باید رمزنگاری شود.
  • مدیریت کلیدها: کلیدهای رمزنگاری باید در محل امن و با دسترسی محدود نگهداری شوند.
  • پایش تلاش‌های نفوذ: هر تلاش برای دسترسی به گره‌های HA باید پایش و بررسی شود.

برای مطالعه‌ی بیشتر در این حوزه، امنیت در فضای ابری و SSL و امنیت وب کمک‌کننده است.

آزمون دسترس‌پذیری

آزمون دسترس‌پذیری بالا، باید به‌طور دوره‌ای و در شرایط کنترل‌شده انجام شود:

  1. آزمون Failover: شبیه‌سازی از کار افتادن Primary و بررسی زمان و صحت بازیابی.
  2. آزمون بار: بررسی رفتار سیستم تحت بار سنگین.
  3. آزمون بازیابی: بازیابی از پشتیبان و بررسی صحت داده.
  4. آزمون Split-Brain: بررسی رفتار سیستم در شرایط از دست رفتن ارتباط بین گره‌ها.

این آزمون‌ها باید در محیط Staging و پیش از اعمال در محیط تولید انجام شوند. برای مطالعه‌ی بیشتر در این حوزه، راه‌اندازی VM برای آزمون نرم‌افزار و امنیت VPS کمک‌کننده است.

خطاهای رایج

سه خطای رایج در پیاده‌سازی HA در GHES:

  1. پیکربندی نادرست Health Check: Health Checkهای نامناسب می‌توانند به Failoverهای ناخواسته منجر شوند.
  2. نادیده گرفتن تأخیر تکرار: تأخیر در همگام‌سازی داده می‌تواند به از دست رفتن داده در زمان Failover منجر شود.
  3. فقدان آزمون منظم: HA بدون آزمون منظم، تنها فرضی است که در لحظه‌ی بحران فرو می‌ریزد.

برای مطالعه‌ی بیشتر در این حوزه، اشتباهات رایج مدیریت سرور و اشتباهات رایج کلاد کمک‌کننده است.

پرسش‌های پرتکرار

دسترس‌پذیری بالا در گیت هاب اینترپرایز سرور چقدر هزینه دارد؟

هزینه‌ی HA به معماری، تعداد گره‌ها و ابزارهای جانبی بستگی دارد. در حالت معمول، نیازمند حداقل دو سرور قدرتمند، یک Load Balancer و لایسنس‌های مربوطه است.

حداقل تعداد گره‌ها برای HA چند است؟

حداقل دو گره: یک Primary و یک Replica. برای محیط‌های حساس، می‌توان از معماری‌های پیچیده‌تر با چند Replica استفاده کرد.

تفاوت HA و DR (Disaster Recovery) چیست؟

HA بر دسترس‌پذیری پیوسته در شرایط خرابی‌های جزئی تمرکز دارد؛ DR بر بازیابی پس از فاجعه‌های بزرگ مانند از بین رفتن کامل مرکز داده.

چگونه زمان Failover را کاهش دهیم؟

با پیکربندی دقیق Health Check، استفاده از Load Balancerهای پیشرفته و آزمون منظم فرایند Failover.

آیا HA جایگزین پشتیبان‌گیری است؟

خیر. HA از دسترس‌پذیری محافظت می‌کند، اما در برابر حذف تصادفی داده یا حملات باج‌گیر محافظت کافی نمی‌کند؛ پشتیبان‌گیری مکمل ضروری است.

دسترس‌پذیری بالا، مسئولیتی مداوم

دسترس‌پذیری بالا در گیت هاب اینترپرایز سرور، نه یک دستاورد یک‌بار، بلکه یک مسئولیت مداوم است. از معماری چندنودی و تکرار داده، تا تعادل بار، Failover، پایش و پشتیبان‌گیری، هر لایه سهمی در پایداری عملیاتی دارد. برای تیم‌هایی که با GHES کار می‌کنند، تسلط بر این مفاهیم به کاهش زمان توقف، بهبود بهره‌وری تیم توسعه و کاهش ریسک عملیاتی منجر می‌شود. پیوند این مفهوم با GitHub Actions و دپندابات مسیر عملی‌تری برای استقرار ایمن و پیوسته ترسیم می‌کند. اگر در پروژه‌های واقعی با چالش‌های HA مواجه شده‌اید، برای خوانندگان بعدی ارزشمند است بدانید کدام لایه بیشترین اثر را در پایداری سیستم داشته و چه سنجه‌ای برای ارزیابی آن به کار برده‌اید.