Why INDMoney is Using Golang to Power Real-time Data Streaming
While some developers are quitting Golang, Google’s open-source programming language has not lost all its ground yet. Many companies still swear by it for some of its benefits, and INDMoney seems to be one of them. At the DES 2025 summit, Kausal Malladi, head of engineering at INDMoney, revealed the sophisticated technology behind the investing platform’s ability to deliver high-frequency market data at extraordinary speeds. Handling over half a million price ticks per minute—scaling up to 2.5x during budget days or election results—demands more than just a robust backend. For INDMoney, the solution lies in a trio of open source technologies: Go programming language, the messaging system NATS, and a finely optimised in-house WebSocket engine. The company’s objective is to keep traders updated in real time, maintaining latencies below 200 milliseconds. Price charts, AI-driven chart pattern detection, and instant alerts all draw from the same flood of tick data. “Milliseconds matter,” Malladi said, noting how even a one-second delay can kill a trading opportunity. The company described how they are doing it all while having a lean infrastructure. Big on Go Programming and Open Source Tech “Go helps with a lot of simplistic use cases. Go runtime has a very good capability that it works with fewer resources. It does not need more operating system resources,” Malladi told AIM. He noted that one can use Go to power a leaner infrastructure more effectively. Malladi highlighted that if one uses Go for an application, the language itself consumes minimal system resources—most of the resource usage is dedicated to the application’s actual tasks. He emphasised that Go has good capabilities, like Go routines, which enable developers to facilitate parallel processing while working with a large amount of data. INDMoney’s real-time system ditched monoliths in favour of decoupled microservices, each shouldering a distinct responsibility—streaming, analysis, alerts, or rendering charts. “So all of them could still be powered using one single monolith,” Malladi said. However, the risk for downtime is high with this approach, which is why they take a decoupled approach. Malladi stated that Go’s lightweight concurrency model helps run these services with minimal overhead, even on infrastructure smaller than a couple of average modern smartphones. A key component is multicast streaming. Ticks from exchanges are received via on-prem multicast and then sent to AWS EC2 instances grouped under a multicast address. Each node independently receives the data—no extra hops, no relay bottlenecks. Go handles this fan-out efficiently, and NATS acts as the open-source backbone that ensures messages reach every client or downstream service reliably. NATS helped the team build a “very reliable infrastructure”, with quick setup, high availability, and JWT authentication out of the box. “It can be set up in a couple of days, without much effort,” he added. To deliver this data to users, INDMoney built its own WebSocket server atop the Gorilla toolkit. The system supports JWT-based authentication and was stress-tested using pprof to pinpoint CPU bottlenecks. In one case, memory profiling revealed a single map lock dragging down performance. Switching to Go’s sync.Map reduced resource consumption by 75%. Engineering for Every Millisecond The company’s aim of reducing latency extended into serialisation, networking, and even how clocks are synced. Protobuf, another open-source tech by Google, replaced JSON in data payloads, cutting transmission size by over 50%. Beyond CPU or memory, network throughput became a key monitoring metric. To make sure user-facing latency matched backend performance, the team implemented client-side sampling. “Not every clock in the world is the same,” Malladi added, prompting them to introduce time adjustments for accurate measurements. They also used Cloudflare’s Argo Smart Routing and multiprotocol label switching (MPLS) to optimise delivery routes. Fallbacks are everywhere. If NATS goes down, the WebSocket system picks up the slack. If a service crashes, microservice isolation ensures the rest stay live. Even data subscriptions are handled intelligently. Map-heavy operations, like managing who subscribed to what, are done with maximum concurrency safety and minimal locks. Why it Works It’s not just about Go, it’s about using the right tools, profiling, and planning for failure. Simplifying systems, fallback engineering, always have something or the other as a fallback so that you don’t end up running into disasters. INDMoney’s stack includes NATS, Gorilla WebSocket, Redis, Protobuf, and even Cloudflare, but the architecture remains pragmatic. Each part has a purpose, and each fallback has a story. At the centre of it all, Go provides the performance baseline and concurrency flexibility the system demands. “We prefer using open source technology, but we also advocate for building in-house, like our WebSocket server,” Malladi said to AIM, affirming that open source complements their own work.
“Go helps with a lot of simplistic use cases.”
“Go helps with a lot of simplistic use cases.”
["Golang"]
["Go", "Golang", "AWS", "AI", "cloud_platforms:AWS", "RAG", "microservices", "Aim", "WebSocket", "R", "Redis"]
["AI", "Aim", "RAG", "AWS", "microservices", "Redis", "R", "Go", "WebSocket", "cloud_platforms:AWS"]
I am a tech aficionado and a computer science graduate with a keen interest in AI, Coding, Open Source, and Cloud. Have a tip? Reach out to ankush.das@aimmediahouse.com