Front работ по backend разработке крупнейших порталов на СПО: делимся опытом

    Одним из направлений группы компаний «Диджитал Дизайн» является создание портальных решений, предоставляющих конечным пользователям большой набор настраиваемых сервисов в рамках одного сайта. Сервисы могут быть различными: новости, форумы, хранилища документов, статистика, мероприятия и др. -– что мы и называем порталом. В этой статье хотелось бы рассказать, как мы с командой создаем портальные решения: что используем, какие плюсы и минусы нашей реализации возможны.




    Вообще идея портала своим руками возникла не случайно. С недавних пор в России введены ограничения на использование проприетарного ПО, что в первую очередь коснулось крупные IT-компании, работающие в плотном симбиозе с госсектором. Наш опыт работы над порталами во внешней и внутренней среде крупнейших работодателей в России и за ее пределами позволил оценить лучшие практики, и многие вещи стандартизировать.

    К примеру, сайт Росстандарта находится в открытом доступе, у него большой поток посетителей, поэтому мы искали и создавали решения, которые будут стабильно работать в условиях мгновенной высокой нагрузки. Также нужно учитывать, что многие элементы портала нужно индексировать в поисковиках (с точки зрения самописного портального решения это не так просто и очевидно, как кажется), а готовые решения и CMS-ки мы не использовали (т.к. не все справились бы с поставленными заказчиком задачами).

    Основной интерес реализации для нас как разработчиков состоит в том, что каждый сервис портала – это самодостаточная единица, которая может существовать, не зная ничего о соседних сервисах. Благодаря этому их можно разрабатывать, обновлять и масштабировать независимо друг от друга.

    Эта статья является первой частью цикла статей: в ней описано, как всё выглядит со стороны backend-а, какие технологии мы используем, как устроена архитектура, какие трудности и преимущества есть у реализованного нами подхода. В следующих статьях также опишем сторону frontend разработки.

    Итак, начнем.

    Архитектура


    Основной целью было разработать платформу на основе open-source решений, которую легко масштабировать и поддерживать.

    У данной платформы существует два варианта развертывания на мощностях заказчика:

    1) Первый вариант требует больше мощностей, но позволяет легко масштабироваться и поддерживать сразу несколько систем за счет микросервисной архитектуры. Способов ее реализации существует много, но мы выбрали фреймворк Spring Cloud (Gateway, Discovery) вместе со Spring Boot (исходя из опыта, наш Java-архитектор принял решение, что данный стек технологий лучше всего подойдет для этих задач).



    2) Второй вариант – модульный. Он рассматривается, если планируется поддерживать только одну систему (портал). Этот вариант хорош тем, что всю инфраструктуру можно развернуть на одном или двух серверах.



    Используемые технологии


    Open JDK 8

    Wildfly – сервер приложений

    PostgreSQL – СУБД. Все модули реализованы на основе ORM технологий, поэтому в теории позволит легко мигрировать и на другую СУБД.

    ExoPlatform – платформа-портал, позволяющая комбинировать различные модули в едином веб-приложении, управлять расположением их на странице, администрировать правами доступа и многое другое. Community-версию можно скачать на официальном сайте, но только под сервер приложений Tomcat. Можно взять исходники и доработать сборку платформы под Wildfly. Холивар в этой статье на тему: «почему не выбрали Liferay» устраивать не будем.

    Модули – это так называемые портлеты (Portlet), они выполняются в портлет-контейнере и отвечают за отрисовку своей области на странице. Разрабатываются портлеты согласно спецификации JSR (JSR 362).

    Spring Framework – основа всех разрабатываемых в «Диджитал Дизайн» приложений с точки зрения Java-разработки (https://spring.io/). У фреймворка существует множество модулей для реализации различных задач (Spring MVC, Spring Mail, Spring Data (JPA), Spring JMS и многое другое).

    Spring Cloud – основа для разработки микросервисов (Discovery, Gateway, Ribbon, Config Server).

    Keycloak – сервер авторизации и управления доступом (IDM\IAM). Сервер поддерживает несколько протоколов авторизации (OpenId, SAML, Oauth, Kerberos). Это позволяет легко управлять стратегиями авторизации, настраивать права доступа и обеспечивать безопасность доступа к ресурсам системы. (https://www.keycloak.org/).

    Kurento – медиа-сервер. Использовался для разработки видео-аудио трансляций между пользователями по протоколу WebRTC (https://www.kurento.org/).

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

    Swagger – автодокументируемая инструкция для взаимодействия с Rest-API.

    JaspeRepors – фреймворк для создания отчетов. Для построения шаблонов отчетов используется JasperStudio.

    Graylog – сервер сбора логов с приложений.

    Сборка всех модулей осуществляется с помощью Maven и CI\CD (Jenkins).

    Модули и сервисы


    К микросервисам, обеспечивающим функционирование модулей, можно отнести:

    • Сервис управления файлами – микросервис, позволяющий хранить в едином хранилище данные, анализировать содержимое, конвертировать в другие форматы файлы для воспроизведения или отображения на веб-интерфейсе, скачивать и привязывать к другим системам. А также совместное редактирование файлов и их версионность.
    • Сервис полнотекстового поиска – микросервис, позволяющий осуществлять быстрый поиск по системам или модулям. Основные функции, которые осуществляет это индексирование содержимого объектов или файлов систем с различными анализаторами, преднастроенными в Elasticseach (поддержка русской морфологии, стоп слова и т.п.). Для индексирования файлов используется парсер Apache Tika, который умеет распознавать различные типы документов и вытаскивать из них содержимое.
    • Сервис коммуникаций – микросервис, позволяющий обмениваться сообщениями между пользователями на основе веб-сокетов и осуществлять видео\аудио-трансляции по протоколу WebRTC с использованием медиа-сервера Kurento.
    • Сервис статистики – микросервис, позволяющий получать статистические данные от различных модулей системы и строить по ним отчеты. Данные хранятся в ElasticSearch, а отчеты формируются на основе шаблонов JasperReports.
    • Сервис параметров\конфигураций – микросервис, позволяющий централизованно хранить настройки отдельных модулей или даже персональные настройки.
    • Сервис организационной структуры – микросервис, позволяющий вытаскивать информацию о сотрудниках и их подразделениях из различных источников, агрегировать в единое хранилище, также он предоставляет эти данные в конечные модули.
    • Сервис бизнес-процессов – микросервис, позволяющий выполнять сложные Workflow определенных задач на основе спецификации BPMN. В качестве движка был выбран JBPM.

    Некоторые из Модулей



    • WCM – управление форматированным содержимым на страницах портала.
    • Библиотека документов – модуль управления, хранения, редактирования и версионности документов.
    • Новости – агрегатор новостей компании.
    • Форум – полнофункциональный форум в классическом формате.
    • Календарь событий – календарь мероприятий и событий.
    • Чат – классический чат во всеобщем его понимании с модерацией и комнатами.
    • Конференции — онлайн-трансляции для проведения конференций или прямой трансляции для всех желающий пользователей c поддержкой шаринга экрана и модерацией.
    • Медиатека – библиотека для медиа-контента. Потоковое воспроизведение видео, комментарии, лайки и прочие прелести.
    • Организационная структура – различные справочники и отчеты.
    • Административный модуль — Управления правами доступа к порталу, узлам, страницам, портретам и настройкой отображения портлетов, страниц и виртуальных порталов.
    • Навигация – позволяет создавать настраиваемую навигацию по порталу и узлам портала.
    • Опросы и тесты – большой по функциональности модуль с возможностью создания тестов и опросов различных типов (от единственного выбора, до вопросов-петель и дифференциалов). Создан для тестирования, обучения и проведения опросов у пользователей портала.

    И много других специфичных и не очень модулей с бизнес-процессами под конкретных заказчиков. Всего их около 30.

    Трудности и преимущества

    Преимущества данного решения


    • За счет архитектуры систему можно развернуть как на одном сервере, так и на нескольких для возможности более гибко настраивать балансировку нагрузки.
    • Все модули разрабатываются независимо друг от друга, что позволяет более безопасно разрабатывать, не затрагивая другой функционал, и наполнять портал новыми фичами и доработками.
    • Каждый модуль обладает своей собственной базой данных через JNDI, а управление пулом соединений к базам отводится серверу приложений к каждой базе по отдельности. Это даёт возможность более гибко настраивать каждый пул и манипулировать транзакциями.
    • Часто используемый набор функций отводится под управление микросервисами, что позволяет значительно быстрее разрабатывать новые модули.
    • Есть возможность создавать новые виртуальные порталы со своими настройками, темами, правами доступа.
    • Единый сервер аутентификации позволяет добавлять новые системы и настраивать правила авторизации.
    • Благодаря тому, что все модули разрабатываются по общепринятым спецификациям, это позволят устанавливать open-source модули, разработанные сторонними разработчиками.
    • Настраиваемость модулей на портале позволяет легко манипулировать отключением и подключением модулей в реальном времени.
    • Построено полностью на базе open-source технологий, что дает преимущества в обновлениях и дальнейшем развитии.

    Проблемы, с которыми мы столкнулись


    • Поддержка обратной совместимости API микросервисов и модулей – на данный момент решается интеграционными тестами и выработкой требований.
    • Управление доступом к ресурсам на микросервисах – планируется внедрение ABAC технологий.
    • Формализация логов – планируется разработка библиотеки-оболочки для логирования в нужном формате.
    • Централизованное кэширование данных – планируется внедрение централизованного кэш-сервера (это необходимо для централизованного сбора логов работы dev test prod стендов для корректного отслеживания стабильности и корректности нашей экосистемы).

    Итого


    Данный набор технологий вкупе с выбранным архитектурным решением позволяет нам поставить вопрос разработки портальных, интранетных и внешних решений «на конвейер»: делать быстро, качественно, с разными настройками и использовать лучшие практики.

    А в следующей статье мы расскажем, каким образом устроен наш frontend: о сборке и как мы добились большой переиспользуемости.

    Продолжение совсем скоро…
    Digital Design
    Компания

    Комментарии 2

      0

      Сколько человек участвовало в проектировании и разработке?

        +1
        В разные времена по-разному:
        1) В проектировании от 1 до 3 человек;
        2) В разработке:
        • 1 бизнес-аналитик;
        • 1 системный аналитик;
        • 3-5 Java-developers;
        • 3-5 JavaScript-developers;
        • 1 DevOps;
        • 1-2 QA;
        • 1-2 Project Managers.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое