- История изменений
- Цель проекта/задачи
- Термины и сокращения
- Бизнес-архитектура решения
- Информационная архитектура решения
- Архитектура приложения
- Требования и решения по безопасности
| Номер версии | Дата | Автор изменения | Суть изменения |
|---|---|---|---|
| 1.0 | 01.12.2022 | Первоначальная версия документа |
Цель:
- Повышение качества взаимодействия компании (Ростелеком) с ее клиентами за счет расширения текущих функциональных возможностей CRM
Задачи:
- Разработать архитектуру, реализующую требования к решению
- Интегрировать переиспользуемые функциональные возможности уже реализованных компонент
- Реализовать отсутствующие функциональные возможности путем разработки новых, доработки или замещения уже существующих в наследованных компонентах (без доработки самих компонент) в создаваемом решении
- Спроектировать интеграцию решения с другими системами
| № | Наименование | Описание | Атрибуты |
|---|---|---|---|
| 1 | CRM | ПО, обеспечивающее взаимодействие телеком компании и клиента посредством обращений | |
| 2 | Компания | Телеком организация предоставляющая услуги | |
| 3 | Пользователи | Профиль работника, обеспечивающий обработку входящих обращений клиентов | Уникальный идентификатор ФИО Отдел/подразделение Должность Корп. почта Корп. телефон Личный телефон Роль ID |
| 4 | Клиент | Физическое или юридическое лицо, обращающееся в телеком компанию за услугой | Уникальный идентификатор Юр. принадлежность ФИО Паспортные данные Адрес регистрации Адрес фактического проживания Номер телефона E-mail ИНН ОГРН Название организации Физический адре Почтовый адрес Факс |
| 5 | Договор | Документ, подтверждающий предоставление услуг клиенту | Уникальный идентификатор Клиент Номер договора Дата заключения договора Дата завершения договор Шаблон договора |
| 6 | Поставляемые услуги | Услуги предоставляемые клиенту в рамках действующих договоров | Клиент Договор Услуга Дата начала действия Дата окончания действия |
| 7 | Список услуг | Номенклатурный справочник, в котором зафиксирован весь спектр предоставляемых компанией услуг | Уникальный идентификатор Наименование услуги Платная/бесплатная Товарная/нетоварная Разовая/периодическая Срок предоставления Цена |
| 8 | Обращение | Зарегистрированная потребность клиента в получении обратной связи от компании по интересующему его вопросу | Уникальный идентификатор Номер обращения Клиент Статус обращения Дата создания Дата исполнения Дата закрытия Пользователь принявший обращение ФИО Телефон обратной связи Канал поступления Необходимость обратной связи Комментарии |
| 9 | Задача | Элемент бизнес-процесса, обеспечивающий цикл исполнения обращения клиента на не материальной основе | Уникальный идентификатор Номер задачи Номер обращения Статус задачи Исполнитель Дата создания Дата закрытия Тип задачи |
| 10 | Заказ | Элемент бизнес-процесса, обеспечивающий цикл исполнения обращения клиента на материальной основе | Уникальный идентификатор Номер задачи Номер обращения Дата заказа Дата поставки Клиент Договор Тип заказа |
| 11 | Состав заказа | Перечень предоставляемых услуг для конкретного заказа | Уникальный идентификатор заказа Уникальный идентификатор Точка поставки Услуга Цена |
| 12 | Роли | Номенклатурный справочник, в котором зафиксирован весь перечень пользовательских ролей для разграничения доступа | Уникальный идентификатор Наименование роли Описание доступных действий и возможностей |
| № | Название системы/модуля/компонента | Тип объекта | Платформа | Назначение | Зона размещения компонента | Статус изменения компонента |
|---|---|---|---|---|---|---|
| 1 | Client-service | Сервис | RHEL/Docker/Go | Решение для управления клиентами компании | LAN | Разработка |
| 2 | Contracts-service | Сервис | RHEL/Docker/Go | Предоставление информации о договорах | LAN | Разработка |
| 3 | Dashboard-service | Сервис | RHEL/Docker/Go | Управление Kanban досками для персонала | LAN | Разработка |
| 4 | Upload-service | Сервис | RHEL/Docker/Go | Загрузка и преобразование данных из легаси системы | LAN | Разработка |
| 5 | Tasks-service | Сервис | RHEL/Docker/Go | Решение для управления задачами внутри компании | LAN | Разработка |
| 6 | Requests-service | Сервис | RHEL/Docker/Go | Решение для регистрации и ведения обращений клиентов | LAN | Разработка |
| 7 | Orders-service | Сервис | RHEL/Docker/Go | Решение для управления заказами клиентов | LAN | Разработка |
| 8 | KeyCloack | Система | Java | Решение для управления пользователями и доступом | LAN | Применение |
| 9 | Kafka | Система | Java, Scala | распределённый программный брокер сообщений | LAN | Применение |
| 10 | API Gateway | Сервис | RHEL/Docker/Go | Решения для связывания програмных компонентов | LAN | Разработка |
| 11 | Система логирования | Система | RHEL/Docker/ELK | Движок для работы с логами приложения | LAN | Применение |
Для проектируемого решения предлагается использовать следующие СУБД:
- Postgres Pro Enterprise – для хранения и обработки транзакционных данных.
- Виртуальное хранилище Ростелеком – для хранения файлов.
Выбор виртуального хранилища Ростелеком обусловлен использованием уже существующей инфраструктуру заказчика и поддержкой распространенного протокола Amazon S3 API. СУБД Postgres Pro была выбрана в результате оценки критериев сравнения между наиболее распространенными реляционными СУБД (данный тип обеспечивает наиболее эффективную обработку транзакционных данных).
С учетом специфики заказчика, наиболее целесообразным является выбор СУБД Postgres, обладающей следующими преимуществами:
- отсутствие санкционных рисков использования;
- наличие вендоров осуществляющих поддержку и развитие на территории РФ;
- наличие open source версии для исключения vendor lock.
Далее среди отечественных решений на основе СУБД Postgres был выбран продукт, имеющий реализацию высокодоступного (high availability) кластера «из коробки»: СУБД Postgres Pro Enterprise. Основным преимуществом реализации кластера СУБД Postgres Pro Enterprise является:
- наличие конфигурации multimaster, позволяющей в отличии от других продуктов выполнять масштабирование операций не только на чтение, но и на запись;
- использование разработанного расширения Postgres (без использования стороннего программного обеспечения) для создания и управления кластером.
Показать критерии
| Группа критериев | № | Критерий | Оценка от 1 до 10 (10 высшая оценка) | |||
|---|---|---|---|---|---|---|
| Oracle | My SQL | Microsoft SQL Server | Postgres | |||
| Оценка поставщика и его опыт | 1 | Наличие опыта применения в крупных компания мирового масштаба | 10 | 10 | 10 | 10 |
| 2 | Риски по ограничению поддержки или приобретению лицензий со стороны поставщика по политическим причинам (критичный критерий) | 1 | 5 (наличие open source | 1 | 10 | |
| 3 | Наличие вендора на территории РФ осуществляющего поддержку и развитие продукта | 1 | 1 | 1 | 10 | |
| Итого: | 12 | 16 | 12 | 30 | ||
| Функциональность | 4 | Соответствие функциональным требованиям в целом (сумма) | 40 | 40 | 40 | 33 |
| 4.1 | Поддержка OLTP типа обработки данных (ACID транзакции) | 10 | 10 | 10 | 10 | |
| 4.2 | Partitioning (разделение строк по физическим разделам) | 10 | 10 | 10 | 10 | |
| 4.3 | Sharding (разделение строк по нодам) | 10 | 10 | 10 | 5 (ручное с расширением FDW) | |
| 4.4 | Возможности масштабирования решения | 10 (Oracle RAC) | 10 (3rd party в бесплатной и Built-in в платной) | 10 (WSFC и технология AlwaysOn) | 8 (3rd party в бесплатной версии без масштабирования на запись и Built-in в платной) | |
| 5 | Соответствие нефункциональным требованиям в целом (сумма) | 14 | 30 | 13 | 23 | |
| 5.1 | Наличие Open Source версии (отсутствие зависимости от услуг конкретного поставщика) | 1 | 10 | 1 | 10 | |
| 5.2 | Место в рейтинге RDBMS СУБД (по данным https://db-engines.com/en/ranking_trend/relational+dbms) | 10 | 10 | 7 | 5 | |
| 5.3 | Оценка количества специалистов использующих СУБД (по данным https://insights.stackoverflow.com/survey/2021#key-territories-country) | 3 | 10 | 5 | 8 | |
| ИТОГО: | 66 | 86 | 65 | 86 |
Таблица отечественных продуктов на основе СУБД Postgres
| №п.п. | Наименование продукта | Вендор | Наличие кластера масштабируемого на запись и чтение |
|---|---|---|---|
| 1 | Postgres Pro Enterprise | Postgres Pro | Да |
| 2 | СУБД Tantor | "Лаборатории Тантор" | Нет |
| 3 | СУБД Jatoba | Газинформсервис | Нет |
| 4 | Platform V Pangolin | Сбербанк-Технологии | Нет |
| 5 | СУБД “Квант- Гибрид” | О «Концерн ГРАНИТ» | Нет |
| 6 | Arenadata Postgres | Arenadata | Нет |
| 7 | СУБД "ЛИРА-Р" | НППКТ | Нет |
| Плюсы | Минусы |
|---|---|
| Статическая типизация | Обработка ошибок требует написания док кода |
| Идеально подходит при написании микросервисов | Трудночитаемая документация |
| Компилируемый на любую платформу | Сложен для понимания при переходе с ООП |
| Конкурентность выраженная в легковесных горутинах | Нет стандартизированных рекомендаций написания кода |
| Есть дженерики | |
| Низкий порог вхождения | |
| Отсутствие исключений | |
| Большое сообщество | |
| Нет полной реализации ООП | |
| Можно легко работать с любым протоколом | |
| Можно спрогнозировать объем потреб ресурсов | |
| Надежный | |
| Возможность подключать сторонние библиотеки С/С++ |
| Плюсы | Минусы |
|---|---|
| Полноценное ООП | Динамическая типизация |
| Параллелизм | Не компилируемый |
| Воркеры | Низкая скорость работы |
| Обработка ошибок | Завершает процесс при каждом вызове |
| Низкий порог входа | Требует сторонний веб сервер для работы |
| Огромное сообщество | Динамическая типизация |
| Огромное количество готовых решений | Только для CLI и веб |
| Дешевая стоимость часа работы программиста | Слабо контролируемое потребление ресурсов |
| Хороший программист - редкость | Вынужденность применения фреймворков уменьшает безопасность |
| Отличная документация | |
| Рекомендации написания кода PSR |
В современных проектах применяется комбинация этих двух языков - RoadRunner, когда препроцессор PHP находится в обертке Go, таким образом процесс PHP является "не убиваемым". Но такие решения чаще распространяются на устоявшиеся проекты, которые требуют увеличения производительности. И в затраты на них учитывается работа программистов обоих стеков. Само решение "сырое" и что также рискованно к применению.
Язык Go отлично подходит для реализации небольших, стабильно работающих приложений, может быть скомпилирован на любую платформу. Писать на нем "идиоматически верно" при переходе с ООП языков трудно, что занимает время и желательно наличие грамотного (дорогого) наставника. Не рекомендуется для написания больших монолитных проектов. Не требует стороних сервисов для работы, что также облегчает разворачивание приложения в кластере k8s. Прекрасно работает с protobuf через gRpc, что облегчает взаимодействие между сервисами из-за вынужденного соблюдения интерфейсов. Что дает гарантию целостности данных и их правильного восприятия. Минимальная вероятность появления панических ошибок и надежность исполнения кода - основная причина выбора этого языка. Наличие в команде опытного специалиста - гарантия быстрого включения в проект любого специалиста при переходе с любого языка программирования, за кротчайшее время.
В то же время низкий уровень безопасности из-за необходимости использования сторонних фреймворков в PHP, возможность программирования в разных стилях, приводящее к увеличению тех долга, сложное разворачивание в кластере. Слабо контролируемое потребление ресурсов в комбинации с правилами ограничения потребления ресурсов кластера, может привести к сбоям и потерям пакетов. В результате низкие затраты на специалистов на этапе старта проекта приведет к очень дорогой поддержке в будущем, потери данных, неявным ошибкам, и большим затратам на трафик и железо.
Использовались данные с сайта https://benchmarksgame-team.pages.debian.net/benchmarksgame/
| Тест | PHP 8.1.5 (cli) | GoLang (1.18) |
|---|---|---|
| sqrt in loop | 22.14ms | 7.42ms |
| regexp | 924ms | 297ms |
| binary-tree | 830ms | 240ms |
| file IO | 58ms | 17ms |
- Система должна удовлетворять требованиям Постановления Правительства РФ от 01.11.2012 N 1119 "Об утверждении требований к защите персональных данных при их обработке в информационных системах персональных данных".
- Gitlab Security Analysis не должен находить уязвимостей в компонентах системы в ходе сканирования.




















