LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Я так понимаю что тут главная проблема чтоб ответ пришел именно на тот воркер, который обрабатывал предыдущий ответ клиента (ну и отправил уточняющий вопрос), так?

Так это не проблема. Просто на сессию клиента давать один воркер.

тут без разницы упадет MQ или нет, потому что еще и воркер может упасть

Ну придётся заново восстанавливать контекст. Главное, чтобы при наличии контекста, повторного выполнения не происходило.

В общем надо стараться чтоб воркеры вообще не зависили от того кто и что им до этого писал. Тогда сможете оценить все плюшки микросервисной модели.

В 1С так сделали. Теперь 90% серверного кода выглядят так:

Функция ВыполнитьНаСервере(Параметры, Ключ)
  Кэш = ПолучитьИзВременногоХранилища(Ключ);
  Если Кэш = Неопределено Тогда
    Кэш = ПолучитьДанные();
  КонецЕсли;
  ....
  Ключ = ПоместитьВоВременноеХранилище(Кэш);
  Возврат Результат;
КонецФункции
и такой бойлерплейт гасит всю производительность. Её и так было не много, а теперь ещё в 3 раза медленней.

По-моему, лучше, когда сервис держит общий контекст всегда и посессионый в кэше со слабым ключом. Чем когда этот контекст по каждому запросу заново формируется (как в HTTP/cgi-bin).

Исходная версия monk, :

Я так понимаю что тут главная проблема чтоб ответ пришел именно на тот воркер, который обрабатывал предыдущий ответ клиента (ну и отправил уточняющий вопрос), так?

Так это не проблема. Просто на сессию клиента давать один воркер.

тут без разницы упадет MQ или нет, потому что еще и воркер может упасть

Ну придётся заново восстанавливать контекст. Главное, чтобы при наличии контекста, повторного выполнения не происходило.

В общем надо стараться чтоб воркеры вообще не зависили от того кто и что им до этого писал. Тогда сможете оценить все плюшки микросервисной модели.

В 1С так сделали. Теперь 90% серверного кода выглядят так:

Функция ВыполнитьНаСервере(Параметры, Ключ)
  Кэш = ПрочитатьИзХранилища(Ключ);
  Если Кэш = Неопределено Тогда
    Кэш = ПолучитьДанные();
  КонецЕсли;
  ....
  ЗаписатьВХранилище(Ключ, Кэш);
  Возврат Результат;
КонецФункции
и такой бойлерплейт гасит всю производительность. Её и так было не много, а теперь ещё в 3 раза медленней.

По-моему, лучше, когда сервис держит общий контекст всегда и посессионый в кэше со слабым ключом. Чем когда этот контекст по каждому запросу заново формируется (как в HTTP/cgi-bin).