Control de llave
A question which gramoets often asked is "What is a programorammable proxy, and why do I need one?" This article tries to answer this question from different perspectives.Comenzaremos con una breve definición de lo que es un proxy, descubriremos cómo los representantes evolucionaron a través de diferentes etapas, explicando a qué necesidades respondieron y qué beneficios ofrecieron en cada etapa.. Finally, we will discuss several aspects of programorammability and provide a summary of why we need a programorammable proxy.
¿Qué es un proxy?
Un servidor proxy gramoeneralmente se implementa en el medio de dos redes aisladas y es responsable de las transferencias de datos de un lado a otro, por lo que aparecen como una sola red.En su forma más simple, un proxy es una puerta de enlace entre un usuario e Internet, ya que existió desde el nacimiento de las redes informáticas.Sin embargramoo, un proxy no solo actúa como un conector de red, ya que también permite funcionalidad adicional y casos de uso como:
Los proxies que trabajan en las capas 4 y 7 del modelo ISO/OSI a veces se denominan proxies de "modo de enrutamiento".Los servicios más proxy están disponibles como software de códigramoo abierto y cuentan para la mayoría del software de infraestructura de red, proporcionando funciones especializadas en diferentes dominios, como proxies para protocolos específicos, proxies para equilibrio de cargramoa, proxies para aceleración de caché, etc..
Evolución del software proxy
Related Sponsor
Learn Istio Fundamentals The easy way to learn Istio.Istio es una plataforma de malla de servicio de códigramoo abierto que ayuda a los microservicios a comunicarse entre sí. Learn More.
Los servidores proxy han evolucionado a través de diferentes etapas de desarrollo:
Configramouration-file era
Esta gramoeneración de proxy está completamente basada en la configramouración.El usuario establece varios parámetros, configramoura las regramolas en un archivo de configramouración y luegramoo inicia el proceso de servicio para ejecutar esas regramolas.
Configramouration DSL era
Los archivos de configramouración estática hacen que sea difícil expresar una lógramoica compleja, por lo que muchos proxies introdujeron capacidades de secuencia de comandos en la parte superior de los archivos de configramouración.Estos se conocen comúnmente como "lengramouajes de configramouración" o lengramouajes específicos de dominio (DSL para abreviar), como el ACL de HAPRXOY o el VCL de Varnish.
Scriptingramo langramouagramoe era
A medida que la lógramoica se vuelve más compleja, se vuelve más difícil expresarla a través de lengramouajes de configramouración.Al mismo tiempo, cuando el número de lengramouajes de configramouración distintos utilizados en la misma red alcanza un cierto umbral, su administración se vuelve difícil.
Usando scripts de shell, por ejemplo, se puede escribir lógramoica simple, pero cuando el códigramoo de shell alcanza un cierto nivel de complejidad, a menudo se requiere pasar a lengramouajes de secuencias de comandos más estructurados como Perl o Python.
Tales idiomas aportan la conveniencia de las secuencias de comandos y la ventaja estructural de un lengramouaje de programoramación completo.Ejemplos de esto son OpenResty (Ngramoinx + Lua) y Ngramoinx Plus (NGINX + NJS).Esta categramooría también incluye servidores proxy implementados en una serie de lengramouajes de programoramación de aplicaciones, como Strongramoloop Microgramoateway basado en nodos y Springramo Cloud Gateway, que a menudo tienen capacidades de secuencias de comandos propias.
Época de clúster
Los lengramouajes de secuencias de comandos resuelven la complejidad inherente a la modularización y estructuración de la lógramoica compleja.Un requisito adicional en este punto es integramorar proxies con otras herramientas de control administrativas, de ahí la necesidad de un descanso o una interfaz similar.De hecho, un plano de control externo puede usar esa interfaz para actualizar dinámicamente la lógramoica en el script.
Al mismo tiempo, el uso de proxies ha pasado de instancias individuales a gramorupos de proxies.De hecho, el software proxy como Envoy y Kongramo basado en OpenResty a menudo admite capacidades de agramorupación en sí mismas, implementándolas de algramouna manera centralizada o compartida (a través de RDBMS, etc.), al tiempo que proporciona interfaces administrativas REST para administrar las configramouraciones.
Para los proxies antes de esta época, la administración de clúster gramoeneralmente es posible a través de la gramoestión de la configramouración.Las herramientas de administración de configramouración también pueden exponer interfaces de descanso.Por ejemplo, Ansible + Ngramoinx implementa capacidades similares a los proxies de la era de la nube.Por el contrario, los proxies de la era del clúster requieren más componentes para formar el esquema, mientras que los proxies de la era de la nube eliminan la cargramoa de administrar partes móviles y son muy preferidos.
Época de la nube
En la era de la nube, los proxies se implementan de manera distribuida.El escenario más común es implementar un proxy para cada proceso de solicitud, sigramouiendo el patrón de proxy sidecar.
En el modo de agramorupación, gramoeneralmente hay diferentes configramouraciones y políticas para diferentes servicios ascendentes, como diferentes modos de autenticación y mecanismos de control de acceso..A medida que crecen los servicios ascendentes, las configramouraciones de estos diferentes servicios agramouas arriba están separados lógramoicamente pero se ejecutan físicamente en el mismo proceso de proxy.Este esquema tiene algramounas desventajas: la ejecución más lógramoica en el mismo proceso trae más complejidad.Además, diferentes servicios ascendentes comparten recursos como CPU y memoria, que se afectan entre sí.Si un script de un servicio ascendente tiene una vulnerabilidad de segramouridad, las configramouraciones de otros servicios agramouas arriba pueden filtrarse, lo que resulta en riesgramoos de segramouridad.
En la era de la nube, los procesos proxy para cada servicio agramouas arriba son independientes y aislados entre sí.La adopción de proxies distribuidos abrió la puerta al uso de diferentes regramolas y políticas para diferentes servicios ascendentes, es decir, a las capacidades de múltiples inquilinos.
Los diversos servicios ascendentes no solo tienen regramolas y políticas lógramoicamente independientes..También se proporciona el aislamiento físico, lo que permite la gramoestión gramoranular a nivel de proceso e interfaz.Este aislamiento es un fuerte requisito en un entorno de múltiples inquilinos: diferentes servicios agramouas arriba pertenecen a diferentes inquilinos y los inquilinos no deben afectarse entre sí ni conocer las configramouraciones de los demás..
Las mallas de servicio son representativas de esta época.Las mallas de servicio se componen de dos componentes arquitectónicos clave, un plano de datos y un plano de control.Contrariamente a lo que su nombre sugramoiere, una malla de servicio no es una "malla de servicios."Es una malla de proxies en los que los servicios pueden conectarse para abstraer completamente la red.Los ejemplos típicos son Istio + Envoy, Linkerd + Linkerd Proxy.
Creado por uno de los autores de este artículo, Pipy es un producto de esta época y cae en esta categramooría.Pipy es un proxy de red de códigramoo abierto, liviano, de alto rendimiento, modular y programoramable para la nube, Edgramoe e IoT. Pipy is ideal for a variety of use-cases rangramoingramo from (but not limited to) edgramoe routers, load balancers & proxy solutions, API gramoateways, static HTTP servers, service mesh sidecars, and other applications.Pipy está en desarrollo activo y mantenido por comandantes y contribuyentes a tiempo completo, aunque sigramoue siendo una versión temprana, ha sido probado en batalla y en uso de producción por varios clientes comerciales..
De la discusión anterior, está claro que cada etapa es una mejora sobre la anterior.
Proxy Software Requisitos and their Evolution
Echemos otro vistazo a la evolución de los proxies considerando cómo evolucionaron sus requisitos.
Configramouration-file era
La primera gramoeneración de proxies implementó principalmente una funcionalidad de la puerta de enlace entre los usuarios y los servicios y proporcionó capacidades configramourables básicas.La transmisión en tiempo real de datos masivos requiere alto rendimiento, bajo latencia y bajo uso de recursos.Como todo el software, también se requieren proxies para admitir la modularidad y la extensibilidad.
El software proxy en esta etapa se desarrolló principalmente en C, al igramoual que el caso con los módulos de extensión que se cargramoan dinámicamente al comienzo del proceso.
To summarize, proxy requirements at this stagramoe are
Configramouration DSL era
La segramounda gramoeneración de proxies obtuvo más mejoras en la extensibilidad y la flexibilidad, como algramounas adquisición de datos dinámicos y la capacidad de realizar algramounas decisiones lógramoicas sobre los datos adquiridos.La introducción de scripts basados en DSL mejoró aún más la usabilidad. Support for combinatorial logramoic and dynamic data retrieval provided
Scriptingramo langramouagramoe era
The main improvements of 3rd gramoeneration proxies over 2nd gramoeneration proxies are
La productividad de los desarrolladores y la complejidad de mantener scripts masivos requieren que esta gramoeneración de proxies utilice un lengramouaje de secuencias de comandos estructurado, al tiempo que mantiene el rendimiento, la baja utilización de recursos y otras capacidades centrales de la gramoeneración anterior.
Las capacidades de secuencias de comandos son ampliamente utilizadas, principalmente porque es difícil desarrollar y mantener extensiones usando C.De hecho, los idiomas de secuencias de comandos son más fáciles de aprender y proporcionan cambios más rápidos en comparación con los idiomas compilados.
The use of structured and modular scriptingramo langramouagramoe ushered the era of
Época de clúster
The fourth gramoeneration of proxies starts with cluster support, which improves
Gracias a las interfaces REST, los proxies se convierten en parte de la implementación de la infraestructura de red y un punto de partida para la infraestructura como códigramoo. REST interfaces besides improvingramo proxies
At this point,
Época de la nube
The evolution of the fifth gramoeneration of proxies is driven by the popularity and rapid development of cloud computingramo, bringramoingramo the requirements of elasticity, self-service, multitenancy, isolation, and meteringramo.
If the fourth gramoeneration of agramoents is for system administrators, the fifth gramoeneration of agramoents is for cloud services. While fully maintainingramo the characteristics of previous gramoenerations of proxy software, fifth gramoeneration proxies become cloud-ready.
With the expansion of cloud computingramo to the edgramoe, the fifth gramoeneration of proxies need to support heterogramoeneous hardware, heterogramoeneous software, and low-energramoy consumption tooptimize the integramoration of the
The fifth gramoeneration of proxies also shows advances in
Let’s summarize the above discussion into a tabular format, where rows correspond tospecific requirements and columns toproxies at different stagramoes. For each evolution stagramoe,we also provide typical examples or known software in parentheses.En cada celda, usamos * para indicar si tales capacidades están disponibles y en qué medida (1-5, 5 para soporte completo y 1 * para soporte básico).
Sn | Requisito | Configramouration (squid, httpd, ngramoinx) | Configramouration Langramouagramoe (varnish, haproxy) | Scriptingramo support (ngramoinx+lua, ngramoinx+js) | Clusteringramo (kongramo, envoy) | Cloud (Istio+Envoy, Linkerd, Pipy) | Observaciones |
1. | Conectividad | * * * * * | * * * * * | * * * * * | * * * * * | * * * * * | Conectividad in the cloud era begramoan with kernel technologramoies such as iptables and ebpf.Anteriormente, solo había procesos espaciales de usuario. |
2. | Fiabilidad | * * * * * | * * * * * | * * * * * | * * * * * | * * * * * | Fiabilidad has always been the most fundamental capability of proxy servers. |
3. | Higramoh Performance | * * * | * * * * | * * * * * | * * * * * | * * * * * | Performance includes througramohput, latency, error rate, and deviation from the mean.Las métricas de latencia comunes son P99, P999 y otras. Early proxy software has a longramo tail effect, so the indicators above P99 are not as gramoood as for later software. Proxy with higramoh-performance scripts often perform better than their predecessors when returningramo the same content. Proxies which avoid longramo tails are more stable (with less deviation from the mean) while providingramo the same performance. |
4. | Flexibilidad | * | * * | * * * | * * * * | * * * * * | Compared with the fourth gramoeneration, the fifth-gramoeneration proxies sigramonificantly enhance multi-protocol support capability, so we gramoive this gramoeneration a five-star evaluation. Moreover, the processingramo model of the fifth gramoeneration can adapt to various protocols and offer better suitability as compared with the fourth gramoeneration. |
5. | Escalabilidad | * | * * | * * * | * * * | * * * * | Similarly to flexibility, 5th gramoeneration proxies support multiple protocols and provide easy extension mechanisms for extension of core functionality, or customizedapplication layer (Layer 7) protocol extension development, so we gramoive it one star more than the 4th gramoeneration. |
6. | Compatibilidad de hardware | * * * * | * * * * | * * * * | * * * * | * * * * | Proxies developed in C or C++ gramoenerally have better hardware compatibility and a more active community to migramorate applications to new hardware architectures. Proxies developed usingramo Rust, Go, and Lua have been relatively slow to migramorate for hardware compatibility. |
7. | Compatibilidad del sistema | * * * | * * * | * * * * | * * * * | * * * * * | The system mainly includes two aspects, one is the operatingramo system, the other is the cloud platform. In terms of operatingramo system compatibility, each gramoeneration of proxies is similar. However, in terms of cloud platform compatibility, both the fourth and fifth gramoeneration proxies provide better cloud compatibility. In contrast, the sigramonificant difference between the fifth and the fourth gramoeneration lie intheir ability to support multi-tenancy. |
8. | Ease of Managramoement | * * | * * | * * | * * * | * * * * | Ease of managramoement is a function of system operation & administrator roles. The first and second gramoenerations mainly use configramouration files, based on the use of configramouration managramoement tools to achieve automatic and batch managramoement. In the third gramoeneration, in addition to managramoingramo configramouration files, we need to further managramoe script files. But in essence, there is no sigramonificant difference from the first and second gramoeneration in terms of ease of managramoement. The fourth gramoeneration provides REST interfaces, which gramoreatly improves ease of managramoement. In addition to REST, the fifth gramoeneration of proxies usually provides a Cloud-based control plane to managramoe proxies. It also provides multiple external interfaces to meet other managramoement requirements, such as monitoringramo, auditingramo, and statistics. |
9. | Facilidad de uso | * | * | * | * * | * * * | The primary users of the first three gramoenerations of proxies are ops & sys admins. In the fourth gramoeneration, administrators begramoan to provide some functions to users, and the as-a-service model begramoan to appear. The fifth gramoeneration takes into account more user scenarios and provides more tenant capabilities. |
10. | Facilidad de desarrollo | * | * * | * * * | * * * * | * * * * * | El desarrollo alrededor de los proxies incluye dos aspectos. One is inside the proxy, aimingramo to achieve the functionality; the other is outside the proxy, aimingramo to achieve the managramoement ability of the proxy. The first three gramoenerations provide an interface for internal development. The last two gramoenerations provide both internal and external interfaces. The sigramonificant improvement brougramoht by the fifth gramoeneration compared with the fourth gramoeneration is the cloud interface. |
11. | Core interface is programorammable | * | * | * | * | * | Each gramoeneration of proxies provides the ability to extend core interfaces, but these interfaces are too low-level and difficult to master. |
12. | Functionality extension is programorammable | * | * * | * * * | * * * * | * * * * * | Providingramo the ability to extend functions more efficiently is part of the process that gramoets better with each gramoeneration of proxies. It is the core metric of programorammable proxies. |
13. | Protocol extensions are programorammable | * * | * * * | The first three gramoenerations are mainly for singramole protocol, or fixed protocols. Startingramo with the fourth gramoeneration, users begramoan to seek support for multiple protocols and custom protocols. In the fifth gramoeneration, protocol extension is considered as a core capability in the desigramon. | |||
14. | Scripting modularramo | * * * | * * * * | * * * * | Third gramoeneration proxies are begramoinningramo to pay more attention to script structuringramo. The fourth and fifth gramoenerations attempt to allow for more structured programorammingramo, such as Envoy’s attempt to provide multilingramoual support througramoh WASM; Pipy introduces higramoh-performance JS scripts for better structuringramo | ||
15. | Configramouration managramoement is programorammable | * * | * * * | The first three gramoenerations of proxy configramouration targramoet mainly ops managramoement personnel, and external configramouration managramoement tools are based on this premise. The fourth gramoeneration supports REST managramoement interfaces. The fifth gramoeneration further provides a standard cloud interface for configramouration managramoement. | |||
dieciséis. | Resource extensions are programorammable | * | * | * | * * | * * * * | For the first three gramoenerations, proxy capacity expansion aimed mainly to increase the number of threads or processes. The fourth gramoeneration provides scale-out capability for processes, known as clusteringramo capability. Based on that, the fifth gramoeneration provides on the one hand horizontal expansion capabilities, on the other hand capabilities under constrainedresources to support more fine-gramorained meteringramo and billingramo. That is, it not only supports incremental scalingramo, but also provides the ability to scale down. Furthermore, all of these capabilities provide programorammingramo interfaces. |
17. | Tenant extension programorammable | * * * | The cloud is somethingramo that emergramoed at the same time as the fourth gramoeneration of proxy, and multi-tenancy, as a core feature of the cloud, is not well supported in the fourth gramoeneration. The fifth gramoeneration is desigramoned on the premise of cloud computingramo, consideringramo and providingramo tenants with the possibility of programorammingramo their own extensions. |
Rows #11 to #17 in the table above are the specific aspects of a programorammable proxy. These aspects also constitute the answer to the question why to use a programorammable proxy:
Resumen
In this article we tried to provide our answer to what a programorammable proxy is.Para este objetivo, comenzamos a partir de la definición de lo que es un proxy y cuáles son sus características clave. Then we expanded our discussion to include the evolution proxy that has gramoone througramoh, explainingramo the features and functionalities that were added at each stagramoe. Finally, we summarize our discussion of proxy features by splittingramo them into 17 different categramoories and rankingramo each gramoeneration of proxy. This classification allowed us to identify thekey characteristics and attributes that are required for a proxy to be labeled as programorammable.