Как мы в Авито терабайтную УХ на 29 релизов обновляли

20.05.23

База данных - Обновление 1С

Год назад нам понадобилось обновить нашу базу "Управление холдингом", которая не обновлялась 3 года. У нас получилось. Статья для тех, кому нужно пройти тот же путь.

В Авито исторически сложилось так, что релиз “Управления холдингом” не обновляли 3 года. Так как в УХ ведется регламентированный учёт, то для учета изменения законодательства в течение 3 лет делали частичное обновление функционала. Когда переносили функционал прослеживаемости товаров, стало понятно, что из-за изменений БСП делать частичные обновления становится слишком трудоемко. И в будущем на обновление типового функционала может понадобиться неприемлемо много времени. Единственный выход из ситуации - догнать в УХ типовой релиз. Для понимания сложности задачи приведу некоторые характеристики базы:

  • размер базы - 1,5 терабайта,
  • количество изменений в конфигурации - около 60 тысяч,
  • количество хозяйственных операций - около 11 млн в год,
  • количество пользователей - около 300 пользователей.

Понятно, что при таких характеристиках базы обновление релиза - это проект. На технические работы по проекту были привлечены 5 специалистов от подрядчика, которые до этого не работали с нашей УХ. Остальные работы выполнялись силами Авито. Проект длился 7,5 месяцев, полгода на подготовку и полтора месяца опытно-промышленной эксплуатации. В процессе проекта в нашу конфигурацию УХ было перенесено 1,4 млн изменений из типового релиза. Организована работа 34 исполнителей. Исправлено около 450 багов.

В итоге на новогодних каникулах 2023 года мы обновили релиз УХ с 3.0.8.5 до 3.1.17.11, то есть на 29 релизов. Это заняло 74 часа (из них 46 часов ушло на обработчики данных, 22 часа - на реструктуризацию базы данных, 3 часа - на прочие технические действия).

Далее я построю статью в формате советов самому себе годичной давности. Что-то было так и сделано. А что-то можно было сделать лучше. Чтобы советы стали понятнее, расскажу общую идею реализации проекта.

  1. Обновлялись в 3 шага: с 3.0.8.5 на 3.0.20, с 3.0.20 на 3.1.10, с 3.1.10 на 3.1.17.11. В промежуточных релизах оставляем только доработки, которые необходимы для сохранения данных.
  2. Тестирование происходило тремя этапами: два тестирования аналитиками (тестирование по сценариям и более широкое тестирование) и тестирование пользователями.
  3. За месяц до обновления рабочей базы УХ объявлялась “заморозка” для доработок УХ. В этот период в целевой релиз УХ переносились доработки, которые были выполнены с момента подготовки целевого релиза для тестирования. На этапе “заморозки” проходило финальное тестирование аналитиками. 
  4. Обновление проводили на новогодних каникулах. Для обновления было выделено технологическое окно 4 суток.

 

Советы по технической части

Про подходы к обновлению

  1. При планировании обновления на промежуточные релизы можно не учитывать последовательность, рекомендуемую “Фирмой 1С”. Мы пропустили часть релизов, на которые рекомендует обновляться “Фирма 1С”. За счет этого экономится время на подготовку целевой конфигурации с доработками и экономится немного времени на реструктуризации базы данных при обновлении. Мы  обновлялись в 3 шага - с 3.0.8.5 на 3.0.20, с 3.0.20 на 3.1.10, с 3.1.10 на 3.1.17.11. При этом тестовое обновление с 3.0.8.5 на 3.1.17.11 в один шаг показало, что это тоже рабочий вариант (ошибок при обновлении было не больше, чем при обновлении в 3 шага). Но мы решили не отклоняться настолько от рекомендуемой последовательности, так как особых выгод для нас этот вариант не давал.
  2. В промежуточных конфигурациях сохраняй только доработки, которые необходимы для сохранения данных при реструктуризации. Это позволит существенно сэкономить время на этапе подготовки конфигураций. Минус этого решения - при обновлении рабочей базы не будет варианта остановить обновление на промежуточном релиза. Важно во время “заморозки” доработок не забыть перенести все доработки, которые нужны для сохранения данных, в промежуточные конфигурации.
  3. Обрати внимание на удаление результатов частичных обновлений. На этом этапе легко можно потерять доработки. Решение проблемы - или обратить внимание программиста на эту функциональность, или усиленно тестировать функциональность на целевом релизе. Лучше и то, и другое.

Про пересечение с другими проектами

  1. Не делай проект обновления во время других IT-проектов, которые существенно изменяют среду работы 1С. Если это условие выполнить невозможно, то нужно заложить в плане проекта существенное время на тестовые обновления в новой среде. Потому что в новой среде вполне возможны неожиданные проблемы. Например, мы при реструктуризации БД на postgre (до этого обновлялись на MS SQL) столкнулись с проблемой, на решение которой ушло 3 недели. Если нет возможности заранее протестировать обновление в новой IT-среде, то надо понимать, что ты вкладываешь в проект существенную вероятность неуспеха.

Про организацию процесса разработки

  1. Если у вас сложный процесс разработки, то рекомендую обратить внимание, чтобы конфигурация, которая обновляется, совпадала с конфигурацией рабочей базы. Небольшие различия могут привести к длительным разбирательствам при тестах.
  2. Обрати внимание программистов на сохранение комментариев к доработкам. Заранее проговори с ними как действовать в разных случаях.
  3. Отдельно веди учёт переноса частичных обновлений из типового релиза, которые будут делаться на старом релизе в процессе обновления. Это важно при переносе доработок, которые выполнялись во время хода проекта.
  4. Если для тебя критично важно качество кода, то делай код-ревью во время проекта. Это необходимо учесть при планировании проекта. Если этого не будет, то качество кода в конфигурации снизится.
  5. Отдельно планируй как технически будут обновляться внешние отчеты и обработки. Лучше избавиться от них до проекта.

Про тестирование

  1. Возможно при подготовке тестовой базы проще переносить данные из рабочей базы вместо обновления копии рабочей базы. Это может существенно сократить время на подготовку базы с актуальными данными и актуальным релизом при тестировании каждой сборки целевой конфигурации.
  2. Откладывай бекапы, которые обновляете во время тестирования до целевого релиза. Они пригодятся при исправлении ошибок, которые будут найдены при тестировании.

Про подготовку к обновлению

  1. Большая часть времени обновления уходит на обработку данных при переходе с релиза на релиз. У нас на обработку данных ушло 62% от общего времени обновления. Поэтому обработчики данных нужно выполнять на максимально быстрых дисках.
  2. Заранее запланируй переведрение подсистем, если это необходимо. На старте проекта проанализируй какие типовые подсистемы сильно изменились. Если рассчитывать, что такое решение будет принято в ходе проекта, то вряд ли перевнедрение произойдет.

 

Советы по организационной части

Про общую организацию проекта

  1. Лучше не пересекать проект обновления с другими проектами изменения IT-ландшафта, в котором работает 1С. Если это невозможно, то руководители проекта обновления должны знать основные вехи других проектов.
  2. Раздели на разных людей функции руководителя проекта и технического лидера. Если назначить одного человека, то он может стать узким местом, из-за которого завалится проект.
  3. Заранее запланируй подготовку среды разработки на целевом релизе конфигурации во время “заморозки” доработок.

Про тестирование

  1. Важно донести до всех участников проекта, что программисты не смогут собрать 100% рабочую конфигурацию на новом релизе. Это можно сделать только вместе с тестированием. Важно при планировании проекта максимально детально спланировать тестирование и подготовиться к нему. Всем участникам проекта надо объяснять, что всё надо тестировать в начале тестирования и не оставлять часть на конец.
  2. Учти, что если плохо протестировать, то на старте опытно-промышленной эксплуатации можно утонуть в ошибках.
  3. Учти, что тестирование нового релиза конфигурации нужно начинать как можно раньше. Но если тестирование пройдет без ошибок, то не нужно успокаиваться. Разработка не стоит на месте, среда работы конфигурации может меняться. Поэтому финальное тестирование проведи как можно ближе к обновлению рабочей базы на её актуальной копии.
  4. Учти, что если в обновляемой конфигурации большое количество доработок, то, наверняка, есть доработки, про которые никто не знает подробностей. Важно выделить такие доработки для более тщательного тестирования. Организуй работу программиста и аналитика таким образом, чтобы программист обратил внимание аналитика на функциональность, которую нужно протестировать особо тщательно. Самый эффективный способ тестирования - аналитик и прикрепленный к нему программист.
  5. Запланируй на этап тестирования в команду проекта аналитика для разбора сложных ошибок (например, не закрывается счет 20).

В качестве резюме дам главный совет. Для такого проекта все сложности спрогнозировать невозможно. А ошибки могут привести к неработоспособности критически важного функционала в рабочей базе после обновления и, следовательно, откату на старый релиз. Поэтому важно, чтобы в команде проекта были люди, которые могли брать на себя решения в ситуациях с высокой степенью неопределенности. И решения должны быть верными.

обновление

См. также

Обновление для КА 1.1, ЗУП 2.5, БУХ 2.0: НДС, ЕФС-1, Расчет страховых взносов, Мобилизация, Статистика, Электронные трудовые книжки, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

19900 руб.

01.04.2020    141272    668    352    

233

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Расширение для конфигураций 1С для автоматического подтверждения легальности обновления и выполнения обработчиков обновления при пакетном автоматическом обновлении большого числа баз 1С. А также сам модуль обработки по автоматическому обновлению баз.

2 стартмани

08.05.2019    24435    56    VPanin56    26    

27

Ссылочная константа содержит недопустимый ссылочный номер таблицы

Обновление 1С Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Бесплатно (free)

На связи Сергей Скирдин, технический директор ИТ-интегратора «Белый код». Сегодня расскажу, как решить одну из проблем, с которой можно столкнуться при обновлении конфигурации 1С.

19.03.2024    1039    sergey.skirdin    4    

15

Скрипт для обновления базы с расширением из хранилища

Обновление 1С Платформа 1С v8.3 Бесплатно (free)

Небольшая оптимизация рабочего времени через скрипт обновления базы 1С с расширением из хранилища конфигураций.

22.01.2024    1264    ke.92@mail.ru    3    

25

Многопоточное обновление 1С: Управление холдингом

Обновление 1С 8.3.14 1С:Управление холдингом Абонемент ($m)

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

1 стартмани

10.01.2024    3288    saver77    18    

24

Не обновляется типовая конфигурация 1С через конфигуратор

Обновление 1С Платформа 1С v8.3 Россия Бесплатно (free)

Столкнулся с проблемой. Нужно было поднять до текущего релиза Розницу 2.3. Обновлял по старинке, через конфигуратор (база клиент-серверная). Указывал логин и пароль, ждал скачивания обновления и обновлял. Но после накатывания 5 релизов следующий устанавливаться не хотел, а точнее конфигуратор гордо говорил, что обновлений больше нет. Решение нашел здесь на форуме и хочу зафиксировать. Чтобы самому не забыть и передать опыт начинающим.

29.11.2023    1529    shestopalovpro    4    

7

Принудительный запуск дополнительных процедур обработки данных после обновления

Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Ручной запуск процедур обработки обработчиков после обновлений. Может быть полезно стажерам, консультантам, разработчикам, администраторам, всем, кто обновляет информационные базы.

1 стартмани

20.11.2023    717    9    IvanTerentev    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Гость 20.05.23 13:38
3 года не обновлять регл.учет
4. mephistofel 15 20.05.23 17:04 Сейчас в теме
(1) для обновления регламентированного учета делали перенос функционала из типовых релизов. Это нормально работало до переноса функционала прослеживаемости движения товаров. Этот перенос дался очень больно. После этого все осознали, что не обновлять базу, в которой ведётся регламентированный учёт - это плохо. И созрели на обновление релиза.
2. skeptik2105 20.05.23 13:56 Сейчас в теме
Вот что бывает, если не использовать расширения.


22 часа - на реструктуризацию базы данных

UpdateDBCfg=v2 ?

мы при реструктуризации БД на postgre (до этого обновлялись на MS SQL) столкнулись с проблемой, на решение которой ушло 3 недели

Логично же, тестировать на той же СУБД, что и на проде?

исторически сложилось так, что релиз “Управления холдингом” не обновляли 3 года

"Как создать себе проблемы и героически их решить."
корум; SuhoffGV; siamagic; +3 Ответить
5. mephistofel 15 20.05.23 17:12 Сейчас в теме
(2)

>>UpdateDBCfg=v2 ?

Частично. Конечно, хотели обновить на v2, но реструктуризация с 3.1.10 на 3.1.17 на v2 на postgree подвисала. Поэтому реструктуризацию с 3.1.10 на 3.1.17 делал на v1.

>>Логично же, тестировать на той же СУБД, что и на проде?

Тогда postgree ещё не было. Проект перехода на postgree и linux начался позднее проекта обновления релиза УХ в связи со всем известными событиями.

>>"Как создать себе проблемы и героически их решить."

Да.
3. info1i 223 20.05.23 14:31 Сейчас в теме
Тоже выполняли подобные проекты. При реструктуризации просто падало окно конфигуратора, поэтому пришлось обновлять через утилиту ibcmd, но слишком долго - неделя.
Поэтому настроили серверное применение конфигурации БД: "Конфигурация -> Конфигурация базы данных -> Обновить конфигурацию базы данных на сервере", и время применения изменений в разы сократилось (минуты, час, 7 часов).
Тоже основное время занимало отложенное обновление (например, обновление значений показателей отчетов в регистрах, заполнение доп. полей в старых документах и регистрах).
Поэтому я пришел к выводу, что нужны 2 базы:
1) база ввода даннных и текущего учета - малый размер, храним данные текущего года или меньше, оптимальное время на обновления;
2) аналитическая база для отчетов - большой размер, периодически пополняется данными текущей базы, редко обновляется или даже не обновляется.
Или периодически делать свертку базы, или хотя бы обрезать огромные регистры, документы, на которые затрачивается основное время обновления.
6. mephistofel 15 20.05.23 17:18 Сейчас в теме
(3)
Поэтому настроили серверное применение конфигурации БД: "Конфигурация -> Конфигурация базы данных -> Обновить конфигурацию базы данных на сервере"


Я тоже обновлял конфигурацию базы данных на сервере.
TerveRus; +1 Ответить
7. Кадош 20.05.23 18:46 Сейчас в теме
Анализировали ли доработки на актуальность (возможно что-то уже не используется в работе)?
Что делали в случае если доработка была актуальна в текущем релизе, но в обновлении была реализована в типовом функционале?
Как вообще анализировались доработки и принималось решение, что переносим,а что нет?
TerveRus; +1 Ответить
8. mephistofel 15 21.05.23 00:01 Сейчас в теме
(7) По умолчанию переносили все доработки. Задумывались над тем, чтобы что-то не переносить, если при тестировании выходило слишком много ошибок из-за значительных изменений типового функционала.
Сейчас думаем как "причесать" доработки, чтобы обновление релиза стало рутиной, а не проектом.
16. TerveRus 13.06.23 11:30 Сейчас в теме
(8) то есть перенесли "как есть", не делая перенос в расширение?
Без расширений обновление будет трудоемко.
20. mephistofel 15 13.06.23 12:15 Сейчас в теме
(16) жизнь показала, что для нас расширения - неработоспособный вариант. У нас слишком много доработок, чтобы хранить их в расширениях. У нас было некоторое количество доработок в расширениях. Мы перетащили их в конфигурацию.
Demetry2000; +1 Ответить
22. TerveRus 13.06.23 16:28 Сейчас в теме
(20) в смысле слишком много? Больше, чем типового кода, и доработки вообще не работают совместно с типовым?
Конечно расширения созданы для адаптации, а не переписывания всего целиком.

Зачем же настолько переписывать типовой код? Значит конфигурация в принципе не подходит?
Думаю в этом случае делают самописную управленческую/торговую конфигурацию с обменом с типовой бухгалтерией.
Интересно было бы взглянуть, что же там такого навыдумывали)
9. triviumfan 93 22.05.23 17:50 Сейчас в теме
Как вы определили, что 3х шагов/прыжков при обновлении будет достаточно?
10. mephistofel 15 23.05.23 11:27 Сейчас в теме
(9) экспертная оценка + тест.
Из опыта предыдущих аналогичных обновлений с самого начала было понятно, что мы не уложимся в сроки проекта, если будем идти по всем рекомендованным релизам. Поэтому для теста по-быстрому обновили с 3.0.8 на 3.0.20, посмотрели, что ошибок не очень много, и поверили, что прыжки на десяток релизов - это работоспособный вариант. В этот момент мы, конечно, рисковали. Но "чуйка" не подвела.
Потом я ещё для теста обновлял 3.0.8 сразу на 3.1.17 (в один шаг). И тест показал, что это тоже работоспособный вариант. Ошибок было примерно столько же, сколько при обновлении в 3 шага. Но в тот моменты мы решили не отклоняться от плана, так как при обновлении в один шаг мы только выигрывали 2-3 часа на реструктуризации базы. Решили, что из-за этого небольшого преимущества не стоит отклоняться от уже согласованного со всеми плана.
11. triviumfan 93 23.05.23 12:41 Сейчас в теме
(10) А анализировались ли все обработчики отложенного обновления пропущенных релизов?
Вдруг в одном из релизов в одном из обработчиков имелось заполнение какого-либо служебного поля, использующегося в последствии.
"Риск - благородное дело", но я бы не рискнул, т.к. слишком много объектов метаданных в таких огромных конфигурациях :)
23. redtram 29 24.08.23 19:29 Сейчас в теме
(11) обработчики же выполняются в любом случае все промежуточные? Или я сильно хорошего мнения о типовых?
15. aleks.public 13.06.23 08:32 Сейчас в теме
(10)посмотрели, что ошибок не очень много, и поверили, что прыжки на десяток релизов - это работоспособный вариант

Прыжок веры)))
17. TerveRus 13.06.23 11:31 Сейчас в теме
(10) о каких ошибках идет речь? Потеря данных была?
19. mephistofel 15 13.06.23 12:12 Сейчас в теме
(17) потери данных не было. Ошибки были связаны с тем, что типовые обработчики данных "спотыкались" о доработки, которых в нашей УХ очень много. Исправление заключалось или в доработке типовых обработчиков, или в написании своих.
12. mephistofel 15 23.05.23 13:13 Сейчас в теме
(11)

А анализировались ли все обработчики отложенного обновления пропущенных релизов?


Нет. Я не вижу в этом смысла. При обновлении релиза последовательно выполняются все обработчики данных, которые относятся к релизам между старым и установленным релизом. То есть при обновлении релиза с 3.0.8 до 3.0.20 при старте в режиме Предприятия последовательно выполняются обработчики релизов 3.0.9, 3.0.10, 3.0.11 и так далее. Это относится и к монопольным обработчикам данных, и отложенным обработчикам. То есть если обработчики данных выполнились без ошибок, то можно быть уверенным, что с данными всё в порядке.
13. triviumfan 93 23.05.23 17:54 Сейчас в теме
(12)
То есть если обработчики данных выполнились без ошибок, то можно быть уверенным, что с данными всё в порядке.

Хм, логично!
14. aShumakoff 142 10.06.23 14:06 Сейчас в теме
В ерп испрльзование переопределяемых общих модулей, программной доработки форм прям сильно сильно облегчает обновление... база правда, пока 700 гб всего. Больше всего времени жрет конечно, реструктуризация, если изменят состав допреквизитов например... Помогла бы 2.0 но по определенным причинам она валится в ошибку. Ну и долгие обработчики еще.

В ух разве нет тех же переопределяемых общих модулей?
18. mephistofel 15 13.06.23 12:07 Сейчас в теме
(14) есть. Другое дело - используются ли они и если используются, то насколько правильно. Наша конфигурация УХ требует большого рефакторинга. В планах есть провести работу по рефакторингу.
21. TerveRus 13.06.23 15:12 Сейчас в теме
Что-то не видел в прошлом году вакансий по 1С для Авито)
Интересный проект, респект!
26. mephistofel 15 09.11.23 16:46 Сейчас в теме
(21) Бывает 3-4 вакансии в год. Правда, я не знаю где их публикуют. В октябре взяли 3-ех новых программистов. Ещё у нас много программистов от подрядчиков.
24. titanium2008 42 04.09.23 20:24 Сейчас в теме
Сейчас с УХ 3.1 на УХ 3.2 переползаем, тоже отдельный проект. Также решили от расширений избавляться и делать все доработки в основной, иначе расширение превращается в черный ящик при обновлении и большом количестве доработок.
25. mephistofel 15 09.11.23 16:05 Сейчас в теме
(24) На этих выходных мы обновились с 3.1.17 до 3.2.4. Готовились полгода. Судя по тому, что у меня есть время посмотреть комментарии под своей статьёй, в этот раз у пользователей меньше ошибок, чем в прошлый раз :-)
27. TerveRus 10.01.24 13:03 Сейчас в теме
(24) считаю это все предрассудки и шаг назад к обычным формам.

Используйте ИзменениеИКонтроль, и доработки не пересекутся.
А все остальное в Перед/После должно дополнять и не влиять на будущие изменения в типовой.
28. titanium2008 42 10.01.24 20:22 Сейчас в теме
(27) причем тут обычные формы?
Мы теперь используем расширения как фирма 1с- временные патчи по устранению багов.
Имхо , если конфа не на замке, зачем делать доработки и в расширении и в основной конфе. По сути получается нужно контролировать изменения и там и там.
Также расширения позволяют не все доработки сделать, которые можно сделать в основной конфе.
Оставьте свое сообщение