Научная статья на тему 'АГРЕГИРОВАНИЕ КОЛИЧЕСТВА ПОСЕЩЕНИЙ СПРОЕКТИРОВАННОГО СОГЛАСНО МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ ВЕБ-САЙТА ИСПОЛЬЗУЯ ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA'

АГРЕГИРОВАНИЕ КОЛИЧЕСТВА ПОСЕЩЕНИЙ СПРОЕКТИРОВАННОГО СОГЛАСНО МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ ВЕБ-САЙТА ИСПОЛЬЗУЯ ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
36
7
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АГРЕГИРОВАНИЕ ДАННЫХ / ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA / МИКРОСЕРВИСНАЯ АРХИТЕКТУРА / ВЕБ-СЕРВИС / АЛГОРИТМ / СТРУКТУРА ДАННЫХ / АССОЦИАТИВНЫЙ МАССИВ / ХЭШ-ТАБЛИЦА / АНАЛИЗ ПОВЕДЕНИЯ ПОЛЬЗОВАТЕЛЕЙ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Невский А.А.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

AGGREGATION OF THE NUMBER OF USER VISITS TO A WEB-SITE DESIGNED ACCORDING TO MICROSERVICE ARCHITECTURE USING JAVA PROGRAMMING LANGUAGE

This article describes a method for aggregating website user visits data in a distributed environment designed according to a microservice architecture. The algorithm for efficient data aggregation based on the data structure of an associative array in the form of a hash table, implemented in a high-level object-oriented programming language Java, is proposed and described. The result of this algorithm is designed to help and facilitate the work of the administrator and owner of the website. Besides, this algorithm will let a data analyst improve and optimize the website, as well as analyze user behavior on the website.

Текст научной работы на тему «АГРЕГИРОВАНИЕ КОЛИЧЕСТВА ПОСЕЩЕНИЙ СПРОЕКТИРОВАННОГО СОГЛАСНО МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ ВЕБ-САЙТА ИСПОЛЬЗУЯ ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA»

политехн. ин-т. - Новочеркасск, 1987 - Деп. ВНИИНТПИ, 1989. - №10225. - 12 с.

5. Шарнирный узел пространственной стержневой конструкции регулярной структуры: пат. 2586351 Рос. Федерация: МПК Е04В 1/58 / Н.Г. Царитова, Н.А. Бузало; заявитель и патентообладатель ФГБОУ ВПО ЮжноРоссийский государственный политехнический университет (НПИ) имени М.И. Платова - № 2015100939/03; заявл. 12.01.15; опубл. 10.06.16, Бюл. №16.

© Мельников Р.В., 2022

УДК 004.021

Невский А.А.

Ведущий инженер-программист, AWS Certified Architect Бакалавр, Белорусский государственный университет информатики и радиоэлектроники

Республика Беларусь, г. Минск

АГРЕГИРОВАНИЕ КОЛИЧЕСТВА ПОСЕЩЕНИЙ СПРОЕКТИРОВАННОГО СОГЛАСНО МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ ВЕБ-САЙТА ИСПОЛЬЗУЯ ЯЗЫК ПРОГРАММИРОВАНИЯ JAVA

Аннотация

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

Ключевые слова

Агрегирование данных; язык программирования Java; микросервисная архитектура; веб-сервис; алгоритм; структура данных; ассоциативный массив; хэш-таблица; анализ поведения пользователей.

Neuski A.

Lead Software Engineer, AWS Certified Architect Bachelor's degree, Belarusian State University of Informatics and Radioelectronics

Republic of Belarus, Minsk

AGGREGATION OF THE NUMBER OF USER VISITS TO A WEB-SITE DESIGNED ACCORDING TO MICROSERVICE

ARCHITECTURE USING JAVA PROGRAMMING LANGUAGE

Abstract

This article describes a method for aggregating website user visits data in a distributed environment designed according to a microservice architecture. The algorithm for efficient data aggregation based on the data structure of an associative array in the form of a hash table, implemented in a high-level object-oriented programming language Java, is proposed and described. The result of this algorithm is designed to help and facilitate the work of the administrator and owner of the website. Besides, this algorithm will let a data analyst improve and optimize the website, as well as analyze user behavior on the website.

Keywords

Data aggregation; Java programming language; microservice architecture; web-service; algorithm; data structure; associative array; hash table; user behavior analysis.

Актуальность проблемы.

Микросервисная архитектура — вариант сервис-ориентированной архитектуры программного обеспечения, направленный на взаимодействие насколько это возможно небольших, слабо связанных и легко изменяемых модулей — микросервисов, получила наибольшее распространение в течение последних 5-7 лет в связи с развитием практик гибкой разработки и DevOps [5].

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

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

Описание предложенного решения.

Представим себя на месте архитектора веб-системы и предложим базовый API (Application Programming Interface) на высокоуровнемом языке программирования Java, который представляет из себя класс VisitCounter и содержит метод count(). Метод count() возвращает ассоциативный массив в виде хэш-таблицы Map<Long, Long>, который содержит количество визитов пользователей и идентификаторов этих пользователей. На вход метода count() подается другой ассоциативный массив Map<String, UserStats>, каждая запись которого представляет собой общее количество визитов пользователей от данного (одного из многих) микросервиса.

3 Map<Long, Long> count(Map<String, UserStats>... visits) {

Рисунок 1 - Описание сигнатуры метода count()

Класс UserStats содержит в себе поле visitCount, тип данного поля Optional<Long>. Объект-контейнер Optional<> может содержать или не содержать ненулевое значение. Если значение присутствует, isPresent() вернет true, а get() вернет непосредственно само значение объекта [6]. Использование данного объекта-контейнера позволяет снизить ошибки в работе программы.

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

Ключевой структурой данных нашего алгоритма является хеш-таблица — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: добавление новой пары, поиск и удаление пары по ключу. Сложность в О-символике для нашей хеш-таблицы составит O(n) по расходу памяти и 0(1) в среднем для операций вставки, удаления и поиска, что будет одной из самых эффективных подходящих структур данных для нашего алгоритма агрегирования визитов пользователей на веб-сайт.

1 class VisitCounter {

2

3 MapcLong, Long> count (Map<String, UserStats>... visits) {

4 Map<Long, Long> userVisitsMap = new HashMap<>();

5

6 if (visits == null) {

7 return userVisitsMap;

8 } 9

16 for (Hap<String, UserStats> v : visits) {

11 if (v == null) {

12 continue;

13 }

14 for (Hap.Entry<String, UserStats> entry : v.entryset()) {

15 if (entry.getKey() ! = null && entry.getValueQ != null) {

16 try {

17 long userld = Long.parseLong(entry.getkey ());

18 Optional<long> userVisitsCount = entry.getValue().getVisitCount();

19 if (userVisitsCount.isPresent()) {

20 userVisitsMap.put(

21 userld,

22 userVisitsMap.getOrDefault(userId, 0L) + userVisitsCount.get()

23 );

24 }

25 } catch (Exception e) {

26 System.out.printIn(e.toString());

27 }

28 }

29 }

30 }

31 return userVisitsMap;

32 }

33 }

Рисунок 2 - Исходный код алгоритма подсчета визитов пользователей

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

Вывод.

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

Список использованной литературы:

1. Кей С. Хорстманн. Java. Библиотека профессионала, том 1. Основы. 10-е издание. — М.: «Вильямс», 2017. — 864 с.

2. Джошуа Блох. Java. Эффективное программирование. — 3-е. — М.: Диалектика, 2019. — 464 с.

3. Бенджамин Дж. Эванс, Джеймс Гоф, Крис Ньюленд. Java: оптимизация программ. Практические методы повышения производительности приложений в JVM. — М.: Диалектика, 2019. — 448 с.

4. Брюс Эккель. Философия Java. — 4-е изд. — СПб.: Питер, 2018. — 1168 с.

5. Мартин Клеппман. Высоконагруженные приложения. Программирование, масштабирование, поддержка. СПб.: Питер, 2020. — 640 с.

6. Java Platform, Standard Edition 8 API Specification. [Электронный ресурс]. - Режим доступа: https://docs.oracle.com/javase/8/docs/api/ (дата обращения: 05.11.2022)

© Невский А.А., 2022

УДК 629.039

Перевозчикова Е.Д.

магистрант 2 курса ФГБОУ ВО УГНТУ,

г. Уфа, РФ Шарафутдинова Г.М. канд. техн. наук, доцент, ФГБОУ ВО УГНТУ

г. Уфа, РФ

АНАЛИЗ АВАРИЙНОСТИ НА ПРЕДПРИЯТИЯХ НЕФТЕГАЗОВОГО КОМПЛЕКСА РОССИИ

Аннотация

В статье приведен анализ статистики аварий и причин их возникновения на объектах нефтехимической и нефтеперерабатывающей промышленности за 2010-2021 гг. Были выявлены характерные нарушения требований промышленной безопасности.

Ключевые слова

Промышленная безопасность, опасный производственный объект, авария, предприятия нефтегазовой отрасли.

Объекты нефтегазового комплекса России относятся к опасным производственным объектам (далее - ОПО). Опасность обусловлена наличием большого количества пожаровзрывоопасных веществ и материалов, используемых в технологических процессах. Возникновение аварийных ситуаций на объектах нефтяной промышленности приводит к взрывам, пожарам и выбросам опасных веществ, что негативно сказывается на состоянии окружающей среды, жизни и здоровья населения. Аварийность и травматизм являются основными показателями, которые определяют состояние промышленной безопасности ОПО. Проведение анализа произошедших аварий и причин их возникновения необходимо для выявления уязвимых мест технологического процесса на которые следует обратить внимание для своевременного предупреждения возникновения аварийных ситуаций на объектах.

По ежегодным данным Федеральной службы по экологическому, технологическому и атомному надзору были систематизированы и проанализированы данные статистики аварии на объектах нефтехимических, нефтеперерабатывающих производств и объектах нефтепродуктообеспечения на территории Российской Федерации за период 2010-2021 гг [1].

В 2020-м году на ОПО произошло 9 аварий, это в два раза меньше, чем в предыдущем году (см. рис.1). Однако ущерб от аварий, включая экономические потери, значительно увеличился и составил 5 466 038 тыс. руб. (в 2019 году - 1 646 500 тыс. руб.). Данный факт указывает на то, что некоторые аварии

i Надоели баннеры? Вы всегда можете отключить рекламу.