Дані користувача зберігаються на двох досить великих (> 1 PB) сховищах OpenStack Swift. Нехай вони будуть Кластер А і кластер В .
Окрім того, є кілька ПЗ, які потребують взаємодії з цими даними. Сервери в цих PoPs фактично без диска, тобто жодні користувацькі дані не зберігаються на них і ніколи не завантажуються на них. Поп-групи можна згрупувати у загальносвітові регіони (наприклад, Північна Америка , Південна Африка , Центральна Європа та ін.).
Деякі PoPs знаходяться досить далеко від кінцевих точок Swift будь-якого з кластерів, вводячи небажану затримку. Щоб дещо пом’якшити це, я хочу встановити сервер шлюзу кешування у кожному з регіонів, який кешуватиме r / w запити до найближчого кластеру.
В даний час клієнти в будь-якому з PoPs отримують доступ до даних користувачів постійною змонтованою швидкою віртуальною файловою системою , яка є модулем FUSE, який монтує Swift Object Storage як блок-пристрій (більш-менш). Однак насамперед svfs не все так стабільно, і в майбутньому клієнти повинні отримати доступ до кеш-серверів через NFS.
Це схема однієї гілки потрібної архітектури:
+------------------+ +------------------+ NFS +------------------+
| Cluster A | SVFS | Region 1 Cache +----------> R1 PoP a Client |
| +----------------> | | |
|Persistent Storage| |Ephemeral Storage+----+ |Generates R/W Load|
+-----------------++ +------------------+ | +------------------+
| |
| +------------------+ | NFS +------------------+
| SVFS | Region 2 Cache | +-----> R1 PoP b Client |
+-----------------> | | |
|Ephemeral Storage| |Generates R/W Load|
+------------------+ +------------------+
Мені знайомі основи налаштування NFS та svfs.
Питання полягає в тому, як я можу налаштувати кешуючий сервер для використання всіх доступних ресурсів (призначений розділ кеша, оперативна пам'ять) для кешування якомога агресивніше і якомога більше даних, перш ніж записати в точку монтажу svfs? В основному це зводиться до: Як я можу кешувати каталог у Linux?
Якщо можливо, читання та запис має бути консолідовано, а розміри блоків у запитах FUSE повинні бути не менше 128 кб, якщо це можливо для максимальної пропускної здатності та мінімізації затримок, якщо кеш потрібно записувати в кластер.
Додаток 1 : Я переключив модуль кріплення кластера зі svfs на S3QL на кількох серверах. Кешування S3QL трохи покращило продуктивність. Я спробую отримати деякі дані про ефективність для повноти.