Co-authored-by: 琚致远 <juzhiyuan@apache.org>
22 KiB
title |
---|
Apache APISIX |
Apache APISIX es un portal API en tiempo real, dinámico y de alto rendimiento.
APISIX proporciona variadas opciones de manejo de tráfico tales como balanceo de cargas, upstream dinámico, comprobación tipo despliegue de canarios (canary release), interrupción de circuitos, autenticación, observabilidad y más.
Usted puede usar Apache APISIX para manejar el tráfico tradicional norte-sur, así como tráfico este-oeste entre servicios. También puede usarse como k8s ingress controller (control de ingreso).
La arquitectura técnica de Apache APISIX:
Communidad
- Lista de Correos: Enviar correos a dev-subscribe@apisix.apache.org, luego siga la respuesta para suscribirse a la Lista de Correos.
- QQ Group - 578997126
- Slack Workspace - únase a
#apisix
en nuestro Slack para encontrarse con el equipo y formular preguntas - - síganos e interactúe con nosotros usando hashtag
#ApacheAPISIX
- bilibili video
- Good first issues:
Características
Usted puede usar Apache APISIX como un acceso de tráfico para procesar todos los datos del negocio, incluyendo direccionamiento dinámico (dynamic routing), upstream dinámico, certificados dinámicos, ensayos A/B, ensayos de despliegue de canarios (canary release), despliegue azul-verde (blue-green), límite de tasa, defensa contra ataques maliciosos, métrica, monitoreo de alarmas, visibilidad de servicios, gobernabilidad de servicios, etc.
-
Todas las Plataformas
- Nativo de la Nube: Agnóstico de Plataforma, libre de restricciones del vendedor, APISIX puede ejecutarse desde metal desnudo hasta Kubernetes.
- Entorno de Ejecución: Soporta tanto OpenResty como Tengine.
- Soporta ARM64: No hay que preocuparse por las restricciones de la infra tecnología.
-
Multi protocolos
- Proxy TCP/UDP: Proxy TCP/UDP dinámico.
- Proxy Dubbo: Proxy dinámico HTTP a Dubbo.
- Proxy MQTT Dinámico: Soporte de balance de carga MQTT por
client_id
, soporta ambos MQTT 3.1.*, 5.0. - Proxy gRPC: Tráfico gRPC a través de Proxy.
- Transcodificado gRPC: Soporta transcodificado de protocolo para que los clientes puedan acceder su gRPC API usando HTTP/JSON.
- Proxy de Websocket
- Proxy de Protocolo
- Proxy Dubbo: Proxy de Dubbo basado en Tengine.
- Proxy de HTTP(S) hacia adelante
- SSL: Carga dinámica de certificado SSL.
-
Completamente Dinámico
- Las actualizaciones y los plugins más recientes: Actualiza sus configuraciones y plugins sin reinicios!
- Reescritura de proxy: Soporta la reescritura de
host
,uri
,schema
,enable_websocket
,headers
para el request antes de reenviarlo aguas arriba (upstream). - Reescritura de respuesta: Establece el código de estatus de respuesta personalizado, así como el cuerpo y el encabezado para el cliente.
- Sin servidor (serverless): Invoque funciones en cada fase en APISIX.
- Balance dinámico de cargas: Balanceo de cargas Round-robin usando pesos.
- Balance de cargas basado en Hash: Balanceo de cargas con sesiones de hashing consistentes.
- Comprobaciones del sistema: Permite comprobaciones del sistema en el nodo aguas arriba, y automáticamente filtrará nodos problemáticos durante el balanceo de cargas para asegurar la estabilidad del sistema.
- Interruptor del circuito: Rastreo inteligente de servicios aguas arriba que tengan problemas.
- Reflejo de proxy (mirror): Proporciona la capacidad de reflejar (mirror) los request (solicitudes) del cliente.
- Bifurcación de tráfico: Permite a los usuarios dirigir de manera creciente porciones del tráfico entre varias corrientes aguas arriba (upstreams).
-
Enrutamiento con control fino (fine grain)
- Soporta correspondencia completa de la ruta y correspondencia del prefijo
- Soporta todas las variables integradas en Nginx como condiciones para el enrutamiento, así que pueden usarse
cookie
,args
, etc. como condiciones de enrutamiento para implementar ensayos de desplegado de canarios, ensayoss A/B, etc. - Soporta varios operadores como condiciones de juicio para el enrutamiento, por ejemplo
{"arg_age", ">", 24}
- Soporta función personalizada de correspondencia de ruta
- IPv6: Usar IPv6 para hacer corresponder la ruta.
- Soporta TTL
- Soporta prioridades
- Soporta solicitudes Batch Http (por lotes)
-
Seguridad
- Autenticaciones: key-auth, JWT, basic-auth, wolf-rbac
- IP Whitelist/Blacklist
- Referente Whitelist/Blacklist (listas blancas y negras)
- IdP: Soporta servicios externos de autenticación, tales como Auth0, okta, etc., los usuarios pueden usar esto para conectarse a OAuth 2.0 y otros métodos de autenticación.
- Límite de procesamiento de solicitudes (Limit-req)
- Límite de contador (Limit-count)
- Límite de concurrencia (Limit-concurrency)
- Anti-ReDoS (Negación regular del servicio): políticas integradas para Anti ReDoS sin configuración.
- CORS Activa CORS (Compartir recursos de origen cruzado) para su API.
- Bloqueador URI: Bloquea solicitudes del cliente por URI.
- Validador de solicitudes (Request Validator)
-
OPS amigable
- OpenTracing (rastreo abierto): Soporta Apache Skywalking y Zipkin
- Trabaja con descubrimiento de servicio externo:Aparte del etcd integrado (Equipo Terminal del Circuito de Datos), también soporta
Consul
yNacos
DNS en modo descubrimiento, y Eureka - Monitoreo y métrica (control de mediciones): Prometheus
- Agrupación (clustering): Nodos APISIX sin estados, crea agrupaciones del centro de configuración, por favor consultar etcd Clustering Guide.
- Alta disponibilidad: Soporta configurar múltiples direcciones etcd en el mismo grupo (cluster).
- Tablero
- Control de versión: Soporta retroceso o deshacer de operaciones.
- CLI: comenzar\detenerse\recargar APISIX usando la línea de comando.
- Modo stand-alone (por su cuenta): Soporta cargar reglas de ruta desde un archivo local yaml, siendo más amigable que kubernetes(k8s).
- Regla global: Permite ejecutar cualquier plugin para todas las solicitudes, como: limit rate, IP filter etc.
- Alto desempeño: El QPS de un sólo núcleo alcanza 18k con un retraso promedio de menos de 0.2 milisegundos.
- Fault Injection
- REST Admin API: Al usar REST Admin API para controlar Apache APISIX, el cual solamente permite acceso 127.0.0.1 por defecto, usted puede modificar el campo
allow_admin
enconf/config.yaml
para especificar una lista de IPs a los que se les permite llamar el Admin API. Nótese también que el Admin API utiliza autentificación de clave (key auth) para verificar la identidad de quien llama. El campoadmin_key
enconf/config.yaml
debe ser modificado antes del despliegue para asegurar la seguridad. - Loggers (accesos de registro) externos: Exporte accesos de registro para herramientas de control de acceso externo. (HTTP Logger, TCP Logger, Kafka Logger, UDP Logger)
- Cartas Helm
-
Altamente escalable
- Plugins personalizados: Permite engancharse en fases comunes, tales como
rewrite
,access
,header filer
,body filter
ylog
, y también permite engancharse en la etapabalancer
. - Carga personalizada de algoritmos de balanceo: Usted puede cargar los algoritmos de balanceo de manera personalizada durante la fase de
balancer
. - Routing personalizado: Soporta que los usuarios implementen algoritmos de enrutamiento por sí mismos.
- Plugins personalizados: Permite engancharse en fases comunes, tales como
Comenzando
Configuración e Instalación
APISIX ha sido instalado y probado en los siguientes sistemas:
CentOS 7, Ubuntu 16.04, Ubuntu 18.04, Debian 9, Debian 10, macOS, ARM64 Ubuntu 18.04
Hay varias maneras de instalar la versión publicada Apache de APISIX:
-
Compilación de código fuente (aplicable a todos los sistemas)
-
Instalación de dependencias en tiempo de ejecución: OpenResty y etcd, y dependencias de compilación: luarocks. Consultar install dependencies documentation
-
Bajar el paquete de publicación más reciente de código fuente:
$ mkdir apisix-2.3 $ wget https://downloads.apache.org/apisix/2.3/apache-apisix-2.3-src.tgz $ tar zxvf apache-apisix-2.3-src.tgz -C apisix-2.3
-
Instalar las dependencias:
$ make deps
-
Chequear la versión de APISIX:
$ ./bin/apisix version
-
Iniciar APISIX:
$ ./bin/apisix start
-
-
Imagen del contenedor Docker (aplicable a todos los sistemas)
Por defecto, el paquete de Apache de más reciente publicación será descargado:
$ docker pull apache/apisix
La imagen del contenedor Docker no incluye
etcd
, usted puede consultar docker compose example para iniciar un grupo de ensayos. -
Paquete RPM(sólo para CentOS 7)
- Instalación de dependencias en tiempo de ejecución: Librerías de desarrollo OpenResty, etcd y OpenSSL, consultar install dependencies documentation
- Instalar APISIX:
$ sudo yum install -y https://github.com/apache/apisix/releases/download/2.3/apisix-2.3-0.x86_64.rpm
-
Chequear versión de APISIX:
$ apisix version
-
Iniciar APISIX:
$ apisix start
Nota: Apache APISIX no soportaría más el protocolo v2 de etcd desde APISIX v2.0, y la mínima versión soportada de etcd es v3.4.0. Favor actualizar etcd cuando sea necesario. Si usted necesita migrar sus datos desde etcd v2 a la v3, por favor siga los pasos indicados en etcd migration guide.
Para desarrolladores
-
Para desarrolladores, usted puede usar la más reciente rama maestra (master branch) para experimentar más prestaciones
- Construir a partir del código fuente
$ git clone git@github.com:apache/apisix.git $ cd apisix $ make deps
- Imagen del contenedor Docker
$ git clone https://github.com/apache/apisix-docker.git $ cd apisix-docker $ sudo docker build -f alpine-dev/Dockerfile .
-
Comenzando
La Guía para Comenzar es una excelente manera de aprender los fundamentos de APISIX, basta seguir los pasos en Getting Started.
Más aún, usted puede seguir la documentación para ensayar más plugins.
-
Admin API
Apache APISIX brinda REST Admin API para controlar de forma dinámica el grupo (cluster) Apache APISIX.
-
Desarrollo de Plugin
Usted puede consultar la guía plugin development guide, y la documentación e implementación de código sample plugin
echo
.Por favor note que los plugins de Apache APISIX added, updated, deleted, etc. no son cargados sin reiniciar el servicio.
Para más documentación, por favor visitar Apache APISIX Document Index
Evaluación comparativa (Benchmark)
Al usar el servidor de 8 núcleos de AWS, los QPS de APISIX alcanzan 140,000 con una latencia de solamente 0.2 ms.
Resultados de la evaluación (Benchmark script), método de ensayo y proceso han sido fuente abierta, usted es bienvenido a intentarlo y contribuir.
Apache APISIX vs Kong
Ambos han sido cubiertos en cuanto a prestaciones del núcleo del portal (gateway) API
Prestaciones | Apache APISIX | KONG |
---|---|---|
Upstream dinámico | Sí | Sí |
Router dinámico | Sí | Sí |
Chequeo del sistema | Sí | Sí |
SSL dinámico | Sí | Sí |
Proxy L4 y L7 | Sí | Sí |
Rastreo abierto | Sí | Sí |
Plugin personalizado | Sí | Sí |
REST API | Sí | Sí |
CLI | Sí | Sí |
Las ventajas de Apache APISIX
Prestaciones | Apache APISIX | Kong |
---|---|---|
Le pertenece a | Apache Software Foundation | Kong Inc. |
Arquitectura de la tecnología | Nginx + etcd | Nginx + postgres |
Canales de comunicación | Lista de correos, grupo Wechat, grupo QQ, GitHub, meetup | GitHub, freenode, foro |
CPU de un solo núcleo, QPS (activa limit-count y plugins prometheus) | 18000 | 1700 |
Latencia | 0.2 ms | 2 ms |
Dubbo | Sí | No |
Retroceso-deshacer de configuration | Sí | No |
Ruta con TTL | Sí | No |
Plug-in carga en caliente | Sí | No |
LB y ruta personalizados | Sí | No |
REST API <--> transcodificación gRPC | Sí | No |
Tengine | Sí | No |
MQTT | Sí | No |
Tiempo efectivo de Configuración | Determinado por los eventos, < 1ms | Recabando datos, 5 seg |
Tablero | Sí | No |
IdP | Sí | No |
Centro de configuración HA | Sí | No |
Límite de velocidad para una ventana específica de tiempo | Sí | No |
Soporta cualquier variable Nginx como condición de enrutamiento | Sí | No |
Ensayo de comparación de desempeño datos detallados
Contribuciones a través del tiempo
Videos y Artículos
- Apache APISIX: How to implement plugin orchestration in API Gateway
- Improve Apache APISIX observability with Apache Skywalking
- APISIX technology selection, testing and continuous integration
- Analysis of Excellent Performance of Apache APISIX Microservices Gateway
Historias de Usuarios
- European Factory Platform: API Security Gateway – Using APISIX in the eFactory Platform
- ke.com: How to Build a Gateway Based on Apache APISIX(Chinese)
- 360: Apache APISIX Practice in OPS Platform(Chinese)
- HelloTalk: Exploring Globalization Based on OpenResty and Apache APISIX(Chinese)
- Tencent Cloud: Why choose Apache APISIX to implement the k8s ingress controller?(Chinese)
- aispeech: Why we create a new k8s ingress controller?(Chinese)
¿Quién usa APISIX?
Una gran variedad de compañías y organizacioes usan APISIX para investigación, producción y productos comerciales, incluyendo:
Se alienta a los usuarios a sumarse a la página Powered By.
Landscape (panorama)
APISIX enriquece el
CNCF API Gateway Landscape.
Logos
Reconocimientos
Inspirado por Kong y Orange.