Фронт-Работа По Backend-Разработке Крупнейших Порталов С Открытым Исходным Кодом: Делимся Опытом

Одним из направлений группы компаний Digital Design является создание портальных решений, предоставляющих конечным пользователям большой спектр настраиваемых сервисов в рамках одного сайта.

Сервисы могут быть разными: новости, форумы, хранилища документов, статистика, события и т. д. — именно это мы и называем порталом.

В этой статье я хотел бы рассказать вам, как мы с командой создаем портальные решения: что мы используем, каковы возможные плюсы и минусы нашей реализации.



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

В общем, идея портала своими руками возникла не случайно.

Недавно в России были введены ограничения на использование проприетарного программного обеспечения, что коснулось в первую очередь крупных ИТ-компаний, работающих в тесном симбиозе с госсектором.

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

Например, сайт Росстандарт находится в открытом доступе, имеет большой поток посетителей, поэтому мы искали и создавали решения, которые будут стабильно работать в условиях непосредственной высокой нагрузки.

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

использовать готовые решения и CMS (поскольку не все могут справиться с задачами, поставленными заказчиком).

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

Благодаря этому их можно разрабатывать, обновлять и масштабировать независимо друг от друга.

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

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



Архитектура

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

Данная платформа имеет два варианта развертывания на объектах заказчика: 1) Первый вариант требует большей мощности, но позволяет легко масштабировать и поддерживать сразу несколько систем за счет микросервисной архитектуры.

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



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

2) Второй вариант модульный.

Учитывается, если вы планируете поддерживать только одну систему (портал).

Этот вариант хорош тем, что всю инфраструктуру можно развернуть на одном или двух серверах.



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



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

Открыть JDK 8 дикая муха - сервер приложений PostgreSQL — СУБД.

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

ЭкзоПлатформа – портальная платформа, позволяющая объединять различные модули в одном веб-приложении, управлять их расположением на странице, администрировать права доступа и многое другое.

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

Модули — это так называемые портлеты, они выполняются в контейнере портлетов и отвечают за отрисовку своей области на странице.

Портлеты разрабатываются согласно спецификации JSR ( ДжСР 362 ).

Весенняя структура — основа всех приложений, разработанных в Digital Design, с точки зрения Java-разработки ( https://spring.io/ ).

Фреймворк имеет множество модулей для реализации различных задач (Spring MVC, Spring Mail, Spring Data (JPA), Spring JMS и многое другое).

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

Плащ-ключ – сервер управления авторизацией и доступом (IDM\IAM).

Сервер поддерживает несколько протоколов авторизации (OpenId, SAML, Oauth, Kerberos).

Это позволяет легко управлять стратегиями авторизации, настраивать права доступа и обеспечивать безопасный доступ к системным ресурсам.

( https://www.keycloak.org/ ).

Курэнто – медиасервер.

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

Эластичный поиск – сервер полнотекстового поиска.

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

Сваггер — самодокументированные инструкции по взаимодействию с Rest-API. JaspeRepors – основа для создания отчетов.

JasperStudio используется для создания шаблонов отчетов.

Грейлог — сервер для сбора логов приложений.

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



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

К микросервисам, обеспечивающим работу модулей, относятся:
  • Служба управления файлами – микросервис, позволяющий хранить данные в едином хранилище, анализировать контент, конвертировать файлы в другие форматы для воспроизведения или отображения в веб-интерфейсе, скачивать и связывать их с другими системами.

    А также совместное редактирование файлов и их версионирование.

  • Сервис полнотекстового поиска – микросервис, позволяющий быстро осуществлять поиск по системам или модулям.

    Основные функции, которые выполняются, — это индексирование содержимого объектов или файлов систем различными анализаторами, предварительно настроенными в Elasticseach (поддержка русской морфологии, стоп-слов и т. д.).

    Для индексации файлов используется парсер Apache Tika, который умеет распознавать различные типы документов и извлекать из них контент.

  • Служба связи — микросервис, позволяющий обмениваться сообщениями между пользователями на основе веб-сокетов и осуществлять видео/аудиотрансляции по протоколу WebRTC с использованием медиасервера Kurento.
  • Статистический сервис – микросервис, позволяющий получать статистические данные от различных модулей системы и строить по ним отчеты.

    Данные хранятся в ElasticSearch, а отчеты формируются на основе шаблонов JasperReports.

  • Сервис параметров\конфигурации — микросервис, позволяющий централизованно хранить настройки отдельных модулей или даже персональные настройки.

  • Служба организационной структуры — микросервис, который позволяет подтягивать информацию о сотрудниках и их подразделениях из различных источников, агрегировать их в единый репозиторий, а также передавать эти данные в конечные модули.

  • Сервис бизнес-процессов – микросервис, позволяющий выполнять сложный Workflow определенных задач на основе спецификации BPMN. В качестве двигателя был выбран JBPM.


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

  • ВКМ – управление форматированным контентом на страницах портала.

  • Библиотека документов – модуль для управления, хранения, редактирования и версионирования документов.

  • Новости – агрегатор новостей компании.

  • Форум – полнофункциональный форум классического формата.

  • календарь событий – календарь событий и мероприятий.

  • Чат – классический чат в его универсальном понимании с модерацией и комнатами.

  • Конференции — онлайн-трансляции конференций или прямые трансляции для всех заинтересованных пользователей с поддержкой совместного использования экрана и модерации.

  • Медиа библиотека – библиотека медиаконтента.

    Потоковое воспроизведение видео, комментарии, лайки и прочие прелести.

  • Организационная структура – различные справочники и отчеты.

  • Административный модуль — Управление правами доступа к порталу, узлам, страницам, портретам и настройка отображения портлетов, страниц и виртуальных порталов.

  • Навигация – позволяет создавать пользовательскую навигацию по порталу и узлам портала.

  • Опросы и тесты – большой функциональный модуль с возможностью создания тестов и опросов различного типа (от вопросов с одним выбором до циклических вопросов и дифференциалов).

    Создан для тестирования, обучения и проведения опросов пользователей портала.

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

Всего их около 30.

Проблемы и преимущества Преимущества этого решения

  • За счет архитектуры систему можно развернуть как на одном сервере, так и на нескольких, чтобы иметь возможность более гибко настроить балансировку нагрузки.

  • Все модули разрабатываются независимо друг от друга, что позволяет обеспечить более безопасную разработку, не затрагивая другой функционал, и наполнить портал новыми функциями и улучшениями.

  • Каждый модуль имеет свою базу данных через JNDI, а управление пулом подключений к базам данных возлагается на сервер приложений для каждой базы данных отдельно.

    Это дает возможность более гибко настраивать каждый пул и манипулировать транзакциями.

  • Часто используемый набор функций управляется микросервисами, что позволяет значительно быстрее разрабатывать новые модули.

  • Есть возможность создавать новые виртуальные порталы со своими настройками, темами и правами доступа.

  • Единый сервер аутентификации позволяет добавлять новые системы и настраивать правила авторизации.

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

  • Возможность настройки модулей на портале позволяет легко манипулировать отключением и подключением модулей в режиме реального времени.

  • Построен полностью на основе технологий с открытым исходным кодом, что дает преимущества при обновлениях и дальнейшем развитии.



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

  • Поддержка обратной совместимости микросервисов и модулей API в настоящее время решается посредством интеграционных тестов и разработки требований.

  • Управление доступом к ресурсам на микросервисах — планируется внедрение технологий ABAC.
  • Формализация логов – планируется разработать библиотеку-обертку для ведения логов в необходимом формате.

  • Централизованное кеширование данных — планируется внедрение централизованного кеш-сервера (это необходимо для централизованного сбора логов работы dev test prod стендов для корректного контроля стабильности и корректности нашей экосистемы).



Общий

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

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

Продолжение будет совсем скоро.

Теги: #с открытым исходным кодом #ИТ-компании #ИТ-компании #бэкенд #Программное обеспечение с открытым исходным кодом #порталы #разработка портала

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.