Автоматизация транспортно-логистических компаний - УрГУПС

Курс лекций и лабораторных работ по автоматизации транспортно-логистических компаний

Преподаватель: Шипулин Александр Валерьевич

Лекция 6. Принципы построения систем

Эта лекция

В этой лекции мы рассмотрим требования ГОСТ к созданию автоматизированных систем и модели жизненного цикла разработки ПО, изучим архитектуры систем (монолит, микросервисы, serverless) и облачные модели обслуживания (IaaS, PaaS, SaaS, FaaS), разберём API и форматы данных, а также познакомимся с методологиями Agile, Scrum и DevOps.

Цель

Сформировать представление о требованиях ГОСТ к созданию автоматизированных систем, моделях жизненного цикла разработки ПО, архитектурах и облачных моделях обслуживания систем, API-интеграциях и методологиях разработки Agile/Scrum/DevOps.

Содержание


6.1 Требования ГОСТ и принцип первого руководителя

ГОСТ РД 50-680-88

ГОСТ РД 50-680-88 — стандарт для автоматизированных систем на транспорте. Определяет основные требования к проектированию и созданию АС.

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

ГОСТ 34.601-90

ГОСТ 34.601-90 — стандарт, описывающий этапы создания автоматизированных систем:

---
config:
  look: handDrawn
  theme: neutral
---
graph LR
    A[1. ТЗ] --> B[2. Проект]
    B --> C[3. Рабочий]
    C --> D[4. Внедрение]
    D --> E[5. Эксплуатация]
    
    style A fill:#d9d9d9,stroke:#333
    style E fill:#d9d9d9,stroke:#333
Этап Результаты
Техническое задание Документ с требованиями к системе
Проектная документация Архитектура, алгоритмы, интерфейсы
Рабочая документация Программный код, инструкции
Внедрение Установка, настройка, обучение
Эксплуатация Поддержка, развитие, обновления

Модели жизненного цикла разработки ПО

Жизненный цикл ПО (SDLC, Software Development Life Cycle) — последовательность этапов, которые проходит информационная система от замысла до вывода из эксплуатации. Классические этапы:

Этап Результат
Анализ требований Спецификация требований, техническое задание
Проектирование Архитектура системы, макеты интерфейсов
Разработка Программный код
Тестирование Проверенные сборки
Внедрение Развёртывание, обучение пользователей
Сопровождение Поддержка, развитие, обновления
---
config:
  look: handDrawn
  theme: neutral
---
flowchart LR
    A[Анализ требований] --> B[Проектирование]
    B --> C[Разработка]
    C --> D[Тестирование]
    D --> E[Внедрение]
    E --> F[Сопровождение]

    style A fill:#d9d9d9,stroke:#333
    style F fill:#d9d9d9,stroke:#333

Модели жизненного цикла:

Модель Описание Плюсы Минусы
Каскадная (Waterfall) Этапы выполняются строго последовательно, переход после завершения предыдущего Простота контроля, предсказуемость сроков Ошибки обнаруживаются поздно, жёсткость к изменениям
V-модель Каждый этап разработки связан с соответствующим этапом тестирования Контроль качества на каждом уровне Та же жёсткость, что у каскада
Спиральная (Боэм) Итерации с анализом рисков и прототипами Управление рисками, ранняя обратная связь Сложность, дороговизна управления
Инкрементальная/итеративная Функциональность поставляется частями, циклы повторяются Ранняя поставка части функций Требует продуманной архитектуры

Связь с ГОСТ: этапы ГОСТ 34.601-90 (ТЗ → проект → рабочая документация → внедрение → эксплуатация) реализуют каскадную модель, традиционную для государственных и крупных корпоративных проектов. Современная альтернатива — Agile-подход (см. § 6.4): итеративная поставка, постоянная обратная связь с заказчиком, готовность к изменениям.

Выбор подхода для ТЛК:

Критерий Каскад (ГОСТ 34.601) Agile (Scrum)
Требования Полностью известны заранее Уточняются в процессе
Сроки Фиксированные Гибкие, спринты
Заказчик Участвует на этапах приёмки Участвует постоянно
Пример Государственные проекты (АСУ ЖД, ЭТРАН) Облачные платформы (АРК)

Кейс АРК: платформа АРК развивается по Agile-модели — регулярные релизы новых функций без остановки работы клиентов, а соответствие требованиям ГОСТ обеспечивается на этапах внедрения и документирования.

Принцип первого руководителя

Принцип первого руководителя — условие успеха автоматизации является активная поддержка топ-менеджмента.

Без поддержки первого лица (генерального директора, технического директора) автоматизация обречена.

Почему это важно:

Причина Объяснение
Ресурсы Только руководитель может выделить бюджет и персонал
Изменения Автоматизация меняет процессы — только топ может обязать меняться
Конфликты Межфункциональные конфликты решает только руководитель
Мотивация Личный интерес руководителя — главный драйвер успеха

6.2 Архитектуры систем: монолит, микросервисы, serverless

Монолитная архитектура

Монолит — единое приложение, где все компоненты связаны и развёртываются вместе.

Плюсы Минусы
Простота разработки и тестирования Сложность масштабирования
Простота развёртывания Один компонент влияет на всё приложение
Понятная структура Долгая разработка при росте команды

Применение в ТЛК: Небольшие ТЛК с 1–2 пользователями, простые системы учёта.

Микросервисная архитектура

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

---
config:
  look: handDrawn
  theme: neutral
---
graph TD
    A[API Gateway] --> B[CRM-сервис]
    A --> C[TMS-сервис]
    A --> D[WMS-сервис]
    A --> E[Документооборот]
    A --> F[Аналитика]
    
    B --> G[(БД CRM)]
    C --> H[(БД TMS)]
    D --> I[(БД WMS)]
    
    style A fill:#4a4a4a,stroke:#333,color:#fff
Плюсы Минусы
Независимое масштабирование Сложность управления
Независимое развёртывание Сложность отладки
Технологии под задачу Требует DevOps-культуры
Отказоустойчивость Сетевые задержки

Применение в ТЛК: Средние и крупные ТЛК, облачные платформы (как АРК).

Serverless-архитектура

Serverless — архитектура, где разработчик пишет код, а инфраструктурой управляет провайдер.

Характеристика Описание
Event-driven Код выполняется при наступлении события
Автоматическое масштабирование От нуля до миллионов вызовов
Оплата за вызов Платите только за время выполнения
Нет серверов Провайдер управляет инфраструктурой

Применение в ТЛК: Webhook-уведомления, обработка файлов, API-интеграции.

Облачные модели обслуживания: IaaS, PaaS, SaaS, FaaS

Облачные вычисления — модель предоставления вычислительных ресурсов (серверы, хранилища, приложения) по требованию через сеть. Определение, характеристики и классификация зафиксированы в стандарте NIST SP 800-145.

Пять существенных характеристик облачных вычислений (NIST SP 800-145):

Характеристика Описание
Самообслуживание по требованию Потребитель самостоятельно заказывает ресурсы без взаимодействия с провайдером
Широкий сетевой доступ Ресурсы доступны через сеть с любых устройств
Пул ресурсов Вычислительные ресурсы объединяются и динамически перераспределяются между потребителями
Быстрая эластичность Масштабирование ресурсов вверх и вниз по требованию
Измеряемый сервис Автоматический учёт и контроль потребления ресурсов

Модели развёртывания облака: публичное облако (ресурсы общего пользования), частное (одна организация), гибридное (комбинация публичного и частного), community-облако (группа организаций).

Модели обслуживания:

Модель Что предоставляет Чем управляет клиент Примеры
IaaS Инфраструктура: виртуальные машины, сети, хранилища ОС, приложения, данные AWS EC2, Azure VM, Yandex Compute Cloud
PaaS Платформа разработки и развёртывания Только свой код Heroku, Yandex Cloud, Google App Engine
SaaS Готовое ПО по подписке Только настройки и данные АРК: Транспортная логистика Online
FaaS Функции, запускаемые по событию (serverless) Только код функций AWS Lambda, Yandex Cloud Functions
---
config:
  look: handDrawn
  theme: neutral
---
flowchart TB
    subgraph Облачные модели
        I[IaaS<br/>Инфраструктура] --> P[PaaS<br/>Платформа]
        P --> S[SaaS<br/>ПО как сервис]
        F[FaaS<br/>Функции,<br/>serverless] -.-> P
    end

    style S fill:#d9d9d9,stroke:#333
    style F fill:#4a4a4a,stroke:#333,color:#fff

Связь с архитектурами: FaaS — практическая реализация serverless-подхода: код запускается по событию (webhook, новая заявка) и автоматически масштабируется; SaaS — способ поставки готового ПО, к которому относится платформа АРК.

Выбор модели для ТЛК:

Модель Когда использовать Пример для ТЛК
IaaS Нужен полный контроль над инфраструктурой Собственный TMS на облачных виртуальных машинах
PaaS Быстрая разработка и запуск цифровых сервисов Мобильное приложение для водителей
SaaS Готовая отраслевая система без затрат на разработку Подключение к АРК: CRM, заявки, диспетчирование, аналитика
FaaS Обработка событий и интеграций Пересчёт стоимости при изменении тарифа, уведомления

Кейс АРК: АРК — облачная SaaS-платформа: клиент получает готовую систему по подписке, не покупая серверы и не нанимая команду разработки, а обновления и масштабирование выполняет провайдер.

6.3 API, форматы данных и интеграции

API как основа интеграции

API (Application Programming Interface) — интерфейс, позволяющий различным приложениям обмениваться данными.

Тип API Описание Пример
REST Простой, на основе HTTP REST API АРК
GraphQL Гибкий запрос данных API социальных сетей
gRPC Высокая производительность Внутренние микросервисы

HTTP REST: методы и статус-коды

HTTP-методы REST API:

Метод Описание Пример
GET Получить данные GET /api/clients — список клиентов
POST Создать ресурс POST /api/clients — создать клиента
PUT Обновить ресурс PUT /api/clients/123 — обновить клиента
DELETE Удалить ресурс DELETE /api/clients/123 — удалить клиента

HTTP-статус-коды:

Код Значение Описание
200 OK Успешный запрос
201 Created Ресурс создан
400 Bad Request Неверный запрос
401 Unauthorized Нет авторизации
403 Forbidden Нет доступа
404 Not Found Ресурс не найден
500 Internal Server Error Ошибка сервера

Форматы данных

Сравнение форматов данных:

Формат Размер Читаемость Сложность Применение
JSON Средний Высокая Низкая REST API, веб-приложения
XML Большой Высокая Высокая ЭДО, корпоративные системы
Protobuf Маленький Низкая Высокая Микросервисы, IoT

Пример JSON-запроса к API АРК:

{
  "client": {
    "name": "ООО «ТрансЛог»",
    "inn": "7701234567",
    "type": "legal"
  },
  "contact": {
    "email": "info@translog.ru",
    "phone": "+7(495)123-45-67"
  }
}

Тот же запрос в формате XML — используется в ЭДО и корпоративных системах обмена документами:

<?xml version="1.0" encoding="UTF-8"?>
<request>
  <client>
    <name>ООО «ТрансЛог»</name>
    <inn>7701234567</inn>
    <type>legal</type>
  </client>
  <contact>
    <email>info@translog.ru</email>
    <phone>+7(495)123-45-67</phone>
  </contact>
</request>

Тот же запрос в Protobuf — формат двоичный: сначала описывается схема сообщения (.proto-файл), а затем данные заполняются и сериализуются в компактный бинарный вид, недоступный для чтения человеком:

// Схема сообщения (файл client_request.proto)
syntax = "proto3";

message Client {
  string name = 1;  // «ООО «ТрансЛог»»
  string inn  = 2;  // «7701234567»
  string type = 3;  // «legal»
}

message Contact {
  string email = 1; // «info@translog.ru»
  string phone = 2; // «+7(495)123-45-67»
}

message ClientRequest {
  Client  client  = 1;
  Contact contact = 2;
}

После компиляции схемы код заполняет поля теми же данными, что и в JSON/XML, и сериализует сообщение в байты:

// Сериализованное сообщение ClientRequest (иллюстрация):
0A 24 0A 1D D0 9E D0 9E D0 9E 20 C2 AB D0 A2 D1 80 ...
12 1B 0A 10 69 6E 66 6F 40 74 72 61 6E 73 6C 6F 67 ...

Почему байты выглядят «непонятно»

Protobuf — это бинарный формат, а не текстовый: человек не должен читать его глазами, его читает программа по заранее известной схеме.

1. Данные без имён полей. В JSON и XML каждое значение сопровождается именем поля:

"name": "ООО «ТрансЛог»"

Имена ("name", "inn", "type") занимают место в каждом сообщении. При миллионе сообщений вы миллион раз передаёте одни и те же слова. В Protobuf имена полей хранятся только в схеме (.proto-файл), которая есть у отправителя и получателя, а в самих данных вместо имени пишется номер поля — одно число:

string name = 1;   // поле №1
string inn  = 2;   // поле №2
string type = 3;   // поле №3

2. Как читается байт 0A. Protobuf читает поток парами «ключ → значение», где ключ кодирует номер поля и тип данных по формуле:

ключ = (номер_поля << 3) | тип_провода

Разбор 0A:

По схеме поле №1 в ClientRequest — это Client client, значит дальше идёт вложенное сообщение Client.

3. Как читается 24. Следующий байт 24 = 36 — это длина вложенного сообщения Client в байтах. Программа читает следующие 36 байт и разбирает их как Client.

4. Внутри Client — снова 0A 1D ...:

Дальше идут эти 29 байт:

D0 9E D0 9E D0 9E 20 C2 AB D0 A2 D1 80 ...

Это UTF-8 для текста «ООО «ТрансЛог»»:

Байты Символ
D0 9E О
D0 9E О
D0 9E О
20 пробел
C2 AB «
D0 A2 Т
D1 80 р
… …

«Непонятные» байты — это просто русский текст в кодировке UTF-8, только без кавычек и имён полей вокруг.

5. Дальше 12 1B ...:

6. Почему так устроено:

Причина Следствие
Нет имён полей в данных Экономия места
Вместо имён — номера полей Компактность
Тип и номер закодированы в одном байте Минимум служебных байт
Строки в UTF-8 как есть Байты «нечитаемы» для человека, но однозначны для машины
Схема .proto обязательна у обеих сторон Без схемы байты не расшифровать

Protobuf не предназначен для чтения человеком: его смысл — быстро, компактно и строго передавать данные между программами с общей схемой. Если нужна читаемость — берут JSON или XML, но платят за это размером и скоростью разбора.

Вывод: JSON удобен для чтения и отладки, XML — обязателен в корпоративном ЭДО, Protobuf даёт минимальный размер сообщения и высокую скорость сериализации, но требует описания схемы и компиляции кода.

Webhooks — механизм обратной связи: приложение АРК отправляет HTTP POST-запрос на указанный URL при наступлении события (новая заявка, изменение статуса).

6.4 Agile, Scrum и DevOps

Agile Manifesto

Agile — семейство методологий разработки, основанных на итеративном подходе и адаптивности.

Четыре ценности Agile Manifesto:

Ценность Значение
Люди и взаимодействие > Процессы и инструменты Команда важнее инструментов
Работающий продукт > Исчерпывающая документация Результат важнее планов
Сотрудничество с заказчиком > Согласование условий Обратная связь важнее контрактов
Готовность к изменениям > Следование плану Адаптивность важнее следования

Методология Scrum

Scrum — фреймворк Agile для управления разработкой продукта.

Роли Scrum:

Роль Ответственность
Product Owner Определяет «что» делать — бэклог продукта
Scrum Master Обеспечивает «как» — процесс Scrum
Development Team Реализует — «кто» делает

Артефакты Scrum:

Артефакт Описание
Product Backlog Список всех задач по продукту
Sprint Backlog Задачи на текущий спринт (1–4 недели)
Increment Готовый результат спринта

Церемонии Scrum:

---
config:
  look: handDrawn
  theme: neutral
---
flowchart LR
    A["Планирование спринта"] --> B["Ежедневный скрам"]
    B --> C["Разработка"]
    C --> D["Обзор спринта"]
    D --> E["Ретроспектива"]
    E --> A
    
    style A fill:#d9d9d9,stroke:#333
    style D fill:#d9d9d9,stroke:#333
    style E fill:#4a4a4a,stroke:#333,color:#fff
Церемония Международное название Цель Длительность
Планирование спринта Sprint Planning Определение задач спринта До 2 часов
Ежедневный скрам Daily Scrum Ежедневная синхронизация 15 минут
Обзор спринта Sprint Review Демонстрация результата До 1 часа
Ретроспектива Retrospective Улучшение процесса До 1 часа

DevOps-практики

DevOps — культура и практика взаимодействия разработки (Development) и эксплуатации (Operations).

CI/CD (Continuous Integration / Continuous Delivery):

---
config:
  look: handDrawn
  theme: neutral
---
graph LR
    A["Код в репозиторий"] --> B["Автоматическая сборка"]
    B --> C["Автоматическое тестирование"]
    C --> D["Развёртывание на тестовом стенде (staging)"]
    D --> E["Проверка качества"]
    E --> F["Развёртывание в рабочую среду (production)"]
    
    style A fill:#d9d9d9,stroke:#333
    style F fill:#d9d9d9,stroke:#333

Ключевые практики DevOps:

Практика Описание Выгода
CI/CD Автоматическая сборка и доставка Быстрые релизы, меньше ошибок
Автоматизация тестирования Unit, интеграционные, E2E тесты Качество кода
Мониторинг Отслеживание работы в реальном времени Быстрое выявление проблем
Infrastructure as Code Управление инфраструктурой через код Воспроизводимость

Кейс АРК: BI-аналитика и дашборды

Встроенная BI-аналитика АРК предоставляет руководителям инструменты для принятия решений на основе данных.

Основные компоненты BI-модуля АРК:

Компонент Описание
Информационные панели Настраиваемые дашборды с KPI-виджетами
KPI-виджеты Выручка, расходы, доходность, EBITDA, маржинальность
Фильтры и срезы По датам, клиентам, направлениям, менеджерам
Drill-down Детализация от общего к частному

BI-архитектура и OLAP

BI (Business Intelligence) — совокупность технологий сбора, хранения и анализа данных для поддержки принятия решений. Типовая BI-архитектура:

---
config:
  look: handDrawn
  theme: neutral
---
flowchart LR
    A[Источники данных<br/>TMS, WMS, CRM, ERP] --> B[ETL<br/>Extract, Transform, Load]
    B --> C[Хранилище данных<br/>DWH]
    C --> D[OLAP-куб<br/>многомерный анализ]
    D --> E[Дашборды и отчёты]

    style D fill:#4a4a4a,stroke:#333,color:#fff

ETL (Extract, Transform, Load) — извлечение данных из источников, их преобразование и загрузка в хранилище данных (DWH).

OLAP (On-Line Analytical Processing) — технология многомерного анализа данных. Данные организуются в OLAP-куб, где оси — измерения, а ячейки — меры.

Понятие Описание Пример для ТЛК
Измерение Атрибут, по которому анализируются данные Клиент, направление, вид груза, месяц
Мера Числовой показатель в ячейках куба Выручка, расходы, маржа, число перевозок
Slice (срез) Фиксация одного значения измерения Маржа за конкретный месяц
Dice (подмножество) Выборка по нескольким измерениям Перевозки клиента «ТрансЛог» по ЖД за квартал
Drill-down / Roll-up Детализация / агрегация От года к кварталу, месяцу, отдельной заявке
Pivot (поворот) Смена ролей измерений Выручка по клиентам вместо месяцев

Пример для ТЛК: OLAP-куб «Клиент × Направление × Время» с мерой «Маржа». Drill-down от годовой маржи к марже отдельной перевозки выявляет убыточные направления, а pivot сравнивает динамику по клиентам.

В АРК многомерный анализ реализован встроенными дашбордами с фильтрами, срезами и drill-down (показатели ниже), а внешние отчёты строятся в Yandex DataLens через REST API (см. ниже).

Показатели в дашбордах АРК:

Показатель Описание Формула
Выручка Общая сумма по перевозкам Сумма счетов
Расходы Переменные и постоянные затраты Сумма расходов по заявкам
Доходность Прибыль по периоду Выручка - Расходы
EBITDA Операционная прибыль EBITDA по всем заявкам
Маржинальность Процент прибыли (Выручка - Расходы) / Выручка
Простои Время простоя транспорта Сумма часов простоев

Yandex DataLens — внешний BI-инструмент:

DataLens позволяет подключаться к данным АРК через API/HTTP REST и строить внешние дашборды:

  1. Получение API-ключа в настройках АРК
  2. REST API запрос к эндпоинтам АРК (GET /api/reports/...)
  3. Подключение DataLens к API АРК
  4. Построение визуализаций: графики, диаграммы, таблицы
  5. Настройка обновлений в реальном времени

Практическое задание: Постройте дашборд со встроенной аналитикой АРК и подготовьте внешний дашборд в DataLens для лабораторной работы 6.

Транспортный контекст

Примеры из «Управления процессами перевозок»

На железнодорожном транспорте принципы построения систем включают:

Примеры из «Транспортной логистики»

В автомобильной логистике Agile/Scrum применяется для:

Связь с ФГОС 23.05.04 «Эксплуатация железных дорог»

Код компетенции Описание компетенции
УК-4 Способен оценивать архитектуры информационных систем и выбирать оптимальную для ТЛК
ПК-7 Способен проектировать API-интеграции и выбирать форматы данных для обмена
ПК-12 Способен применять методологии Agile/Scrum и DevOps при разработке ИС для транспорта

Заключение и выводы для специалиста

  1. ГОСТ — не бюрократия, а проверенный путь. Стандарты ГОСТ 34.601-90 и РД 50-680-88 обеспечивают системный подход и снижают риски провала проектов.

  2. Архитектура определяет возможности. Монолит подходит для малого бизнеса, микросервисы — для масштабируемых платформ, serverless — для event-driven задач.

  3. API — язык общения систем. Без понимания REST API невозможно построить интеграцию между системами ТЛК.

  4. Agile/Scrum — стандарт индустрии. Итеративная разработка с регулярными релизами позволяет быстрее реагировать на изменения рынка.

  5. BI-аналитика — основа принятия решений. Дашборды с EBITDA, маржинальностью и ABC/XYZ-анализом дают полную картину бизнеса.

Вопросы для самопроверки

  1. Какие пять требований ГОСТ РД 50-680-88 к автоматизированным системам вы знаете?

  2. В чём различие между монолитной, микросервисной и serverless архитектурой? Когда какая применяется?

  3. Какие четыре HTTP-метода REST API вы знаете? Для чего каждый из них?

  4. Какие четыре ценности Agile Manifesto вы знаете?

  5. Какие компоненты BI-аналитики предоставляет система АРК?