Comparativa de selección entre API Gateway Apache APISIX y Kong
API7.ai
January 18, 2020
Apache APISIX y Kong son ambos gateways de API de microservicios de código abierto, entonces, ¿cómo se comparan y cómo elegir entre ellos?
Estos dos proyectos cuentan con documentación y pruebas completas, y muchos usuarios en producción los están utilizando, por lo que no hay que preocuparse por su estabilidad y desarrollo sostenible. Este artículo se centrará en las funciones y el rendimiento más directos y verificables, para hacer una comparación desde una perspectiva diferente.
Estos dos proyectos cuentan con documentación y pruebas completas, y muchos usuarios en producción los están utilizando, por lo que no hay que preocuparse por su estabilidad y desarrollo sostenible. Este artículo se centrará en las funciones y el rendimiento más directos y verificables, para hacer una comparación desde una perspectiva diferente.
Características | Apache APISIX | KONG |
---|---|---|
Upstream dinámico | Sí | Sí |
Enrutador dinámico | Sí | Sí |
Chequeo de salud | Sí | Sí |
SSL dinámico | Sí | Sí |
Proxy L4 y L7 | Sí | Sí |
Opentracing | Sí | Sí |
Plugin personalizado | Sí | Sí |
API REST | Sí | Sí |
CLI | Sí | Sí |
Para una comparación más detallada.
Características | Apache APISIX | Kong |
---|---|---|
Pertenece a | Apache Software Foundation | Kong Inc. |
Arquitectura técnica | Nginx + etcd | Nginx + postgres |
Canales de comunicación | Lista de correo, grupo de Wechat, grupo de QQ, GitHub, meetup | GitHub, freenode, foro |
CPU de un solo núcleo, QPS (habilitando plugins limit-count y prometheus) | 18000 | 1700 |
Latencia | 0.2 ms | 2 ms |
Dubbo | Sí | No |
Reversión de configuración | Sí | No |
Ruta con TTL | Sí | No |
Carga en caliente de plugins | Sí | No |
Balanceador de carga y ruta personalizados | Sí | No |
Transcripción de API REST <--> gRPC | Sí | No |
Tengine | Sí | No |
MQTT | Sí | No |
Tiempo de efectividad de la configuración | Basado en eventos, < 1ms | Polling, 5 segundos |
Panel de control | Sí | No |
IdP | Sí | No |
Alta disponibilidad del centro de configuración | Sí | No |
Limitación de velocidad para una ventana de tiempo específica | Sí | No |
Soporte de cualquier variable de Nginx como condición de enrutamiento | Sí | No |
Rendimiento
Después de habilitar los plugins limit-count y prometheus, el rendimiento de Apache APISIX es diez veces superior al de Kong.
Aquí hay pasos más detallados: https://gist.github.com/membphis/137db97a4bf64d3653aa42f3e016bd01, los desarrolladores interesados pueden seguir la imagen para verificar.
¿Por qué Apache APISIX supera a Kong?
Aquí discutimos las razones detrás de las diferencias en funcionalidad y rendimiento:
-
La complejidad de enrutamiento de Apache APISIX es O(k), que solo está relacionada con la longitud del URI y no tiene nada que ver con el número de rutas; la complejidad temporal de enrutamiento de Kong es O(n), que aumenta linealmente con el número de rutas.
-
La complejidad temporal de coincidencia de IP de Apache APISIX es O(1), lo que no agotará los recursos de la CPU con un gran número de juicios de IP.
-
La coincidencia de rutas de Apache APISIX acepta todas las variables de Nginx como condiciones y admite funciones personalizadas; otras puertas de enlace tienen varias condiciones integradas.
-
Apache APISIX utiliza etcd como centro de configuración. No hay un punto único. Si una máquina falla arbitrariamente, el clúster de la puerta de enlace aún puede funcionar normalmente. Otras puertas de enlace basadas en bases de datos relacionales tendrán un problema de punto único.
-
La configuración de Apache APISIX puede llegar a todos los nodos de la puerta de enlace en menos de 1 milisegundo, utilizando etcd watch; otras puertas de enlace consultan la base de datos periódicamente, y generalmente tardan 5 segundos en obtener la última configuración.
-
Los plugins de Apache APISIX han sido cuidadosamente ajustados para mantener una latencia de milisegundos bajo alta presión.
-
La disposición única de plugins y la característica de bajo código de Apache APISIX pueden reducir significativamente el umbral de desarrollo secundario.