Limiter la bande passante des requêtes HTTP individuelles sans limiter la bande passante totale

En regardant des outils comme tc , wondershaper , htb et comcast , tous ces outils semblent fonctionner au niveau d'une interface réseau ou du less d'un "groupe de connection" pour limiter la bande passante. Je ne voudrais pas étrangler la bande passante pour un groupe de connections, mais au contraire étrangler le taux maximum de connections individuelles.

Plus précisément: Existe-t-il un outil disponible pour définir le taux de téléchargement maximal des requêtes HTTP individuelles?

Détails

Ce que je cherche à faire est d'émuler des requêtes lentes à récupérer à partir de compartiments sur S3. Je vois que pour les requests éloignées d'un centre de données, le téléchargement d'un élément individuel est généralement lent (<500 kb / s), mais le téléchargement en parallèle donne des vitesses de téléchargement> 5 Mb / s.

Je peux probablement y parvenir en ajoutant de la latence dans ces requêtes (qui ralentit les requêtes en série mais pas la bande passante globale), mais une solution plus directe serait géniale.

Selon votre condition, je voudrais suggérer Varnish et c'est un server de cache HTTP hautement considéré. Il se trouve devant le niveau de votre server Web et met en cache le contenu de la RAM afin que les requests suivantes soient traitées le plus rapidement possible.

L'article de reference suivant a été bien montré comment installer et configurer le vernis sur un server web sur CentOs.

Il y a deux files de configuration à éditer, / etc / sysconfig / vernish et /etc/varnish/default.vcl .

Editing default.vcl vous permet d'optimiser vos problèmes de bande passante. Je l'ai déjà installé sur mes servers.

A titre d'exemple, les configurations sont comme suit.

 backend web1 { .host = "PUBLIC_IP_ADDRESS"; .port = "80"; .probe = { .url = "/"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3; } } 

Refernce: Configurez Varnish 4 sur CentOS 6 en tant que server Caching et Load Balancer

Le paramètre limit_rate de nginx semble surmonter certains problèmes liés au calmar et au vernis, comme recommandé par d'autres intervenants. De la documentation:

Limite le taux de transmission de la réponse à un client. Le taux est spécifié en octets par seconde. La valeur zéro désactive la limitation de débit. La limite est définie pour une requête, et donc si un client ouvre simultanément deux connections, le taux global sera deux fois plus élevé que la limite spécifiée.

Pour mon scénario, où je cherche à limiter le nombre d'octets de transfert transférés pour les files volumineux pour des requêtes individuelles sans limiter la bande passante globale pour un client, c'est exactement ce dont j'ai besoin.

Calamar

Les groupes de retard de Squid regroupent les clients du groupe (généralement par IP) et utilisent une limite de débit bucketed. Cependant, même les docs disent :

Vous ne pouvez pas limiter la vitesse de connection d'une seule requête HTTP.

Vernis

Le vmod_vsthrottle de Varnish (et de même libvmod-throttle ) fonctionne à partir d'un algorithm de seau à jeton et prend des keys arbitraires. La mise en œuvre semble très cool, mais il semble qu'il n'y ait pas un bon moyen de ralentir la circulation. Au lieu de requêtes au-dessus d'une limite (dans req / s) sont répondues à quelque chose comme un 429 .