Mongoose: інструмент для тестування продуктивності СГД

Доброго часу доби, Хабр. Мова піде про інструмент тестування продуктивності СГД, спочатку розробленого в надрах компанії EMC для внутрішніх потреб, але має властивість плавно розростатися. До речі, буквально «вчора» мангуст отримав статус OpenSource проекту. А це значить, що настав час трошки розповісти про нього. Отже, що ж це за звір?

image

Основні особливості

  1. Розподілений режим
    Дозволяє виконувати завдання по навантаженню одночасно з багатьох вузлів мережі, зберігаючи при цьому централізований контроль і збір метрик.

  2. Звітність
    • Вихідні файли зі списками оброблених об'єктів (файлів, ...), які можна знову використовувати на вході
    • Доступність часових відміток високого дозволу (мкс) для кожної окремої операції
  3. CRUD (Create/Read/Update/Delete) — доступні типи I/O операцій для створення навантаження
  4. Підтримка різних типів СГД:
    • Amazon S3 REST API
    • EMC Atmos REST API
    • OpenStack Swift REST API
    • Файлова система (local, NFS mount, ...)
  5. Підтримувані типи об'єктів:
    • Контейнери (вони ж каталоги у разі ФС, вони ж bucket'и в разі S3)
    • Дані (файли у разі роботи з файловою системою)
  6. Верифікація даних при виконанні операції читання
  7. Генерація довільних даних (несжимаемый рівномірний шум, текст або однакові байти)
  8. Мова сценаріїв
  9. «Заглушка»: HTTP-сервер, що реалізує функції хмарного СГД, який не зберігає дані, але вміє віддавати їх назад при читанні. По суті, storage mock для тестування функціоналу і продуктивності самого мангуста. Тяжіє до того, щоб незабаром стати розподіленої заглушкою, а також драйвером ФС.
  10. Web GUI
  11. І багато інших чудових речей, перелік яких займе занадто багато місця.

Відомі аналоги

  • Apache JMeter
    Аналог дуже умовний і має настільки мало спільного з мангустою, що порівняння практично неможливо.
  • COSBench (Intel)
    Більш близький по функціоналу аналог, ніж JMeter.
    Переваги: має довшу історію розробки і більше активних розробників, що підтримує більш широкий спектр СГД.

    Недоліки: поступається по ряду функціональних пунктів (генерація довільних даних, наприклад) і продуктивності (не вирішує т. н. проблеми «С10К»).

Кілька слів про високої навантаженні

Так як інструмент тестування продуктивності повинен створювати високу I/O навантаження, то сам цей інструмент повинен бути дуже производительнным, а витрачати ресурси оточення він має дуже ефективно.
  1. Вирішення проблеми C10K
    У ранніх версіях мангуста потоки виконання були прив'язані до відповідних сполук. Дуже швидко стало ясно, що такий підхід порочний. При роботі з об'єктами великого розміру при великій кількості потоків показники продуктивності були особливо поганими. Однак після застосування подійно-орієнтованого асинхронного I/O, результати стали вражати. Інструмент продемонстрував працездатність навіть при 1 мільйон одночасно відкритих з'єднань.



  2. Zero Copy скрізь, де це можливо
  3. Автоматична конфігурація розмірів I/O буферів виходячи з відомих розмірів передаваних даних. Маленькі об'єкти — менше буфер, великі об'єкти — більше буфер. Запис — більше вихідний буфер, читання — більше вхідний буфер. Власне, буфери розташовуються в Direct Memory для забезпечення Zero Copy

Як це виглядає на практиці

Після того як ви завантажили tarball з останньою версією і розпаковуємо його, запуск мангуста відбувається до неподобства просто:
java -jar mongoose-<VERSION>/mongoose.jar

Це призведе до спроби мангуста робити все за замовчуванням:
  • Виконувати створення нових об'єктів (create) вічно (поки не перерве користувач)
  • S3 API (тобто генерувати HTTP запити)
  • 1 з'єднання адресу за замовчуванням (127.0.0.1:9020)
Щоб побачити щось крім помилок у такому випадку, можна спробувати запустити на тій же машині «заглушку» (яка буде виконувати функції storage mock):
java -jar mongoose-<VERSION>/mongoose.jar wsmock


Для бажаючих використовувати GUI потрібно виконати наступну команду:
java -jar mongoose-<VERSION>/mongoose.jar webui

І перейти у браузері за адресою 127.0.0.1:8080.


Ще однією важливою особливістю є власні сценарії. Сценарій записуються у форматі JSON і може бути вказаний при запуску наступним чином
java -jar mongoose-<VERSION>/mongoose.jar -f <PATH_TO_SCENARIO_FILE>.json

Один з найпростіших сценаріїв виглядає наступним чином:
{
"type": "load"
}

Цей сценарій використовується мангустом за замовчуванням, коли ніякий інший файл сценарію не вказано явно. Трохи складніший приклад сценарію:
{
"type" : "for",
"value" : "threads",
"in" : [
1, 10, 100, 1000, 10000, 100000
],
"config" : {
"load" : {
"threads" : "${threads}"
}
},
"jobs" : [
{
"type" : "load"
}
]
}


Більш детальна інформація про використання доступна в розділі «Documentation» на сайті мангуста.

Що далі?

До моменту написання статті останньою стабільною версією є 2.4.1. В даний час ведеться активна розробка версії 3, в якій буде застосована нова архітектура (монітор — генератор — драйвер — монітор), що відкриває нові можливості для розподіленого режиму роботи і сценаріїв типу «weighted load».



В планах на майбутнє також є наступне:
  • Розширення можливостей Web GUI
  • Реалізація операцій неповної (часткової) читання даних
  • Розширення спектру підтримуваних типів СГД (Google Cloud Storage, EMC Centera, ...)
  • Підтримка СУБД (?)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.