• Technologie
  • Équipement électrique
  • Industrie des matériaux
  • La vie numérique
  • politique de confidentialité
  • Ô nom
Emplacement: Accueil / Technologie / Le quoi et pourquoi des proxys programmables

Le quoi et pourquoi des proxys programmables

Plateforme de services à guichet unique |
1990

Points clés à retenir

A question which gets often asked is "What is a programmable proxy, and why do I need one?" This article tries to answer this question from different perspectives.Nous commencerons par une brève définition de ce qu'est un indicateur indirect, ThenDiscuss comment les procurations ont évolué à différentes étapes, expliquant les besoins auxquels ils ont répondu et quels avantages ils offraient à chaque étape. Finally, we will discuss several aspects of programmability and provide a summary of why we need a programmable proxy.

Qu'est-ce qu'un proxy?

Un serveur proxy est généralement déployé au milieu de deux réseaux isolés et est responsable des transferts de données d'un côté à l'autre afin qu'ils apparaissent comme un seul réseau.Dans sa forme la plus simple, un proxy est une passerelle entre un utilisateur et Internet, car il existait depuis la naissance des réseaux informatiques.Un proxy agit non seulement comme un connecteur réseau, car il permet également des fonctionnalités supplémentaires et des cas d'utilisation comme:

Les proxys travaillant sur les couches 4 et 7 du modèle ISO / OSI sont parfois appelés proxys "mode de routage".MostProxy Services sont disponibles en tant que logiciels open source et comptent pour la majorité des logiciels d'infrastructure réseau, offrant des fonctions spécialisées dans différents domaines, tels que des proxys pour des protocoles spécifiques, des procurations d'équilibrage de charge, des indications pour l'accélération du cache, etc..

Évolution du logiciel proxy

Related Sponsor

Learn Istio Fundamentals The easy way to learn Istio.Istio est une plate-forme de maillage de service open source qui aide les microservices à communiquer entre eux. Learn More.

Les serveurs proxy ont évolué à différentes étapes de développement:

Ère de file de configuration

Cette génération de proxy est entièrement basée sur la configuration.L'utilisateur définit un certain nombre de paramètres, configure des règles dans un fichier de configuration, puis démarre le processus de service pour exécuter ces règles.

Configuration DSL ERA

Les fichiers de configuration statique rendent difficile l'exprimer une logique complexe, de nombreux proxies ont introduit des capacités de script minces en haut des fichiers de configuration.Ceux-ci sont communément appelés «langages de configuration» ou langues spécifiques au domaine (DSL pour faire court), comme le LCA de HAPRXOY ou VCL de Varnish.

Esèce de la langue des scripts

À mesure que la logique devient plus complexe, il devient plus difficile de l'exprimer via des langages de configuration.Dans le même temps, lorsque le nombre de langages de configuration distincts utilisés dans le même réseau atteint un certain seuil, leur gestion devient difficile.

En utilisant des scripts shell, par exemple, on peut écrire une logique simple, mais lorsque le code de shell atteint un certain niveau de complexité, il est souvent nécessaire de passer à des langages de script plus structurés comme Perl ou Python.

Ces langues apportent la commodité des scripts et l'avantage structurel d'un langage de programmation à part entière.Des exemples de cela sont OpenResty (Nginx + Lua) et Nginx Plus (Nginx + NJS).Cette catégorie comprend également des serveurs proxy implémentés dans un certain nombre de langages de programmation d'applications, tels que Strongloop Microgateway basés sur des nœuds et la passerelle de Cloud Spring basée sur des nœuds, qui ont souvent des capacités de script.

Ère du cluster

Les langages de script résolvent la complexité inhérente à la modularisation et à la structuration de la logique complexe.Une autre exigence à ce stade consiste à intégrer des proxys à d'autres outils de contrôle administratifs, d'où la nécessité d'un repos ou d'une interface similaire.En effet, un plan de contrôle externe peut utiliser cette interface pour mettre à jour dynamiquement la logique dans le script.

Dans le même temps, l'utilisation de proxys est passée des instances uniques à des grappes de proxys.En fait, des logiciels proxy comme l'envoyé et le kong basé sur l'Openrey prennent souvent en charge les capacités de clustering eux-mêmes, les implémentant de manière centralisée ou partagée (via les PRBDR, etc.), tout en fournissant des interfaces administratives de repos pour gérer les configurations.

Pour les procurations avant cette époque, la gestion des cluster est généralement possible grâce à la gestion de la configuration.Les outils de gestion de la configuration peuvent également exposer les interfaces de repos.Par exemple, ANSIBLE + NGINX met en œuvre des capacités similaires aux proxies de l'ère des nuages.En revanche, les proxys de l'ère des cluster nécessitent plus de composants pour former le schéma, tandis que les proxys de l'ère Cloud suppriment le fardeau de la gestion des pièces mobiles et sont très préférés.

Ère du nuage

Dans l'ère du cloud, les procurations sont déployées de manière distribuée.Le scénario le plus courant consiste à déployer un proxy pour chaque processus d'application, en suivant le modèle de proxy Sidecar.

En mode clustering, il existe généralement différentes configurations et politiques pour différents services en amont, tels que différents modes d'authentification et mécanismes de contrôle d'accès.À mesure que les services en amont augmentent, les configurations de ces différents services en amont sont logiquement séparées mais s'exécutent physiquement dans le même processus de proxy.Ce schéma présente quelques inconvénients: plus de logique exécutée dans le même processus apporte plus de complexité.De plus, différents services en amont partagent des ressources telles que le processeur et la mémoire, affectant mutuellement.Si un script d'un service en amont a une vulnérabilité de sécurité, les configurations d'autres services en amont peuvent être divulguées, entraînant des risques de sécurité.

Dans l'ère du cloud, les processus proxy pour chaque service en amont sont indépendants et isolés les uns des autres.L'adoption de procurations distribuées a ouvert la porte à l'utilisation de différentes règles et politiques pour différents services en amont, c'est-à-dire aux capacités multi-locataires.

Les différents services en amont ont non seulement des règles et des politiques logiquement indépendantes.L'isolement physique est également fourni, permettant une gestion granulaire au niveau du processus et de l'interface.Cet isolement est une forte exigence dans un environnement multi-locataire - différents services en amont appartiennent à différents locataires, et les locataires ne devraient pas affecter ou se connaître les configurations de l'autre.

Les mailles de service sont représentatives de cette époque.Les mailles de service sont composées de deux composants architecturaux clés, d'un plan de données et d'un plan de contrôle.Contrairement à ce que le nom suggère, un maillage de service n'est pas un «maillage des services."C'est un maillage de proxys auxquels les services peuvent se brancher pour abstraire complètement le réseau.Les exemples typiques sont Istio + Envoy, Linkerd + Linkerd Proxy.

Créée par l'un des auteurs de cet article, Pipy est un produit de cette époque et relève de cette catégorie.Pipy est un proxy réseau open-source, léger, haute performance, modulaire et programmable pour les nuages, le bord et l'IoT. Pipy is ideal for a variety of use-cases ranging from (but not limited to) edge routers, load balancers & proxy solutions, API gateways, static HTTP servers, service mesh sidecars, and other applications.Pipy est en développement actif et maintenu par des commissaires et des contributeurs à temps plein, bien que toujours une première version, il a été testé au combat et dans la production par plusieurs clients commerciaux.

Depuis la discussion ci-dessus, il est clair que chaque étape est une amélioration par rapport à la précédente.

Proxy Software Exigences and their Evolution

Examinons un autre regard sur l'évolution des procurations compte tenu de l'évolution de leurs exigences.

Ère de file de configuration

La première génération de proxys a implémenté principalement une fonctionnalité de passerelle entre les utilisateurs et les services et a fourni des capacités de base configurables.La transmission en temps réel de données massives nécessite un débit élevé, une faible latence et une faible utilisation des ressources.Comme tous les logiciels, les proxys sont également nécessaires pour prendre en charge la modularité et l'extensibilité.

Le logiciel proxy à cette étape a été principalement développé en C, comme ce fut le cas avec les modules d'extension qui sont chargés dynamiquement au début du processus.

To summarize, proxy requirements at this stage are connectivity (network capabilities), ease of use (configurable via configuration files), reliability (requirements for cross-linking devices), high performance, and scalability.

Configuration DSL ERA

La deuxième génération de proxys a obtenu de nouvelles améliorations de l'extensibilité et de la flexibilité, telles qu'une certaine acquisition de données dynamiques et la capacité d'effectuer certaines décisions logiques sur les données acquises.L'introduction de scripts basés sur DSL a encore renforcé la convivialité. Support for combinatorial logic and dynamic data retrieval provided flexibility while improving scalability.

Esèce de la langue des scripts

The main improvements of 3rd generation proxies over 2nd generation proxies are manageability, developer friendliness, and programmability.

La productivité des développeurs et la complexité du maintien de scripts massifs nécessitent que cette génération de proxys utilise un langage de script structuré, tout en gardant les performances, une faible utilisation des ressources et d'autres capacités de base de la génération précédente.

Les capacités de script sont largement utilisées, principalement parce qu'elle est difficile à développer et à maintenir des extensions en utilisant C.En effet, les langages de script sont plus faciles à apprendre et à fournir des revirement plus rapides par rapport aux langues compilées.

The use of structured and modular scripting language ushered the era of programmable proxies and required proxies to provide two levels of programmability: using C for development of core modules, and scripts to program dynamic logic. In other words programmable proxies provided their user the power of development of core modules and dynamic logic.

Ère du cluster

The fourth generation of proxies starts with cluster support, which improves manageability.

Grâce aux interfaces de repos, les procurations font partie de la mise en œuvre de l'infrastructure réseau et un point de départ pour l'infrastructure comme code. REST interfaces besides improving proxies manageability also contribute to simplify their administration. External interfaces are also an important feature of programmable proxies, and REST, as the most common form of interface.

At this point, programmability consists of three layers: programmable core modules, programmable dynamic logic, and programmable external interfaces. The emergence of proxy server clusters reflects the change of perspective in scalability from functionality extension to resource expansion (where users can modularize functionality into multiple instances, instead of writing a monolith script).The emergence of REST interfaces provides the technical foundation for self-service and managed services that provide, e.g.un panneau de commande pour la configuration et le contrôle.

Ère du nuage

L'évolution de la cinquième génération de procurations est tirée par la popularité et le développement rapide du cloud computing, apportant les exigences d'élasticité, d'autonomie, de multiplication, d'isolement et de mesure.

If the fourth generation of agents is for system administrators, the fifth generation of agents is for cloud services.Tout en conservant pleinement les caractéristiques des générations précédentes de logiciels proxy, les procurations de cinquième génération deviennent prêtes.

With the expansion of cloud computing to the edge, the fifth generation of proxies need to support heterogeneous hardware, heterogeneous software, and low-energy consumption tooptimize the integration of the cloud and the edge.

The fifth generation of proxies also shows advances in programmability: from the core module, dynamic logic, and external interface we saw earlier to cloud-ability, support for distribution, multitenancy, and metering.La mesure est une exigence dérivée de multi-tension, qui nécessite l'isolement d'une part, et que les ressources peuvent être mesurées à la plus petite granularité possible de l'autre.

Résumons la discussion ci-dessus dans un format tabulaire, où les lignes correspondent aux exigences et aux colonnes tospécifiques à différentes étapes.Pour chaque étape d'évolution, nous fournissons également des exemples typiques ou des logiciels connus entre parenthèses.Dans chaque cellule, nous utilisons * pour indiquer si ces capacités sont disponibles et dans quelle mesure (1-5, 5 pour un support complet et 1 * pour le support de base).

Sn

Exigence

Configuration (squid, httpd, nginx)

Langage de configuration (vernis, haproxy)

Support de script (Nginx + Lua, Nginx + JS)

Clustering (Kong, envoyé)

Cloud (Istio + Envoy, Linkerd, Pipy)

Remarques

1.

Connectivité

* * * * *

* * * * *

* * * * *

* * * * *

* * * * *

Connectivité in the cloud era began with kernel technologies such as iptables and ebpf.Auparavant, il n'y avait que des processus d'espace utilisateur.

2.

Fiabilité

* * * * *

* * * * *

* * * * *

* * * * *

* * * * *

Fiabilité has always been the most fundamental capability of proxy servers.

3.

Haute performance

* * *

* * * *

* * * * *

* * * * *

* * * * *

Les performances comprennent le débit, la latence, le taux d'erreur et l'écart par rapport à la moyenne.Les mesures de latence communes sont P99, P999 et autres.Le logiciel proxy précoce a un long effet de queue, donc les indicateurs supérieurs à P99 ne sont pas aussi bons que pour le logiciel ultérieur.Le proxy avec des scripts haute performance fonctionne souvent mieux que leurs prédécesseurs lors du retour du même contenu.Les proxys qui évitent les queues longues sont plus stables (avec moins de déviation par rapport à la moyenne) tout en fournissant les mêmes performances.

4.

La flexibilité

*

* *

* * *

* * * *

* * * * *

Par rapport à la quatrième génération, les proxies de cinquième génération améliorent considérablement la capacité de soutien multi-protocole, nous donnons donc à cette génération une évaluation cinq étoiles.De plus, le modèle de traitement de la cinquième génération peut s'adapter à divers protocoles et offrir une meilleure pertinence par rapport à la quatrième génération.

5.

Évolutivité

*

* *

* * *

* * *

* * * *

De façon similaire à la flexibilité, les proxys de 5e génération prennent en charge plusieurs protocoles et fournissent des mécanismes d'extension faciles pour l'extension des fonctionnalités de base, ou le développement de la couche d'application personnalisée (couche 7), nous lui donnons donc une étoile plus que la 4e génération.

6.

Compatibilité matérielle

* * * *

* * * *

* * * *

* * * *

* * * *

Les proxys développés en C ou C ++ ont généralement une meilleure compatibilité matérielle et une communauté plus active pour migrer les applications vers de nouvelles architectures matérielles.Les proxys développés à l'aide de Rust, GO et Lua ont été relativement lents à migrer pour la compatibilité matérielle.

7.

Compatibilité du système

* * *

* * *

* * * *

* * * *

* * * * *

Le système comprend principalement deux aspects, l'un est le système d'exploitation, l'autre est la plate-forme cloud.En termes de compatibilité du système d'exploitation, chaque génération de proxies est similaire.Cependant, en termes de compatibilité des plates-formes cloud, les proxys de quatrième et cinquième génération offrent une meilleure compatibilité cloud.En revanche, la différence significative entre la cinquième et la quatrième génération se trouve dans sa capacité à soutenir la multi-location.

8.

Facilité de gestion

* *

* *

* *

* * *

* * * *

Ease of management is a function of system operation & administrator roles.Les première et deuxième générations utilisent principalement des fichiers de configuration, en fonction de l'utilisation d'outils de gestion de configuration pour réaliser une gestion automatique et par lots.Dans la troisième génération, en plus de gérer les fichiers de configuration, nous devons gérer davantage les fichiers de script.Mais en substance, il n'y a pas de différence significative par rapport à la première et à la deuxième génération en termes de facilité de gestion.La quatrième génération fournit des interfaces de repos, ce qui améliore considérablement la facilité de gestion.En plus du repos, la cinquième génération de proxys fournit généralement un plan de contrôle basé sur le nuage pour gérer les proxys.Il fournit également plusieurs interfaces externes pour répondre à d'autres exigences de gestion, telles que la surveillance, l'audit et les statistiques.

9.

Facilité d'utilisation

*

*

*

* *

* * *

The primary users of the first three generations of proxies are ops & sys admins.Dans la quatrième génération, les administrateurs ont commencé à fournir des fonctions aux utilisateurs, et le modèle en tant que service a commencé à apparaître.La cinquième génération prend en compte plus de scénarios utilisateur et fournit plus de capacités de locataire.

dix.

Facilité de développement

*

* *

* * *

* * * *

* * * * *

Le développement autour des procurations comprend deux aspects.L'un est à l'intérieur du proxy, visant à atteindre la fonctionnalité;L'autre est en dehors du proxy, visant à atteindre la capacité de gestion du proxy.Les trois premières générations fournissent une interface pour le développement interne.Les deux dernières générations fournissent des interfaces internes et externes.L'amélioration significative apportée par la cinquième génération par rapport à la quatrième génération est l'interface cloud.

11.

L'interface de base est programmable

*

*

*

*

*

Chaque génération de proxys offre la possibilité d'étendre les interfaces centrales, mais ces interfaces sont trop de bas niveau et difficiles à maîtriser.

12.

L'extension de la fonctionnalité est programmable

*

* *

* * *

* * * *

* * * * *

Fournir la possibilité d'étendre les fonctions plus efficacement fait partie du processus qui s'améliore avec chaque génération de proxys.C'est la métrique centrale des proxys programmables.

13.

Les extensions de protocole sont programmables

* *

* * *

Les trois premières générations sont principalement destinées à un protocole unique ou à des protocoles fixes.En commençant par la quatrième génération, les utilisateurs ont commencé à demander le support pour plusieurs protocoles et protocoles personnalisés.Dans la cinquième génération, l'extension du protocole est considérée comme une capacité de base dans la conception.

14.

Script modulaire

* * *

* * * *

* * * *

Les procurations de troisième génération commencent à accorder plus d'attention à la structuration du script.Les quatrième et cinquième générations tentent de permettre une programmation plus structurée, comme la tentative d'Envoy de fournir un support multilingue via WASM;Pipy introduit des scripts JS haute performance pour une meilleure structuration

15.

La gestion de la configuration est programmable

* *

* * *

Les trois premières générations de cible de configuration proxy principalement du personnel de gestion OPS et les outils de gestion de configuration externes sont basés sur cette prémisse.La quatrième génération prend en charge les interfaces de gestion REST.La cinquième génération fournit en outre une interface cloud standard pour la gestion de la configuration.

16.

Les extensions de ressources sont programmables

*

*

*

* *

* * * *

Pour les trois premières générations, l'expansion de la capacité de procuration visait principalement à augmenter le nombre de threads ou de processus.La quatrième génération offre une capacité d'échelle pour les processus, appelés capacités de clustering.Sur la base de cela, la cinquième génération fournit d'une main des capacités d'expansion horizontales, en revanche des capacités sous contraintes.Autrement dit, il prend en charge non seulement la mise à l'échelle incrémentielle, mais offre également la possibilité de réduire.De plus, toutes ces capacités fournissent des interfaces de programmation.

17.

Extension du locataire programmable

* * *

Le cloud est quelque chose qui a émergé en même temps que la quatrième génération de proxy, et la multi-location, en tant que caractéristique centrale du cloud, n'est pas bien prise en charge dans la quatrième génération.La cinquième génération est conçue sur la prémisse du cloud computing, considérant et offrant aux locataires la possibilité de programmer leurs propres extensions.

Rows #11 to #17 in the table above are the specific aspects of a programmable proxy. These aspects also constitute the answer to the question why to use a programmable proxy:

Résumé

Dans cet article, nous avons essayé de fournir notre réponse à ce qu'est un proxy programmable.Dans ce but, nous avons commencé à partir de la définition de ce qu'est un proxy et quelles sont ses caractéristiques clés.Ensuite, nous avons élargi notre discussion pour inclure le proxy d'évolution qui s'est passé, expliquant les caractéristiques et les fonctionnalités qui ont été ajoutées à chaque étape.Enfin, nous résumons notre discussion sur les fonctionnalités de proxy en les divisant en 17 catégories différentes et en classement chaque génération de proxy.Cette classification nous a permis d'identifier les caractéristiques et les attributs de la clé requis pour qu'un proxy soit étiqueté comme programmable.

à propos des auteurs

Cai Shu

Show moreShow less

Ali Naqvi

Show moreShow less

The What and Why of Programmable Proxies