Господа, подскажите умные слова для гугления следующей задачи: есть сервис, состоящий из N инстансов, есть 2 клиента, нужно обеспечить передачу куска данных по цепочке сервис -> клиент 1 -> клиент 2 -> сервис, так чтобы кусок данных оказался на том же инстансе сервиса, с которого и начал своё движение. Мне в голову приходит 2 варианта решения: балансировка запросов по какому-нибудь ключу, который могут знать (генерить) клиент 1 и клиент 2, тогда они оба попадут на один и тот же инстанс сервиса, либо общее хранилище/кэш/дистрибьютед очередь между сервисами, тогда данные от клиента 2 поступают в эту хранилку, а оттуда подсасываются в нужный инстанс сервиса. Потерями при вылете одного инстанса сервиса можно пренебречь.
Оба варианта с недостатками: в случае балансировки у меня получится часть логики на инфраструктурном слое, что не есть удобно и очевидно, плюс плохо отлаживаемо, в случае общего хранилища — мы получаем стейтфул плюс зависимость от общего хранилища.
Может быть я не знаю какого-то ещё очевидного инженерного решения для такого рода проблем?
У вас в 1м случае минимум логики же. Надо просто уметь считать sharding key.