У нас есть много приложений, работающих на одном сервере, который находится внутри сети серверов. Мы хотим ограничить пропускную способность наших приложений до определенного значения. Итак, вот несколько вариантов:
suppose we have three apps: A, B, and C.
1) Use Linux (kernel 2.6) QoS Utilities to limit the bandwidth of
these three applications.
2) Develop our own application to limit the bandwidth.
Конечно, предпочтительнее первый, но нам нужно знать, могут ли утилиты qos, предоставляемые Linux, соответствовать нашим требованиям или нет. Первое, что нужно проверить, - предоставляет ли инструмент Qos, например TC, какие-либо средства для ограничения пропускной способности для нескольких приложений (с указанием имен приложений или других)?
Вы можете использовать u32
селектор, как указано в следующем примере, взятом из эта страница. Я показываю здесь только интересную линию.
match u32 00000016 0000ffff at nexthdr+0
Этот пример соответствует значению 0x16 для порта назначения (третий и четвертый байты от начала заголовка TCP).
Это всего лишь пример, чтобы понять, как это можно сделать в зависимости от порта назначения.
Да, linux / tc может делать то, что вам нужно, tc позволяет вам настраивать фильтры для сопоставления трафика на широком уровне, вы также можете использовать iptables для маркировки пакетов и сопоставления по этим меткам. Однако если вы пытаетесь сопоставить любой сетевой трафик для определенного приложения, это становится сложнее. Я бы порекомендовал запустить процесс как выделенный пользователь и использовать совпадение владельца iptables, чтобы пометить эти пакеты для QoS, затем tc можно было бы использовать для этих тегов.