LINUX.ORG.RU

Параллельность обработки запросов и наивный кеш на структуре данных

 hypnotoad, ,


0

1

Есть «веб-сервис»,в котором хотелось бы кешировать операции запросов в РСУБД с целью делать запросы в РСУБД по поводу состояния объектов мониторинга не чаще, чем «период кеширования».

Как обычно: если объекта в кеше нет или объект есть, но он неактуален - сделать запрос в РСУБД (после чего создать новый или обновить старый объект в кеше), иначе - взять из кеша.

Мне бы хватило кеша полностью in-memory, на структуре данных Perl.

Модификация переменной-«кеша» уровня модуля - работает. То есть, к некоторому моему удивлению, можно запросто при вызове curl http://localhost:port/mojo/route1 и http://localhost:port/mojo/route2 - модифицировать одну и ту же глобальную переменную, и все модификации будут благополучно сохраняться.

Как так может быть и к чему это может привести?

То ли запросы обрабатываются и morbo, и hypnotoad'ом последовательно, то ли... здесь мысль заходит в тупик, поскольку параллельность запросов вроде бы обеспечивается не fork'ом (ведь кеш успешно модифицируется из двух разных запросов), но, очевидно, и не thread'ами. В таком случае, учитывая тот факт, что на уровне ОС кроме процессов, потоков исполнения («тредов») и прерываний ничего в общем-то нет и та же асинхронная обработка происходит в потоках исполнения... что же всё-таки внутри параллельности обработки запросов hypnotoad'ом?

★★★★★

Последнее исправление: DRVTiny (всего исправлений: 1)

Вижу, что hypnotoad отфоркался у меня 5 раз. Подозреваю, что модификация переменной была возможна только потому, что все запросы были последовательными и приходили к одному и тому же процессу hypnotoad'а... Но под нагрузкой могли попасть и к разным процессам, и тогда записи в этом «как бы кеше», сделанные в одном процессе, были бы недоступны всем остальным процессам.

Я прав?

Да, судя по всему, я прав...

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)

Мне бы хватило кеша полностью in-memory, на структуре данных Perl.

Тогда храни в memcached, перловый клиент умеет там хранить структуры данных (хотя модифицировать отдельные узлы структуры не получится - представление структуры сохраняется целиком).

бы кешировать операции запросов в РСУБД

Почему не хочешь опереться на механизмы кеширования, реализованные в РСУБД, отдельный вопрос.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

В итоге я пришёл к тому , чтобы отдельно по расписанию наполнять кеш в Монго, и на веб-запросы отвечать данными из кеша. Это исключает проблемы синхронизации и делает все веб-запросы примерно равноценными по времени. Недостаток один, но хреновый: запрос может прийти в тот момент, когда кеш в процессе обновления. Но это можно обойти через создание булева переключателя, который на входе процесса обновления кеша будет перещёлкиваться в 1, а на выходе - возвращаться в 0.Только здесь есть риск, что запрос совпадёт с самым началом обновления кеша и будет ждать завершения обновления, что может быть очень длительной процедурой. Транзакций же в Монго нет?

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)
Ответ на: комментарий от DRVTiny

по расписанию наполнять кеш в Монго

Можно и монгу.

запрос может прийти в тот момент, когда кеш в процессе обновления

Не представляю какова специфика обновления и как построена база на стороне монги.

Вроде как в монге транзакции только на уровне отдельных документов.

Все еще не понял чем плох кеш РСУБД.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

Все еще не понял чем плох кеш РСУБД.

Тем, что он непредсказуемо работает, не мной контролируется, работает вообще на другом хосте, где CPU 90% времени забит под потолок.

А я хочу брать данные из in-memory cache'а на локальной машине. Разница в скорости доступа весьма весомая в общем-то.

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от DRVTiny

Кажется, я понял, что как раз в Монго хранить данные совсем не комильфо: они у меня чётко реляционные по характеру (вершины графа).

Возможно, в Memcached стоит их хранить...

По-моему великолепно: http://search.cpan.org/~kroki/Cache-Memcached-Fast-0.23/lib/Cache/Memcached/F...

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.