Grab

This Rocket Ain't Stopping - Achieving Zero Downtime for Rails to Golang API Migration

Oct 18, 2016Lian Yuanlin
This Rocket Ain't Stopping - Achieving Zero Downtime for Rails to Golang API Migration
SummaryAI, from the source post

This post details the migration of Grab's passenger app APIs from a Rails + NodeJS stack to a Golang Service Oriented Architecture. It outlines a zero-downtime migration strategy involving rigorous testing (unit, load, staging QA, shadow), phased endpoint migration, progressive deployment, and instant rollback capabilities. Key technical challenges and solutions discussed include: the use of gRPC between Go and Rails for latency optimization, issues with ELB TCP balancing and ASG scaling events, a memory leak in the Ruby gRPC gem, latency mismatches, and the development of a JSON tokenizer for response comparison during shadow testing. The post also covers handling idempotency for PUT/POST/DELETE requests during shadowing, progressive shadowing with RPS increments, prewarming ELBs, and a gradual DNS switch for the final rollout.

More from the Service Mesh Evolution (Consul to Istio) trail