Архитектура
Лицензирование системы в целом и особенно используемых пакетов на back/front написанных под коробку?
Используются либо Open Source решения, либо собственные разработки. Права на продукт принадлежат компании, разработчики подписывают NDA.
Как реализуется обновления платформы? Обновления пакетов?
Обновление пакетов происходит с помощью менеджеров пакетов Composer и NPM/Yarn. Обновление платформы происходит через систему контроля версий Git и встроенных инструментов фреймворка
Что входит в документацию и как ведется документирование кода? Есть ли требования к разработке? Есть ли МХД, Сваггер, диаграмма потоков данных?
В документацию входят REST-запросы к микросервисами. Используется Swagger.
Структура кода и паттерн проектирования, примененные внутри микросервисов?
Сейчас стандартная структура фреймворка Laravel, но постепенно начинаем переходить на архитектурный шаблон Porto.
Как реализована агрегация данных для фронта? Есть ли агрегатор на беке или сам фронт выступает агрегатором данных?
Бек агрегируют большую часть данных, особенно кешируемых. Часть данных фронт запрашивает по необходимости.
Есть ли Elasticsearch и как используется? Какие настройки эластики идут из коробки (кластер, количество шардов и реплик)? Размеры индексов в Гб и их количество в системе?
Elasticsearch используется для вывода товаров и поиска по магазину. Используются стандартные настройки, кроме использования оперативной памяти. Она ограничивается в 4 GB. Размеры индексов зависят от количества данных.
Какие БД используются? Как настроен кластер и какая репликация используется? Поддерживается ли архивирование устаревшей информации (заказы)?
В качестве БД выступает PostgreSQL. Репликация и архивирование не используются.
Какой кэш используется? Как организовано кэширование каталога? Какие вообще сущности в коробке кэшируются?
В качестве кэша используется Redis. Данные каталога отдаются Эластиком. Кэшируются данные страниц, которые содержат мета-информацию, рубрикатор каталога, различные виджеты (карусели баннеров, подборку товаров и брендов).
Есть ли поддержка файлового хранилища S3? Поддерживаются ли приватные хранилища?
Такая поддержка существует. Приватное хранилище должно быть S3-совместимым.
Как реализуется логирование в системе и какие действия/события логируется?
Средствами фреймворка логируется взаимодействие с внешними системами, а также ошибки. Есть возможность подключить Sentry.
Как реализуется мониторинг системы и за какими показателями следят?
Мониторинг доступности осуществляется внешними системами - UptimeRobot, Я.Метрика. Настраивается индивидуально.
Есть ли мониторинг бизнес процессов (обработка импортов, заказов, обмена с внешними системами)?
Результаты и состояние бизнес процессов можно наблюдать в административной панели
Поддерживает ли платформа нативную установку в Kubernetes и предусмотрен ли механизм автоскейлинга?
Нет, нативная установка и автоскейлинг не поддерживаются. Большинство наших проектов было реализовано на локальных серверах. В Kubernetes выгрузка происходит каждого микросервиса отдельно.
Как реализована observability-составляющая (мониторинг, логирование, трассировка, алертинг)?
Есть логирование. Мониторинг, трассировка и алертинг не предусмотрены.
Предоставляется ли готовая конвейерная модель CI/CD? Возможно ли получить описание её архитектуры?
Нет, конвейерная модель CI/CD не реализована, так как это затягивает процесс выгрузки изменений. У нашего сегмента клиентов не было на неё запроса согласно специфике их технологической инфраструктуры.
Можно ли получить актуальную компонентную схему системы, отражающую взаимодействие сервисов?
С техническим описанием сервисов и компонентными схемами вы можете ознакомиться в презентации технического описания платформы https://disk.yandex.ru/i/wbNtFaL1Lc7cfA
Как устроена архитектура данных на уровне Баз Данных и связи между сущностями?
Архитектура базируется на трех столпах, что является базовым подходом для фреймворка Laravel:
Миграции (Migrations) — система контроля версий для вашей базы данных.
Модели Eloquent (Eloquent Models) — ORM (Object-Relational Mapping) для работы с сущностями.
Связи (Relationships) — мощный инструмент Eloquent для описания отношений между моделями.
Какие метрики качества кода используются (например, через SonarQube) и можно ли ознакомиться с отчетами?
На текущий момент метрики качества кода не используются.
Каков уровень покрытия кода unit- и автотестами, а также тестами безопасности и нагрузки?
На текущий момент код не покрывается unit- и автотестами.
Можете ли предоставить отчёты нагрузочного тестирования, включая тест-планы и результаты в разрезе сервисов и API?
Проводилось общее нагрузочное тестирование стенда, с отчетом вы сможете ознакомиться по ссылке https://docs.google.com/document/d/1cnr39COlDdAApOC7Hoj7U_0-QNxClBQnwSXPh4R-BhQ/edit?usp=sharing
Проводилось ли тестирование на проникновение для модулей биллинга, платёжных баллов и подарочных сертификатов? DDoS и Анти-фрод тестирование? Доступны ли отчёты?
Модули не отделяемые от всей системы, они работают как единое целое. Защиту от DDoS обеспечивает хостинг провайдер, фильтрует DDoS-атаки на уровне протоколов L3 (сетевой уровень) и L4 (транспортный уровень). Подробнее с мерами безопасности можно ознакомиться в документе https://docs.google.com/document/d/1gg124BdNFwYoy2AsMOa2hn8dkRboFJS1VNUXsc86I3Y/edit?usp=sharing
Какие стандарты аутентификации и авторизации поддерживаются сервисами (OIDC, JWT, SAML/LDAP)?
Запросы между микросервисами проходят с использованием JWT-токена, что предотвращает создание поддельных запросов извне. Для каждого стенда генерируется уникальный JWT-токен.
Являются ли сервисы (например, биллинг или реферальный) архитектурно независимыми? Возможна ли их работа в отрыве от модулей каталога или клиентов?
Нет, конкретно эти модули не отделяемые. Система не делится на части, работает как единая. Отделить можно только MAS, он более-менее автономный.
Выделять отдельные модули и встраивать куда-либо будет очень дорого, технически рискованно - все модули работают в связке.
Что подразумевается под «кодом ядра» и как сервисы взаимодействуют между собой?
Взаимодействие осуществляется через REST-запросы.
Возможно ли подключить реферальный модуль к иному платёжному провайдеру без доработки кода (по документации ограничен Яндекс Кассой)?
Да, возможно подключение любого платёжного провайдера.
Где расположена актуальная документация по API (Swagger/OpenAPI для модулей)?
Документация к Swagger является закрытой из соображений безопасности, доступ предоставляется только для внутренней команды.
Last updated