Мы хотели бы смоделировать влияние локальности с помощью виртуальных машин в публичном облаке (например, AWS EC2).
Для этого мы хотели бы ввести задержки в пакеты, чтобы мы могли моделировать определенную топологию сети.
Предположим, что есть три ВМ: A, B, C
|
A | <- 5 μs delay -> B
| <---- 25 μs delay ----> C
Как нам проще всего ввести задержку 5 мкс (или любое произвольное значение) для соединений между A и B по сравнению с задержкой 25 мкс между A и C? Приветствуется любое решение (изменение уровня ядра Linux на каждой виртуальной машине / создание оверлейной сети / ...).
Создание задержек можно моделировать с помощью алгоритмов формирования трафика, поддерживаемых ядром Linux. Из netem
руководство:
# tc qdisc add dev eth0 root handle 1: prio
# tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit 3000
# tc qdisc add dev eth0 parent 30:1 handle 31: netem delay 200ms 10ms distribution normal
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst <IP_of_server_B>/32 flowid 1:3
Который при выдаче на сервере A создает задержку в 200 мс при случайном изменении трафика на сервер B.