惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
A
Arctic Wolf
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
T
The Exploit Database - CXSecurity.com
T
Threatpost
T
Threat Research - Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
Cyberwarzone
Cyberwarzone
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
V
Vulnerabilities – Threatpost
Scott Helme
Scott Helme
S
Securelist
Latest news
Latest news
W
WeLiveSecurity
J
Java Code Geeks
Know Your Adversary
Know Your Adversary
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
S
Secure Thoughts
G
Google Developers Blog
Spread Privacy
Spread Privacy
C
Check Point Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Security @ Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
H
Heimdal Security Blog
U
Unit 42
Simon Willison's Weblog
Simon Willison's Weblog
The GitHub Blog
The GitHub Blog
Google DeepMind News
Google DeepMind News
T
Tor Project blog
The Cloudflare Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Тестирование производительности MSPS (Microsoft Project Server)
vmatveyko · 2026-06-15 · via Все публикации подряд на Хабре

Интро

Привет, Хабр!

До всех горячих событий в мире проводил тестирование производительности Microsoft Project Server 2019 (on-premise). Система большая, популярная для календарного планирования, не особо уже актуальная ввиду политики, однако, надеюсь, будет интересно и возможно, полезно. В сети можно найти результаты коллег (спасибо им большое), которые запустили несколько параллельных тестов через веб-интерфейс и получили какие-то результаты, однако, это скорее антипаттерн в тестировании производительности.

Итак, согласно Microsoft, Project Server - "это корпоративная система для управления портфелями проектов (PPM), которая устанавливается на локальных серверах компании. Она объединяет данные всех проектов в единую базу данных и обеспечивает совместную работу, распределение ресурсов и отслеживание KPI для крупных организаций".

Фабула

Компания X в начале 2010-х пыталась использовать MSPS, однако что-то пошло не так. Что именно никто из "живых" пользователей уже не знает, зафиксирован только итоговый результат - отказ от масштабирования на всю компанию. Однако отдельные подразделения успешно по-партизански пользуются и очень хотят распространить свои подходы на всю компанию.

Термины, сокращения и определения

MSPS – Microsoft Project Server 2019 (on-premise)

API – Application Programming Interface – программный интерфейс приложения

CSOM – SharePoint Client Side Object Mode – программный API для создания клиентских приложений SharePoint

PWA – Project Web App – это входящее в состав Microsoft Project Server веб-приложение, с помощью которого можно выполнять множество задач, аналогичных работе через толстый клиент

AD - Active Directory – службы каталогов корпорации Microsoft для операционных систем семейства Windows Server

Среда (инфраструктура) – комплекс информационных организационных структур, подсистем, обеспечивающих функционирование приложения в промышленной эксплуатации в Компании.

Профиль нагрузки – совокупность операций, участвующих в нагрузочном тестировании, выполняющихся с определенной интенсивностью

БД – база данных

ЦП – центральный процессор

Постановка гипотез

В рамках предварительного анализа были сформулированы следующие гипотезы, нуждающиеся в проверке:

Гипотеза 1:

Проблемы работоспособности связаны с объемом данных и работой на клиенте: виртуальные мощности, большой объем подгружаемых данных (проектов, клиентов, сотрудников), особенности структуры планов и иных данных Компании.

Гипотеза 2:

Проблемы работоспособности связаны с серверной частью архитектуры (конфигурация оборудования, настройка сервиса, объем данных, очереди/конкурентный доступ к ресурсам)

Архитектура системы

Для тестирования производительности приложения была выбрана схема с предварительным пилотированием разворачивания приложения на виртуальном сервере с последующим переходом на железный сервер с рекомендованной двух узловой архитектурой (сервер переднего плана с распределенным кэшем + приложение с поддержкой поиска) и выделенной БД. Сервер БД  - MS SQL Server 2019.

Логическая архитектура приложения схематично

Конечный пользователь получает доступ к приложению через толстый клиент MS Project версии не ниже 2016, либо через PWA, используя браузер.

Параметры стендов

Для испытаний использовались два контура:

1) Однонодовая виртуальная машина (MSPSApp-test) с выделенной БД

2) Два железных сервера (ps-test1, ps-test2) в двухнодовой конфигурации с выделенной БД

Решения

Для проверки гипотезы №1 были проведены следующие работы

1) Разработан API на основе CSOM для создания и изменения объектов (проекты, задачи, назначения и т.д.), для анализа успешности операций и получения данных будет использован REST API MSPS

2) Для максимизации нагрузки на систему выставлена политика автоматического создания сайта проекта в PWA (не рекомендованная Microsoft из соображений производительности, но максимально удобная для пользователей)

3) Развернут однонодовый виртуальный сервер MSPSApp-test

4) На MSPSApp-test загружены данные согласно профилю данных (оракулом для профиля данных явилась текущая PPM система Компании)

5) На MSPSApp-test проведён анализ работоспособности под нагрузкой согласно профилю нагрузки с подключением фокус группы менеджеров проектов, имеющих опыт календарного планирования с записью их работы

6) MSPS развернут на железных серверах в двухнодовой конфигурации, загружены данные согласно профилю данных

Для проверки гипотезы №2 были проведены следующие работы

1) На железных серверах ps-test1, ps-test2 проведён анализ работоспособности под нагрузкой согласно профилю нагрузки

Профили нагрузки и данных

Профиль данных

Всего создано проектов - 2035.

Среднее количество участников проектной команды - 9. Среднее количество задач по активностям - 150 с 2 исполнителями.

Создано 10 проектов с пиковыми значениями: количество участников ПК - 120 сотрудников, задач в проекте - 1500 с 80 исполнителями по каждой, 10 уровневая вложенность задач.

Для работы с актуальными пользователями в MSPS синхронизирована AD группа.

Профиль нагрузки

Для эмуляции нагрузки предложен следующий базовый сценарий (за основу был принят сформулированный фокус группой режим работы):

50 конкурентных пользователей, выход на пик нагрузки через 1 час 15 минут (каждые 5 минут заходят 3 новых виртуальных пользователя). Пиковая нагрузка продолжается 250 минут. Далее пиковая нагрузка снижается по следующему сценарию: 3 пользователя прекращают работу в системе каждые 200 секунд. Интенсивность работы пользователей – не более 3-5 секунд между операциями. Процент ошибочных операций не более 1% (запланированное рассогласование между AD группой и профилем данных обеспечивает необходимый для анализа поведения системы при передаче некорректных данных уровень ошибок). Графическое отображение профиля нагрузки.

Пользователи создают новые проекты, задачи, назначают на задачи ресурсы и обновляются иные свойства задач (даты, комментарии, иерархичность). Каждый пользователь работает с проектом эксклюзивно во избежание ошибок конкурентного доступа через CSOM API. Начиная с присутствия в системе 10 виртуальных пользователей, 1 постоянно работает через PWA, используя chrome, оценивая возможную деградацию в тонком клиенте. Также как минимум один пользователь работает с "тяжелыми" проектами (большая команда, иерархичность, кол-во задач и т.д.)

Тест-кейсы нагрузки

1) Осуществить эксклюзивную блокировку проекта

2) Если проект не существует – создать проект

3) Удостовериться в корректности создания проекта

· Далее все операции осуществляются в случае успеха предыдущей, между всеми операциями время задержки с разбросом 3-5 секунд

4) Создать задачу

5) Удостовериться в корректности создания задачи

6) Создать назначение на задачу

7) Проверить есть ли у задачи родитель в иерархии

8) Проверить, существует ли родительская задача, если задача еще не создана – создать

9) Обновить задачу (даты начала и окончания, комментарии, место в иерархии задач проекта)

10) Освободить логическую блокировку проекта, предоставить другим пользователям возможность работы с проектом

11) Серфинг по проектам и задачам (не более 10% виртуальных пользователей)

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

Обобщенные результаты

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

Ошибки

Серверные ошибки

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

Ошибки БД

Во время нагрузки не выявлено дедлоков, нагрузка на сервер БД крайне незначительна.

Ошибки уровня приложения и PWA

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

1. Периодические ошибки сортировки и фильтрации списка проектов. Четкой корреляции с нагрузкой не выявлено, ошибки носят постоянный характер.

2. Нумерация проектов при создании непоследовательна, сиквенс прирастает на произвольную величину (разброс от 1 до 10 со смещением вероятности к 1). Это позволяет сделать вывод о наличии некоторых внутренних ошибок, вызывающих откат изменения и повторную запись. Повреждения данных при нагрузке выявить не удалось, однако, такой риск исключать нельзя.

3. Процесс Microsoft.Office.Project.Server.Queuing почти не возвращает оперативную память после затратных массовых операций (массовое удаление проектов и т.д.). Необходимо учитывать при планировании архитектуры риск периодической профилактической перезагрузки серверов или принудительного перезапуска сервисов.

 4. Внутренняя очередь MSPS находится перед API, поэтому кастомизировать работу с объектами MSPS через API при конкурентном доступе из различных источников к одной группе ресурсов невозможно – ресурс падает в дедлок, нужно учитывать это ограничение при планировании архитектуры. За конкурентный доступ отвечает вызывающий клиент.

Ошибка конкурентного доступа через API

Ошибка конкурентного доступа через API

Сводная информация

Разброс времени выполнения запросов к API в миллисекундах достаточно существенный, но он связан с данными (объем проекта, иерархичность задачи т.д.), а не с нагрузкой.

Разброс времени выполнения запроса к API

Разброс времени выполнения запроса к API

Время выполнения запроса к API от кол-ва конкурентных пользователей практически не зависит.

Время выполнения запроса к API от кол-ва конкурентных пользователей

Время выполнения запроса к API от кол-ва конкурентных пользователей

График производительности системы от кол-ва виртуальных пользователей практически линеен (за исключением и так очень быстрых REST запросов на получение данных), что указывает на отсутствие серьезных узких мест. Аппаратных мощностей достаточно, сервер может обслужить все запросы.

График производительности системы от кол-ва виртуальных пользователей

График производительности системы от кол-ва виртуальных пользователей

Показатели работы сервера приложений

Примечание:

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

  1. Загрузка процессора.

 Из графика видна полная (пики нагрузки соответствуют пикам использования) корреляция между профилем нагрузки и загрузкой ЦП. Даже на выбросах загрузка не достигает 100%. Освобождение аппаратных ресурсов также своевременное, соответствующее профилю нагрузки. Очередь запросов к процессору своевременно разбирается, количество прерываний невелико (менее 800)

2. Память.

Расход оперативной памяти имеет очень небольшую повышательную тенденцию с начала нагрузки на MSPS. Понижения объема используемой памяти после снижения нагрузки не происходит. Есть риск необходимости периодических профилактических перезагрузок серверов или сервисов MSPS.

3. Жесткий диск, своп, сеть – в пределах нормы без ошибок и резких выпадов.

ЦП и оперативная память

ЦП и оперативная память