Giter VIP home page Giter VIP logo

orderprocessing's Introduction

Задача:

Реализовать обработать N-заказов M-воркерами с применением паттернов Pipeline и WorkerPool. Параметры N >= 5 и M >= 2 задаются как константы в глобальной области видимости в конфиге internal/config/config.go.

Симуляция:

  1. Без применения паттернов -- cmd/gateway/base
  2. С применением паттернов WorkerPool и Pipeline -- cmd/gateway/worker_pool_pipeline
  3. C применением паттернов WorkerPool, Pipeline и FanIn-FanOut -- cmd/gateway/worker_pool_pipeline_fan

Реализация:

Структура заказа состоит из следующих полей:

  • ID товара
  • ID склада
  • ID пункта выдачи заказа
  • ID воркера, который обработал заказ
  • Массив состояний, в которых находился заказ в рамках пайплайна

Структура состояния заказа состоит из следующих полей:

  • Наименование: [Создан, Обработан, Выполнен]
  • Время перехода в данное состояние

Каждое состояние является шагом пайплайна. Входные данные пайплайна:

  • Канал, содержащий структуры заказов с инициализированным полем ID товара

Шаг "Создан" пайплайна:

  • В массив состояний добавляется новое состояние "Создан"

Шаг "Обработан" пайплайна:

  • Инициализируется склад для заказа - результат взятия ID товара по модулю 2
  • В массив состояний добавляется новое состояние "Обработан"
  • Использовать паттерны FanIn/FanOut

Шаг "Завершен" пайплайна:

  • Инициализируется пункт выдачи заказа - результат суммы ID товара и ID склада
  • В массив состояний добавляется новое состояние "Завершен"

Обработка канала с заказами осуществляется M-воркерами. Все шаги пайплайна конкретного заказа обрабатываются в рамках одного воркера. Перед началом выполнения пайплайна каждому заказу присваивается ID воркера, который его обрабатывает. После того, как заказ прошел все стадии обработки, необходимо передать заказ в канал с обработанными заказами.

Основной поток приложения передает в стандартный поток вывода обработанные заказы в JSON формате структуры заказа.

orderprocessing's People

Contributors

art22m avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.