En esta charla, cubriremos las bibliotecas, herramientas y procesos que utilizamos para implementar GraphQL a cientos de desarrolladores en Yelp.
Herramientas y Procesos para Gestionar GraphQL a Escala
Video Summary and Transcription
Esta charla discute la vida de un desarrollador de GraphQL en Yelp, cubriendo las herramientas, procesos y la escala de uso de GraphQL. Se enfatiza la importancia de tomar buenas decisiones de esquema y utilizar GraphQL Faker para una iteración rápida. La charla también destaca los desafíos de usar data loaders en Yelp y las soluciones implementadas, como la generación de código y los precommits. Se menciona la importancia de la revisión de esquemas, la documentación y la adopción de GraphQL. Por último, se menciona el valor de la documentación obsesiva y el uso de vPress para generar markdown y una interfaz de usuario interna para referencia de consultas.
1. Life as a GraphQL Developer at Yelp
Esta charla trata sobre la vida de un desarrollador de GraphQL en Yelp. Mark, líder del equipo de API de datos del cliente, te guiará a través de las herramientas y procesos que han construido. Compartirán la escala del uso de GraphQL en Yelp, con más de 500 tipos en el esquema y 10,000 QPS. La charla también abordará la importancia de tomar buenas decisiones de esquema.
Hola a todos. Esta charla te llevará a través de cómo es la vida como desarrollador de GraphQL en Yelp. Específicamente, quiero mostrarte algunas de las herramientas y procesos que hemos construido para hacer nuestras vidas más fáciles y para enviar cosas de manera más segura y rápida. Mi nombre es Mark, y soy líder del equipo de API de datos del cliente. Mantenemos la infraestructura de GraphQL utilizada por los desarrolladores de Yelp para construir nuestras aplicaciones web y móviles. Y si quieres ponerte en contacto conmigo sobre cualquier cosa que voy a decir, estoy en Twitter, es Mark underscore Lara. Si no estás familiarizado con Yelp, es un lugar para conectarse con excelentes negocios locales y encontrar dónde es bueno comer o encontrar fontaneros o mudanzas de los que puedes leer sus reseñas, ese tipo de cosas. Y aquí hay una página típica de un negocio de Yelp. Mira todos estos hermosos datos que hemos extraído de la base de datos. Se ve útil, ¿verdad? Así es como se ve esta página sin ningún dato. Lo cual no es muy útil. Así que creo que todos podemos estar de acuerdo en que los datos son buenos. Y nuestro trabajo es enviarlos a esta página de alguna manera. Lo que quiero hacer es llevarte en un viaje, y juntos pasaremos por la experiencia de hacer una solicitud de extracción y agregar un esquema para una nueva función en nuestro servicio de GraphQL. En el camino, compartiré los procesos y herramientas que hemos agregado para las personas, para que puedas tener una idea de cómo es nuestra experiencia como desarrolladores. Ahora, quiero establecer el escenario y compartir la escala de las cosas y por qué estamos invirtiendo mucho tiempo en esto. Entonces, GraphQL es el estándar moderno para hacer extracción de datos en Yelp. Es utilizado por cientos de desarrolladores en toda la organización. Hay más de 500 tipos en el esquema. 500 consultas persistentes activas. Es decir, consultas que se están utilizando en producción en las últimas dos semanas. Y en total, el servicio de GraphQL recibe alrededor de 10,000 QPS. Por lo tanto, mucho de Yelp depende de que esta cosa funcione de manera fluida y eficiente. Veamos cómo se ve eso. De acuerdo. Digamos que estamos creando un producto completamente nuevo en Yelp. Y puede haber algún esquema existente que podrías usar. Pero en su mayoría, tendremos que implementar alguna lógica nueva en el backend para esto. Entonces, lo primero que tendremos que averiguar es, bueno, ¿qué tipo de consulta quieres enviar? ¿Qué tipo de esquema queremos? Y obviamente, no queremos agregar simplemente lo primero que se nos ocurra y comprometernos con eso. Las malas elecciones de esquema pueden ser costosas y difíciles.
2. Writing Dream Queries and Using GraphQL Faker
Alentamos a los desarrolladores a escribir una consulta de ensueño, que es la consulta que desearían poder escribir si el esquema estuviera disponible. Tenemos revisores de esquemas que ayudan a revisar y señalar los tipos existentes. Utilizamos GraphQL Faker, una herramienta de código abierto, para iterar y probar nuevos esquemas antes de implementar los resolvers.
3. Using GraphQL Faker for Quick Iteration
Puedes consultar y ampliar tu esquema GraphQL real con datos generados automáticamente utilizando GraphQL Faker. Está disponible globalmente en nuestras máquinas de desarrollo y se puede integrar fácilmente en tu aplicación React para una iteración rápida y para paralelizar el trabajo entre los desarrolladores de backend y frontend.
4. Implementando Resolvers y Usando Data Loaders
Estamos contentos con nuestro nuevo esquema y queremos implementar los resolvers. Nuestra arquitectura consiste en diferentes servicios propiedad de diferentes equipos, expuestos a través de un servicio de puerta de enlace GraphQL. Para evitar solicitudes de red innecesarias y utilizar puntos finales en bloque, utilizamos data loaders. Los data loaders son funciones de agrupación y almacenamiento en caché que se conectan a recursos externos cuando no se puede acceder directamente.
Instantánea rápida de la arquitectura. Esta es una descripción general aproximada de cómo se ve nuestra arquitectura. Esperemos que se vea algo familiar. Simplemente tenemos un montón de servicios diferentes propiedad de diferentes equipos que exponen APIs REST internas para diversos productos y casos de uso. Nos comunicamos con todos estos servicios a través del servicio de puerta de enlace GraphQL, que es nuestro servicio GraphQL ligeramente monolítico escrito en Node con Apollo Server. Y los resolvers necesitan obtener datos y comunicarse con estos puntos finales.
Aquí hay algunos problemas comunes. ¿Cómo evitamos sobrecargar el backend y hacer un montón de solicitudes de red innecesarias y desperdiciadas? ¿Cómo utilizamos correctamente los puntos finales en bloque? La respuesta principal son los data loaders. Apollo también tiene un patrón llamado data sources. Estoy seguro de que la mayoría de ustedes probablemente ya conocen los data loaders. Existen en varios lenguajes, pero si no, la idea principal aquí es que son una función mágica de agrupación y almacenamiento en caché sobre algún recurso subyacente. Si no tienes acceso directo a donde se encuentran los datos en tu servidor GraphQL, y necesitas conectarte a algún recurso externo, probablemente deberías estar usando
5. Desafíos con Data Loaders en Yelp
Utilizamos data loaders para manejar los cientos de puntos finales HTTP internos distribuidos en múltiples servicios en Yelp. Escribir y mantener data loaders individuales para cada punto final sería consumir mucho tiempo y propenso a inconsistencias. Es desafiante determinar a qué punto final debe ir un data loader y cómo manejar de manera consistente la gestión de errores y el registro. Este enfoque resultaría en un código boilerplate desordenado y difícil de gestionar.
6. Generación de código, Precommits y Verificación de esquemas
Creamos una capa de generación de código llamada generación de código de data loader que genera data loaders para cada punto final especificado. Esto elimina la necesidad de pensar en qué data loader usar para cada punto final y ahorra tiempo. También recomendamos utilizar tipos generados para los resolvers para verificar el tipo de implementación en JavaScript. Los Precommits se utilizan como un sistema de advertencia temprana para detectar problemas antes de confirmar los cambios. Utilizamos herramientas como GraphQL Schema Linter para verificar las convenciones de nombres y las reglas de estilo. Los bots de GitHub, como el bot de verificación de esquemas, detectan cambios que rompen el esquema y proporcionan advertencias. También verifican las consultas que utilizan campos que se han eliminado para evitar problemas en producción. Si no se encuentran consultas, la solicitud de extracción pasa la verificación.
Bien, ahora estamos realmente listos para confirmar nuestro nuevo esquema al confirmar el código, y utilizamos Precommits como un sistema de advertencia temprana para detectar problemas que romperían la compilación. Precommit es una herramienta que realiza verificaciones justo después de escribir git commit en tu terminal, pero antes de confirmarlo realmente, y esto es principalmente para cosas como linters y comprobadores de tipos y cosas que se ejecutan en CI, pero esto se ejecuta en tu terminal de inmediato. Entonces, no tienes que esperar 20 minutos para que CI falle y luego darte cuenta de que tenías un error de espacio en blanco. Además de verificar el formato del JavaScript, también verificamos el esquema, y para hacer esto, utilizamos una herramienta llamada GraphQL Schema Linter, y esto nos permite verificar un conjunto básico de convenciones de nombres y reglas de estilo, sí, es una herramienta realmente buena, y la ejecutamos en precommit, por lo que esto es lo que sucede si intentas pasar un esquema que sabemos que rompe las reglas. Muy bien. Suponiendo que todo salió bien, ahora es el momento de enviar tu solicitud de extracción, y lo primero que hacemos es tener un par de bots de GitHub para verificar más de tu esquema. El primero es el bot de verificación de esquemas, y este utiliza un paquete llamado GraphQL inspector para detectar cualquier cambio que rompa el esquema. Si encontramos cambios que rompen, como eliminar un campo o cambiar el nombre de un campo, mostramos una gran señal de advertencia como esta, y vamos un paso más allá, por lo que tenemos esta lista blanca de consultas, consultas persistentes, y sabemos cuándo se están utilizando las consultas, y podemos revisar todas las consultas que se están utilizando en las últimas dos semanas y decir, oye, parece que estás tratando de eliminar este campo, pero tenemos, como, estas 20 consultas que están utilizando este campo en producción en este momento, por lo que va a romper estas consultas, así que tal vez no lo empujes, por lo que es un buen sistema de advertencia y nos evita romper Yelp, como la solicitud de extracción realmente se volverá roja.
7. Revisión de Esquema y Documentación
Si deseas eliminar un campo, pero no se está utilizando en producción, la verificación de GitHub pasará. Los bots de sugerencias de esquema brindan comentarios sobre posibles problemas que son difíciles de verificar estrictamente. La aprobación del grupo de revisión de esquemas es el paso final para garantizar la consistencia. Una documentación sólida es esencial para la incorporación y el mantenimiento de la consistencia. Hemos compartido algunas páginas relacionadas con el diseño de esquemas en GitHub. Agradecemos los comentarios y estamos contratando.
QnA
Adopción de GraphQL y Servicio de Gateway
Es interesante ver el nivel de adopción de GraphQL y las inversiones que se están realizando. El servicio de gateway de GraphQL se está convirtiendo en un monolito, lo que causa problemas técnicos y sociales. Dividirlo es lo próximo en lo que nuestro equipo trabajará. También estamos explorando GraphQL Mesh y Federation. La integración de GraphQL Faker permite una iteración rápida y un desarrollo rápido de páginas sin tener que esperar a los desarrolladores del backend. Este enfoque en un ciclo de iteración rápido es un aspecto clave de nuestro enfoque.
Herramientas, Bebidas y Documentación
Siempre estoy atento a buenas herramientas como GraphQL o Faker. Me encanta cuando descubro nuevas herramientas. ¿Cuál es tu bebida preferida cuando trabajas en proyectos de gran escala? Yo personalmente soy amante del té, así que me gusta un buen té verde. Así que, los asistentes, continúen haciendo cualquier pregunta que puedan tener en el canal de preguntas y respuestas de Andromeda. ¿Hay una lista de herramientas que Mark presentó? Puedo compartir las diapositivas en mi Twitter y compartir la lista de herramientas. Todo lo mencionado en las diapositivas requirió un gran esfuerzo de todo el equipo. Si tuviera más tiempo, habría dedicado mucho más tiempo a la documentación. El valor de pensar mucho en eso, y no solo lanzar información en una página, sino tener un flujo de información considerado, qué es relevante, cómo se ve.
Entonces, tenemos otra pregunta aquí. ¿Cuál es tu bebida preferida cuando trabajas en proyectos de gran escala? Oh, esa es una buena pregunta. Me gusta esa pregunta. Depende de cómo vaya el proyecto, ¿verdad? Sí, supongo. También depende de la hora en que esté trabajando. Yo personalmente soy amante del té, así que me gusta un buen té verde. ¿Caliente o frío? Entonces, ¿un buen oolong, tal vez? Sí. Bien, bien. Muy bien. Así que, los asistentes, continúen haciendo cualquier pregunta que puedan tener en el canal de preguntas y respuestas de Andromeda. Tenemos otra pregunta aquí. ¿Alguien tiene la lista de herramientas, o alguien tiene una lista de herramientas que Mark presentó? ¿Hay una lista en algún lugar? Puedo compartir las diapositivas en mi Twitter y compartir la lista de herramientas. Sí, puedo hacer eso. De acuerdo, de acuerdo, genial. Y finalmente, solo quiero decir que todo lo mencionado en las diapositivas requirió un gran esfuerzo de todo el equipo. Sé que algunos de ellos están viendo, así que les envío un saludo. Gracias a todos. Definitivamente, sí, no veo ninguna otra pregunta. ¿Hay algo más que sepas, en tu charla, que quisieras ampliar o algún plan futuro, algo más que quieras agregar para la audiencia? Bueno, si tuviera más tiempo, habría dedicado mucho más tiempo a la documentación. Lo mencioné brevemente en la charla. Y realmente fue un enfoque importante. No puedo enfatizar lo suficiente el valor de pensar mucho en eso, y no solo lanzar información en una página, sino tener un flujo de información considerado,
Documentación y Referencia de Consultas
Valoramos la documentación obsesiva y hemos encontrado que es muy beneficiosa. Utilizamos vPress como generador de markdown y tenemos una página de pautas de diseño de esquema seleccionadas a mano. Además, tenemos una interfaz interna que muestra las consultas y mutaciones enviadas, sirviendo como referencia para trabajos anteriores. Gracias por asistir a la charla y siéntete libre de hacer más preguntas en la sala de conferencias.
Utilizamos vPress como generador de markdown. Aparte de eso, es algo seleccionado a mano. Agregamos un pequeño tema, supongo, para que sea rojo para Yelp. Pero sí, aparte de eso, la página de pautas de diseño de esquema, que ahora es de código abierto, por lo que puedes ver que está seleccionada a mano y se hace de una manera que esperemos que fluya. Y también tenemos Iba a decir, algo que no incluí en las diapositivas es que además de la pestaña de documentación de esquema gráfico, también tenemos una especie de interfaz interna donde puedes ver todas las consultas y mutaciones que se han enviado a la lista permitida. Y eso es algo que te permite ver todas las consultas diferentes en Yelp. Y eso ayuda a servir como referencia para lo que es algún trabajo anterior y puedes filtrar por equipo y ver la evolución de una de esas consultas, etc. Sí. Bueno, nuevamente queremos agradecerte mucho por esta excelente charla. Si alguno de los asistentes tiene más preguntas para Mark, vayan a spatial chat a la sala de conferencias. Pueden hacer más preguntas allí. Mark, nuevamente, muchas gracias. Gracias. Cuídense.