Файл: История развития распределенных вычислительных систем.pdf
Добавлен: 14.05.2023
Просмотров: 288
Скачиваний: 4
Рисунок. 2.3 Схема работы актора
Каждый актор состоит из очереди сообщений и некоторой логики по их обработке. Сообщения в очереди — это простые неизменяемые структуры данных. Актор последовательно выбирает сообщения из очереди и обрабатывает, результатом обработки может быть изменение внутреннего состояния актора и/или отправка им сообщения другому актору или себе. Актор имеет следующие четыре ключевые операции [[40]]:
Отправка сообщения. Актор может взаимодействовать с только другими акторами путем отправки им сообщений. В отличии от ООП (объектно-ориентированный проектирование), где можно выбрать какие методы и свойства доступны снаружи, акторы не предоставляют доступа ко внутренним методам и состоянию. Акторы не могут разделять доступ к данным с изменяемым состоянием. Сообщения также должны быть неизменяемыми.
Создание актора. Актор может создать другого актора, при этом автоматически регистрируется иерархия: первый актор становится супервизором созданного актора.
Смена состояния. Актор может реализовывать модель конечного автомата с помощью метода смены текущего состояния. В этом случае входящие сообщения обрабатываются по-разному в зависимости от текущего состояния.
Контроль за актором. Актор может наблюдать за событиями жизненного цикла другого актора. Актор-создатель также имеет право на определение стратегии действий при возникновении ошибки в созданном им акторе. Например, может выбрать игнорирование, перезапуск или остановку актора с ошибкой.
Рассмотрим состав модуль мгновенного обмена сообщениями:
Рисунок 2.4 Диаграмма вызова программных модулей подсистемы мгновенного обмена сообщениями
Система состоит из трех отдельных частей:
Серверная часть. Реализует всю бизнес логику чата и хранит данные о пользователях, группах и переписках. Программный код написан на языке программирования Scala на базе фреймворка Akka.
Клиентское приложение чата для оператора. Одностраничное приложение, работающее в клиентском приложении колл-центра. Предоставляет интерфейс оператору для использования чата. Программный код разработан на языке JavaScript с использованием фреймворка AngularJs.
Клиентское приложение чата для администратора. Одностраничное приложение, работающее в клиентском приложении колл-центра. Предоставляет интерфейс администратору для настройки чата. Программный код разработан на языке JavaScript с использованием фреймворка AngularJs.
Ключевые сущности, которые должны использоваться в модуле мгновенного обмена сообщениями:
Crm.User (Пользователи из CRM системы). Представляет собой справочник локальных для модуля копий учетных записей операторов и супервайзеров колл-центра. Справочник формируется администратором чат-системы через разработанный интерфейс импорта учетных записей из CRM по запросам бизнес-пользователей. Учетные записи содержат следующие данные: идентификатор учетной записи в CRM; логин, имя, фамилия и отчество пользователя; уровень прав в чате; список групп, в которые включен пользователь и флаг активности. На программном уровне реализуется как агент, доступный во всех частях модуля. Сохраняется на диск в виде снимков состояния и списка записей об изменениях.
Crm.Group (Группы пользователей для массовой рассылки сообщений). Справочник групп, составляемый администратором чат-системы по запросам бизнес-пользователей. Группы в чате необходимы для эффективной рассылки сообщения нескольким пользователям одновременно. Запись содержит данные о названии и активности. На программном уровне реализуется как агент, доступный во всех частях модуля. Сохраняется на диск в виде снимков состояния и списка записей об изменениях.
Chat.Dialog (Диалог между пользователями). В данной структуре хранятся оперативные данные модуля. Каждый диалог содержит следующие данные: список пользователей, участвующих в диалоге; список сообщений в диалоге; время последнего сообщения, флаги наличия новых сообщений для каждого пользователя. Сообщения диалога задаются набором данных: текст, время и автор. Каждый диалог реализован как актор с сохраняемыми на диск данными: снимками текущего состояния и списка изменений.
На рисунке представлена взаимосвязь между описанными сущностями.
Рисунок 2.5 Диаграмма связей сущностей модуля мгновенной отправки сообщений
Модуль хранить изменения сущностей в виде лога. Различают два подхода к выбору сохраняемых изменений [[41]]:
Event sourcing (ES). Сохраняются результирующие изменения в данных
Command sourcing (CS). Сохраняются запросы на изменение данных
Для структур «Пользователь» и «Группа» был выбран подход Command Sourcing, так как логика обработки входных команд достаточно проста и нет необходимости вводить дополнительные типы для каждого вида изменений. Для остальных сущностей использовался подход Event Sourcing, так как их проблемная область достаточно сложна.
2.4 Пример работы разработанного модуля
Далее рассмотрим реализацию модуля мгновенного обмена сообщениями для колл-центра.
Рисунок 2.6 Окно чата супервайзера в интерфейсе клиентского приложения колл-центра
После авторизации клиентская часть модуля чата выводит вкладку с последними контактами текущего пользователя, отсортированными по дате последнего сообщения. Для начала общения пользователь выбирает диалог кликом мыши. После чего клиентское приложение запрашивает историю диалога.
Рисунок 2.7 Окно чата супервайзера в интерфейсе клиентского приложения колл-центра
Сообщения пользователя отображаются справа, сообщения собеседника – слева. Для отправки сообщения пользователь набирает текст и нажимает Enter.
Рисунок 2.8 Окно чата супервайзера в интерфейсе клиентского приложения колл-центра
При поступлении нового сообщения от пользователя, выводится анимированный значок в списке контактов.
Модуль мгновенного обмена сообщений настраивается через панель администрирования. Клиентская часть выполнена на базе JavaScript фреймворка AngularJS, основной особенностью которого является двухстороннее связывание между html-конструкциями (по сути элементами DOM страницы) и переменными в JavaScript коде. Что позволяет программисту работать производительнее, так как нет необходимости работать в программе непосредственно с элементами верстки страницы – все преобразования данных между элементами страницы и переменными кода выполняются автоматически фреймворком.
Рисунок 2.9 Окно просмотра списка пользователей чата
На вкладке «Пользователи» выведен список пользователей, зарегистрированных в модуле чата с набором кнопок для их редактирования и импорта. При нажатии на кнопку редактирования строка видоизменяется и выводит элементы управления для изменения полей Роль и Активность, а также кнопки сохранения и отмены.
Рисунок 2.10 Режим редактирования пользователя
Вкладка «Группы» отображает список зарегистрированных групп, форму добавления группы и кнопки деактивации.
Рисунок 2.11 Просмотр списка групп
При нажатии на кнопку с количеством пользователей происходит переход на редактирование состава группы.
Рисунок 2.12 Редактирование состава группы
Заключение
В данной работе рассматривались распределенные вычислительные системы. История их развития - от первых вычислительных систем, к векторным суперкомпьютерам и в итоге к полноценным кластерным системам. Изучались основополагающие принципы построения распределенных вычислительных систем, различные аспекты и особенности. В практической части данной работы была решена прикладная задача – автоматизация одного из аспектов процесса приемки заказа в интернет-магазине. Был проведен анализ задачи и обоснован выбор программного фреймворка для разработки распределенного приложений. Был спроектирован и реализован дополнительный модуль для CRM-системы компании. После завершения разработки модуль были протестирован и развернуты на боевом сервере (Production environment), снимки экрана с демонстрацией работы приложены в соответствующей главе. Таким образом поставленные во введении цели были выполнены. В дальнейшем предполагается развитие системы по следующим направлениям: расширение функционала модуля мгновенного обмена сообщениями, добавление новых функций (передача файлов, изображений, звонков, отчетность) и интеграция с бизнес-функциями системы приемки и регистрации заказов (передача и управление звонками и заказами в интерфейсе чата).
Использованная литература
- С.В.Абламейко, Краткий курс истории вычислительной техники и информатики, 2014, Минск, Белорусский Государственный Университет, ISBN 978-985-518-978-8.
- В. Л. Баденко, Высокопроизводительные вычисления, 2010, Санкт-Петербург, Издательство Политехнического университета
- Serge Haddad, Distributed Systems design and algorithms, 2011, Addison-Wesley, ISBN 978-1-84821-250-3
- George Coulouris, DISTRIBUTED SYSTEMS Concepts and Design, 2012, Cambridge University, Addison-Wesley, ISBN 978-0-13-214301-1
- Андрианов С.Н. Параллельные и распределенные вычисления. Часть 1, 2007, САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ, ISBN 979-5-983-40073-2
- Ajay D. Kshemkalyani, Distributed Computing Principles, Algorithms, and Systems, 2008, Cambridge University, ISBN 978-0-511-39341-9
- Э. Таненбаум, Распределенные системы. Принципы и парадигмы, 2003, ISBN 5-272-00053-6
- Lee Atchison, Architecting for Scale, 2016, O’Reilly Media, ISBN 978-1-491-94339-7
- Carl Hewitt, A Universal Modular ACTOR Formalism for Artificial Intelligence, 1973
- Raymond Roestenburg, Akka in Action, 2017, Manning Publications Co., ISBN 9781617291012
- Scott Millett, Patterns, Principles, and Practices of Domain-Driven Design, 2015, John Wiley & Sons, ISBN: 978-1-118-71470-6
- Moore, Gordon E. (1965-04-19). "Cramming more components onto integrated circuits". Electronics. Retrieved 2016-07-01.
- https://statswiki.unece.org/display/bigdata/Big+Data+in+Official+Statistics
- Храпский С.Ф. РАСПРЕДЕЛЕННАЯ ОБРАБОТКА ИНФОРМАЦИИ, 1998, Омск, Омский Государственный Технический Университет
- Artur Ejsmont, Web Scalability for Startup Engineers, 2015, McGraw-Hill Education, ISBN: 978-0-07-184366-9