Anunciando Envoy Mobile

Este artículo fue publicado originalmente el 18 de junio 2019 en eng.lyft.com.

Nos emociona anunciar hoy el OSS preview release inicial de Envoy Mobile, una librería de redes para clientes iOS y Android que trae el poder de Envoy Proxy a las plataformas móviles. Este es el inicio de un viaje al que esperamos que se unan otros desarrolladores en la industria.

Antecedentes

Cuando Lyft anunció originalmente Envoy en 2016, el objetivo del proyecto fue planteado simplemente como:

“La red debe ser transparente para las aplicaciones. Cuando haya problemas de red y en las aplicaciones, debe ser fácil determinar el origen del problema.”

Envoy fue creado inicialmente por Lyft para resolver los problemas de redes y observabilidad inherentes a grandes arquitecturas de microservicios políglotas del lado del servidor. En los últimos dos años y medio, para nuestra gran sorpresa y satisfacción, Envoy se ha vuelto increíblemente popular a través de la industria. Hoy Envoy es usado por todos los principales proveedores de nube pública, innumerables empresas de servicios, y una plétora de startups de infraestructura que han reconocido la extensibilidad de Envoy como una útil base para construir aplicaciones y negocios verticales. Para aquellos que no estén familiarizados con la arquitectura y las funciones de Envoy, por favor vean los enlaces en la sección “Lecturas adicionales” al final de este post.

Aún con lo fundamental que Envoy se ha vuelto para escalar las arquitecturas distribuidas de Lyft y otras organizaciones, la verdad es que tres nueves del lado del servidor no importan si el usuario de una aplicación móvil sólo puede completar los flujos del producto una fracción de las veces. Esto puede deberse a una combinación de errores de red y de aplicación. Así pues, para lograr por completo el objetivo del proyecto Envoy de hacer la red transparente a las aplicaciones, la malla de servicios (service mesh) y sus beneficios inherentes (observabilidad, consistencia, etc.) deben expandirse más allá de los servidores y hasta las aplicaciones móviles que son tan críticas para la experiencia del usuario. Envoy Mobile en iOS/Android, en conjunto con Envoy en el centro de datos, proporciona la habilidad de entender toda la red de un sistema distribuido, no solo la porción del lado del servidor.

Cumplir con un nivel de servicio del lado del servidor no importan si el usuario de una aplicación móvil sólo puede completar los flujos del producto una fracción de las veces.

Objetivos de Envoy Mobile

Mientras que el proxy Envoy del lado del servidor es un proceso autocontenido que se despliega junto a una arquitectura políglota, Envoy Mobile es distribuido como una librería que ha de compilarse directamente en las aplicaciones móviles. Se requiere que sea una librería debido a cómo se escriben y distribuyen aplicaciones en las plataformas Android y iOS. Discutiremos los objetivos generales de la librería en las siguientes subsecciones.

Redes avanzadas, de bajo nivel, consistentes y multiplataforma

Las mejoras en infraestructura de red como HTTP/2, QUIC, la conmutación por error de QUIC a TCP, gRPC, los reemplazos de DNS, la tecnología push con streaming, observabilidad, analítica, el TLS moderno, las políticas de reintento y de timeout, etc. toman una tremenda cantidad de esfuerzo para implementarse tanto de manera robusta como consistente a través de todas las versiones de Android y de iOS comúnmente usadas. Envoy Mobile proporciona toda esta funcionalidad de manera consistente entre plataformas, especialmente en conjunto con Envoy en el lado del servidor, de manera similar a como Envoy en el servidor proporciona consistencia a arquitecturas distribuidas políglotas.

API ubicua y abstracción para redes

La industria se está moviendo hacia la especificación de APIs mediante IDLs de tipos de datos rígidos como protocol buffers; Envoy Mobile estandarizará y proporcionará una abstracción para los desarrolladores móviles que interactúan con APIs expuestos con IDL. Mediante generación de código y un transporte abstracto, tanto iOS como Android pueden proveer interfaces similares para consumir APIs. Planeamos enfocarnos inicialmente en APIs en Swift para iOS y en Kotlin para Android, pero dependiendo del interés de la comunidad consideraremos agregar soporte para más lenguajes. Nuestro objetivo final es hacer del código Envoy de bajo nivel en C++ un detalle de implementación del que la mayor parte de los desarrolladores móviles no necesiten saber. En vez de eso, los desarrolladores interactuarán con APIs específicas de lenguajes de alto nivel que encapsularán cuestiones comunes como hacer llamadas a APIs, analíticas, trazado, etc.

Sistema simple y explícito para dar soporte a características de red avanzadas

Mediante el poderoso sistema de anotaciones y extensiones de protocol buffer, Envoy Mobile puede dar soporte a sofisticadas funcionalidades entre plataformas de forma simple y explícita cuando se usan APIs con IDLs de tipos fuertes. Algunos ejemplos de anotaciones que están en nuestro plan de desarrollo incluyen:

  • Marcar que un API es capaz de estar fuera de línea o de ser deferido
  • Cacheo
  • Prioridad
  • Streaming
  • Marcar campos para exclusión tanto en la solicitud como en la respuesta bajo malas condiciones de red
  • Políticas generales de Envoy como especificaciones de reintento y de timeout

Al igual que con Envoy para redes del lado del servidor, el objetivo con Envoy Mobile es incluir tanta funcionalidad en su núcleo como sea posible para evitar reimplementarla en cada lenguaje de aplicación móvil.

Nuestros planes a largo plazo incluyen hacer evolucionar el Protocolo de Reflexión de Servidor gRPC para convertirlo en un API de servicio de reflexión streaming. Este API permitirá tanto a Envoy como a Envoy Mobile obtener definiciones genéricas de protobuf de un servicio IDL central, que pueden luego ser usadas para implementar redes guiadas por anotaciones vía reflexión. Este modelo significa que Envoy Mobile no necesitará saber con anticipación el API de una organización para proporcionar funcionalidad de redes avanzada y multiplataforma.

Políticas de cliente móvil guiadas por xDS

Una de las razones por las que Envoy se ha vuelto tan popular como plataforma son sus APIs de descubrimiento de configuración, llamadas colectivamente xDS (puede encontrarse más información aquí y aquí). Estos APIs permiten a un conjunto distribuido de Envoys ser manejados por un plano de control eventualmente consistente. Uno de los objetivos de largo plazo de Envoy Mobile es traer la configuración xDS a los clientes móviles, en la forma de ruteo, autentificación, conmutación por error, balanceo de carga, y otras políticas manejadas por un sistema global de balanceo de carga. Este será un mecanismo extremadamente poderoso para traer conceptos de redes de aplicación / capa 7 hasta el cliente móvil. Algún día, podría ser posible incluso compilar código WASM del lado del servidor, distribuirlo remotamente a clientes móviles y alterar remotamente el comportamiento del cliente, ya sea para corregir bugs latentes o para reaccionar más rápidamente a las necesidades de los usuarios sin tener que distribuir un archivo binario completamente nuevo.

Estrategia OSS

Esta versión es una prueba de concepto que muestra a Envoy compilado como librería y funcional tanto en iOS como en Android. A diferencia de cuando Lyft lanzó Envoy en 2016, no estamos proporcionando una solución de redes del lado del cliente lista para producción. ¿Por qué, entonces, lo lanzamos ahora?

Tras discusiones con organizaciones a través de la industria, parece ser claro que hay un fuerte deseo por tener una solución completa multiplataforma similar a lo que este proyecto propone. Hemos decidido que es en el mejor interés de la industria lanzarlo ahora, aunque nuestro equipo aún esté trabajando en la funcionalidad necesaria para lanzar Envoy Mobile como la librería de redes por defecto en las aplicaciones móviles de Lyft. Estamos ansiosos de colaborar con otros equipos de ingeniería móvil en la industria para asegurar que lo que estamos creando es generalmente útil, aún y si continuamos iterando rápidamente.

Si logramos realizar nuestra visión del futuro de los clientes de redes móviles, esperamos que el equipo de encargados del proyecto crezca con ingenieros provenientes de toda la industria, para eventualmente migrar el proyecto a una locación neutra que sea propiedad de la CNCF.

Únete a nosotros

Además de la versión de demostración que te invitamos a compilar para que experimentes con ella, estamos compartiendo en open source nuestro plan de desarrollo y planeamos desarrollar Envoy Mobile de forma completamente abierta. Por favor, comunícate con nosotros vía GitHub, email o Slack si quieres unirte en nuestro viaje definiendo el futuro de las redes de aplicaciones cliente móviles. ¡Esperamos tu contacto y colaborar contigo!

Lecturas adicionales (en inglés)

Announcing Envoy: C++ L7 proxy and communication bus

Envoy: 7 months later

Envoy joins the CNCF

Envoy graduates!

Documentación de Envoy

Documentación de Envoy Mobile

¡Como siempre, estamos contratando! Si te apasiona construir lo último en modelos de machine learning/optimización o construir la infraestructura que los soporta, lee más sobre ello en este blog (o en su versión en inglés) y únete a nuestro equipo.

Artículo original por Matt Klein. Traducido al español por Fernando López, con asistencia de Antonio Luna y José Niño.

--

--