Одним из направлений группы компаний Digital Design является создание портальных решений, предоставляющих конечным пользователям большой спектр настраиваемых сервисов в рамках одного сайта.
Сервисы могут быть разными: новости, форумы, хранилища документов, статистика, события и т. д. — именно это мы и называем порталом.
В этой статье я хотел бы рассказать вам, как мы с командой создаем портальные решения: что мы используем, каковы возможные плюсы и минусы нашей реализации.
В общем, идея портала своими руками возникла не случайно.
Недавно в России были введены ограничения на использование проприетарного программного обеспечения, что коснулось в первую очередь крупных ИТ-компаний, работающих в тесном симбиозе с госсектором.
Наш опыт работы на порталах во внешней и внутренней среде крупнейших работодателей России и зарубежья позволил нам оценить лучшие практики и стандартизировать многие вещи.
Например, сайт Росстандарт находится в открытом доступе, имеет большой поток посетителей, поэтому мы искали и создавали решения, которые будут стабильно работать в условиях непосредственной высокой нагрузки.
Также нужно учитывать, что многие элементы портала необходимо индексировать в поисковых системах (с точки зрения самописного портального решения это не так просто и очевидно, как кажется), и мы этого не сделали.
использовать готовые решения и CMS (поскольку не все могут справиться с задачами, поставленными заказчиком).
Основной интерес реализации для нас, как разработчиков, заключается в том, что каждый сервис портала представляет собой самодостаточную единицу, которая может существовать, ничего не зная о соседних сервисах.
Благодаря этому их можно разрабатывать, обновлять и масштабировать независимо друг от друга.
Эта статья — первая часть цикла статей: в ней описано, как все выглядит с бэкенд-стороны, какие технологии мы используем, как устроена архитектура, какие сложности и преимущества имеет реализованный нами подход. В следующих статьях мы также опишем сторону фронтенд-разработки.
Итак, начнем.
Архитектура
Основная цель заключалась в разработке платформы на основе решений с открытым исходным кодом, которую легко масштабировать и поддерживать.Данная платформа имеет два варианта развертывания на объектах заказчика: 1) Первый вариант требует большей мощности, но позволяет легко масштабировать и поддерживать сразу несколько систем за счет микросервисной архитектуры.
Способов реализации много, но мы выбрали фреймворк Spring Cloud (Gateway, Discovery) вместе со Spring Boot (на основании опыта наш Java-архитектор решил, что этот технологический стек лучше всего подходит для этих задач).
2) Второй вариант модульный.
Учитывается, если вы планируете поддерживать только одну систему (портал).
Этот вариант хорош тем, что всю инфраструктуру можно развернуть на одном или двух серверах.
Используемые технологии
Открыть 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 стендов для корректного контроля стабильности и корректности нашей экосистемы).
Общий
Данный набор технологий вкупе с выбранным архитектурным решением позволяет нам поставить вопрос разработки портальных, интранет и внешних решений «на конвейер»: делать это быстро, качественно, с разными настройками и использовать лучшие практики.А в следующей статье мы расскажем, как устроен наш фронтенд: о сборке и о том, как мы добились большой возможности повторного использования.
Продолжение будет совсем скоро.
Теги: #с открытым исходным кодом #ИТ-компании #ИТ-компании #бэкенд #Программное обеспечение с открытым исходным кодом #порталы #разработка портала
-
Как Настроить Vpn-Соединение?
19 Oct, 24 -
Отзыв И Рейтинг Каунсы
19 Oct, 24 -
Замена Джойстика Sony Psp Своими Руками
19 Oct, 24 -
Сегментация Сети Для Самых Маленьких
19 Oct, 24 -
Игра В «Корабли» С Помощью Google Earth
19 Oct, 24 -
Существует Ли Викимафия?
19 Oct, 24 -
Видеоотчеты С Gdg Devfest Воронеж 2014
19 Oct, 24