Pull to refresh

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

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




Вообще идея портала своим руками возникла не случайно. С недавних пор в России введены ограничения на использование проприетарного ПО, что в первую очередь коснулось крупные 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: о сборке и как мы добились большой переиспользуемости.

Продолжение совсем скоро…
Tags:
Hubs:
+6
Comments2

Articles

Change theme settings

Information

Website
digdes.ru
Registered
Founded
Employees
501–1,000 employees
Location
Россия