Мы в фирме 1С широко используем собственные разработки для организации работы компании. В частности, «1С:Документооборот 8». Помимо управления документами (как следует из названия) это ещё и современная ECM-система (Enterprise Content Management — управление корпоративным контентом) с широким набором функциональных возможностей – почта, рабочие календари сотрудников, организация совместного доступа к ресурсам (например, бронирование переговорных), учёт рабочего времени, корпоративный форум и многое другое.
В фирме 1С документооборотом пользуется более тысячи сотрудников. База данных стала уже внушительной (11 млрд. записей), а это значит, что она требует более тщательного ухода и более мощного оборудования.
Как устроена работа нашей системы, с какими сложностями при обслуживании базы мы сталкиваемся и как их решаем (в качестве СУБД мы используем MS SQL Server) – расскажем в статье.
Для тех, кто впервые читает про продукты 1С.
1С:Документооборот — это прикладное решение (конфигурация), реализованное на базе фреймворка для разработки бизнес-приложений — платформе 1С:Предприятие.
«1С:Документооборот 8» (сокращённо – ДО) позволяет автоматизировать работу с документами на предприятии. Один из основных инструментов взаимодействия сотрудников – электронная почта. Помимо почты ДО также решает и другие задачи:
В Документооборот мы заходим тонким клиентом (нативное исполняемое приложение) из Windows, Linux, macOS, веб-клиентом (из браузеров) и мобильным клиентом – в зависимости от ситуации.
А ещё благодаря подключенному к Документообороту другому нашему продукту – Системе взаимодействия – мы непосредственно в Документообороте получаем функциональность мессенджера – чаты, аудио и видеозвонки (включая групповые, что сейчас стало особенно актуально, в том числе и с мобильного клиента), быстрый обмен файлами плюс возможность написания чат-ботов, упрощающих работу с системой. Ещё один плюс от использования Системы Взаимодействия (по сравнению с другими мессенджерами) – возможность вести контекстные обсуждения, привязанные к конкретным объектам Документооборота – документам, мероприятиям и т.п. То есть Система взаимодействия глубоко интегрируется с целевым приложением, а не выступает просто «отдельной кнопкой».
Число писем в нашем ДО уже перевалило за 100 млн., а вообще в СУБД – более 11 млрд. записей. Суммарно система использует почти 30 Тб хранилища: объём базы – 7,5 Тб, файлы для коллективной работы лежат отдельно и занимают ещё 21 Тб.
Если говорить о более конкретных цифрах, то вот количество писем и файлов на данный момент:
В ДО есть не только почта и файлы. Ниже приведём цифры других учётных объектов:
Эти цифры говорят о внушительном объёме задач, так что перед нами встала необходимость выделить под нужды внутреннего ДО довольно производительное оборудование. На текущий день его характеристики следующие: 38 ядер, 240 Гб ОЗУ, 26 Тб дисков. Приводим таблицу серверов:
В будущем мы планируем наращивать мощность оборудования.
Сетевая активность никогда не была проблемой ни у нас, ни у наших заказчиков. Как правило, слабое место – это процессор и диски, потому что с нехваткой памяти все уже бороться умеют. Приведём скриншоты наших серверов из Resource Monitor, на которых видно, что у нас никакой страшной нагрузки нет, она весьма скромная.
Например, на скриншоте ниже мы видим SQL-сервер, где ЦПУ загружен на 23%. И это очень хороший показатель (для сравнения: если загрузка будет приближаться к 70%, то, скорее всего, сотрудники будут наблюдать довольно существенные замедления работы).
На втором скриншоте показан сервер приложений, на котором работает платформа 1С:Предприятие – он обслуживает только пользовательские сеансы. Здесь нагрузка процессора несколько больше – 38%, она ровная и спокойная. Загрузка диска есть, но она приемлемая.
Третий скриншот показывает ещё один сервер 1С:Предприятия (он второй, у нас их два в кластере). Только предыдущий обслуживает пользователей, а на этом работают роботы. Например, принимают почту, маршрутизируют документы, выполняют обмен данными, считают права и т.п. Все эти фоновые активности выполняют примерно 90-100 фоновых заданий. И вот этот сервер загружен очень сильно – на 88%. Но на людях это не сказывается, и он реализует как раз всю ту автоматику, которую должен делать Документооборот.
У нас в ДО встроена серьёзная подсистема замеров показателей производительности и вычислений различных метрик. Это нужно для того, чтобы и в текущий момент времени, и в исторической перспективе понимать, что в системе происходит, что становится хуже, что становится лучше. Средства мониторинга – метрики и замеры времени – входят в типовую поставку «1С:Документооборот 8». Метрики требуют настройки на внедрении, но сам механизм типовой.
Метрики – это замеры различных бизнес-показателей в те или иные моменты времени (например, среднее время доставки почты в моменте 10 минут).
Одна из метрик показывает количество активных пользователей в базе. В среднем их 1000-1400 в течение дня. На графике видно, что на момент скриншота в базе было 2144 активных пользователя.
Таких действий больше 30, список под катом.
На позапрошлой неделе у нас средняя активность пользователей увеличилась в полтора раза (на графике показана красным) – это связано с переходом большинства сотрудников на удалённую работу (в связи с известными событиями). Также число активных пользователей увеличилось в 3 раза (на скрине показаны синим), так как сотрудники стали активно пользоваться мобильными: каждый мобильный клиент создаёт подключение к серверу. Сейчас в среднем на каждого нашего сотрудника приходится 2 подключения к серверу.
Для нас, как для администраторов, это сигнал, что нужно внимательнее относиться к вопросам быстродействия, смотреть, не стало ли хуже. А смотрим мы это по другим параметрам. Например, как меняется время доставки почты по внутренней маршрутизации (на скриншоте ниже показано синим). Мы видим, что оно до этого года скакало, а сейчас стабильное – для нас это показатель, что с системой всё в порядке.
Ещё одна прикладная метрика для нас – среднее время ожидания загрузки писем с почтового сервера (на скриншоте показана красным). Грубо говоря, сколько будет письмо гулять по Интернету, прежде чем оно окажется у нашего сотрудника. На скриншоте видно, что это время тоже никак не изменилось за последнее время. Есть отдельные всплески – но они связаны не с задержками, а с тем, что время сбивается на почтовых серверах.
Или, например, ещё метрика (на скриншоте показана синим) – обновление писем в папке. Открытие папки писем – очень частая операция, и нужно, чтобы она выполнялась быстро. Мы замеряем, с какой скоростью она выполняется. Этот показатель измеряется для каждого клиента. Можно посмотреть как общую картину по фирме, так и динамику, например, по отдельному сотруднику. По скриншоту видно, что до этого года метрика была неуравновешенна, потом мы сделали ряд улучшений, и сейчас она не становится хуже – практически ровный график.
Метрики – это, в основном, инструмент администратора для мониторинга системы, для быстрого реагирования на какие-то изменения в поведении системы. На скриншоте – метрики внутреннего ДО за год. Скачок на графиках обусловлен тем, что перед нами поставили задачи по развитию внутреннего ДО.
Вот перечень еще некоторых метрик (под катом).
Наша система круглосуточно делает замеры более 150 показателей, но не все из них можно оперативно отслеживать. Они могут пригодиться потом, в какой-нибудь исторической перспективе, а сосредоточиться можно на самых важных для бизнеса.
На одном из внедрений было выбрано, например, только 5 показателей. Заказчик поставил перед собой цель сделать минимальный набор показателей, но в то же время такой, чтобы он покрывал основные сценарии работы. Включать в акт приёма 150 показателей было бы неоправданно, потому что даже внутри предприятия сложно согласовать, какие показатели считать приемлемыми. А про эти 5 показателей они знали и уже предъявляли их к системе до начала проекта внедрения, включив в конкурсную документацию: время открытия карточки не более 3 секунд, время исполнения задачи с файлом не больше 5 секунд и т.д. У нас в ДО как раз и были метрики, которые очень чётко отражали исходный запрос из ТЗ заказчика.
А ещё у нас есть профильный анализ замеров производительности. Показатели производительности – это фиксация длительности каждой выполняющейся операции (запись письма в базу, отправка письма на почтовый сервер и т.д.). Это используется исключительно техническими специалистами. Показателей производительности у нас в программе копится очень много. Сейчас мы измеряем примерно 1500 ключевых операций, которые разбиты по профилям.
Один из наиболее важных для нас профилей – «Список ключевых показателей почты с точки зрения потребителей». Этот профиль включает в себя, например, следующие показатели:
Если мы видим, что метрика по какому-то бизнес-показателю стала слишком большой (например, письма от конкретного пользователя стали приходить очень долго), мы начинаем разбираться, обращаемся к замерам времени технических операций. У нас есть техническая операция «Архивация писем на почтовом сервере» – видим превышение времени этой операции за последний период. Эта операция, в свою очередь, раскладывается на другие операции – например, установка соединения с почтовым сервером. Видим, что она почему-то вдруг стала очень большой (у нас все замеры есть за месяц – можем сравнить, что на прошлой неделе 10 миллисекунд, а сейчас 1000 миллисекунд). И понимаем, что что-то здесь поломалось – нужно исправлять.
Наш внутренний ДО – пример реально работающего высоконагруженного проекта. Расскажем о технических особенностях его базы данных.
SQL-сервер требует периодического обслуживания, наведения порядка в таблицах. По-хорошему это нужно делать минимум раз в сутки, а для высоковостребованных таблиц – ещё чаще. Но если база большая (а у нас число записей уже перевалило за 11 млрд.), то ухаживать за ней непросто.
Мы делали реструктуризацию таблиц 6 лет назад, но потом она стала занимать столько времени, что мы уже не вписывались в ночные интервалы. А так как эти операции сильно нагружают SQL-сервер, он не может качественно обслуживать других пользователей.
Поэтому сейчас нам приходится применять различные ухищрения. Например, мы не можем выполнять эти процедуры на полных наборах данных. Приходится прибегать к процедуре Update Sample 500000 rows – это занимает 14 минут. Она выполняет обновление статистики не по всем данным таблицы, а отбирает полмиллиона строк, и по ним рассчитывает статистику, которую использует для всей таблицы. Это некоторое допущение, но мы вынуждены на него идти, потому что для конкретной таблицы сбор статистики по всему миллиарду записей будет выполнятся неприемлемо долгое время.
Другие операции обслуживания мы тоже оптимизировали, сделав их частичными.
Обслуживание СУБД – это вообще сложная задача. В случае активного взаимодействия сотрудников, база быстро разрастается, администраторам становится всё тяжелее обслуживать её – делать обновления статистики, дефрагментацию, индексацию. Здесь надо применять разные стратегии, мы хорошо знаем, как это делать, у нас есть опыт, мы можем им делиться.
Полный бэкап СУБД производится раз в день ночью, инкрементальный – каждый час. Также каждый день создаётся каталог файлов, и он является порцией инкрементального бэкапа файлового хранилища.
На жёсткий диск полный бэкап выполняется за три часа, частичный – за час. На ленту пишется дольше (спецустройство, которое делает резервную копию на специальную кассету, хранящуюся вне офиса; на ленту делают отчуждаемую копию, которая сохранится, если, например, серверная сгорит). Бэкап делается ровно на том же сервере, параметры которого были выше – SQL-сервер с 20% загрузки процессора. На момент бэкапа, конечно же, системе становится значительно хуже, но она всё равно работоспособна.
Дедупликация файлов есть, обкатываем её на себе, и скоро она войдёт в новую версию Документооборота. Также обкатываем на себе механизм дедупликации контрагентов. Дедупликации записей на уровне СУБД нет, так как в этом нет необходимости. Платформа 1С:Предприятие хранит в СУБД объекты, и только платформа может отвечать за их согласованность.
Нод для чтения (выделенные узлы системы, которые обслуживают тех, кому надо получать какие-либо данные на чтение) нет. ДО – не учётная система, чтобы сажать на отдельную ноду BI, но есть отдельная нода для отдела разработки, обмен с которой идёт сообщениями в формате JSON, а типичное время репликации – это единицы и десятки секунд. Нода пока маленькая, в ней порядка 800 млн записей, но она быстро растёт.
Пока нет. Задачи облегчить базу у нас нет. Было несколько довольно серьёзных случаев, когда приходилось обращаться к помеченным на удаление письмам, в том числе и 2009 года. Поэтому пока решили хранить всё. А вот когда стоимость этого станет неоправданной, будем думать про удаление. Но, если нужно какое-то отдельное письмо удалить из базы с концами, чтобы не было никаких следов, то такое можно сделать по спецзапросу.
Именно статистики нет. Точнее, она есть в виде протокола работы пользователей, но он хранится недолго. Записи старее года стираются из протокола.
Ситуации, когда надо было поднять старую переписку пятилетней и даже десятилетней давности, были. И это всегда делалось не из праздного любопытства, а для принятия сложных бизнес-решений. Был случай, когда без истории переписки было бы принято неправильное бизнес-решение.
Для бумажных документов это делается обычным традиционным способом, как и у всех. Для электронных не делаем – пусть себе хранятся. Место есть. Польза есть. Всем хорошо.
Сейчас наш ДО решает примерно 30 внутренних задач, часть которых мы перечисляли в начале статьи. Также ДО используется для подготовки конференций, которые мы дважды в год проводим для наших партнёров: вся программа, все доклады, все параллельные секции, залы – всё это верстается в ДО, а потом выгружается из него, и делается печатная программа.
На подходе для ДО ещё несколько задач, помимо тех, что он уже решает. Есть общефирменные задачи, а есть уникальные и редкие, нужные только какому-то конкретному подразделению. Необходимо им помогать, а значит, расширять «географию» использования системы внутри 1С – расширять область применения, решать задачи всех подразделений. Это стало бы лучшим тестом на производительность и надёжность. Хотелось бы увидеть работу системы на триллионах записей, петабайтах информации.
В фирме 1С документооборотом пользуется более тысячи сотрудников. База данных стала уже внушительной (11 млрд. записей), а это значит, что она требует более тщательного ухода и более мощного оборудования.
Как устроена работа нашей системы, с какими сложностями при обслуживании базы мы сталкиваемся и как их решаем (в качестве СУБД мы используем MS SQL Server) – расскажем в статье.
Для тех, кто впервые читает про продукты 1С.
1С:Документооборот — это прикладное решение (конфигурация), реализованное на базе фреймворка для разработки бизнес-приложений — платформе 1С:Предприятие.
«1С:Документооборот 8» (сокращённо – ДО) позволяет автоматизировать работу с документами на предприятии. Один из основных инструментов взаимодействия сотрудников – электронная почта. Помимо почты ДО также решает и другие задачи:
- Учёт рабочего времени
- Учёт отсутствий сотрудников
- Заявки на курьеров/транспорт
- Рабочие календари сотрудников
- Регистрация корреспонденции
- Контакты сотрудников (Адресная книга)
- Корпоративный форум
- Бронирование помещений
- Планирование мероприятий
- CRM
- Коллективная работа с файлами (с сохранением версий файлов)
- и др.
В Документооборот мы заходим тонким клиентом (нативное исполняемое приложение) из Windows, Linux, macOS, веб-клиентом (из браузеров) и мобильным клиентом – в зависимости от ситуации.
А ещё благодаря подключенному к Документообороту другому нашему продукту – Системе взаимодействия – мы непосредственно в Документообороте получаем функциональность мессенджера – чаты, аудио и видеозвонки (включая групповые, что сейчас стало особенно актуально, в том числе и с мобильного клиента), быстрый обмен файлами плюс возможность написания чат-ботов, упрощающих работу с системой. Ещё один плюс от использования Системы Взаимодействия (по сравнению с другими мессенджерами) – возможность вести контекстные обсуждения, привязанные к конкретным объектам Документооборота – документам, мероприятиям и т.п. То есть Система взаимодействия глубоко интегрируется с целевым приложением, а не выступает просто «отдельной кнопкой».
Число писем в нашем ДО уже перевалило за 100 млн., а вообще в СУБД – более 11 млрд. записей. Суммарно система использует почти 30 Тб хранилища: объём базы – 7,5 Тб, файлы для коллективной работы лежат отдельно и занимают ещё 21 Тб.
Если говорить о более конкретных цифрах, то вот количество писем и файлов на данный момент:
- Исходящие письма – 14,7 млн.
- Входящие письма – 85,4 млн.
- Версий файлов – 70,8 млн.
- Внутренних документов – 30,6 тыс.
В ДО есть не только почта и файлы. Ниже приведём цифры других учётных объектов:
- Бронирование переговорных – 52 126
- Еженедельные отчеты – 153 940
- Ежедневные отчеты – 628 153
- Визы согласования – 11 821
- Входящие документы – 79 677
- Исходящие документы – 28 357
- Записи о событиях в рабочих календарях пользователей – 168 228
- Заявки на курьеров – 21 883
- Контрагенты – 81 029
- Записи о работе с контрагентами – 45 632
- Контактные лица контрагентов – 41 795
- Мероприятия – 10 243
- Проекты – 6 320
- Задачи сотрудников – 245 980
- Сообщения на форуме – 26 282
- Сообщения в чате – 891 095
- Бизнес-процессы – 109 056. Взаимодействие между сотрудниками происходит через процессы – согласования, исполнения, рассмотрения, регистрации, подписания и т.д. У нас измеряется длительность процессов, количество циклов, количество участников, число возвратов, число запросов на изменение сроков. И эту информацию очень полезно анализировать, чтобы понимать, какие процессы на предприятии происходят и повышать эффективность совместной работы сотрудников.
На каком оборудовании мы всё это обрабатываем?
Эти цифры говорят о внушительном объёме задач, так что перед нами встала необходимость выделить под нужды внутреннего ДО довольно производительное оборудование. На текущий день его характеристики следующие: 38 ядер, 240 Гб ОЗУ, 26 Тб дисков. Приводим таблицу серверов:
В будущем мы планируем наращивать мощность оборудования.
Как обстоят дела с загрузкой серверов?
Сетевая активность никогда не была проблемой ни у нас, ни у наших заказчиков. Как правило, слабое место – это процессор и диски, потому что с нехваткой памяти все уже бороться умеют. Приведём скриншоты наших серверов из Resource Monitor, на которых видно, что у нас никакой страшной нагрузки нет, она весьма скромная.
Например, на скриншоте ниже мы видим SQL-сервер, где ЦПУ загружен на 23%. И это очень хороший показатель (для сравнения: если загрузка будет приближаться к 70%, то, скорее всего, сотрудники будут наблюдать довольно существенные замедления работы).
На втором скриншоте показан сервер приложений, на котором работает платформа 1С:Предприятие – он обслуживает только пользовательские сеансы. Здесь нагрузка процессора несколько больше – 38%, она ровная и спокойная. Загрузка диска есть, но она приемлемая.
Третий скриншот показывает ещё один сервер 1С:Предприятия (он второй, у нас их два в кластере). Только предыдущий обслуживает пользователей, а на этом работают роботы. Например, принимают почту, маршрутизируют документы, выполняют обмен данными, считают права и т.п. Все эти фоновые активности выполняют примерно 90-100 фоновых заданий. И вот этот сервер загружен очень сильно – на 88%. Но на людях это не сказывается, и он реализует как раз всю ту автоматику, которую должен делать Документооборот.
Какие есть метрики для определения эффективности работы?
У нас в ДО встроена серьёзная подсистема замеров показателей производительности и вычислений различных метрик. Это нужно для того, чтобы и в текущий момент времени, и в исторической перспективе понимать, что в системе происходит, что становится хуже, что становится лучше. Средства мониторинга – метрики и замеры времени – входят в типовую поставку «1С:Документооборот 8». Метрики требуют настройки на внедрении, но сам механизм типовой.
Метрики – это замеры различных бизнес-показателей в те или иные моменты времени (например, среднее время доставки почты в моменте 10 минут).
Одна из метрик показывает количество активных пользователей в базе. В среднем их 1000-1400 в течение дня. На графике видно, что на момент скриншота в базе было 2144 активных пользователя.
Таких действий больше 30, список под катом.
Список
- Вход в систему
- Выход из системы
- Загрузка почты
- Изменение действительности объекта
- Изменение прав доступа
- Изменение предмета процесса
- Изменение рабочей группы объекта
- Изменение состава комплекта
- Изменение файла
- Импорт файла
- Отправка по почте
- Перемещение файлов
- Перенаправление задачи
- Подписание ЭП
- Поиск по реквизитам
- Полнотекстовый поиск
- Получение файла
- Прерывание процесса
- Просмотр
- Расшифровывание
- Регистрация документа
- Сканирование
- Снятие пометки удаления
- Создание объекта
- Сохранение на диск
- Старт процесса
- Удаление записей протокола работы пользователей
- Удаление подписи ЭП
- Установка пометки удаления
- Зашифровывание
- Экспорт папки
На позапрошлой неделе у нас средняя активность пользователей увеличилась в полтора раза (на графике показана красным) – это связано с переходом большинства сотрудников на удалённую работу (в связи с известными событиями). Также число активных пользователей увеличилось в 3 раза (на скрине показаны синим), так как сотрудники стали активно пользоваться мобильными: каждый мобильный клиент создаёт подключение к серверу. Сейчас в среднем на каждого нашего сотрудника приходится 2 подключения к серверу.
Для нас, как для администраторов, это сигнал, что нужно внимательнее относиться к вопросам быстродействия, смотреть, не стало ли хуже. А смотрим мы это по другим параметрам. Например, как меняется время доставки почты по внутренней маршрутизации (на скриншоте ниже показано синим). Мы видим, что оно до этого года скакало, а сейчас стабильное – для нас это показатель, что с системой всё в порядке.
Ещё одна прикладная метрика для нас – среднее время ожидания загрузки писем с почтового сервера (на скриншоте показана красным). Грубо говоря, сколько будет письмо гулять по Интернету, прежде чем оно окажется у нашего сотрудника. На скриншоте видно, что это время тоже никак не изменилось за последнее время. Есть отдельные всплески – но они связаны не с задержками, а с тем, что время сбивается на почтовых серверах.
Или, например, ещё метрика (на скриншоте показана синим) – обновление писем в папке. Открытие папки писем – очень частая операция, и нужно, чтобы она выполнялась быстро. Мы замеряем, с какой скоростью она выполняется. Этот показатель измеряется для каждого клиента. Можно посмотреть как общую картину по фирме, так и динамику, например, по отдельному сотруднику. По скриншоту видно, что до этого года метрика была неуравновешенна, потом мы сделали ряд улучшений, и сейчас она не становится хуже – практически ровный график.
Метрики – это, в основном, инструмент администратора для мониторинга системы, для быстрого реагирования на какие-то изменения в поведении системы. На скриншоте – метрики внутреннего ДО за год. Скачок на графиках обусловлен тем, что перед нами поставили задачи по развитию внутреннего ДО.
Вот перечень еще некоторых метрик (под катом).
Метрики
- Активность пользователей
- Активные пользователи
- Активные процессы
- Количество файлов
- Размер файлов (Мб)
- Количество документов
- Количество объектов к отправке адресатам
- Количество контрагентов
- Невыполненные задачи
- Среднее время ожидания загрузки писем с почтового сервера за последние 10 минут
- Внешний буфер данных: количество файлов
- Отставание границы от текущей даты
- Долгая очередь
- Оперативная очередь
- Возраст необработанной учётной записи по внешней маршрутизации
- Размер очереди приемки по внутренней маршрутизации (долгая очередь)
- Размер очереди приемки по внутренней маршрутизации (быстрая очередь)
- Время доставки почты по внутренней маршрутизации (долгая очередь)
- Время доставки почты по внутренней маршрутизации (быстрая очередь)
- Время доставки почты по внешней маршрутизации (среднее)
- Число документов Бронирование
- Число документов Отсутствие
- Число документов «Запись о работе с контрагентом»
- Почта Обновление писем в папке
- Почта Открытие карточки письма
- Почта Перенос письма в папку
- Почта Переход по папкам
Наша система круглосуточно делает замеры более 150 показателей, но не все из них можно оперативно отслеживать. Они могут пригодиться потом, в какой-нибудь исторической перспективе, а сосредоточиться можно на самых важных для бизнеса.
На одном из внедрений было выбрано, например, только 5 показателей. Заказчик поставил перед собой цель сделать минимальный набор показателей, но в то же время такой, чтобы он покрывал основные сценарии работы. Включать в акт приёма 150 показателей было бы неоправданно, потому что даже внутри предприятия сложно согласовать, какие показатели считать приемлемыми. А про эти 5 показателей они знали и уже предъявляли их к системе до начала проекта внедрения, включив в конкурсную документацию: время открытия карточки не более 3 секунд, время исполнения задачи с файлом не больше 5 секунд и т.д. У нас в ДО как раз и были метрики, которые очень чётко отражали исходный запрос из ТЗ заказчика.
А ещё у нас есть профильный анализ замеров производительности. Показатели производительности – это фиксация длительности каждой выполняющейся операции (запись письма в базу, отправка письма на почтовый сервер и т.д.). Это используется исключительно техническими специалистами. Показателей производительности у нас в программе копится очень много. Сейчас мы измеряем примерно 1500 ключевых операций, которые разбиты по профилям.
Один из наиболее важных для нас профилей – «Список ключевых показателей почты с точки зрения потребителей». Этот профиль включает в себя, например, следующие показатели:
- Выполнение команды: Отбор по тегу
- Открытие формы: Форма списка
- Выполнение команды: Отбор по папке
- Отображение письма в области чтения
- Сохранение письма в любимую папку
- Поиск писем по реквизитам
- Cоздание письма
Если мы видим, что метрика по какому-то бизнес-показателю стала слишком большой (например, письма от конкретного пользователя стали приходить очень долго), мы начинаем разбираться, обращаемся к замерам времени технических операций. У нас есть техническая операция «Архивация писем на почтовом сервере» – видим превышение времени этой операции за последний период. Эта операция, в свою очередь, раскладывается на другие операции – например, установка соединения с почтовым сервером. Видим, что она почему-то вдруг стала очень большой (у нас все замеры есть за месяц – можем сравнить, что на прошлой неделе 10 миллисекунд, а сейчас 1000 миллисекунд). И понимаем, что что-то здесь поломалось – нужно исправлять.
Как мы обслуживаем такую большую базу данных?
Наш внутренний ДО – пример реально работающего высоконагруженного проекта. Расскажем о технических особенностях его базы данных.
Сколько времени идёт реструктуризация больших таблиц базы данных?
SQL-сервер требует периодического обслуживания, наведения порядка в таблицах. По-хорошему это нужно делать минимум раз в сутки, а для высоковостребованных таблиц – ещё чаще. Но если база большая (а у нас число записей уже перевалило за 11 млрд.), то ухаживать за ней непросто.
Мы делали реструктуризацию таблиц 6 лет назад, но потом она стала занимать столько времени, что мы уже не вписывались в ночные интервалы. А так как эти операции сильно нагружают SQL-сервер, он не может качественно обслуживать других пользователей.
Поэтому сейчас нам приходится применять различные ухищрения. Например, мы не можем выполнять эти процедуры на полных наборах данных. Приходится прибегать к процедуре Update Sample 500000 rows – это занимает 14 минут. Она выполняет обновление статистики не по всем данным таблицы, а отбирает полмиллиона строк, и по ним рассчитывает статистику, которую использует для всей таблицы. Это некоторое допущение, но мы вынуждены на него идти, потому что для конкретной таблицы сбор статистики по всему миллиарду записей будет выполнятся неприемлемо долгое время.
Другие операции обслуживания мы тоже оптимизировали, сделав их частичными.
Обслуживание СУБД – это вообще сложная задача. В случае активного взаимодействия сотрудников, база быстро разрастается, администраторам становится всё тяжелее обслуживать её – делать обновления статистики, дефрагментацию, индексацию. Здесь надо применять разные стратегии, мы хорошо знаем, как это делать, у нас есть опыт, мы можем им делиться.
Как реализован бэкап при таких объёмах?
Полный бэкап СУБД производится раз в день ночью, инкрементальный – каждый час. Также каждый день создаётся каталог файлов, и он является порцией инкрементального бэкапа файлового хранилища.
Сколько времени выполняется полный бэкап?
На жёсткий диск полный бэкап выполняется за три часа, частичный – за час. На ленту пишется дольше (спецустройство, которое делает резервную копию на специальную кассету, хранящуюся вне офиса; на ленту делают отчуждаемую копию, которая сохранится, если, например, серверная сгорит). Бэкап делается ровно на том же сервере, параметры которого были выше – SQL-сервер с 20% загрузки процессора. На момент бэкапа, конечно же, системе становится значительно хуже, но она всё равно работоспособна.
Есть ли дедупликация?
Дедупликация файлов есть, обкатываем её на себе, и скоро она войдёт в новую версию Документооборота. Также обкатываем на себе механизм дедупликации контрагентов. Дедупликации записей на уровне СУБД нет, так как в этом нет необходимости. Платформа 1С:Предприятие хранит в СУБД объекты, и только платформа может отвечать за их согласованность.
Есть ноды только для чтения?
Нод для чтения (выделенные узлы системы, которые обслуживают тех, кому надо получать какие-либо данные на чтение) нет. ДО – не учётная система, чтобы сажать на отдельную ноду BI, но есть отдельная нода для отдела разработки, обмен с которой идёт сообщениями в формате JSON, а типичное время репликации – это единицы и десятки секунд. Нода пока маленькая, в ней порядка 800 млн записей, но она быстро растёт.
А помеченные на удаление письма совсем не удаляются?
Пока нет. Задачи облегчить базу у нас нет. Было несколько довольно серьёзных случаев, когда приходилось обращаться к помеченным на удаление письмам, в том числе и 2009 года. Поэтому пока решили хранить всё. А вот когда стоимость этого станет неоправданной, будем думать про удаление. Но, если нужно какое-то отдельное письмо удалить из базы с концами, чтобы не было никаких следов, то такое можно сделать по спецзапросу.
А зачем это хранить? Есть статистика обращений к старым документам?
Именно статистики нет. Точнее, она есть в виде протокола работы пользователей, но он хранится недолго. Записи старее года стираются из протокола.
Ситуации, когда надо было поднять старую переписку пятилетней и даже десятилетней давности, были. И это всегда делалось не из праздного любопытства, а для принятия сложных бизнес-решений. Был случай, когда без истории переписки было бы принято неправильное бизнес-решение.
Как проводится экспертиза ценности и уничтожение документов согласно срокам хранения?
Для бумажных документов это делается обычным традиционным способом, как и у всех. Для электронных не делаем – пусть себе хранятся. Место есть. Польза есть. Всем хорошо.
Какие перспективы развития есть?
Сейчас наш ДО решает примерно 30 внутренних задач, часть которых мы перечисляли в начале статьи. Также ДО используется для подготовки конференций, которые мы дважды в год проводим для наших партнёров: вся программа, все доклады, все параллельные секции, залы – всё это верстается в ДО, а потом выгружается из него, и делается печатная программа.
На подходе для ДО ещё несколько задач, помимо тех, что он уже решает. Есть общефирменные задачи, а есть уникальные и редкие, нужные только какому-то конкретному подразделению. Необходимо им помогать, а значит, расширять «географию» использования системы внутри 1С – расширять область применения, решать задачи всех подразделений. Это стало бы лучшим тестом на производительность и надёжность. Хотелось бы увидеть работу системы на триллионах записей, петабайтах информации.