GH GambleHub

پیکربندی کنترل نسخه

1) چرا تنظیمات نسخه

پیکربندی یک سیاست اجرایی است: مسیریابی، محدودیت ها، پرچم های ویژگی، دسترسی ها، طرح های داده را تعریف می کند. کنترل نسخه باعث تغییرات قابل تکرار، قابل مشاهده و برگشت پذیر می شود: MTTR و میزان تغییر شکست را کاهش می دهد، «سحر و جادو در فروش» را از بین می برد، ممیزی هایی را برای امنیت و انطباق می دهد.


2) طبقه بندی پیکربندی

زیرساخت (IaC): خوشه ها، شبکه ها، LB، DB، صف ها.
سرویس: پارامترهای برنامه، منابع، محدودیت ها، زمان بندی ها، بازپرداخت ها.
منطق محصول/کسب و کار: تعرفه ها، آزمایش های AB، قوانین محتوا.
Data/DataOps: طرح های قرارداد، طراوت SLA، تحول.
امنیت: دسترسی به سیاست ها، نقش ها، کلید ها/گواهی ها (اسرار خود را در خارج از مخزن).
قابلیت مشاهده: SLI/SLO، هشدارها، داشبورد.

قانون: هر چیزی که بر رفتار سیستم تأثیر میگذارد پیکربندی است و باید تحت نسخهبندی زندگی کند.


3) اصول نسخه

1. GitOps: تنها منبع حقیقت مخزن است ؛ تغییرات از طریق روابط عمومی و خطوط لوله اتوماتیک.
2. Declarative: توصیف وضعیت هدف، نه اسکریپت های مرحله.
3. تغییرناپذیری مصنوعات: پیکربندی → بدون ابهام تصویر لحظهای تحقق یافته.
4. طرحواره ها و اعتبارسنجی: JSON/YAML-schema، نوع ریخته گری سخت، فیلدهای مورد نیاز.
5. محیط هایی مانند کد: 'env' - پوشه ها/پوشش ها (dev/stage/prod)، تفاوت ها حداقل و واضح هستند.
6. Idempotence و rollbacks: بازگشت/بازگرداندن هر نسخه پیکربندی.
7. ممیزی و ردیابی: نویسنده، دلیل، بلیط/RFC، امضای تغییر.


4) استراتژی های نسخه

SemVer برای بسته های پیکربندی ('MAJOR. جزئی است. پچ '):
  • MAJOR - تغییرات طرح/سیاست ناسازگار.
  • MINOR - زمینه های جدید/قوانین، سازگاری عقب مانده.
  • PATCH - مقادیر را بدون تغییر طرح ها اصلاح می کند.
  • انتشار برچسب و انتشار یادداشت ها: چه چیزی تغییر کرده است، چگونه به رول، بازرسی.
  • پینینگ/قفل فایل: رفع نسخه های وابستگی (ماژول ها، نمودار).
  • نسخه های ماتریکس: مصنوع برنامه X با پیکربندی Y (ماتریس در کاتالوگ خدمات) سازگار است.

5) سازمان مخزن


config-repo/
policies/     # общие политики (RBAC, SLO, алерты)
services/
checkout/
schema/    # JSON/YAML схемы конфигов base/     # дефолтные значения overlays/
dev/
stage/
prod/
data-contracts/  # схемы данных, SLA свежести releases/     # теги, changelog, артефакты валидации tools/      # линтеры, генераторы, тесты

شعبه: شاخه های مبتنی بر تنه (اصلی) + ویژگی های کوتاه. ادغام - از طریق PR تنها با CI اجباری.


6) اعتبار سنجی و تست

Schema: هر تغییر اعتبار سنجی طرح (مورد نیاز، enum، محدوده) را منتقل می کند.
لاینترهای استاتیک: فرمت، کلید، تکراری، زمینه های ممنوع.
تست سازگاری: نسخه پیکربندی + سرویس/نمودار در sandbox بالا می رود.
تست اجرا می شود: برنامه های خشک اجرا، «چه اگر» حالت هدف تفاوت.
Policies-as-code: قوانین پذیرش (Rego/CEL) - چه کسی می تواند چه چیزی را تغییر دهد.


7) تنظیمات را باز کنید و رول کنید

تحویل پیشرفته: قناری 1٪ → 5٪ → 25٪ → با SLO-gardrails.
Deploy gate: هیچ SEV-1 فعال نیست، هشدارها سبز هستند، امضاها معتبر هستند، بازپرداخت آماده است.
برگشت: 'بازگشت برچسب vX. Y.Z 'یا تغییر به عکس فوری قبلی ؛ دستورات برگشت در کتاب اجرا مستند شده است.
حاشیه نویسی انتشار: نسخه پیکربندی در metrics/logs منتشر می شود تا به سرعت با حوادث مرتبط شود.


8) پیکربندی پویا و از راه دور

پیکربندی از راه دور/پرچم ویژگی: تغییر پارامترها بدون راه اندازی مجدد ؛ تمام پرچم ها نیز تحت GitOps هستند.
Borders: کدام پارامترها مجاز به تغییر به صورت پویا هستند (لیست لیست های سفید).
حافظه پنهان و سازگاری: TTL، نسخه ها، جایگزینی مجموعه اتمی (انتشار دو فاز).
نرده های ایمن: محدودیت ها و محدوده ها برای تغییرات در زمان اجرا، بازگشت خودکار هنگام خروج از SLO.


9) اسرار و اطلاعات حساس

هرگز اسرار را در یک مخزن نگه ندارید. در تنظیمات - فقط لینک ها/متغیرهایی.
رمزگذاری فایل های پیکربندی، در صورت لزوم: ادغام با مدیر مخفی/کلید.
چرخش و JIT: دسترسی برای مدت زمان عملیات صادر می شود ؛ مسير حرکت تغيير ناپذيره.
Field masking: اعتبارسنجی PII/secrets را از ورود به config منع می کند.


10) مدیریت محیط زیست

پایه + پوشش: تفاوت بین dev/stage/prod حداقل و شفاف است.
ارتقاء در مصنوعات: همان عکس فوری که از مرحله گذشت، در prod تبلیغ می شود.
پنجره های زمان: تغییرات در تنظیمات در زمان تغییر وظیفه رخ نمی دهد ؛ برای ریسک بالا - RFC و پنجره تعمیر و نگهداری.


11) تشخیص و حذف رانش

کنترل کننده وضعیت هدف را با وضعیت واقعی مقایسه می کند و تفاوت را گزارش می دهد.
هشدار رانش: صفحه فقط برای اختلافات بحرانی ؛ بقیه بلیط هستند.
اصلاح خودکار: با وضوح - بازگشت به حالت هدف.
ویرایش کتابچه راهنمای حسابرسی: هر «kubectl edit/ssh» → حادثه فرآیند و CAPA.


12) کاتالوگ پیکربندی و مالکیت

کاتالوگ خدمات: مالک، SLO، سیاست های مرتبط، طرح ها، نسخه ها، سازگاری.

RACI: چه کسی ارائه می دهد، چه کسی بررسی می کند، چه کسی تایید می کند ؛ CAB برای ریسک بالا

شفافیت: هر ورودی دارای تاریخچه نسخه و پیوندهایی به PR/tickets/AAR است.


13) معیارهای بلوغ

پوشش:٪ از خدمات/سیاست برای GitOps (≥ هدف 95٪).
زمان سرب پیکربندی تغییرات: متوسط از روابط عمومی به تولید.
نرخ شکست تغییر: نسبت انتشار پیکربندی با rollback/incident.
میزان رانش: تعداد اختلافات/هفته و زمان حذف.
زمان بازگشت: بهبود متوسط به نسخه قبلی.
کامل بودن حسابرسی: نسبت تغییرات با شواهد کامل (اعتبار سنج، خشک اجرا، بررسی).


14) چک لیست

قبل از تغییر پیکربندی

  • یک بلیط/RFC و یک صاحب تغییر وجود دارد.
  • طرح ها و لاینترها تأیید شده اند.
  • یک طرح بازگشت و دستورات در runbook وجود دارد.
  • دروازه: تست سبز، امضا معتبر، بدون SEV-1 فعال.
  • برای ریسک بالا، یک پنجره نگهداری اختصاص داده شده است.

در طول باز کردن

  • قناری و SLO-gardrails فعال هستند.
  • منتشر شده است.
  • پیام های اکو به کانال وجود دارد ؛ سر و صدا هشدار سرکوب شده توسط قوانین MW.

بعد از آن

  • پنجره مشاهده گذشت، SLO سبز.
  • مجموع و شواهد (قبل/بعد از نمودار، گزارش خشک اجرا) به بلیط متصل شده است.
  • به روز رسانی شماتیک/اسناد و مدارک به عنوان مورد نیاز است.

15) قالب های کوچک

15. 1 نمودار پیکربندی (YAML-schema، قطعه)

yaml type: object required: [service, timeouts, retries]
properties:
service: { type: string, pattern: "^[a-z0-9-]+$" }
timeouts:
type: object properties:
connect_ms: { type: integer, minimum: 50, maximum: 5000 }
request_ms: { type: integer, minimum: 100, maximum: 20000 }
retries:
type: object properties:
attempts: { type: integer, minimum: 0, maximum: 10 }
backoff_ms: { type: integer, minimum: 0, maximum: 5000 }

15. 2 پیکربندی پایه + تولید پوشش

yaml services/checkout/base/config.yaml service: checkout timeouts: { connect_ms: 200, request_ms: 1500 }
retries: { attempts: 2, backoff_ms: 200 }
limits:  { rps: 500 }
features:
degrade_search: false psp_a_weight: 80 psp_b_weight: 20
yaml services/checkout/overlays/prod/config.yaml limits:  { rps: 1200 }
features:
psp_a_weight: 70 psp_b_weight: 30

15. 3 سیاست پذیرش (ایده)

yaml allow_change_when:
tests: passed schema_validation: passed active_incidents: none_of [SEV-0, SEV-1]
rollback_plan: present signed_by: ["owner:team-checkout","platform-sre"]

15. 4 کارت انتشار پیکربندی


Release: checkout-config v2.3.1
Scope: prod EU
Changes: psp_b_weight 20→30, request_ms 1500→1300
Risk: Medium (маршрутизация платежей)
Canary: 1%→5%→25% (30/30/30 мин), guardrails: success_ratio, p95
Rollback: tag v2.3.0

16) ضد الگوهای

ویرایش در prod گذشته GitOps («به سرعت پیچ خورده»).
اسرار/PII در مخزن پیکربندی.
عدم وجود نمودارها و چک های استاتیک.
واگرایی قوی محیط (base≠prod).
«زنده» ویژگی های پرچم بدون نسخه و تاریخ.
نادیده گرفتن رانش و ویرایش دستی در سرورها.
برچسب ها بدون یادداشت انتشار و طرح بازگشت.


17) نقشه راه پیاده سازی (4-6 هفته)

1. «ند». 1: موجودی پیکربندی ؛ کاتالوگ های جداگانه، طرح هایی برای خدمات برتر 10.

2. «ند». 2: شامل linters/validation و خشک اجرا در CI ؛ ممنوعیت ادغام بدون چک سبز

3. «ند». 3: رول GitOps + قناری ها ؛ حاشیه نویسی نسخه در تله متری.

4. «ند». 4 - الگوهای سیاست به عنوان کد و رول بک را وارد کنید. هشدار برای رانندگی

5. «ند». 5-6: پوشش 90٪ از خدمات ؛ کاهش تفاوت های ENV به پوشش ؛ اضافه کردن معیارهای بلوغ و بررسی هفتگی تغییرات پیکربندی.


18) خط پایین

کنترل نسخه پیکربندی یک سیستم است، نه فقط Git. نقشه ها و اعتبار سنجی، GitOps و سیاست های دسترسی، canaries و rollbacks، تشخیص رانش و حسابرسی کامل تبدیل پیکربندی به یک مصنوع مدیریت شده است. نتیجه تغییرات سریع و امن، پیش بینی SLO و اعتماد به نفس تیم در هر نسخه است.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.