Ограничение bandwith на пользователя?

Коммерческий аргумент для меня при покупке аппаратных средств у большой OEM является тем, что в противоположность меньшим поставщикам сборка большой OEM тысячам машин каждый день и точно настраивали их процесс manufacturing\assembly к науке. Они имеют производителей частей и инженеров в их полном распоряжении и имеют склады запчастей и обслуживающих техников в каждой крупнейшей территории города с пригородами. Мало того, что оборудование "дорога тестируется", прежде чем это будет поставлено Вам, это идет с тысячами человеко-часов опыта и разработки позади него. По моему скромному мнению, это переводит в надежность, устойчивость и непротиворечивость.

0
задан 13 March 2011 в 11:21
5 ответов

Если бы Вы обеспокоены справедливостью, я не рекомендовал бы ограничить на пользователя. Это работает, пока у Вас есть низкое количество соединения, но в конечном счете сумма всех ограниченных соединений превышает Вашу доступную пропускную способность, и ситуация так же плоха как без предела.

Существует вещь под названием Стохастическая Организация очередей Справедливости. Это предотвратит это, единственное соединение исчерпало ресурсы, и улучшите справедливость. Это определяет соединения с помощью хеш-алгоритма и служит им один пакет за один раз в круговом порядке.

Для SFQ для работы необходимо сначала ограничить пропускную способность, для перемещения очереди в машину, где можно управлять им. Вот очень простая установка, которую я часто использую:

$TC qdisc del dev eth0 root handle 1
$TC qdisc add dev eth0 root handle 1: htb default 20 r2q 50
$TC class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
$TC qdisc add dev eth0 parent 1:1 handle 110: sfq perturb 10
$TC filter add dev eth0 parent 1: prio 3 protocol all u32 match u32 0 0 flowid 1:1

При нахождении этого полезным, объясните мотивацию, и я могу обеспечить более сложные установки, это удовлетворит цели.

3
ответ дан 4 December 2019 в 11:20

Если Вы говорите о Трафике HTTP, можно направить пользователей к прокси, таких как сквид. Сквид может быть настроен для ограничения использования пропускной способности на IP. Можно использовать delay pools в параметрах конфигурации. Можно взглянуть на эту страницу. Можно найти много других страниц в Интернете.

Я думаю, что это может быть также настроено для ограничения пропускной способности на пользователя при включении аутентификации.

2
ответ дан 4 December 2019 в 11:20

пропускная способность для загрузки и просмотра страницы

Я думаю, лучше, Вы создаете дополнительный слой на своем проекте и затем добавляете некоторый размер после любого запроса (как просмотр страницы) и затем вычисляете размер ответа и суммы с трафиком пользователя

если пользовательское использование больше, чем пропускная способность затем заставляет пропускную способность закончить ответ

1
ответ дан 4 December 2019 в 11:20

Основная техника, которая отсылает загружаемый файл в ограниченной пропускной способности, состоит в том, чтобы заменить fpassthru или readfile звоните с циклом, который читает файл в блоках с освобожденным и a sleep или usleep звоните для регулировки уровня.

Но это только заботится о загрузке файла, она не влияет на читающие статические файлы, которые не проходят PHP или чтение другого вывода страниц PHP. Вам также будет нужна центральная точка, где Вы помните, сколько параллельных соединений каждый IP-адрес имеет, и распределите их выделенную полосу среди них.

Вероятно, лучше не сделать это в PHP вообще, но в Apache или уровне ядра, предполагая, что Вы не находитесь на общем хостинге, конечно. Для Apache существует bwmod расширение.

0
ответ дан 4 December 2019 в 11:20

Это может быть достигнуто с помощью readfile (), где данные разделяются на блоки. Можно установить размер блока и поместить сон (), чтобы управлять, как быстрые блоки отправляются. У меня есть код, который не хорошо тестируется, но мог указать, что Вы в правильном направлении, однако читая пользователя внесли примечания для readfile, и fpassthru в php сети поможет.

0
ответ дан 4 December 2019 в 11:20

Теги

Похожие вопросы