Как стать автором
Обновить

Комментарии 4

Какая интересная статья.

1. Судя по схемам, вы уперлись в СУБД, и к самой рыбе особых требований по скорости рассасывания очереди не предъявляется. Можно было оставить хранилище на мемкеше, и рыба работала бы просто как контроллер мемкеш-очередь-субд?

2. Опять же если рыбу можно было бы рассматривать просто как контроллер, можно было бы реализовать на php ее? То есть приложение смотрит в memcache, если не находит там ничего, добавляет запись в очередь и отдает пустой ответ. А работающая рыба на фоне просто бы разруливала эту очередь. Была бы стандартная схема.

3. Опять же, может имело смысл расширить функционал memcache? По сути вам надо было его научить ходить в БД, добавлять очередь.
Ответил на подобные вопросы чуть ниже.
Интересная статья, но, кажется, можно было сделать проще. Дополнительно к мемкешу поднимается демон очереди, после чего пишется такая логика:

* Если попали — ОК
* Если промах — добавляем запрос в очередь
* На другом конце очереди крутятся воркеры на Perl/Python/ваш_любимый_язык, которые ходят с запросами в базу и кладут их в мемкэш.

Такое решение не рассматривалось?
Мы думали об этом, более того, хотели именно так и реализовать. А потом придумали альтернативу. Мотивация была следующая:
* Один коннект и 1 запрос к хранилищу — это всегда лучше, чем два коннекта и два запроса (к хранилищу и диспетчеру очередей). Сеть тоже надо беречь.
* В нашем случае в приложении не пришлось ничего править.
* Это прикольно.

В качестве побочный продукта мы получили хранилище нужной нам структуры: у нас k=>v — это многие к одному, что в нашем случае очень хорошо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий