Тестування мережі

Уявімо найпростіший сценарій self healing: на гіпервізорі, на якому розміщена віртуальна машина, запущений скріпт, який періодично пінгує віртуальну машину з сервісом, і якщо не отримує відповідь, віддає гіпервізору команду на перезавантаження віртуальної машини.

Завдання

Проаналізуйте описаний сценарій на поміркуйте про його переваги та недоліки. Розгляньте обмеження, які потрібно взяти до уваги та припущення, які потрібно зробити.

➕ До переваг цього підходу можна віднести:

  • Легкість реалізації
  • Дуже швидка реакція на виникшу проблему

➖ До недоліків, а в свою чергу і до обмежень можна віднести:

  • Є ризик помилкових спрацювань при підвищенні навантаження на сервіс чи збільшеному latency
  • Якщо перезавантаження не допомогло, система не має механізмів подальших дій
  • Сценарій передбачає однорідне середовище, де всі віртуальні машини мають однакові конфігурації
  • Дуже обмежена діагностіка, яка відображае стан тільки на рівні мережі, а не показує стан самої ВМ, сервісу чи додатка
  • Складно враховувати і підтримувати залежність між сервісами

🤔 Припущення які ми можемо зробити

  • Маємо бути впевнені, що мережа працює стабільно, немає залежності від налаштувань файрвола
  • Що час, який потрібен на перезавантаження і відновлення є прийнятним для загальної системи

Відкрийте командний рядок Linux та виконайте команду:

curl https://pastebin.com/raw/qxgUMD7F

Давайте розглянемо більше деталей того, що відбувається. Переглянемо заголовки відповіді:

curl -v https://pastebin.com/raw/qxgUMD7F

Що якщо нам потрібно використати не GET запит, який curl використовує за замовчуванням, а HEAD? Це можна зробити за допомогою ключа -X:

curl -X HEAD -v https://pastebin.com/raw/qxgUMD7F

Для того, щоб використати цей ключ і вказати дії, які нам потрібно виконати, ми використаємо ще один ключ для curl - -d. Цей ключ означає “data”, тобто дані. Його можна використати декілька разів, що ми зараз і зробимо. Відредагуйте код нижче, щоб там було ваше ім’я і ваш API-ключ. Якщо ви Олексій - вам пощастило: потрібно зробити тільки половину роботи.

Відредагуємо зі своїми даними

paste_body='Hello, world! My name is Dmytro'
api_key='9R6uw*************fF0XJ'

curl -v -X POST -d "api_dev_key=$api_key" -d "api_paste_code=$paste_body" -d "api_option=paste" "https://pastebin.com/api/api_post.php"

Уважно розгляньте вивід цієї команди. На останньому рядку ви знайдете URL документа, який ви щойно створили. Додайте його до відповіді на цю лабораторну роботу.

Посилання на Pastebin

(Опціонально) Щоб побачити різницю між машино-орієнтованим і людино-орієнтованим вмістом, спробуйте запитати URL https://pastebin.com/qxgUMD7F (зверніть увагу що в шляху немає частини /raw/)

Почнемо з простої операції. Зробимо GET запит на пасту, яку ми створили за допомогою curl. Щоб не морочитись з HTML-вмістом, видозмінимо URL, щоб він вказував на plaintext версію документа. Для цього додайте /raw/ після pastebin.com і перед ID документа.

Спробуємо завантажити той самий документ, але без /raw/ в його URL:

Перейдемо на вкладу Preview

Продовжимо вивчати Postman. Тепер створимо новий документ з його допомогою, так само як ми зробили з curl. Перейдіть у вкладку Body у верхній половині вікна та додайте до вашого запиту такі ж дані, як були у curl:

Перейдемо на вкладку body і створимо новий документ з попередніми параметрами

Новий документ

У порожній вкладці натисніть F12, щоб відкрити консоль розробника. Далі перейдіть у розділ “Network”. Тепер, коли ми готові спостерігати за процесом, введіть в адресний рядок URL якогось з попередніх документів Pastebin в режимі перегляду raw і перейдіть за цим посиланням.

При відкритому на перегляд запиті, натисніть кнопку Resend вгорі справа. Зліва у вас з’явиться конструктор запитів, де вже будуть заповнені поля параметрів з попереднього запиту. Вичистіть їх кнопкою Clear внизу конструктора.

В Опері та Vivaldi цих пунктів немає, топаєм шукати якийсь файрфокс…

О, тут він є. Користуємось підказками, а то взагалі не відстрелюю що тут надо зробити. В body додали три попередні пункта, додали потрібний header та відправляю запит і о чудо, все вийшло.