Skip to content

ddlifter/ya-proj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

//Временно неактуально, проект в стадии разработки

Распределенный вычислитель арифметических выражений ddlifter

Данный проект являлся промежуточной аттестацией на курсе Яндекс Лицея "Программирование на Go"

Привет, дорогой проверяющий! Я рад представить мой проект! Начну с инструкции по запуску, после чего представлю архитектуру проекта, используемые технологии и описание работы. Если будут вопросы: @simplykorall - tg

Установка

  1. git clone https://github.com/ddlifter/ya-proj
    
    
  2. cd ya-proj/cmd/app/
    
    
  3. go get github.com/mattn/go-sqlite3 && go get github.com/gorilla/mux
    
    
  4. go run .
    

Нужно подождать пока не появится надпись server started

Далее необходимо открыть страницу в браузере по адресу http://localhost:8000/api/go/

Архитектура

image

Клиент отправляет на сервер выражения для вычисления. Тот в свою очередь взаимодействует с базой данных, в которой хранит все выражения(их статус и результат), операции(+-*/) и время их выполнения, а также состояния агентов. Далее создатеся пул задач и пул свободных агентов, размеры которых по умолчанию равны, однако в коде присутсвует возможность их изменения. Каждый из созданных агентов конкурентно решает свою задачу и после завершения сообщает результат серверу, который в свою очередб обновляет информацию в базе данных и предоставляет клиенту пользовательский интерфейс для просмотра данных.

СтэкТехнологий

В рамках проекта, безусловно, в качестве основного сервереного языка использовался Go, в качестве СУБД я выбрал маленькую и легко переносимую sqlite3, файл с которой находится в директории проекта. Для написания пользовательского интерфейса были применены HTML, CSS и JS. К сожалению, я не успел доделать фронтенд до конца и на двух страничках данные просто отображены в формате JSON. В качестве web фреймворка для маршрутизации и построение основной логики приложения я выбрал gorilla/mux, также использовал go-sqlite3 для взаимодействия с базой данных. Я отказался от использования Docker и Docker-compose ввиду отсутствия времени и желания нагромождать проект очередной бизнес-логикой.

ОписаниеРаботы

  • В директории cmd/app лежит файл main.go, который является точкой входа в приложение. Именно он описывает маршруты моего приложения.
  • package server описывает основную логику работы сервера и взаимодействия с таблицей задач.
  • package agent описывает непосредственно запуск работы агентов, а также взаимодействие с таблицами агентов и операций.
  • package database содержит описание моделей и устанавливает соединение со всеми таблицами
  • package workers описывает конкурентную работу агентов
  • package calculate описывает преобразование строкового выражения и его ручное вычисление

Примеры

  • На вкладке с операциями мы можем указать любое время выполнения(в секундах, также необходимо нажать кнопку обновить), например: image
  • Сервер может решать любые элементарные выражения, например, введем 5+5 и отправим: image
  • Также пользователь может отправлять выражения в несколько действий, например, (1+2)*(5-1)+(3+2): image
  • Посмотрим результаты наших выражений и увидим верные ответы: image
  • Кроме того, допускается возможность того, что одно выражение находится в процессе вычислений, а второе уже выполнилось, так, например, поставим операции + время 10 секунд, а операции - 1 секунду и отправим на вычисление два выражения: 1+1 и 1-1. Тогда после того, как выполнится второе выражение, его статус будет complete, в то время как выражение с + будет pending. Также все выражения до того, как будут отправлены на вычисления кнопкой Отправить будут иметь статус waiting

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published