El artículo detalla cómo Grab logró reducir sus costos de infraestructura en un 70% al migrar su servicio 'Counter Service' de Golang a Rust. Inicialmente, Go fue elegido por su simplicidad y rapidez de desarrollo, pero con el tiempo, Rust demostró ser más eficiente en términos de recursos, justificando la inversión en la reescritura del servicio crítico.
El 'Counter Service' es fundamental para la detección de fraudes y los sistemas de aprendizaje automático de Grab. Se encarga de contabilizar eventos y poner esos conteos a disposición de otros servicios a través de endpoints GRPC, consultando bases de datos como Scylla, Redis, MySQL o DynamoDB. A pesar de manejar un alto volumen de tráfico, su función relativamente simple lo convirtió en un candidato ideal para la migración a Rust.
El equipo de ingeniería de Grab no realizó una traducción directa de Go a Rust. En lugar de eso, trataron el servicio existente como una 'caja negra', enfocándose en replicar la misma funcionalidad basada en las interfaces GRPC. Se seleccionaron cuidadosamente las bibliotecas de Rust para reemplazar las dependencias de Go, evaluando su madurez y soporte comunitario, incluyendo Cadence para Datadog StatsD, opentelemetry-rust para OpenTelemetry, tonic para GRPC, actix-web para el servidor web, fred.rs para Redis (después de problemas iniciales con redis-rs), scylla-rust-driver para Scylla y kafka-rust para Kafka.
Uno de los mayores desafíos fue la falta de bibliotecas internas de Grab en Rust. Específicamente, el sistema de configuración, que utilizaba Go Templates, tuvo que ser reemplazado con una solución basada en Nom, un framework de parsing de Rust. También se encontraron desafíos técnicos relacionados con el borrow checker de Rust y la concurrencia async/await, que requiere un manejo más explícito que las goroutines de Go.
Aunque la latencia fue similar entre ambas versiones, la eficiencia de recursos fue significativamente mejor en Rust. Para manejar 1,000 QPS, el servicio en Go requería 20 núcleos de CPU, mientras que el de Rust solo necesitaba 4.5, representando un ahorro del 70% en costos de infraestructura. La migración demostró que Rust, si bien no siempre es más rápido, puede ser mucho más eficiente, especialmente para servicios de alto tráfico.
Fuente Original: https://blog.bytebytego.com/p/how-grabs-migration-from-go-to-rust
Artículos relacionados de LaRebelión:
- Alerta Roja en Azure Migracion de Cuentas Desata Presupuestos Fuera de Control Que Esta Pasando
- Motorola Razr Ultra Grab a Folding Phone Bargain with a 200 Discount
Artículo generado mediante LaRebelionBOT
No hay comentarios:
Publicar un comentario