image

Понимаю, звучит сильно, но давайте расскажу, как мы это сделали.

Платформа 1С — одна из ключевых платформ для бизнес-автоматизации в Росатоме. Выбрали 1C потому, что нужны отечественные системы, способные выдерживать большую нагрузку и масштабироваться.

Сейчас на поддержке и в разработке у нас 28 централизованных систем, каждая из которых содержит под капотом десятки, а иногда и сотни информационных баз. Всего для их обслуживания задействовано более 600 серверов: это серверы лицензирования, серверы среднего звена и серверы СУБД. Каждая система развивается и насчитывает не менее 8–12 % изменений в год, а иногда и больше. Всем этим занимается 750+ сотрудников.

Мы собрали единый центр управления всеми этими информационными системами, где видны дашборды производительности по базам и по запросам, где регистрируются ошибки, куда стекается информация об анализе кода и архитектуры. Мы называем это центром управления техдолгом, с помощью которого каждый день этот самый техдолг контролируется и побеждается.

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

Я Заяна Ачинова, директор по стратегическому развитию 1С в Гринатоме, и отвечаю за стратегию развития направления 1С в Росатоме.

image

Что такое техдолг в нашем понимании


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

Вообще, организация эксплуатации — основа успешного функционирования систем. У нас к этому крайне трепетное отношение.

Как образуется техдолг


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

Конечно, ошибки совершают все и полностью избавиться от техдолга невозможно. Но мы должны его контролировать и создавать надёжную систему мониторинга и планомерного уменьшения техдолга. В этом и состоит победа.

А что если не контролировать


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

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

Точно по этой же причине мы не можем быть уверены, что пользователи при работе в системе, столкнувшись с сообщениями об ошибках, обязательно сообщат об этом службе поддержки. Да и заметить деградацию в производительности 1 % в день сложно. И если объективными средствами не контролировать скорость работы системы, то за 100 дней эксплуатации в нашем примере система будет работать ровно в 2 раза медленнее, а в год уже в 3,5 раза.

Если с ошибками в журнале регистрации и мониторингом производительности всё понятно, то возникает вопрос, зачем нужно проверять качество кода, если система работает и пользователи не видят сам код. Проблема в том, что, если мы не следим за стандартами разработки, это может привести к трудностям при доработке системы, усложнить её поддержку и задержать передачу кода между разработчиками. В итоге даже небольшие изменения могут превратиться в сложный проект, где придётся долго и неприятно разбираться в логике работы системы.

Самый тонкий момент связан с архитектурными проверками. Платформа 1С очень универсальна, и нельзя ожидать от конфигуратора проверок на все случаи жизни. Сейчас расскажу, как простые архитектурные проверки помогли нам значительно увеличить скорость выполнения запросов.

Система мониторинга и при чём тут СППР


В 1С-среде очень распространена СППР — система проектирования прикладных решений. Это что-то вроде системы бэк-трекинга по всей цепочке проектной работы.

Для нас это больше, чем система проектирования новых решений. Мы выстроили работу так, что любое изменение конфигурации со стороны разработчика и все обращения из поддержки отображаются в системе СППР. Здесь работает вся наша продуктовая команда — разработчики, аналитики, архитекторы, методисты и сотрудники поддержки.

Мы работаем с ошибками по журналу регистраций. У нас сотни информационных баз, по которым мы хотим отслеживать ошибки, возникающие в процессе работы. В каждой из прикладных конфигураций мы настроили автоматическое задание, которое по расписанию собирает данные об ошибках и сохраняет их в определённый каталог. В СППР также есть задание для загрузки этих ошибок.

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

image
Ошибки журнала регистрации по всем продуктивным системам

Мы анализируем скорость работы систем, используя два основных показателя. Apdex показывает, насколько хорошо выполняются ключевые операции в информационных системах. Данные о медленных запросах — это информация о запросах, которые выполняются слишком долго. С Apdex всё понятно, это похоже на сбор информации об ошибках. А вот с медленными запросами дело обстоит сложнее.

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

Это позволяет нам анализировать медленные запросы по различным параметрам, включая конфигурации систем, типы информационных баз и серверы.

image
Анализ медленных операций по всем системам

Организационно для работы с медленными запросами мы создали специальную команду, которая занимается улучшением работы систем. Каждый день ребята оптимизируют медленные операции. Каждые две недели мы проводим семинары с разработчиками, на которых обсуждаем примеры улучшений. Это помогает разработчикам понять, что может замедлять систему и как правильно оптимизировать процессы.

Статический анализ кода


Это процесс проверки программного кода на соответствие установленным стандартам.
Разработчики что-то поменяли, и каждый вечер изменения конвертируются в закладки для Git. Все закладки затем подаются в SonarQube. Это софт, который выполняет анализ прикладного кода и возвращает то, что именно не соответствует заранее установленным правилам разработки. То есть днём написали код — утром следующего дня получили что-то вроде «а вот здесь у вас запросы идут в цикле, так не надо». Эта информация отображается в 1С СППР — и любой разработчик видит техдолг, который сам накопил. То есть на каждом висят замечания, которые можно разбирать, игнорировать или передавать кому-то ещё. У нас проводится более 1000 таких проверок ежедневно.

В СППР мы видим:
  • ошибки по каждой конфигурации;
  • ошибки, связанные с каждым разработчиком;
  • сводную информацию по типам замечаний;
  • динамику исправления замечаний.

Так мы отслеживаем качество кода и работу разработчиков.

image
Сводная информация по техническому долгу и динамике исправления

По каждому замечанию в СППР отображается информация по описанию ошибки и показываются статьи с информационно-технологических систем (ИТС) с пояснением, к чему ошибка может привести.

image
Пример замечания и описание ошибки

Организационно работа по исправлению ошибок статического анализа построена так:
  • разработчикам даётся время, чтобы исправить ошибки, выявленные системой статического анализа кода;
  • новые стажёры и джуны, приходящие в Центр 1С Росатома, в первые один-два месяца занимаются разбором и исправлением ошибок. Это помогает им освоиться с разработкой, изучить необходимые инструменты и на практике понять, как правильно писать код.

Это очень важная часть работы стажёров и джунов. Дело в том, что каждое замечание
статического анализатора автоматически снабжается пояснением, в чем тут ошибка и ссылкой на статью с объяснениями по этой ошибке в базе знаний. А там — что именно плохо, к чему это может привести на проде, как это лучше всего исправить — и пара примеров хорошего кода на практике.

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

image
Пример того, что правят стажёры

Архитектурные проверки


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

image
Пример архитектурных проверок

Вот один из самых ярких примеров с исправлением ошибки в типах реквизита. Разработчик скопировал один из реквизитов и по невнимательности забыл удалить лишние типы данных. Система хорошо работала, но при достижении больших объёмов в одной из таблиц скорость выполнения запроса к дополнительным реквизитам стала катастрофически деградировать. Удаление лишних типов у реквизита даже без переписывания запроса увеличило скорость его выполнения более чем в 30 раз.

А эти проверки мы проводим в еженедельном режиме:
  • поиск объектов, на которые в конфигурации нет ссылок;
  • метаданные с программно-включённой историей изменений;
  • регистры с большим количеством измерений;
  • незакрываемые регистры накопления остатков;
  • документы без проведения или движений;
  • метаданные с некорректной длиной кодов / номеров;
  • регистры с пустыми ресурсами;
  • объекты, для которых не созданы роли доступа.

Всего у нас разработано и применяется на практике более 80 типов проверок.

Что получается в итоге


Эти направления позволяют контролировать наличие грубых просчётов. Если кто-то написал кривой код не по стандарту — мы это увидим в выводах SonarQube.

Если ошибка логическая, рано или поздно тормозящий запрос попадёт в дашборд либо пользователи пожалуются на неправильное поведение запроса и это попадёт к поддержке или аналитику.

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

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

image
Сводная информация по техническому долгу и динамике исправления

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

Вместо заключения


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

Комментарии (10)


  1. R72
    05.09.2024 13:35

    Очень интересное решение.

    Забрал в группу СППР в Телеграм на разбор.

    От себя здесь или в ТГ прошу просветить по вопросу:

    "Из первого на что обратил внимание - вроде не заявлено что собираются автоматически все регистрации ошибок
    во всплывающих окнах 1С - о которых часто не сообщают пользователи).
    1С объявляло функционал регистрации таких ошибок, но если они в логах и техжурналах ловятся, то может Гринатом их и находит."

    Или такие сообщения системы не регистрируются?


    1. Zayana89 Автор
      05.09.2024 13:35

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


  1. HADGEHOGs
    05.09.2024 13:35
    +1

    Динамический список по заявкам на расходование денежных средств в топе проблемных вопросов, где либо rls, либо поиск по полю среди нескольких соединенных таблиц вызвал сочуствие, запрос к РБ - понимание и надежду, что это типовое, а какая то самописка по проверке формулы со средним выполнением в 96 секунд позабавила. Но зато пользователь сможет позволить себе перерыв и заварить ромашковый чай для успокоения нервов.


  1. Ulrih
    05.09.2024 13:35

    Нашли разработчика на 1с:Mes? И это что-то "типовое"?


  1. Kahelman
    05.09.2024 13:35

    Без относительно к качеству 1C: надеюсь к реакторам их близко не подпускают? А то что-то за нашу ядерную безопасность стало беспокойно :)


  1. Zl_er
    05.09.2024 13:35

    Спасибо , очень интересно


  1. svcoder
    05.09.2024 13:35

    То есть опытные разработчики делают ошибки, а неопытные должны за ними исправлять? Очень странное решение. Вряд ли молодые разработчики заходят работать в такой "команде"


    1. Zayana89 Автор
      05.09.2024 13:35

      Постараюсь объяснить логику работы. У нас большая стажерская программа и к нам приходит ощутимое количество начинающих разработчиков.
      Как мы решили выстроить работы с начинающими. Вместо изучения теории ребята анализируют замечания системы статического анализа кода. Система группирует однотипные ошибки по одной или нескольким конфигурациям и показывает пример исправления. Лидер команды проверяет исправление на одном примере, и ребята точечно вносят правки во все места в коде.
      В результате все довольны. Сильных разработчиков мы на эти правки не отвлекаем, а ребята привыкают к работе в нашей инфраструктуре, правилам разработке, адаптируются к командной работе.
      Если в команду приходят опытные разработчики, то конечно, к этой активности мы их не подключаем. Но все видят свой технический долг, и мы регулярно проговариваем, какие замечания надо поправить.


      1. svcoder
        05.09.2024 13:35
        +1

        Обычно начинающим разработчикам дают несложные задачи, которые они делают по всем правилам и которые после ревью попадают в репозиторий. Если бы мне, когда я был начинающим разработчиком, предложили бы исправлять чужое г%#но, когда его автор сидит рядом и производит новое, я бы ушёл оттуда немедленно. Видимо есть какая-то другая причина, по которой стажёра у вас работают. Например любовь к мирному атому


        1. Zayana89 Автор
          05.09.2024 13:35

          Не любая техническая правка простая. Например, если есть задача заменить запрос в цикле более сложным, но одним запросом с измененной логикой обработки — то мы считаем эту задачу техническим долгом и пробуем решить со стажерами. Многие такие задачи даже как технический долг не признают и не правят такие вещи.