Skip to main content

One post tagged with "age"

View All Tags

From Fragmented to Fluid: Simplifying ServiceRadar with Elixir, Rustler, and CloudNativePG

· 7 min read
Michael Freeman
Open Source Software Engineer

In observability, complexity is the enemy. Our previous architecture asked a React app to hit two APIs (core in Go, SRQL our Domain-Specific Language (DSL) and query engine in Rust) through Nginx/Kong for JWT verification, while a Go-based auth service issued JWKS/OAuth tokens. We'd been wrestling with this stack for a while—slow initial renders, state management sprawl, and the constant churn of keeping dependencies current across a deep node_modules tree.

React2Shell forced the conversation we'd been putting off. The vulnerability itself was bad enough, but the follow-up CVEs and the broader pattern they revealed made us take a harder look at what we were signing up for. React is a mature framework carrying years of accumulated complexity and technical debt. That's not a criticism—it's the natural arc of any widely-adopted JS project. But for a team shipping observability tooling, betting on a stack where the next critical CVE feels like a matter of "when" rather than "if" wasn't a trade-off we wanted to keep making.

An upcoming release takes a different shape:

  • Phoenix + LiveView serves as the experience layer
  • Rustler-embedded SRQL runs inside the Phoenix app as a NIF—no extra service
  • CloudNativePG with TimescaleDB + Apache AGE provides a single unified data store
  • Go core continues to orchestrate agents, pollers, and ingestion