обработка запросов параллелизма на пропускную способность треков - PullRequest
1 голос
/ 06 апреля 2020

Я разрабатываю программное обеспечение, например, управление складом.

И у меня 1 проблема.

Проблема:

У меня есть X треков. Каждый трек имеет различную вместимость.

Теперь у меня есть несколько операторов, которые принимают заказы и заполняют трек. При нажатии оператором «Принять» - оператор синхронизации должен получить ответ, если заказы приняты на выбранную дорожку. Допустим, у Трека А есть емкость на 100 заказов, а внутри - 98 заказов.

Теперь 3 оператора принимают заказы на этот трек ...

Я хочу только 2 заказа и на 3-й заказ показать сообщение, как - извините, ваш заказ не принят, потому что здесь нет места в треке.

Подход № 1: Просто установите блокировку на сервере.

Код:

Контроллер API:

[Route("api/[controller]")]
    [ApiController]
    public class TrackController : ControllerBase
    {
        public async Task<IActionResult> Test()
        {
            Console.WriteLine("Handle Request ");

            bool result = await TrackManager.ReservePlace();

            return Ok(result);
        }
    }

TrackManager:

public static class TrackManager
    {
        private static SemaphoreSlim _semaphore { get; set; }
        public static void Init()
        {
            _semaphore = new SemaphoreSlim(1);
        }

        public static async Task<bool> ReservePlace()
        {
            await _semaphore.WaitAsync();

            Console.WriteLine("Order in process...");

           await  Task.Delay(2500); <<< ==== Just simulate the biggest delay with database

            _semaphore.Release();

            return true;
        }
    }

Мне действительно не нравится этот подход.

Второй подход - сделать что-то вроде взаимоблокировки в БД.

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


Вопросы:

1) Каков наилучший способ обработки запросов на параллелизм и синхронизацию ответов?

2) Я думаю о переносе всего этого приложения на сервер (AWS Lambda) и их облачную базу данных. Какое решение я могу сделать их ... потому что даже мое решение блокировки может быть реализовано с помощью Lambda ....

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...