Подскажите, пожалуйста, идеи для такой вот задачи:
Есть некий Cache Processor (C++). Все стандартно: получить запрос, проверить наличие файла в кэше, проверить валидность файла, отдать закэшированный файл или забрать файл из внешнего источника и положить его в кэш. Файлы храняться на диске, кэш на запрос отдает полный путь к файлу. Все работает на ура.
Появилась такие задачи:
1. Хранить файлы не локально, а в сети (в существующем процессоре решена, имена файлов == GUID)
2. Сделать из процессоров кластер, то есть процессор будет запущен на нескольких машинах, но будет использовать общее хранилище для файлов. Естесвтенно, кэши должны быть синхронизированы между собой. (Кэш представляе собой, грубо говоря, map<string, string>).
Подскажите, плз, best approaches для такой задачи, наверняка они есть.
Здравствуйте, Аноним, Вы писали:
А>Появилась такие задачи: А>1. Хранить файлы не локально, а в сети (в существующем процессоре решена, имена файлов == GUID) А>2. Сделать из процессоров кластер, то есть процессор будет запущен на нескольких машинах, но будет использовать общее хранилище для файлов. Естесвтенно, кэши должны быть синхронизированы между собой. (Кэш представляе собой, грубо говоря, map<string, string>). А>Подскажите, плз, best approaches для такой задачи, наверняка они есть.
Ну, например, каждый кеш может хранить локальный индекс файлов (которые есть в общем хранилище) и при добавлении файла в общее хранилище рассылать TCP/UDP/UDP broadcast сообщение другим узлам кластера, в результате обработки которого они скорректируют свой локальный индекс.
Хотя, файловое хранилище в окружении где файл запросто могут захотеть открыть множество процессов, практически всегда плохой выход и имеет смысл переехать на БД и уже средствами БД кластеризировать.
Здравствуйте, <Аноним>, Вы писали:
А>Подскажите, плз, best approaches для такой задачи, наверняка они есть.
Посмотри на http://en.wikipedia.org/wiki/Memcached или тебе обязательно нужен дисковый кэш?
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Аноним, Вы писали:
А>Подскажите, пожалуйста, идеи для такой вот задачи:
А>Есть некий Cache Processor (C++). Все стандартно: получить запрос, проверить наличие файла в кэше, проверить валидность файла, отдать закэшированный файл или забрать файл из внешнего источника и положить его в кэш. Файлы храняться на диске, кэш на запрос отдает полный путь к файлу. Все работает на ура.
А>Появилась такие задачи: А>1. Хранить файлы не локально, а в сети (в существующем процессоре решена, имена файлов == GUID) А>2. Сделать из процессоров кластер, то есть процессор будет запущен на нескольких машинах, но будет использовать общее хранилище для файлов. Естесвтенно, кэши должны быть синхронизированы между собой. (Кэш представляе собой, грубо говоря, map<string, string>).
А>Подскажите, плз, best approaches для такой задачи, наверняка они есть.