Вопрос

Я использую синхронную реализацию Jredis, но я планирую переключиться на асинхронный способ общения с сервером Redis.

Но до этого я хотел бы попросить сообщества, будь то реализация Алфазеро JRDISFUTURE jrdis. достаточно стабилен для производства или нет?

Есть ли кто -нибудь, кто его использует или имеет опыт работы с этим?

Спасибо!

Это было полезно?

Решение

Когда Jredis получает поддержку семантики транзакций (Redis 1.3.n, Jredis Master Branch), то, конечно, она должна быть «стабильной».

Redis Protocol для нерадиционных команд, сами атомный, позволяет окно необработанной ошибки при отправке деструктивной команды и на фазе чтения неисправности соединения. Клиент не имеет способа узнать, если Redis на самом деле обработал последний запрос, но ответ был удален из-за сбоя сети (например). Даже базовый запрос / ответный клиент восприимчив к этому (и я думаю, что это не ограничено Java, как SE.)

Поскольку протокол Redis не требует каких -либо метаданных (вообще) с командами типа DML и DDL (например, нет последующего номера команды), это окно сбоя открывается.

С трубопроводом больше нет последовательной ассоциации между командой, которая пишется, и ответ, который читается. (Труба отправляет команду, которая представляет собой команды n позади того, что вызвало Redis, чтобы выпустить ответы, который будет прочитан одновременно. Если что-то идет Капут, в воздухе есть много блюд :)

Что сказал, каждый будущий объект в трубе будет помечен как неисправен, и вы будете знать Именно на что отклик неисправность произошла.

Это квалифицируется как «нестабильный»? На мой взгляд, нет. Это проблема с трубопроводом.

Опять же, Redis 1.3.n с семантикой транзакции полностью обращается к этой проблеме.

Помимо этой проблемы, с асинхронным (трубопроводом), с вашей стороны существует большая ответственность за то, чтобы вы не перегружали ввод в разъем. В огромной степени трубопроводы Jredis защищают вас от этого (поскольку поток вызывающего абонента используется, чтобы сеть записывала, таким образом, естественным образом демпфировать входную нагрузку на ожидающую очередь ответов).

Но вам все еще нужно запустить тесты - вы сказали «Производство», верно? )) - и размер ваших коробок и поместите крышку на количество погрузчиков на переднем конце.

Я также потенциально рекомендовал бы не запускать более одного трубопровода Jredis на многоядерных машинах. В существующей реализации (которая не содержит буфер записи) существует место для эффективности (в контексте полной использования полосы пропускания и максимизации пропускной способности), чтобы получить несколько трубопроводов на тот же сервер. В то время как один трубопровод занят созданием буферов для написания, другой пишет и т. Д., Но эти два трубопровода будут мешать друг другу из -за их (неизбежного - помните, что это очереди, и должна возникнуть некоторая форма синхронизации) и периодической недействительной кэша (На каждом Dequeue/Enqueue в худшем случае - но в Дуге Леа мы доверяем.) Поэтому, если трубопровод средняя задержка достигнет D1 (в изоляции), то и труба B., к сожалению, запуск двух из них на одних и тех же ядра В новой системе широкий период допуска кэша, который составляет половину исходной системы, так что происходит вдвое больше недействительных кэша (в среднем). Так что это самостоятельно. Но проверьте условия нагрузки, а также на платформе для развертывания производства.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top