Рекомендации по миграции высоконагруженных 1С-решений на Postgres Pro без потерь в производительности

23 января 2025Уровень технический

Перенос высоконагруженных 1С-систем на Postgres Pro — сложный, но выполнимый процесс, требующий тщательной подготовки и планирования. Эта инструкция, основанная на опыте экспертов и проверенных методологиях, поможет вам мигрировать 1С-решение, минимизируя риски и обеспечивая стабильную работу системы после перехода.

Важно помнить: процесс миграции занимает время, и бо́льшая часть этого времени уйдёт на подготовку: рефакторинг кода, нагрузочное тестирование и последующую оптимизацию. Будьте готовы к тому, что нагрузочное тестирование может выявить проблемы производительности, требующие обязательного решения, и, возможно, потребуется несколько итераций для достижения оптимального результата.

Этапы миграции:

1. Подготовка к миграции

Цель этапа: обеспечить готовность 1С-системы к переходу на Postgres Pro, выявить и устранить потенциальные проблемы производительности и совместимости.

Шаг 1. Аудит кода

Цель: выявить и устранить легаси-код, который может вызвать проблемы при работе на Postgres Pro.

Действия:

  • Тщательно проанализируйте код запросов 1С. Уделите конструкциям, использующим сложные вложенные запросы, и запросам с большим количеством соединяемых таблиц. Помните, что соединения могут как явными, так и неявными. Как подчеркивают эксперты, «кривой код 1С», например, запросы с переименованием полей через точку, приводящие к соединениям до сотен таблиц, может создать серьезные проблемы производительности при миграции на Postgres Pro. Важно привести код в соответствие со стандартами разработки, ведь, в отличие от MS SQL Server, который может быть более толерантен к таким неоптимизированным конструкциям, Postgres Pro требует более качественного кода. Проблемы производительности после миграции часто связаны не с самой СУБД, а с изначально неоптимальным кодом.
  • До начала миграции избавьтесь от кода, который может быть несовместим с операционной системой.
  • Автоматизируйте анализ кода. Используйте инструменты 1С:АПК и BSL LS для автоматического анализа кода. Если не хватает возможностей, которые заложены в инструмент изначально — его можно доработать.
  • Для упрощения анализа и ускорения процесса, особенно в крупных и сложных 1С-системах, рекомендуется провести ручную инвентаризацию подсистем. Это позволит сосредоточить усилия на анализе только реально используемых функций и объектов, отсеяв устаревший или неактуальный код, что значительно ускорит аудит и тестирование.

Шаг 2. Нагрузочное тестирование

Цель: оценить производительность 1С-системы на Postgres Pro до миграции, выявить узкие места и спрогнозировать потенциальные проблемы после перехода.

Действия:

  • Разверните «Тест-центр» — инструмент, который может эмулировать работу реальных пользователей.
  • Создайте реалистичные бизнес-сценарии. Тщательно проработайте роли пользователей и сценарии работы, которые максимально точно имитируют реальную нагрузку на систему. Бизнес, как правило, предъявляет жесткие требования к производительности после миграции, ожидая, что она не ухудшится. Особенно важно определить и протестировать ключевые бизнес-сценарии, производительность которых критична.
  • Проведите нагрузочное тестирование в тестовом контуре (желательно максимально приближенном к целевому). Запустите запланированное количество рабочих мест и выполните бизнес-сценарии.
  • Зафиксируйте результаты тестирования и получите оценку времени выполнения ключевых операций в нагрузочном тесте. Измерьте время выполнения ключевых операций и другие важные метрики производительности в текущей системе (на MS SQL Server).

Результаты нагрузочного тестирования:

  • Позволят понять, с какими проблемами производительности вы столкнетесь в целевом контуре Postgres Pro.
  • Выявят узкие места производительности до миграции, что позволит устранить их заранее.
  • Станут отправной точкой для сравнения производительности ключевых операций после миграции и оценки эффективности оптимизаций. Будьте готовы к тому, что по результатам нагрузочного тестирования может потребоваться оптимизация запросов и кода 1С, так как по статистике экспертов, оптимизация требуется примерно для 20–30% ключевых операций.

Чем полезно нагрузочное тестирование:

  • Проверка корректности сайзинга. Убедитесь, что целевая инфраструктура соответствует ожидаемой нагрузке.
  • Подбор корректных настроек 1С и Postgres Pro. Оптимизируйте настройки обеих систем для достижения максимальной производительности.
  • Выявление узких мест 1С и необходимость рефакторинга. Определите операции, запросы и участки кода, требующие оптимизации или рефакторинга.
  • Обучение расследованию проблем производительности. Подготовьте команду к диагностике и решению проблем производительности в новой среде.
  • Повышение квалификации DBA. DBA смогут получить опыт работы с Postgres Pro и улучшить свои навыки для качественной поддержки целевой системы.

Шаг 3. Подготовка проекта целевой технической архитектуры

Цель: спроектировать надежную и производительную архитектуру для 1С-системы на Postgres Pro, учитывая требования к доступности, отказоустойчивости и масштабируемости.

Этапы:

  1. Сбор нефункциональных требований:
    • Определите требования к доступности системы (например, 24/7). Для высоконагруженных систем и критичных бизнес-процессов доступность 24/7 является ключевым требованием.
    • Определите допустимые технологические окна (время простоя для обслуживания).
    • Зафиксируйте приемлемые для бизнеса значения RTO (Recovery Time Objective) и RPO (Recovery Point Objective). Выбор конкретных решений для обеспечения отказоустойчивости, таких как репликация, должен основываться именно на этих значениях, исходя из критичности бизнес-процессов и допустимого времени простоя.
  2. Выбор решений для соблюдения нефункциональных требований:
  • Для highload-систем: рекомендуется использовать Postgres Pro Enterprise, чтобы получить поддержку вендора, особенно для выявления и решения сложных проблем, а также воспользоваться встроенными функциями, такими как BiHA. Эксперты рекомендуют Postgres Pro Enterprise для высоконагруженных систем, особенно для получения вендорской поддержки и расширенных возможностей.
  • Подключите отказоустойчивый кластер:
    • Postgres Pro Enterprise BiHA (Build-in High Availability). Встроенная система управления отказоустойчивым кластером. Обеспечивает автоматическое переключение ролей в случае сбоя, не требует дополнительных компонентов инфраструктуры. BiHA — простое и эффективное решение для обеспечения высокой доступности (HA), которое встроено в PostgresProEnterprise.
    • Если Postgres Pro Enterprise BiHA не используется, выберите подходящий вариант отказоустойчивого кластера из доступных open-source решений.
  • Подберите и настройте целевое ПО. Соберите необходимый набор программного обеспечения, настройте его и протестируйте работоспособность.
  • Протестируйте решения с отказом и автоматическим переключением. Убедитесь в работоспособности механизмов отказоустойчивости и автоматического переключения в тестовой среде.

Шаг 4. Стратегия и средства резервного копирования

Цель: разработать надежную и эффективную стратегию резервного копирования и восстановления данных, учитывая объем данных и требования к скорости восстановления.

Действия:

  • Откажитесь от традиционного [pg_dump + pg_restore]. Логическое резервное копирование pg_dump может быть слишком медленным для больших баз данных и длительного восстановления. Для баз данных большого объема (например, 10 ТБ и более) традиционные методы резервного копирования могут быть неприемлемо долгими.
  • Используйте инкрементное резервное копирование. Применяйте утилиты, поддерживающие инкрементное резервное копирование, например, [pg_probackup]. Эксперты рекомендуют использовать современные решения для резервного копирования, такие как pg_probackup, обеспечивающие скорость и гибкость.
  • Настройте обслуживание системы. Не забывайте про регулярное обслуживание базы данных Postgres Pro для поддержания производительности.
    • vacuumdb --all --analyze (--freeze): Вакуумирование и сбор статистики для всех баз данных.
    • pg_repack: REINDEX + CLUSTER + VACUUMFULL онлайн: Реорганизация таблиц и индексов онлайн, без блокировки работы системы.
  • Замерьте время выполнения процедур резервного копирования и восстановления.
  • Опишите план обслуживания в техническом проекте.

Преимущества [pg_repack]:

  • Выполняет vacuum full онлайн. Позволяет проводить полное вакуумирование базы данных без остановки работы системы.
  • Выполняет команду CLUSTER. Упорядочивает физические данные таблицы по индексу, что может улучшить производительность запросов.

Шаг 5. Мониторинг технологического качества

Цель: обеспечить постоянный мониторинг производительности и стабильности 1С-системы до и после миграции, чтобы своевременно выявлять и устранять проблемы.

Действия:

  • Определите список ключевых операций, если, конечно, вы не сделали это на этапе нагрузочного тестирования, пропустив его по каким-то причинам. Выберите наиболее важные бизнес-операции для мониторинга производительности.
  • Следите за нагрузкой на оборудование.
  • Включите сбор технологического журнала платформы 1С: для диагностики проблем стабильности и ошибок.
  • Повторите все измерения (APDEX, нагрузка, технологический журнал) после миграции.
  • Сравните показатели до и после миграции, чтобы оценить изменения производительности.
  • Настройте постоянный мониторинг технологического качества после миграции. Цель мониторинга — не только «красивые дашборды», но и реальное понимание, стало ли хуже, лучше или осталось на том же уровне после миграции.

2. Миграция

Цель этапа: перенести данные и функциональность 1С-системы в целевую среду Postgres Pro с минимальным временем простоя и без потерь данных.

Действия:

  1. Составьте план миграции. Подробный документ с пошаговым описанием процесса, сроками, ответственными лицами и технологической последовательностью действий.
  2. Отрепетируйте (проверьте) план миграции заранее в тестовом контуре, максимально приближенном к продуктивному.
  3. Учитывайте нюанс с выгрузкой базы в формат .dt:
    • Выгрузка-загрузка через файл-контейнер (.dt)стандартный способ переноса между разными СУБД для 1С.
    • Для больших баз данных (например, 10 ТБ) выгрузка в .dt-файл может занять много времени (до недели).
    • Многопоточная загрузка из .dt-файла выполняется быстрее, но время все равно может быть значительным. Она может завершиться конфликтом блокировок.
  4. Для миграции больших баз данных рассмотрите использование корпоративной шины данных (КШД, ESB). Можно рассмотреть как специализированные решения, такие как «1С:Интеграция КОРП», так и встроенные возможности платформы 1С для интеграции данных:
  • Разверните отказоустойчивую, масштабируемую и высокопроизводительную КШД.
  • Подключите систему-источник (MS SQL Server) и систему-приёмник (Postgres Pro) к КШД.
  • Запустите полный обмен данными из системы-источника в систему-приёмник через КШД.
  • Пользователи могут продолжать работать в системе-источнике во время выгрузки данных через КШД.
  • После завершения обмена в системе-приёмнике (Postgres Pro) появится полная копия информационной базы.
  • Проверьте целостность данных после переноса.
  • Оперативно переключите пользователей с исходной системы на целевую (Postgres Pro) после проверки данных.
  • По возможности не деинсталлируйте КШД для обратной синхронизации данных (из целевой системы в исходную) в случае форс-мажора.

3. Поддержка и стабилизация решения после миграции

Цель этапа: обеспечить стабильную работу 1С-системы на Postgres Pro, оперативно реагировать на возникающие проблемы и оптимизировать производительность при необходимости.

Действия:

  • Сделайте задачи по поддержке этой системы более приоритетными в первый месяц после миграции.
  • Оперативно реагируйте на инциденты и проблемы, возникающие после перехода.
  • Продолжайте мониторинг производительности и стабильности системы.
  • Проведите дополнительную оптимизацию производительности, если это необходимо, на основе данных мониторинга и обратной связи пользователей.

Что в итоге, или ключи к успешной миграции:

  • Тщательная подготовка и планирование – залог успеха.
  • Нагрузочное тестирование – критически важный этап для выявления проблем и оценки производительности.
  • Оптимизация – неотъемлемая часть процесса миграции.
  • Используйте современные инструменты для резервного копирования и обслуживания.
  • Обеспечьте постоянный мониторинг технологического качества.
  • Помните, что в некоторых случаях система может заработать «как надо» и без изменений кода. Однако, иногда для достижения оптимальной производительности достаточно точечно исправить всего несколько запросов.

В процессе миграции вы сможете:

  • Подтянуть знания по PostgreSQL.
  • Улучшить навыки работы с базами данных.
  • Прокачать навыки на почти реальных данных и ситуациях, особенно на этапе нагрузочного тестирования.

Успешных вам миграций!

 

Статья подготовлена по материалам компании «ИТ-Экспертиза»