У нас есть настройка архитектуры, при которой клиентское приложение выполняется на сервере, и мы хотели бы иметь микросервис, отвечающий за предоставление функций распределенной блокировки / карты / кэша. Этот сервис Micro внутри компании использует Redisson, клиент java, который может общаться с Redis. Теперь мы хотели бы предоставить apis lock, unlock, get, put из сервиса Micro, который может использовать клиентское приложение. Для связи между приложениями и микро сервисами мы будем использовать протокол gRP C.
Как правильно предложить клиенту блокировку / разблокировку apis от Microservice? В настоящее время мы используем Semapbase от Redisson на RedissonMap RMap.getLock (..)), и оно следует java Спецификация блокировки, поэтому поток, который получает только распределенную блокировку, может разблокировать. Одна из проблем заключается в том, что поскольку блокировка обрабатывается микросервисом, клиент должен делать отдельные запросы на блокировку и разблокировку, которые могут обслуживаться или не обслуживаться одним и тем же узлом (микросервисом) и одним и тем же потоком. это можно обойти, используя семафор (с 1 разрешением). Таким образом, по существу мы используем Rsemaphore of redisson для сервера сценария взаимного исключения
. Мне более интересно узнать, какими должны быть факторы, которые необходимо учитывать при разработке API spe c для приобретения. / release, например, должен ли запрос на получение / разблокирование разрешений в Microservice быть синхронным или асинхронным.