Saltar al contenido
Ever Cifuentes
Todo el trabajo
01

Hallmark

Más de treinta microservicios en Go entre comercio, cuentas, regalos y streaming — y los patrones que los mantuvieron coherentes.

RolTech Lead y Arquitecto de Software
Vínculovia Globant
Periodo2017–2021

Stack

  • Go
  • Elixir
  • Apache Kafka
  • Elasticsearch
  • Patrón Saga
  • Patrones de resiliencia
Topología del sistemamesh
Las fachadas absorben el fallo para que quien llama nunca vea una dependencia degradada. 30+ servicios detrás.
02

Problema

Cuatro años de crecimiento habían producido un ecosistema que abarcaba cuentas, comercio, regalos, franqueo y la plataforma SVOD de Hallmark Movies Now, construido por varios equipos de ingeniería trabajando en paralelo. Los servicios individuales eran sólidos. Lo que faltaba era el tejido conectivo: cómo un servicio encuentra a otro, qué ocurre cuando una dependencia está lenta en vez de caída, y dónde vive la caché. Sin respuestas compartidas, treinta servicios se convierten en treinta convenciones. La fase anterior tenía un problema de otra forma: la plataforma central de comercio corría sobre Erlang y Elixir, y una compra no era una transacción sino una secuencia larga de transacciones, repartida entre servicios que podían fallar de forma independiente.

03

Enfoque

Arquitecté el ecosistema alrededor de un conjunto reducido de patrones en los que cada equipo podía apoyarse: descubrimiento de servicios, caché centralizada y servicios de fachada frente a la plataforma SVOD. La resiliencia se construyó dentro de las fachadas: circuit breaking para fallar rápido cuando una dependencia se degrada, reintentos automáticos donde eran seguros, y caché inteligente y degradación elegante donde no lo eran. En la modernización del núcleo anterior, la compra y el cumplimiento de pedidos se orquestaron con el patrón Saga, que es lo que permite que un paso fallido compense en vez de dejar un pedido a medio confirmar entre cuatro servicios. Ese trabajo también movió servicios de alto tráfico de Erlang/Elixir a Go, y afinó Kafka y Elasticsearch para la carga de ingesta.

El compromiso

Los circuit breakers cambian corrección por disponibilidad. Cuando una dependencia se degrada, la fachada devuelve una respuesta cacheada o degradada en lugar de la verdadera. Para un catálogo de streaming esa es la decisión correcta: una lista ligeramente desactualizada es mejor que una página de error. Para una ruta de pago habría sido indefendible, así que esos servicios nunca recibieron el mismo tratamiento: recibieron sagas, que cambian latencia por la garantía de que el dinero y los pedidos terminen coincidiendo. El patrón nunca es lo importante. Lo importante es dónde te niegas a aplicarlo.

04

Impacto

30+ microservicios en Go · circuit breaking establecido entre equipos

  • 30+ microservicios en Go arquitectados en un ecosistema coherente con descubrimiento y caché centralizada compartidos
  • Circuit breaking, reintentos automáticos, caché inteligente y degradación elegante establecidos entre equipos
  • Compra y cumplimiento de pedidos orquestados con el patrón Saga entre servicios que fallaban de forma independiente
  • Postage Service y Gifting Service llevados de prototipo a producción
  • Servicios de fachada de alta disponibilidad entregados para la plataforma SVOD Movies Now
  • Servicios centrales migrados de Erlang/Elixir a Go; Kafka y Elasticsearch afinados para ingesta de alta carga
05

Lo que aprendí

Los patrones se propagan por revisión, no por documento. El circuit breaker no se volvió estándar porque yo lo escribiera; se volvió estándar cuando estuvo dentro de la fachada de la que todos los equipos ya dependían, y el design review empezó a preguntar por qué un servicio nuevo no lo usaba. Una arquitectura que solo vive en una wiki no ha sido adoptada: ha sido archivada.