הגדרת קנה מידה אוטומטי עבור 1C-Bitrix בפלטפורמות ענן

אתר על 1C-Bitrix עלול לא לעמוד בעומסי שיא, מה שמוביל לזמן השבתה והפסדים. אנו מגדירים קנה מידה אוטומטי בענן כך שמספר השרתים משתנה אוטומטית בהתאם לבקשות הנוכחיות. הצוות שלנו מספק את הפרויקט במפתח מלא—מניתוח ועד יישום ותמיכה מתמשכת.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
הגדרת קנה מידה אוטומטי עבור 1C-Bitrix בפלטפורמות ענן
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

הגדרת קנה מידה אוטומטי עבור 1C-Bitrix בפלטפורמות ענן

לעתים קרובות אנו רואים פרויקטים שבהם אתר Bitrix קורס במהלך מבצע. השרת לא יכול להתמודד עם העומס, ומנהלים מפעילים עותקים ידנית. קנה מידה אוטומטי פותר זאת: מספר הצמתים מתכוונן אוטומטית—גדל בעומס וקטן בתקופות סרק. עבור 1C-Bitrix, זה רלוונטי במיוחד עבור חנויות מקוונות בעונות מכירות, פורטלי אירועים ופלטפורמות B2B עם פסגות יומיות. החזקת 10 שרתים לפסגה של 3 שעות אינה יעילה. קנה מידה אוטומטי מאפשר לשלם רק על המשאבים שבאמת משתמשים בהם. הניסיון שלנו מראה שהגדרה נכונה מפחיתה עלויות תשתית פי 2–3 תוך שמירה על סובלנות תקלות. לדוגמה, לקוח אחד ראה ירידה בעלויות ב-40% מיד, והחיסכון הכולל הגיע ל-65% לאחר אופטימיזציה.

פלטפורמות ענן: Yandex Cloud ו-VK Cloud

בפלח הרוסי, הפלטפורמות העיקריות הן Yandex Cloud (Instance Groups) ו-VK Cloud (Auto Scaling Groups). הארכיטקטורה משקפת את AWS Auto Scaling: קבוצות מכונות וירטואליות עם מדיניות קנה מידה המבוססת על מדדים (CPU, RPS, זיכרון). איך זה עובד:

  • התראת מדד (CPU > 70% למשך 5 דקות)
  • טריגר להרחבת קנה מידה
  • מכונה וירטואלית חדשה נוצרת מתמונת זהב
  • Cloud-init: התקנת nginx + php-fpm, חיבור NFS
  • בדיקת תקינות: המכונה הווירטואלית מתווספת למאזן העומס
  • תנועה מופנית לצומת החדש
פרמטר Yandex Cloud VK Cloud
אינטגרציית Terraform תמיכה רשמית בספק תמיכה מוגבלת
Kubernetes מנוהל כן (עם קנה מידה אוטומטי) כן (עם הגדרה ידנית)
תמיכה טכנית סטנדרטית בתשלום כלולה בתעריף

שתי הפלטפורמות מספקות סובלנות תקלות, אך ההגדרה של תמונות זהב ו-cloud-init זהה. תמונת זהב היא התבנית הסטנדרטית לארכיטקטורה חסרת מצב. תיעוד Terraform הרשמי עוזר עם הספקים.

למה תמונת זהב היא הבסיס לקנה מידה אוטומטי?

קנה מידה אוטומטי עובד רק אם מכונה וירטואלית חדשה מוכנה לקבל תנועה ללא התערבות ידנית. התמונה חייבת לכלול:

  • nginx, php-fpm עם הרחבות נדרשות עבור Bitrix
  • קוד יישום PHP (או מנגנון למסירה מהירה)
  • סקריפט לחיבור אחסון משותף (/upload/, מטמון)
  • סקריפט לחיבור ל-Redis עבור סשנים
  • הגדרת Bitrix עם פרמטרי DB ו-Redis נכונים

יצירת תמונת זהב ב-Yandex Cloud:

# Запускаем базовую ВМ, настраиваем вручную
# После настройки создаём снимок диска
yc compute disk create --snapshot-id <snapshot-id> --name bitrix-golden
# Создаём образ из снимка
yc compute image create \
  --name bitrix-app-v1 \
  --source-disk bitrix-golden \
  --description "Битрикс 1C-Bitrix app node, PHP 8.1"

Cloud-init: הגדרה אוטומטית בעת הפעלת מכונה וירטואלית

דוגמה להגדרת cloud-init

Cloud-init רץ בעת האתחול הראשון של המכונה הווירטואלית. הוא מטפל בהגדרות ספציפיות לסביבה:

# /etc/cloud/cloud.d/bitrix-init.yaml
#cloud-config
runcmd:
  # Монтируем общий том NFS
  - echo "nfs-server:/srv/bitrix-shared /var/www/html/upload nfs rw,sync,hard,intr 0 0" >> /etc/fstab
  - mount -a
  # Регистрируем ноду в consul для service discovery
  - |
    curl -X PUT http://consul:8500/v1/agent/service/register \
      -d '{"name":"bitrix-web","address":"'$(hostname -I | awk '{print $1}')'"}'
  # Прогреваем кеш PHP OPcache
  - php /var/www/html/bitrix/cli/health.php --warmup
  # Стартуем сервисы
  - systemctl start nginx php8.1-fpm
  - systemctl enable nginx php8.1-fpm

הגדר את Bitrix באמצעות משתני סביבה (לא מקודדים בתמונה):

// /bitrix/.settings.php — читает из environment
return [
    'connections' => [
        'value' => [
            'default' => [
                'className' => '\\Bitrix\\Main\\DB\\MysqlConnection',
                'host' => getenv('DB_HOST') ?: 'mysql-master',
                'database' => getenv('DB_NAME') ?: 'bitrix',
                'login' => getenv('DB_USER') ?: 'bitrix',
                'password' => getenv('DB_PASS') ?: '',
            ],
        ],
    ],
    'cache' => [
        'value' => [
            'type' => 'redis',
            'redis' => [
                'host' => getenv('REDIS_HOST') ?: 'redis-master',
                'port' => (int)(getenv('REDIS_PORT') ?: 6379),
            ],
        ],
    ],
];

אנו משתמשים ב-Redis לאחסון סשנים. הוא מהיר פי 10 מאחסון מבוסס קבצים.

הגדרת קבוצת מכונות וירטואליות ב-Yandex Cloud (Terraform)

resource "yandex_compute_instance_group" "bitrix_web" {
  name = "bitrix-web-asg"
  service_account_id = var.service_account_id

  instance_template {
    platform_id = "standard-v3"

    resources {
      cores = 4
      memory = 8
    }

    boot_disk {
      initialize_params {
        image_id = var.bitrix_golden_image_id
        size = 50
      }
    }

    network_interface {
      subnet_ids = var.subnet_ids
    }

    metadata = {
      user-data = file("cloud-init.yaml")
    }
  }

  scale_policy {
    auto_scale {
      initial_size = 2
      min_zone_size = 1
      max_size = 10
      measurement_duration = 60 # секунды
      warmup_duration = 120 # прогрев новой ВМ

      cpu_utilization_rule {
        utilization_target = 70 # %
      }
    }
  }

  deploy_policy {
    max_unavailable = 1
    max_expansion = 2
  }

  load_balancer {
    target_group_name = "bitrix-target-group"
  }
}

איך לפרוס קוד בלי לבנות מחדש את התמונה?

בנייה מחדש של תמונת הזהב בכל פריסה אינה נוחה. אנו משתמשים בגישת Pull-on-start: ב-cloud-init אנו מוסיפים שלב למשיכת קוד מארטיפקט. משתנה סביבה # Запускаем базовую ВМ, настраиваем вручную # После настройки создаём снимок диска yc compute disk create --snapshot-id <snapshot-id> --name bitrix-golden # Создаём образ из снимка yc compute image create \ --name bitrix-app-v1 \ --source-disk bitrix-golden \ --description "Битрикс 1C-Bitrix app node, PHP 8.1" מועבר במטא-דאטה של המכונה הווירטואלית בעת יצירת הקבוצה; cloud-init קורא אותו ומוריד את הארכיון הנדרש מ-S3. הפריסה הופכת לשינוי תג במטא-דאטה—כל הצמתים החדשים מתחילים עם הקוד הנוכחי.

הנה תהליך פריסה שלב אחר שלב:

  1. בנה את הארטיפקט של היישום והעלה אותו ל-S3.
  2. עדכן את המטא-דאטה של קבוצת המכונות הווירטואליות: הגדר תג חדש.
  3. הפעל עדכון מתגלגל של הקבוצה: הצמתים נוצרים מחדש אחד אחד עם התג החדש.
  4. ודא שכל הצמתים מריצים את הקוד החדש.

איך להכין את Bitrix לארכיטקטורה חסרת מצב: רשימת בדיקה

  • סשנים → Redis (לא קבצים)
  • מטמון → Redis או NFS (לא דיסק מקומי)
  • קבצים # /etc/cloud/cloud.d/bitrix-init.yaml #cloud-config runcmd: # Монтируем общий том NFS - echo "nfs-server:/srv/bitrix-shared /var/www/html/upload nfs rw,sync,hard,intr 0 0" >> /etc/fstab - mount -a # Регистрируем ноду в consul для service discovery - | curl -X PUT http://consul:8500/v1/agent/service/register \ -d '{"name":"bitrix-web","address":"'$(hostname -I | awk '{print $1}')'"}' # Прогреваем кеш PHP OPcache - php /var/www/html/bitrix/cli/health.php --warmup # Стартуем сервисы - systemctl start nginx php8.1-fpm - systemctl enable nginx php8.1-fpm → NFS או S3
  • קבצים זמניים, תורים → Redis או DB, לא // /bitrix/.settings.php — читает из environment return [ 'connections' => [ 'value' => [ 'default' => [ 'className' => '\\Bitrix\\Main\\DB\\MysqlConnection', 'host' => getenv('DB_HOST') ?: 'mysql-master', 'database' => getenv('DB_NAME') ?: 'bitrix', 'login' => getenv('DB_USER') ?: 'bitrix', 'password' => getenv('DB_PASS') ?: '', ], ], ], 'cache' => [ 'value' => [ 'type' => 'redis', 'redis' => [ 'host' => getenv('REDIS_HOST') ?: 'redis-master', 'port' => (int)(getenv('REDIS_PORT') ?: 6379), ], ], ], ];
  • משימות Cron → הרצה רק על צומת ייעודי אחד (לא על כולם)
  • סוכני Bitrix → מעבר למצב cron (resource "yandex_compute_instance_group" "bitrix_web" { name = "bitrix-web-asg" service_account_id = var.service_account_id instance_template { platform_id = "standard-v3" resources { cores = 4 memory = 8 } boot_disk { initialize_params { image_id = var.bitrix_golden_image_id size = 50 } } network_interface { subnet_ids = var.subnet_ids } metadata = { user-data = file("cloud-init.yaml") } } scale_policy { auto_scale { initial_size = 2 min_zone_size = 1 max_size = 10 measurement_duration = 60 # секунды warmup_duration = 120 # прогрев новой ВМ cpu_utilization_rule { utilization_target = 70 # % } } } deploy_policy { max_unavailable = 1 max_expansion = 2 } load_balancer { target_group_name = "bitrix-target-group" } } ) והרצה מהצומת הייעודי
  • RELEASE_TAG → מועברים כראוי דרך /upload/ ממאזן העומס

נקודה קריטית עם cron: אם סוכני Bitrix רצים על כל הצמתים בו זמנית, מתרחשת כפילות. הגדר את הפרמטר /tmp/ ב-BX_CRONTAB=Y או הגבל את cron לצומת הייעודי באמצעות iptables.

ניטור והתראות

מדדים למדיניות קנה מידה אוטומטי:

מדד סף הרחבת קנה מידה סף הקטנת קנה מידה
ממוצע CPU בקבוצה > 70% למשך 3 דקות < 30% למשך 10 דקות
זמן תגובה ממוצע (p95) > 2000 אלפיות השנייה < 500 אלפיות השנייה
אורך תור בקשות nginx > 100 < 10
RPS > 500 לצומת < 100 לצומת

מה אתה מקבל

  • תיעוד ארכיטקטורה המתאר את כל הרכיבים
  • גישה לתשתית ולקוד IaC (Terraform)
  • הוראות פריסה ועדכון
  • הכשרה לצוות שלך (סדנה של שעתיים)
  • חודש תמיכה לאחר ההפעלה
  • אוטומציה מלאה: מיצירת מכונה וירטואלית ועד ניטור

בקש ביקורת תשתית—נעריך את הארכיטקטורה הנוכחית שלך ונציע תוכנית מעבר. קבל ייעוץ עם מהנדס מוסמך כדי לדון בפרטי הפרויקט שלך.

מקרה: לקוח עם עומס שיא של 10,000 RPS. לאחר יישום קנה מידה אוטומטי, זמן השבתה ירד מ-15 דקות לאפס. עלויות התשתית ירדו ב-40% עקב כיבוי צמתים לא פעילים. הניסיון של הצוות שלנו: מעל 50 פרויקטי Bitrix מוצלחים, 10+ שנים בפיתוח. אנו מבטיחים אמינות מוכחת ותמיכה מקצועית.

לוחות זמנים: קנה מידה אוטומטי בסיסי עם שני צמתים—3–4 שבועות. הגדרה מוכנה לייצור עם IaC, ניטור ו-runbook—6–10 שבועות.

מקור: ויקיפדיה - קנה מידה אוטומטי (https://en.wikipedia.org/wiki/Autoscaling)