Saltar al contenido principal

Presentando ent

· 3 min de lectura
[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

El estado de Go en Facebook Connectivity Tel Aviv

Hace 20 meses, me uní al equipo de Facebook Connectivity (FBC) en Tel Aviv tras aproximadamente 5 años programando en Go e implementándolo en varias empresas.
Me incorporé a un equipo que trabajaba en un nuevo proyecto y necesitábamos elegir un lenguaje para esta misión. Comparamos varias opciones y decidimos usar Go.

Desde entonces, Go se ha expandido a otros proyectos de FBC con gran éxito, contando ya con unos 15 ingenieros especializados en Go solo en Tel Aviv. Los nuevos servicios ahora se desarrollan en Go.

La motivación para crear un nuevo ORM en Go

Durante mis 5 años anteriores a Facebook, la mayor parte de mi trabajo fue en herramientas de infraestructura y microservicios sin mucho modelado de datos. Los servicios que requerían poca interacción con bases de datos SQL usaban soluciones open-source existentes, pero para modelos de datos complejos se recurría a otros lenguajes con ORMs robustos, como Python con SQLAlchemy.

En Facebook nos gusta conceptualizar nuestros modelos de datos como grafos. Hemos tenido buenas experiencias con este enfoque internamente.
La falta de un ORM basado en grafos adecuado para Go nos llevó a desarrollar uno con estos principios:

  • Esquema como código: definir tipos, relaciones y restricciones debe hacerse en código Go (no mediante struct tags) y validarse con una herramienta CLI. Contamos con experiencia previa en herramientas similares internamente.

  • API estáticamente tipada y explícita mediante generación de código: las APIs repletas de interface{} afectan la productividad de los desarrolladores, especialmente a los nuevos en el proyecto.

  • Consultas, agregaciones y recorridos de grafos deben ser simples: los desarrolladores no quieren lidiar con consultas SQL crudas ni terminología SQL.

  • Los predicados deben estar estáticamente tipados. Evitar cadenas de texto por todas partes.

  • Soporte completo para context.Context: esto proporciona visibilidad en nuestros sistemas de trazas y logs, y es crucial para características como la cancelación.

  • Independiente del almacenamiento: mantuvimos la capa de almacenamiento dinámica usando plantillas de generación de código, ya que el desarrollo comenzó con Gremlin (AWS Neptune) y luego migró a MySQL.

Lanzamiento open-source de ent

ent es un framework de entidades (ORM) para Go construido con los principios anteriores. ent permite definir fácilmente cualquier modelo de datos o estructura de grafos en código Go; la configuración del esquema es verificada por entc (el generador de código de ent) que produce una API idiomática y estáticamente tipada que mantiene productivos y satisfechos a los desarrolladores Go. Es compatible con MySQL, MariaDB, PostgreSQL, SQLite y bases de datos de grafos basadas en Gremlin.

Hoy lanzamos ent como open-source y te invitamos a empezar → entgo.io/docs/getting-started.