Керування передачею даних зазвичай поділяють на два класи задач:
Завдання, яке вирішується методами керування потоком: узгоджена робота відправника та одержувача потоку даних - відправник інформації не повинен переповнити буфери приймача.
При вирішенні цього завдання відправник і одержувач працюють спільно, передаючи один одному керуючу інформацію і коригуючи обсяг даних, що відсилаються, і розмір буфера даних, що приймаються, в залежності, в першу чергу, від стану обробки даних на стороні приймача.
Контроль потоку класифікується на дві категорії:
Керування потоком на основі зворотного зв’язку: у цій техніці керування відправник просто передає дані, інформацію чи кадр отримувачу, а потім отримувач передає контрольні дані назад відправнику, а також дозволяє відправнику передавати більше даних або повідомляти відправнику про те, як одержувач працює. Це просто означає, що відправник передає дані або кадри після отримання підтвердження від користувача.
Контроль потоку на основі швидкості: у цій техніці керування зазвичай, коли відправник надсилає або передає дані на вищій швидкості до одержувача, а одержувач не може отримати дані з такою швидкістю, тоді механізм, відомий як вбудований механізм у протоколі, обмежує загальну швидкість, з якою дані чи інформація передаються відправником без будь-якого зворотного зв’язку чи підтвердження від одержувача.
Параметрами, що треба відстежувати, є
затримка передачі (Delay=\(\delta\) або Latency) між термінальними вузлами з'єднання
і поточне значення
пропускної здатності каналу (Bandwidth=B).
Корисною інформацією для мережевих додатків типа P2P та розширень є \(BDP = B \cdot\delta\) (Bandwidth-Delay Product), яку можна назвати обсягом каналу (інформаційною наповнюваністю). Від цього параметру залежить розмір буферу даних відправника та приймача.
Якщо джерело даних або приймач змушений часто зупинятися і чекати на отримання підтвердження (ACK) для раніше відісланих пакетів даних, з'являються перерви в потоці даних (data gaps), які обмежують реальну пропускну здатність каналу зі зворотним зв'язком. Наприклад, на ілюстрації продемонстровано вплив \(\delta\) каналу на продуктивність TCP протоколу або додатків, що працюють за тим самим принципом.
Насправді параметри \(B\) і затримки \(\delta\) заздалегідь точно не відомі. Як не дивно, але параметр \(\delta\) складно (дорого) точно визначати, і неточність \(\delta\) впливає на точність визначення ефективного значення параметра \(B\). Крім того, \(B\) і \(\delta\) та змінюються в залежності від кількості запитів і просто протягом часу.
Розглянемо докладніше набір параметрів та оцінок для характеризації ефективності роботи каналів зв'язку або простих додатків типу P2P.
Затримка передавання – transmission delay (\(\tau\)) – час для передачі кадру (frame) даних від хоста в канал. Якщо \(B\) — це смуга пропускання каналу, а \(D\) — розмір фрейму даних,
\[
\tau = D/B
\]
Затримка поширення – propagation delay (\(\delta\)) – це час, необхідний першому біту, переданому хостом в канал, щоб досягти пункту призначення. Вона залежить від відстані \(l\) і швидкості поширення сигналу \(s\) (залежить від характеристик середовища).
\[
\delta = l/s
\]
Відносна затримка \(r\) - це відношення \(\delta\) (затримки поширення) до часу \(\tau\) передачі фрейма даних (затримки передавання)
\[
r = \delta / \tau
\]
Ефективність \(\eta\) – визначається як відношення загального корисного часу \(\tau_\Sigma\) до загального часу \(T_\Sigma\) циклу передачi та контролю пакетy даних.
\[
\eta = \tau_\Sigma / T_\Sigma.
\]
Наприклад, для протоколу зупинки та очікування, який застосовується як на рівні протоколів передачі даних, так і на простих мережевих додатках, загальний час \(T_\Sigma\) циклу передачi та контролю пакетy даних (оскільки підтвердження ACK набагато менші фрейму FRAME за розміром, затримкою їх передачі можна знехтувати):
\[
\begin{array}
\. T_\Sigma = \tau(FRAME) + \delta(FRAME) +
\tau(ACK) + \delta(ACK) \approx \\
\approx \tau(FRAME) + \delta(FRAME) + \delta(ACK) \approx \\
\approx \tau + 2\delta = \tau +\Delta,
\end{array}
\]
де \(\Delta\) — кругова затримка (rtt).
Ефективність для протоколу зупинки та очікування:
\[
\eta = \tau_\Sigma / T_\Sigma
\approx \tau/(\tau + 2\delta)
= 1/(1+2r) ,
\]
де \(r\) – це відносна затримка.
Ефективна пропускна здатність (\(B_e\)) це ефективно використовувана пропускна здатність, тобто середня кількість біт корисної інформації, що надсилаються за секунду через канал.
\[
B_e = D / T_\Sigma = \eta \cdot B
\]
Відстежуваними параметрами цих методiв є затримка (Delay=\(\delta\)) передачi між термінальними вузлами з’єднaння i поточне значення пропускної здатності каналу (Bandwidth=\(B\)).
Завдання, які вирішуються методами контролю навантаження:
Основними обмежувачами максимальної пропускної спроможності є параметри каналу передачі, якими сторони передачі не можуть керувати.
Контроль актуальної пропускної спроможності зазвичай виконується на боці відправника.
Керування передачею при пропускній здатності, що змінюється в часі,
виконується множиною алгоритмів.
Щоб оптимізувати реальну пропускну здатність, вікно (контрольний розмір cwnd) даних, що відсилаються, слід максимально збільшувати, так щоб потоки відсилання даних і отримання підтвердження йшли безперервно по дуплексному каналу.
Оптимальне значення вікна (\(w\)) залежить від кругового часу подорожі (\(\Delta=\text{rtt}\)) дуплексним каналом. При виборі невеликого \(w\) буде обмежена реальна корисна пропускна здатність (goodput), незалежно від доступної фізичної пропускної здатності \(B\)(Bandwidth). Однак, при перевищенні оптимального розміру вікна відбудеться перевантаження (congestion) каналу .
Тому метою алгоритмів контролю навантаження каналу є оптимізація (максимізація) вікна передачі даних (\(w\)) і при цьому відстеження явища навантаження каналу з подальшою корекцією вікна та параметрів його зростання.
Завдання, яке вирішується методами контролю перенавантаження, - забезпечення нормального (ненасиченого) стану каналу зв'язку.
Метою алгоритмів контролю перенавантаження каналу є оптимізація (максимізація) вікна передачі даних (\(w\)) шляхом відстеження подій перенавантаження каналу з подальшою корекцією вікна та параметрів його зростання.
Найбільш популярні алгоритми контролю перевантаження каналу і прикладного API виконують такі базові кроки:
Варіанти роботи алгоритмів можуть після виявлення навантаження зменшувати розмір вікна до 1 пакету та переходити до кроку 1). Деякі варіанти алгоритмів динамічно адаптують граничні рівні.
Найважливішою частиною цих алгоритмів є адитивно-мультиплікативна поведінка Additive increase/multiplicative decrease (AIMD), починаючи з кроку 2)
Мал. Порівняння поведінки двох популярних алгоритмів контролю перевантаження-Tahoe и Reno
Алгоритми адитивно-мультиплікативного керування вікном cwnd (AIMD) - це алгоритми керування зі зворотним зв'язком за часом запізнення сигналів ACK від приймача. Вони насамперед використовуються для контролю перевантаження у протоколі TCP. Однак, важливо знати їх властивості і при роботі з протоколами вищих рівнів і розробки прикладних алгоритмів балансування навантаження. Алгоритми класу AIMD завжди поєднують лінійне зростання вікна контролю до настання перевантаження і його мультиплікативну редукцію відразу після його виявлення.
Важливість алгоритмів цього класу полягає в тому, що при одночаснiй роботі з каналом декількох з'єднань відбувається адаптивна збіжність до рівного використання ресурсів каналу[1].
Інші схеми: мультиплікативне зростання/мультиплікативне зменшення (MIMD) та адитивне зростання/адитивне зменшення (AIAD) - не сходяться до стабільного і справедливого спільного поділу ресурсів каналу.
Нехай \(w(t)\) - розмір вікна контролю навантаження, що вказує кількість даних, що у процесі передачі на кроці з номером \(t\),
\(a>0\) - параметр адитивного зростання вікна,
\(0<b<1\) - параметр мультиплікативного скорочення розміру вікна.
Тоді роботу AIMD можна описати такою ітеративною схемою:
\[
w(t+1)= {\begin{cases}
w(t)+a, & {\text{ якщо перевантаження не виявлено}}\\
w(t)\times b, & {\text{ в іншому випадку}}
\end{cases}
}
\]
Наприклад, в алгоритмах TCP після початкового "низького старту" - малого значення \(w(0)\) і експоненційного зростання, що закономірно приводить до першого перевантаження або порушення порогового значення (treshold), параметр адитивного збільшення \(a=1\, \text{[MSS/rtt]}\) (MSS - Maximum Segment Size , rtt - round-trip time) і, як правило, параметр мультиплікативного скорочення розміру вікна \({\displaystyle b}=1/2 \, \text{[MSS/rtt]}\).
Клас алгоритмів – адитивно-мультиплікативне збільшення/зменшення (AIMD). Саме для них при одночасній роботі кількох з’єднань канал “самостійно” сходиться до справедливого (рівного) поділу пропускної спроможності.
\[ w(t+1) = \begin{cases} w(t) + a, & \text{якщо немає перевантаження},\\ b \cdot w(t), & \text{якщо є перевантаження},\quad 0 < b < 1 \end{cases} \]
Для двох потоків \(w_1 > w_2\):
При MIMD кожне з’єднання і при нарощенні, і при зниженні змінює своє вікно мультиплікативно:
\[
w_i(t+1) =
\begin{cases}
r\cdot w_i(t), & r>1\quad(\text{без перевантаження}),\\
s\cdot w_i(t), & 0<s<1\quad(\text{при перевантаженні}).
\end{cases}
\]
Тоді відношення розмірів вікон двох потоків \({w_1}/{w_2}\) залишається сталим в усіх ітераціях, тому будь-яка початкова нерівність не вирівнюється, а амплітуда коливань може зростати експоненційно аж до межи пропускної здатності.
При AIAD обидва потоки змінюють своє вікно адитивно на один і той самий крок \(a\):
\[
w_i(t+1) =
\begin{cases}
w_i(t) + a, & \quad(\text{без перевантаження}),\\
w_i(t) - a & \quad(\text{при перевантаженні}).
\end{cases}
\]
Різниця між їхніми cwnd, \(w_1 - w_2\), залишається незмінною при кожному збільшенні та зменшенні, тож початкова несправедливість не коригується.
Найбільш нестабільна: MIMD — через експоненціальне зростання/скорочення вікон із великими коливаннями.
Найбільш несправедлива: AIAD — бо різниця між потоками ніколи не змінюється і початкова перевага одного з’єднання зберігається.
Які методи контролю навантаження можна використовувати для вирішення задач:
Для яких обчислювальних задач можно використовувати ці методи?
Для вирішення 1) питання зазвичай застосовують такі основні методи контролю навантаження, як:
Для вирішення 2) питання (справедливого поділу обчислювальних ресурсів між одночасними клієнтами) можливе використання методів:
Для вирішення 3) питання треба модифікувати методи детерминування складності обчислювальних задач для мережевих розподілених систем.
В простих випадках можно використовувати наступні методи контролю навантаження серверу:
Об’єднаний механізм: комбінація механізму admission control + feedback‐контролера + fair scheduler (зворотний зв’язок із квотуванням і плануванням).
Це найбільш універсальне рішення, що дає можливість одночасно утримувати завантаження нижче критичного порога, гарантувати справедливий розподіл ресурсів між клієнтами.
Feedback-контролер
– Постійно моніторить метрики (CPU-завантаження, довжину черг, час відгуку).
– Порівнює їх із бажаним рівнем (setpoint) і обчислює помилку (відхилення від цільового стану).
Admission Control (регулювання надходження запитів)
– На підставі команд від feedback-контролера динамічно коригує швидкість прийому нових запитів (наприклад, через Token Bucket або відкладену чергу).
– Якщо завантаження занадто високе, знижує ліміти або відхиляє надлишкові запити → запобігає перевантаженню.
Fair Scheduler (чесне планування)
– Внутрішні черги обробки (CPU, I/O) організовані за WFQ/DRR або CFS-подібним алгоритмом.
– Кожному клієнту (потоці) привласнюється «віртуальний час» чи токени пропорційно його вазі → гарантує справедливий поділ.
Таким чином одна й та сама схема керування потоком + планування водночас:
Зробити клієнт-серверний додаток на мові javascript, який повинен запускатися в локальній мережі (localhost) та у глобальній мережі (glitch.com, replit.com), на рівні протоколу HTTP, використовуючи методи
I) GET
II) POST,
Додаток повинен тестувати часи подорожі та обробки матриць з числами \(x_{i,j}\) типу double (\(x_{i,j} \in [1..100]\)). Матриці повинні залежно від запиту оброблятися на сервері по-різному:
a) сервер повинен обчислити за вхідною матрицею матрицю зі зверненими елементами
b) сервер повинен обчислити за вхідною матрицею звернену матрицю
Перевірити роботу програми для розмірів матриць 256x256, 512x512, 1024x1024, 2048x2048, 4096x4096, 8192x8192 та указати класи матриць для якіх можливо виконання всіх запитів за розумний час.
Програма має оцінити такі параметри каналу як
пряму \((\delta_1)\) та зворотню \((\delta_2)\) затримки передачі між термінальними вузлами з'єднання,
пряму \((B_1)\) та зворотню \((B_2)\) пропускні здатності каналу (Bandwidth = B),
пряму (\(\tau_1\)) та зворотню (\(\tau_2\)) затримки передавання в каналі (transmission delay = \(\tau\))
пряму (\(r_1\)) та зворотню (\(r_2\)) відносні затримки каналу
пряму (\(\eta_1\)) та зворотню (\(\eta_2\)) ефективністі каналу
Програма повинна передбачати час \({T_1}_\Sigma\) передачі даних на сервер, час \(T_s\) обробки даних на сервері, час \({T_2}_\Sigma\) передачі оброблених даних із сервера на клієнт та загальний сумарний передбачуваний час \(\tilde T = {T_1}_\Sigma + T_s + {T_2}_\Sigma\) та порівнювати його з реальним часом \(T\) отримання результату після початку запиту клієнта до сервера.
Вибрати методи контролю навантаження серверу та взаємодії сервера з клієнтами.
Результати представити у вигляді таблиць
Проаналізувати отримані результати та зробити висновки