<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article PUBLIC "-//NLM/DTD JATS (Z39.96) Journal Publishing DTD v1.2 20120330//EN" "http://jats.nlm.nih.gov/publishing/1.2/JATS-journalpublishing1.dtd">
    <!--<?xml-stylesheet type="text/xsl" href="article.xsl">-->
<article xmlns:ns0="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.2" xml:lang="en">
	<front>
		<journal-meta>
			<journal-id journal-id-type="issn">2303-9868</journal-id>
			<journal-id journal-id-type="eissn">2227-6017</journal-id>
			<journal-title-group>
				<journal-title>Международный научно-исследовательский журнал</journal-title>
			</journal-title-group>
			<issn pub-type="epub">2303-9868</issn>
			<publisher>
				<publisher-name>ООО Цифра</publisher-name>
			</publisher>
		</journal-meta>
		<article-meta>
			<article-id pub-id-type="doi">10.60797/IRJ.2025.162.123</article-id>
			<article-categories>
				<subj-group>
					<subject>Brief communication</subject>
				</subj-group>
			</article-categories>
			<title-group>
				<article-title>Создание сервиса для маршрутизации трафика</article-title>
			</title-group>
			<contrib-group>
				<contrib contrib-type="author" corresp="yes">
					<contrib-id contrib-id-type="orcid">https://orcid.org/0009-0004-3673-5858</contrib-id>
					<name>
						<surname>Соколов</surname>
						<given-names>Дмитрий Максимович</given-names>
					</name>
					<email>dimonsheu@mail.ru</email>
					<xref ref-type="aff" rid="aff-3">3</xref>
				</contrib>
				<contrib contrib-type="author">
					<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-0700-8465</contrib-id>
					<contrib-id contrib-id-type="rid">https://publons.com/researcher/AAH-9530-2020</contrib-id>
					<name>
						<surname>Романенков</surname>
						<given-names>Александр Михайлович</given-names>
					</name>
					<email>romanaleks@gmail.com</email>
					<xref ref-type="aff" rid="aff-1">1</xref>
					<xref ref-type="aff" rid="aff-2">2</xref>
				</contrib>
			</contrib-group>
			<aff id="aff-1">
				<label>1</label>
				<institution>Московский авиационный институт</institution>
			</aff>
			<aff id="aff-2">
				<label>2</label>
				<institution>Федеральный исследовательский центр «Информатика и управление» Российской Академии Наук</institution>
			</aff>
			<aff id="aff-3">
				<label>3</label>
				<institution>Российский государственный университет им. А.Н. Косыгина</institution>
			</aff>
			<pub-date publication-format="electronic" date-type="pub" iso-8601-date="2025-12-17">
				<day>17</day>
				<month>12</month>
				<year>2025</year>
			</pub-date>
			<pub-date pub-type="collection">
				<year>2025</year>
			</pub-date>
			<volume>14</volume>
			<issue>162</issue>
			<fpage>1</fpage>
			<lpage>14</lpage>
			<history>
				<date date-type="received" iso-8601-date="2025-07-16">
					<day>16</day>
					<month>07</month>
					<year>2025</year>
				</date>
				<date date-type="accepted" iso-8601-date="2025-11-20">
					<day>20</day>
					<month>11</month>
					<year>2025</year>
				</date>
			</history>
			<permissions>
				<copyright-statement>Copyright: &amp;#x00A9; 2022 The Author(s)</copyright-statement>
				<copyright-year>2022</copyright-year>
				<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
					<license-p>
						This is an open-access article distributed under the terms of the Creative Commons Attribution 4.0 International License (CC-BY 4.0), which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited. See 
						<uri xlink:href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</uri>
					</license-p>
					.
				</license>
			</permissions>
			<self-uri xlink:href="https://research-journal.org/archive/12-162-2025-december/10.60797/IRJ.2025.162.123"/>
			<abstract>
				<p>В работе представлено решение в области информационно-коммуникационных технологий, а именно, продукт для автоматизированной маршрутизации трафика вместе с панелью администратора, система доставки уведомлений, система реферальных приглашений, сервис для проведения оплат. Также в статье разобраны стратегии по определению важности характеристик различных конфигураций серверов. Все разработки запускаются в отказоустойчивых фоновых процессах, которые моментально перезапускают продукт в случае остановки любого из кластеров, сохраняя записи состояния ошибки. Анализ требований проводился в целях получения максимальной производительности за наименьшую стоимость (аренда серверов) и сохранения гибкости масштабирования продукта.</p>
			</abstract>
			<kwd-group>
				<kwd>RESTful API</kwd>
				<kwd> нотификации</kwd>
				<kwd> реферальная система</kwd>
				<kwd> маршрутизация трафика</kwd>
				<kwd> телеграм-бот</kwd>
				<kwd> обработка платежей</kwd>
			</kwd-group>
		</article-meta>
	</front>
	<body>
		<sec>
			<title>HTML-content</title>
			<p>1. Введение</p>
			<p>Необходимость в маршрутизации трафика возникает в связи с растущими требованиями к приватности трафика пользователей, устойчивости сетевых соединений и гибкости распределённых систем в условиях интенсивного использования интернет-сервисов. Особенно актуально это в контексте работы с VPN-соединениями, бот-платформами и облачными инфраструктурами, где управление потоками данных требует высокой степени автоматизации и отказоустойчивости.</p>
			<p>Данная задача является актуальной, так как с увеличением числа пользователей и усложнением сетевых топологий возрастает нагрузка на каналы связи и вычислительные ресурсы. Кроме того, пользователи всё чаще нуждаются в простой и быстрой настройке безопасного доступа к сетевым ресурсам без участия технических специалистов. Это требует создания гибких и масштабируемых решений, способных автоматически выбирать наиболее подходящие маршруты, управлять серверами и контролировать подписки.</p>
			<p>2. Методы и принципы исследования</p>
			<p>В продукте используется маршрутизация трафика, которая происходит посредством tun (network tunnel) интерфейса, который нагружает CPU. Также, при высокой нагрузке будет происходить рост одновременных подключений, поэтому нужна высокая широта канала сетевого подключения. Для администрирования продукта необходимо реализовать графический интерфейс, который будет работать с базой данных пользователей.</p>
			<p>3. Основная часть</p>
			<p>На рисунке 1 показана общая схема архитектурного решения разрабатываемого программного продукта. Так здесь содержится сервис для обработки оплат пользователей (Payments WebHook), сервис рассылки уведомлений (Notification Service), Telegram бот в качестве продукта для распространения среди пользователей (TG bot), сервис для организации внутренней бизнес-логики (REST API), сервис для управления внутренними серверами (VPN API), зарубежные сервера (Finland VPS, Germany VPS). Для обеспечения отказоустойчивости сервера принято решение, что запуск изолированных сборок необходимо выполнять внутри автоматически перезапускаемых сервисов (systemd).</p>
			<fig id="F1">
				<label>Figure 1</label>
				<caption>
					<p>Архитектура продукта</p>
				</caption>
				<alt-text>Архитектура продукта</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/28d9fa4b-9c11-4fb7-90e8-d6f9f17ac3b4.png"/>
			</fig>
			<p>Необходимым требованием ко всем дочерним серверам состоит в возможности принятия запросов через VPN API. Файл конфигурации располагается на русском сервере models/countries_url.json и имеет вид:</p>
			<p>Таким образом, для добавления дополнительного сервера, необходимо всего лишь модифицировать конфигурационный файл, добавив в него IP адрес и номер порта.</p>
			<p>Опишем формально полный набор шагов, которые необходимо выполнить пользователю:</p>
			<p>Начало диалога с ботом -&gt; активация пробного периода -&gt; получение ссылки на подключение (на всех дочерних серверах для него создается персональная ссылка) -&gt; покупка подписки.</p>
			<p>Для работы с пользователями создан абстрагированный RESTful API сервис. Он поддерживает стандартный набор CRUD (create, read, update, delete) операций и обеспечивает взаимодействие с базой данных.</p>
			<p>Пример конечной точки для поиска пользователя:</p>
			<p>Пример обращения к сущности для работы с пользователями.</p>
			<p>Пример поиска пользователя по базе данных:</p>
			<p>Каждый раз, при активации пользователем пробной подписки или полноценной покупки подписки, у данного пользователя обновляется срок использования. По истечению этого срока необходимо выполнить уведомление и запросить повторно произвести оплату, для продления срока использования. Решение этой задачи обеспечивает Notification Service, который работает по логике планировщика задач.</p>
			<p>При оплате или активации пробного периода в сервис заносится задача на исполнение обратного вызова функции (отправки уведомления) в назначенное время. Также, проверяется актуальность состояния уведомления, ведь когда пользователь оплачивает 2 и более месяцев, мы не должны ему отправлять уведомления. Для отправки уведомлений сервис проверяет запланированные уведомления каждую минуту и, если таковые присутствуют, он отправляет их пользователю. Все задачи сохраняются локально, а также проверяются при перезапуске сервиса. Данный сервис абстрагирован от всего функционала отдельным RESTful API контроллером.</p>
			<p>Поддерживаемые функции обратного вызова:</p>
			<p>Репозиторий для запросов в базу данных запланированных уведомлений:</p>
			<p>Реализация планировщика уведомлений:</p>
			<p>REST API контроллер:</p>
			<p>Вызвать меню администратора (рисунок 2) могут только Telegram аккаунты, идентификационные номера которых указаны в конфигурации администраторов.</p>
			<fig id="F2">
				<label>Figure 2</label>
				<caption>
					<p>Панель администратора</p>
				</caption>
				<alt-text>Панель администратора</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/235d6c05-19ba-448b-b15e-3a6960e0a794.png"/>
			</fig>
			<fig id="F3">
				<label>Figure 3</label>
				<caption>
					<p>Демонстрация поиска пользователя</p>
				</caption>
				<alt-text>Демонстрация поиска пользователя</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/e28220bc-cd95-4204-9d26-8fb155ff422b.png"/>
			</fig>
			<p>Рассылка сообщений пользователям позволяет указать текст и названия кнопок, которые существуют в дизайне для добавления к сообщению. После отправки текста сообщения оно будет разослано всем пользователям. Графический интерфейс можно увидеть на рисунке 4. Названия кнопок указываются, соответствуя названию в отдельном классе кнопок приложения</p>
			<fig id="F4">
				<label>Figure 4</label>
				<caption>
					<p>Демонстрация рассылки</p>
				</caption>
				<alt-text>Демонстрация рассылки</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/a0e9aead-e184-4de4-b2c3-f4c1bcec6815.png"/>
			</fig>
			<p>Реализация рассылки:</p>
			<p>Также поддерживается изменение количества дней подписки. Это необходимо для того, чтобы в случае ошибки обработки платежа администратор, не имеющий навыков внесения правок в базу данных, мог с легкостью изменить срок подписки. Бот потребует имя пользователя (рисунок 5) или идентификационный номер пользователя, а также срок в днях и месяцах, который необходимо добавить пользователю.</p>
			<fig id="F5">
				<label>Figure 5</label>
				<caption>
					<p>Демонстрация изменения срока</p>
				</caption>
				<alt-text>Демонстрация изменения срока</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/d628067f-37ce-4e87-9622-12e7736592dc.png"/>
			</fig>
			<p>Еще панель администрации поддерживает отправку пробного уведомления (рисунок 6). Данная функция необходима для тестирования сервиса уведомлений после перезапуска всех фоновых процессов сервиса. Бот запросит указать количество секунд, через которое необходимо прислать уведомление c тестовой кнопкой</p>
			<fig id="F6">
				<label>Figure 6</label>
				<caption>
					<p>Отправка тестового уведомления</p>
				</caption>
				<alt-text>Отправка тестового уведомления</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/1a86c2c2-7887-4149-a2d1-3cf065925365.png"/>
			</fig>
			<p>Финансово выгодно для VPN сервера использовать IPv6 адреса, потому что он состоит из 128 бит, что в 4 раза больше IPv4. Но на данный момент есть проблема, так как не все сайты поддерживают подключение по IPv6 адресу. В качестве решения была использована стратегия подключения </p>
			<p>Приличное количество людей уходят после истечения пробного срока, поэтому было решено завести регулярную проверку последней подписки. С помощью crontab каждую неделю выполняется скрипт, который удаляет пользователей, у которых последняя подписка была куплена более полугода назад.</p>
			<p>В качестве решения для обработки платежей было принято использовать ЮMoney. Все события успешных и неуспешных попыток оплаты приходят в Payments Service WebHook. Решение в виде вебхука привносит преимущество для событий, которые приходят во время неактивного состояния сервиса. События оплат будут пытаться прийти в вебхук пока сервис не вернет код статуса (то есть попытки прекратятся, только когда сервис уведомит ЮMoney кодом статуса, что событие было обработано). В случае неуспешной попытки пользователю придет сообщение об ошибке, а владельцу инфраструктуры — сообщение об ошибке и логи. В случае успешного проведения платежа, сервис обновит все записи пользователя на существующих серверах (продлит подписку), заведет отложенное уведомление на окончание срока подписки и пришлет пользователю сообщение с инструкцией для подключения. В теле события об оплате приходит идентификационный номер человека.</p>
			<p>Реализация прослушивания платежей:</p>
			<p>Для упрощения распространения продукта было принято решение поддержать реферальную систему. Для каждого пользователя генерируется персональная ссылка для распространения. Если человек поделится со своим другом ссылкой, а тот, в свою очередь, оплатит подписку на месяц, то рефералу начисляются бонусные 10 дней. Графический интерфейс реферального окна можно увидеть на рисунке 7.</p>
			<fig id="F7">
				<label>Figure 7</label>
				<caption>
					<p>Реферальное окно</p>
				</caption>
				<alt-text>Реферальное окно</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/4fa90da2-1a45-4ffc-9835-ce533ee7f4fe.png"/>
			</fig>
			<p>Для оценки производительности полученного продукта было проведено нагрузочное тестирование. В качестве конечной точки использовался запрос на создание пользователя. Данная функция порождает сущность пользователя в базе данных, а также количество новых пользователей напрямую зависит от неё. Все метрики собирались на создании 1, 10, 100 пользователей.</p>
			<p>Сперва была проанализирована (см. График тестирования 1) нагрузка на процессор и оперативную память (ОЗУ). Можно заметить, что при увеличении одновременного количества запросов, сервер задействует больше ресурсов для скорейшей отправки ответов, но работает исправно.</p>
			<fig id="F8">
				<label>Figure 8</label>
				<caption>
					<p>График тестирования 1</p>
				</caption>
				<alt-text>График тестирования 1</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/ce1ecc79-fb2b-4bb7-abb8-4622bab765d3.png"/>
			</fig>
			<fig id="F9">
				<label>Figure 9</label>
				<caption>
					<p>График тестирования 2</p>
				</caption>
				<alt-text>График тестирования 2</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/f5f38a1f-5ca0-4656-a8d4-36140b4f22fb.png"/>
			</fig>
			<fig id="F10">
				<label>Figure 10</label>
				<caption>
					<p>График тестирования 3</p>
				</caption>
				<alt-text>График тестирования 3</alt-text>
				<graphic ns0:href="/media/images/2025-12-10/6b46c53c-9938-43ce-bc0e-11e9fd8e464c.png"/>
			</fig>
			<p>4. Литературный обзор и обоснование актуальности</p>
			<p>Современные тенденции цифровизации и роста требований к сетевой безопасности усиливают интерес к технологиям частных виртуальных сетей и автоматизации их управления. По данным Таненбаума и Эдвардса, они являются ключевым инструментом для защиты сетевых соединений и обеспечения конфиденциальности данных.</p>
			<p>Использование REST API позволяет стандартизировать взаимодействие между клиентскими и серверными компонентами распределённых систем. Реализация таких решений на базе Flask обеспечивает простоту разработки, расширяемость и интеграцию с внешними сервисами.</p>
			<p>Интерфейсы на основе чат-ботов в мессенджерах, таких как Telegram, описанные Янартханамом, повышают доступность и удобство администрирования систем. В совокупности эти подходы позволяют создавать эффективные инструменты для управления VPN-инфраструктурой через интуитивно понятный интерфейс.</p>
			<p>Таким образом, актуальность работы обусловлена необходимостью разработки удобного и безопасного средства управления VPN-службами с использованием Telegram-бота и REST-интерфейсов.</p>
			<p>5. Заключение</p>
			<p>В ходе работы были разработаны и протестированы следующие сервисы:</p>
			<p>- Main API (главный REST сервис, обрабатывающий все действия пользователя и данные на внешних серверах)</p>
			<p>- Country API (REST сервис, развернутый на каждом сервере через который происходит маршрутизация трафика, нужен для управления внутренним состоянием сервера)</p>
			<p>- Mongo API (абстракция, созданная для сбора и сохранения данных)</p>
			<p>- VPN API (абстракция, которая общается с группой Country API)</p>
			<p>- Telegram bot (графический интерфейс, интегрированный в telegram бота)</p>
			<p>Комбинация данных сервисов выполняет все поставленные задачи и предоставляет архитектуру, которая готова к дальнейшему масштабированию. Нагрузочное тестирование и метрики производительности продукта показывают ожидаемые результаты.</p>
			<p>Используя описанные в работе подходы, алгоритмы и идеи, удалось подготовить продукт, который предоставляет маршрутизацию трафика, способен выдержать высокую нагрузку, готов к масштабированию, также имеет настраиваемый графический интерфейс.</p>
		</sec>
		<sec sec-type="supplementary-material">
			<title>Additional File</title>
			<p>The additional file for this article can be found as follows:</p>
			<supplementary-material xmlns:xlink="http://www.w3.org/1999/xlink" id="S1" xlink:href="https://doi.org/10.5334/cpsy.78.s1">
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/20480.docx">20480.docx</inline-supplementary-material>]-->
				<!--[<inline-supplementary-material xlink:title="local_file" xlink:href="https://research-journal.org/media/articles/20480.pdf">20480.pdf</inline-supplementary-material>]-->
				<label>Online Supplementary Material</label>
				<caption>
					<p>
						Further description of analytic pipeline and patient demographic information. DOI:
						<italic>
							<uri>https://doi.org/10.60797/IRJ.2025.162.123</uri>
						</italic>
					</p>
				</caption>
			</supplementary-material>
		</sec>
	</body>
	<back>
		<ack>
			<title>Acknowledgements</title>
			<p/>
		</ack>
		<sec>
			<title>Competing Interests</title>
			<p/>
		</sec>
		<ref-list>
			<ref id="B1">
				<label>1</label>
				<mixed-citation publication-type="confproc">Танненбаум Э.С. Компьютерные сети, 5-е издание / Э.С. Танненбаум, Д. Уэзеролл. — Санкт-Петербург: Питер, 2022. — 960 с.</mixed-citation>
			</ref>
			<ref id="B2">
				<label>2</label>
				<mixed-citation publication-type="confproc">Гринберг М. Веб-разработка на основе Flask / М. Гринберг. — Москва: ДМК-Пресс, 2016. — 272 с.</mixed-citation>
			</ref>
			<ref id="B3">
				<label>3</label>
				<mixed-citation publication-type="confproc">Макконнелл С. Совершенный Код / С. Макконнелл. — Санкт-Петербург: BHV-Petersburg, 2017. — 896 p.</mixed-citation>
			</ref>
			<ref id="B4">
				<label>4</label>
				<mixed-citation publication-type="confproc">Бернс Б. Распределенные системы. Паттерны проектирования / Б. Бернс. — Санкт-Петербург: Питер, 2019. — 224 с.</mixed-citation>
			</ref>
			<ref id="B5">
				<label>5</label>
				<mixed-citation publication-type="confproc">Шоттс У.Э. Командная строка Linux. Полное руководство / У.Э. Шоттс. — Санкт-Петербург: Питер, 2022. — 544 с.</mixed-citation>
			</ref>
			<ref id="B6">
				<label>6</label>
				<mixed-citation publication-type="confproc">Олбинг С. Идиомы bash / С. Олбинг, Ю.П. Фоссен. — Санкт-Петербург: Питер, 2022. — 167 с.</mixed-citation>
			</ref>
			<ref id="B7">
				<label>7</label>
				<mixed-citation publication-type="confproc">Мартин Р. Чистый код / Р. Мартин. — Санкт-Петербург: Питер, 2020. — 464 с.</mixed-citation>
			</ref>
			<ref id="B8">
				<label>8</label>
				<mixed-citation publication-type="confproc">Брэдшоу Ш. Mongo DB. Полное руководство. Мощная и масштабная система управления базами данных / Ш. Брэдшоу, Й. Брэзил, К. Ходоров. — Москва: ДМК-пресс, 2020. — 540 c.</mixed-citation>
			</ref>
			<ref id="B9">
				<label>9</label>
				<mixed-citation publication-type="confproc">Edwards J. Nortel Guide to VPN Routing for Security and VoIP / J. Edwards, R. Bramante, A. Martin — Hoboken: Wiley, 2006. — 768 с. [in English]</mixed-citation>
			</ref>
			<ref id="B10">
				<label>10</label>
				<mixed-citation publication-type="confproc">Джанарсанам С. Разработка чат-ботов и разговорных интерфейсов / С. Джанарсанам. — Москва: ДМК-пресс, 2019. — 340 с.</mixed-citation>
			</ref>
			<ref id="B11">
				<label>11</label>
				<mixed-citation publication-type="confproc">Натальченко И.А. Анализ механизмов передачи крупных массивов данных через сеть интернет с помощью технологии веб-сервиса / И.А. Натальченко // Инженерный вестник Дона. — 2008. — № 4 (6). — с. 11–15.</mixed-citation>
			</ref>
		</ref-list>
	</back>
	<fundings/>
</article>