Рекомендации по миграции высоконагруженных 1С-решений на Postgres Pro без потерь в производительности
Перенос высоконагруженных 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, учитывая требования к доступности, отказоустойчивости и масштабируемости.
Этапы:
- Сбор нефункциональных требований:
- Определите требования к доступности системы (например, 24/7). Для высоконагруженных систем и критичных бизнес-процессов доступность 24/7 является ключевым требованием.
- Определите допустимые технологические окна (время простоя для обслуживания).
- Зафиксируйте приемлемые для бизнеса значения RTO (Recovery Time Objective) и RPO (Recovery Point Objective). Выбор конкретных решений для обеспечения отказоустойчивости, таких как репликация, должен основываться именно на этих значениях, исходя из критичности бизнес-процессов и допустимого времени простоя.
- Выбор решений для соблюдения нефункциональных требований:
- Для 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 с минимальным временем простоя и без потерь данных.
Действия:
- Составьте план миграции. Подробный документ с пошаговым описанием процесса, сроками, ответственными лицами и технологической последовательностью действий.
- Отрепетируйте (проверьте) план миграции заранее в тестовом контуре, максимально приближенном к продуктивному.
- Учитывайте нюанс с выгрузкой базы в формат .dt:
- Выгрузка-загрузка через файл-контейнер (.dt) — стандартный способ переноса между разными СУБД для 1С.
- Для больших баз данных (например, 10 ТБ) выгрузка в .dt-файл может занять много времени (до недели).
- Многопоточная загрузка из .dt-файла выполняется быстрее, но время все равно может быть значительным. Она может завершиться конфликтом блокировок.
- Для миграции больших баз данных рассмотрите использование корпоративной шины данных (КШД, ESB). Можно рассмотреть как специализированные решения, такие как «1С:Интеграция КОРП», так и встроенные возможности платформы 1С для интеграции данных:
- Разверните отказоустойчивую, масштабируемую и высокопроизводительную КШД.
- Подключите систему-источник (MS SQL Server) и систему-приёмник (Postgres Pro) к КШД.
- Запустите полный обмен данными из системы-источника в систему-приёмник через КШД.
- Пользователи могут продолжать работать в системе-источнике во время выгрузки данных через КШД.
- После завершения обмена в системе-приёмнике (Postgres Pro) появится полная копия информационной базы.
- Проверьте целостность данных после переноса.
- Оперативно переключите пользователей с исходной системы на целевую (Postgres Pro) после проверки данных.
- По возможности не деинсталлируйте КШД для обратной синхронизации данных (из целевой системы в исходную) в случае форс-мажора.
3. Поддержка и стабилизация решения после миграции
Цель этапа: обеспечить стабильную работу 1С-системы на Postgres Pro, оперативно реагировать на возникающие проблемы и оптимизировать производительность при необходимости.
Действия:
- Сделайте задачи по поддержке этой системы более приоритетными в первый месяц после миграции.
- Оперативно реагируйте на инциденты и проблемы, возникающие после перехода.
- Продолжайте мониторинг производительности и стабильности системы.
- Проведите дополнительную оптимизацию производительности, если это необходимо, на основе данных мониторинга и обратной связи пользователей.
Что в итоге, или ключи к успешной миграции:
- Тщательная подготовка и планирование – залог успеха.
- Нагрузочное тестирование – критически важный этап для выявления проблем и оценки производительности.
- Оптимизация – неотъемлемая часть процесса миграции.
- Используйте современные инструменты для резервного копирования и обслуживания.
- Обеспечьте постоянный мониторинг технологического качества.
- Помните, что в некоторых случаях система может заработать «как надо» и без изменений кода. Однако, иногда для достижения оптимальной производительности достаточно точечно исправить всего несколько запросов.
В процессе миграции вы сможете:
- Подтянуть знания по PostgreSQL.
- Улучшить навыки работы с базами данных.
- Прокачать навыки на почти реальных данных и ситуациях, особенно на этапе нагрузочного тестирования.
Успешных вам миграций!
Статья подготовлена по материалам компании «ИТ-Экспертиза»