Задача
В рамках работы над HelpDesk-системой были поставлены задачи по разработке ПО для управления регистрацией пользователей и их группами. Необходимо было обеспечить возможность автоматической регистрации, создать сиcтему приглашений в коммерческие группы, а также систему рассылки e-mail нотификаций и внутригрупповых рассылок.
- Разработан модуль для обработки и маршрутизации POST запросов в зависимости от типа события.
- Взаимодействие с основной частью наших сервисов реализовано с помощью REST.
- Создана организованная рассылка необходимых e-mail сообщений.
Подход
Команда разработчиков СКЭНД приняла решение использовать язык программирования Go. Go или Golang — эффективное и современное средство сетевого программирования. Поэтому Golang и соответствующие frameworks и были выбраны для реализации необходимой функциональности проектируемого модуля.
Используя стандартные средства (пакеты http, net, websocket, html и xml) в максимально приемлимые сроки было создано распределенное приложение (Distributed Applications) со сложной внутренней структурой. Таким образом мы получили меньшее количество легко читаемого кода.
Поддержка конкурентности (concurrent programming) в Golang и использование балансировщика нагрузки (HTTP load balancer) позволило обрабатывать и отправлять достаточное количество запросов, распределив их в упорядоченном виде по доступным ресурсам. При наличии минимального количества системных ресурсов, Golang позволяет использовать “green threads” поверх основных системных путей. Благодаря использованию динамического стека (dynamic stack) и конкурентного сборщика мусора (concurrent Gargabe Collector) наше приложение обходится меньшим количетвом ресурсов.
Ключевые решения
Модуль должен реализовывать следующие основные возможности:
- Автоматическое создание учётной записи, отсылка соответствующего e-mail, а также приглашение о вступлении в уже существующие группы.
- Организация запросов на вхождение в группу пользователей либо возможность приглашения в группу модератором.
- Обеспечение возможности отправки сообщений всем членам группы.
- Обеспечение надежной и стабильной работы с достаточно большим количеством пользователей и запросов, отправляемых одновременно.
- Поддержка REST и\или SOAP технологий взаимодействия компонентов.
- Обеспечение достаточной скорости и минимального потребления памяти при обработке большого количества запросов.
- Интеграция с Atlassian Jira Service Desk.
Результат
Модуль регистрации пользователей и управления группами разработанный с использованием языка Golang.
Модуль J-GroupDesk разрабатывался непосредственно для системы HelpDesk и является ее частью, но в дальнейшем на базе нашего модуля могут создаваться расширения для интеграции с любыми информационными системами и сервисами, имеющими REST API (такими как Atlassian Jira Service Desk, Atlassian Confluence, Slack).