NEW: Free hands-on NATS workshops. Live sessions on NATS fundamentals, leaf nodes, AI agents on NATS, & more.
All Videos

Powering the AI Era

How Verrus Built a Flexible Data Center Backbone on NATS

The data center is the engine of the AI economy — and one of its tightest constraints. Compute demand is exploding, and the grid can’t keep up. Verrus, a flexible data center company, is attacking that problem from the power side, with a different approach to how a facility draws and flexes energy.

We sat down with Christopher Coco, Principal Software Engineer at Verrus, to talk through the architecture behind it — and why NATS.io became the backbone of the whole thing.

From telemetry to secure two-way control

See how Verrus treats battery energy storage as a “shock absorber” to flex data center power demand on the grid without ever touching customer compute — and how NATS became the unified namespace, data plane, and messaging backbone that makes it all work. Along the way: proxying legacy OT protocols through NATS, closing the loop from telemetry to secure two-way control, and running it all in production with the Synadia Platform control plane.

What you’ll learn

  • A different kind of data center — how Verrus runs ~30% more efficiently by using battery storage to participate in demand response without disrupting IT load
  • The shape of the problem — real-time transparency for customers, device intelligence and predictive maintenance, and a messaging backbone for utility demand-response requests
  • Why not MQTT alone — where MQTT’s statefulness and lack of native clustering hit a wall, and how NATS fits the OT “unified namespace” model
  • One substrate, two jobs — using pub/sub and request-reply so telemetry and queryable microservices ride the same data plane
  • Telemetry to two-way control — securely interrogating devices with nkeys and a zero-trust posture, plus heavy use of JetStream and the KV store
  • Pushing the primitives — proxying Modbus and other point-to-point OT protocols through NATS, addressing devices by logical subject name
  • Correctness over scale — why Verrus prioritizes correctness and security, with leaf-node-to-cloud clustering and super clusters across regions
  • Running it in production — “easier than running Kubernetes,” bootstrapped via the Synadia Platform control plane and Crossplane
  • The right tool for the job — where NATS fits versus MQTT at the edge, and staying disciplined about why you reach for a tool

Who it’s for

Platform and infrastructure engineers, OT/IT architects, and anyone bridging operational technology with the cloud — especially teams weighing NATS against MQTT for edge-to-cloud messaging, telemetry, and device control.

Go deeper


Transcript

Lightly edited for readability, including a live audience Q&A. Our thanks to Christopher Coco of Verrus for joining the RethinkConn customer story series.

Interview

Synadia

Welcome back to our next customer story here at RethinkConn. We’re talking today to Christopher Coco from Verrus. Chris, thanks for being here. Can you tell us a little about yourself, your role at Verrus, and what Verrus does at a high level?

Christopher Coco

Thank you for having me — I appreciate being here and I’m looking forward to the conversation. Verrus is a third-party data center company with a different approach to building data centers. Verrus data centers are generally about 30% more efficient, which we achieve by being less resource-intensive than traditional data centers. We harness the power of battery energy storage — we use our battery as a shock absorber so we can be a useful asset on the utility grid. We can flex power demand down when necessary by using the battery, so we can be better participants in programs like demand response, all without touching the customer’s IT load. Ideally the customer helps with this through an interface we expose to them, but they don’t have to participate. It’s an interesting way to make the large load of a data center flexible on the utility grid without having to touch IT load — a novel concept that comes with some design challenges around electrical topology. But it’s a fun challenge and a fun process.

Synadia

Very cool. I imagine life at Verrus is go-go-go right now, as data centers are so central to today’s AI wave and AI economy.

Christopher Coco

You’d be correct — it’s an interesting time. The company is around three years old, and I started when the company started. I don’t come from data centers; I spent the majority of my time before Verrus at a small company called Twitter, working in the platform infrastructure group scaling our RPC stack. When I started at Verrus, the conversation around data centers was, “OK, we’re reaching a power constraint, this has gotten kind of nutty.” In the three years since, it has completely exploded — gone to a place I don’t think we could have imagined — and the power-constraint problem has gotten much worse. The initial problem we were trying to solve has become much more of an issue than we could have imagined.

Synadia

Solving important, high-profile challenges — love it. Before we get into the architecture and how you’re using NATS, can you give us a sense of the shape of the problem when it comes to real-time data flows in a data center context? What do you care about? What’s challenging?

Christopher Coco

There are a few things we’re trying to do. We want to be much more transparent as a third-party data center company than most third-party data centers are. We’d like to give our customers a real-time view of what’s happening with the electrical topology, so they can easily graph their IT load versus power utilization. That’s not something a third-party data center normally makes available, let alone in near real time. So there’s a whole aspect of exfiltrating telemetry data from on-premise out through an interface the customer can access. Then there’s a lot we want to capture around devices and predictive maintenance. We use a battery energy storage system, so understanding how the battery is performing over time — pulling statistics, capturing that, being able to respond to different things. And then there’s a whole messaging backbone we need to bring to bear: from accepting the demand-response utility request, to proxying those to a customer, to doing lots of other things in that plane between our own microservices.

Synadia

Verrus is relatively young — you said only three years old. Was NATS part of your architecture from the outset, or how did you come to it and settle on it? Maybe start by telling us what part of the stack NATS fits in.

Christopher Coco

It was not part of the original stack. It’s funny — I’ve been in technology a very long time, coming from what’s typically referred to in this space as the IT side, not the OT side, which just means more traditional software programming. I have a lot of friends in this area, and friends at other companies were mentioning this pub/sub technology to me. I knew we needed an event-based architecture and we were looking at different things. The standard technology in this space is MQTT, using MQTT brokers, and we were trying to figure out how to make those highly available. That’s not native to the MQTT protocol — clustering those brokers is something you usually have to pay for, and when we looked at vendor solutions, we didn’t want to be locked into a vendor. Open source solutions didn’t cluster. Friends kept talking about this NATS thing, and I started looking into it. The more I looked — I watched all the videos from Jeremy — the more I realized it was more than just pub/sub. It’s hard to understate how revolutionary it seems, even though it’s built on very simple principles. That’s what’s fascinating: the places you can take it and the things you can do from just basic principles is amazing. And the fact that it’s open source — I worked in an open source office at Twitter for many years, I really believe in open source, my team open-sourced all our RPC stack — it’s near and dear to my heart. I love that it’s out there for people to use freely, but there’s also an entity behind the scenes willing to help. We’ve contacted and are working with Synadia to help us out. And getting started was just dead simple.

Synadia

Yeah, we hear that often — NATS is dead simple. You maybe even underestimate at first all it can do, and then it can take you a long way. You talked about knowing you needed an event-based architecture, realizing MQTT wasn’t fit for your purpose, and finding NATS. Can you tell us more about where it fits in — what other pieces of the stack it’s interoperating with, and what job it does for your data flows?

Christopher Coco

In the OT world there’s a concept called the unified namespace. It took me a while to figure out what it meant, but it basically means: all these systems collecting data on a factory or plant floor used to be connected point-to-point. The big change these days is to have a publisher publish into a universal — unified — namespace, and any consumer consume that data if they’re allowed to. NATS fits that amazingly well, whereas MQTT actually doesn’t, because of its statefulness. Even talking to the inventor of MQTT, he mentioned to me that it was really meant for command and control, not this stateless publishing it’s been wedged into. So for us, NATS forms the backbone of our unified namespace. It’s essentially the data plane from each data center into our cloud topologies. We collect data in real time from each data center into our cloud, where we do predictive and optimization analysis, and then shunt some pieces of that data into a customer interface they can subscribe to. It’s a major portion of that backbone. What’s also interesting is that it’s not just streaming telemetry — it forms a data plane where we also have microservices that ask questions. Because it has not just pub/sub but request-reply semantics, which is huge, we can build microservices on the same data plane that query each other or query data. So operationally we have not only a telemetry system but also a queryable data plane that rides the same substrate. It’s not an additional system built alongside the telemetry part — and that’s huge for us.

Synadia

When I’ve read about OT/IT in the past, it always starts with telemetry — getting data off the devices up to the cloud for some next step. And very quickly it becomes: can we go the other way? Can we interrogate the devices, have a two-way street? It sounds like you’ve gotten there, in part with NATS.

Christopher Coco

Yes, and that enables some fascinating things. I won’t get too deep into all of them, but it lets us do this securely and safely, using the zero-trust mechanisms we’re adhering to in our architecture. That’s another thing that’s amazing out of the box — the fact that it comes with nkeys and the security model NATS brings, which follows exactly the things we’re trying to accomplish. It made it very simpatico. It’s weird — I keep getting blown away by the feature set. Every time we delve into another piece, it’s like, “oh, that’s already there.” You start with a small part — we started with the CLI — and now we’re making heavy use of JetStream and the KV store, and we’ve been kicking around ideas around the object store. We’re potentially building an entire digital twin over the NATS substrate. Digital twin is a hot topic and I hesitate to use the word, but it’s easier for people to understand what I mean. The amount of things you can accomplish with such an elegant system is really fascinating, and it has made this job in an OT space that much more exciting.

Synadia

Can you tell us anything about the NATS adoption and scaling milestones at Verrus? What was it like once you found NATS, selected it, and realized it might be the right tool — how did you fit it into your architecture and go from a POC to production?

Christopher Coco

One of the first things we looked at was using it for service discovery between microservices. That was the quick POC. We were looking at MQTT clustering, and this could be a potential change for that, but what was really interesting was not having to define our own service mesh. We have a small set of microservices that need to talk to each other, and we didn’t have to deploy a whole Istio or pull anything off the shelf. We realized we could use subject-based messaging, and suddenly we had this service mesh, getting our services to talk to each other through NATS. Then it ballooned. We started wondering what else we could put through the system. We got into telemetry, but then looked at the OT protocols we have to use inside the data center — again, point-to-point; you have to know the IP address and port, speak Modbus, and so on. These protocols aren’t very “web”: the client and server have to know about each other and hard-code addresses. So we thought, can we build proxies through NATS? Can we proxy these over NATS messaging? It’s been fascinating. Now we can refer to devices by a logical subject name, have NATS map that name to a current IP and port, and if we need to update it, we simply update the mapping in NATS without any customers or clients needing to know. That gives us operational flexibility. It’s one of these things that’s easy to do through NATS — even though it’s kind of complicated — and it gives us crazy powerful semantics. We now have a topology that doesn’t have to be point-to-point, which is what we’re trying to get away from, and it’s not just our microservices — it’s even microservices or other things talking to actual devices.

Synadia

That example — proxying the OT protocol through NATS with a mapping table — is a pattern I hadn’t heard before. It highlights the flexibility NATS brings: simple primitives you can push pretty far. Engineers love metrics — can you tell us anything about benchmarking, scale testing, throughput, or the criteria you looked at when rolling out NATS?

Christopher Coco

It’s interesting because we don’t have a lot of scale, which is very different for me coming from where I came from. The issue for us isn’t necessarily scale — it’s correctness and security. Those are the things we look at when evaluating technology. What still highlights the usefulness of NATS is that we get that correctness and security somewhat out of the box: request-reply semantics, queue groups, interest topics, atomic matching if necessary. NATS has a lot of semantics that let us enforce correctness, and do it securely. While scale isn’t necessarily what we look at, we know it’s scalable — we can cluster across regions, even across cloud vendors if necessary. It’s not something we’re doing right now, but the possibility is interesting. We use leaf-node-to-cloud for clustering, and super clusters across regions. All of that is one system — it doesn’t take four or five different things and a couple of operators to put together. It’s mind-blowing that these simple principles blow up into this large machinery. It started with a simple publish to this subject, subscribe to that subject, and now there’s a massive system behind it.

Synadia

I always return to the analogy of the NATS server as an incredible Lego brick — you can put together all sorts of arbitrary, sometimes seemingly bizarre topologies just by snapping bricks together. It sounds like it’s almost become a game of what fun things you can accomplish.

Christopher Coco

Since we’re new and trying to push NATS to see what’s possible, we’re trying to get a little crazy to see where things fall over — where it becomes “OK, we shouldn’t do that.” We haven’t quite hit that yet, which is interesting.

Synadia

How about the operational side — how has running NATS in production been for your teams? Was it an easy transition? Has it changed how they run in production?

Christopher Coco

I’ll say it’s easier than running Kubernetes. It’s been great. One thing we’re also using from Synadia is the control plane, to help bootstrap our NATS clusters. There’s a fully exposed API we integrate with through our orchestration layer, so we can bootstrap all the credentials and base-level things we want in the cluster. We have that wired up with Crossplane to actuate deploying those NATS clusters. Operationally it’s been — “pleasant” isn’t quite the word, nothing is operationally pleasant — but it’s been better than other things we have to deal with. It’s pretty solid.

Synadia

What’s the story as Verrus grows — adding customers, working at more data centers? How does NATS scale with you when onboarding customers?

Christopher Coco

NATS will scale. We have an on-premise cluster in each building, which leaf-nodes to the cloud topology. As we add buildings, those come online and we’ll likely grow our super cluster. We may even partition into sub-super-clusters — some section of buildings per campus or site talking to a NATS cluster that’s potentially super-clustered, depending on what we need for compute in those layers. We don’t foresee this not scaling. With these complicated Lego blocks, we’re already thinking about how to sub-segment and subdivide into logical groupings that make sense — but it won’t matter to the customers. It’s not like we have to go touch the data center to do so. Operationally it’s somewhat simple to put together. Simple doesn’t always mean easy, but it’s a straightforward thing we think we can do as we grow — and much better than trying to cluster stateful MQTT.

Synadia

We touched on interoperability with the OT side and proxying protocols. Anything else on interoperability — what else does NATS have to play nice with in your stack?

Christopher Coco

We mostly write our application stack in Rust, and we appreciate that even though NATS itself is Go, there are SDKs for those of us writing in Rust. We also integrate with our SCADA system, which is in Java, and we appreciate that there’s a NATS SDK for Java so we can plug a module into that SCADA system and go directly into NATS. Interoperability from a language perspective — I’m a software engineer, so I’ll talk about languages — we like to be polyglot, and NATS really supports that out of the box. As for other things in our stack, it’s a simple protocol — headers and bytes at the base of the semantics — which is wildly useful. Going back to your Lego block: that simple brick means you can construct so many different things and interact with so many different things. If it’s on the network, we can shove it through NATS, because we can always put bytes through NATS. It’s been a fascinating “what can we do with this until we break it” journey. There are probably some things we’ll get to that we realize we shouldn’t do, but we haven’t quite gotten there yet.

Synadia

I think I have two closing questions. First, anything on your wish list or forward-looking — if you could wave a magic wand and make NATS do X, where are you looking next?

Christopher Coco

It’s an interesting question. Every time I think we need something, I look and realize it’s already there. Our ideas aren’t new — someone has thought of it before and decided it needs to go into NATS. One thing we want to ensure is that all our data centers are shielded from each other — no east-west communication across them. They should connect to the hub and talk through the cloud, but we don’t want to accidentally enable them talking to each other through the cloud. That’s a solved problem — there’s now an actual primitive and configuration you can set up to make sure you do that, to shunt off that east-west communication. That’s fascinating. I don’t think we’ll ever get down to running NATS embedded on a device, but I think that’s a fascinating place NATS might be useful. Could NATS be a different D-Bus? I don’t know, but it’s quite possible. And it’s fascinating what that means from the Lego-brick analogy — if it’s running at that layer, and it’s all NATS above it too. I don’t have anything specific right now, because we’re still neophytes pushing the envelope. As we mature, we’ll find things where we think “it’d be great if this existed” — but by the time we get to it, it’s probably already done.

Synadia

It feels like we’re catching you at a good moment in your NATS journey. Running NATS at this IT/OT convergence is becoming more common. Do you have any takeaways or learnings — foot-guns to avoid, or things you learned over the last couple of years — you’d want to share with the audience?

Christopher Coco

As much as I’m touting NATS, the lesson is to make sure you’re using the right tool for the right job. We’re still figuring out exactly where NATS fits, where MQTT fits, where different things fit — finding the right protocol for the right layer. We think MQTT is still very useful at the edge; it’s an OT standard, a lot of devices speak MQTT, and we can’t and don’t necessarily want to get away from that. So we’ll likely still run MQTT at the edge. The fact that NATS supports MQTT and even Sparkplug B is very useful — someone beat us to suggesting that — so we can run NATS effectively as an MQTT broker. My advice is: everything’s a nail, and I don’t want NATS to be our hammer. The fact that we’re hammering a lot of things with NATS right now and it seems to be working is fascinating and extremely useful. But always second-guess yourself, and make sure you’re doing something for the right reasons — not just because it’s there and you want everything to work one way. We try to be rigorous about how we use things. NATS is a very useful tool — it’s very cool and very interesting — but it probably won’t be the right thing for every spot everywhere.

Synadia

Yeah, it does have its limits. [laughs] Don’t let anybody hear you say that. Chris, thank you so much for taking time to chat and tell us about your NATS adoption journey and working with Synadia. You laid out some really compelling arguments, and it’s exciting to see NATS used in this data center space that’s so central to our tech world right now.

Christopher Coco

Thank you for having me. I appreciate the time.

Audience Q&A

Synadia

That was terrific — Chris did a terrific job of hyping up NATS, so thank you for that, Chris. Good to see you again. The most recurring theme in the chat and Q&A while you were talking was interest in the proxy you wrote to get those OT protocols talking directly to NATS. Is there anything more you can tell us about what that looks like? Was it a hard problem to solve, or had no one done it yet?

Christopher Coco

Thanks for having me again — good to see you too. It’s an interesting question. We looked around to see if it was solved. Like I mentioned, we write primarily in Rust. I think we came across an open source project that might have been JavaScript, and I was surprised I didn’t see anything in Go. But most of these aren’t streaming protocols — they’re just straight TCP, and TCP is basically headers and bytes if you get down to it. I’ve worked on proxies before — I’m no stranger to shoving random weird things into bytes from a previous job — so we thought, “I wonder if we can create this topology out of subject-based messaging.” Since NATS has request-reply, instead of doing point-to-point over IPs and ports, we can do it through NATS messaging and have the substrate carry all of that.

Christopher Coco

One of the other things we had to add on top is access control — we have controls over who can talk to whom. We wanted to implement that in the same area, so we have policies in a NATS KV bucket that are checked on the proxy server side. When it gets a request, it’s annotated from the proxy client to show who it’s speaking on behalf of, and it checks the KV bucket to understand: does this client actually have access to the destination it’s trying to reach? Am I already maxed out on the number of clients that can talk? So there’s a whole firewall/gateway layer on top, all implemented in the NATS part as well — not just the TCP part, which is actually not that hard. We might get to streaming if we need to, but there’s nothing urgent for streaming right now. It’s something we may try to open source. Open source is near and dear to me — it’s one of the things we keep looking at as we build: what makes sense to give back. We’re building on the shoulders of giants here, so we definitely want to put things out in the community that we think are useful.

Synadia

Based on a few messages I saw, I think you’d have at least some people checking out the repo if you open sourced that project. I have to follow up on one thing because you teased it — anything else you care to share about the digital twin idea you mentioned? You can be as vague or as detailed as you’re able.

Christopher Coco

I’m not sure what else there is to add. It’s a simplistic system right now. We have a SCADA system that monitors all the devices in the data center, because it’s already doing the protocol translation and talking to a lot of different things — it can speak MQTT and a number of protocols to every device. It does that on a schedule depending on what it’s talking to: the EPMS, or electrical systems, are polled a lot more frequently than mechanical systems, since temperatures and things like that change less frequently. We build up a picture through the SCADA system — which already has to have a picture for local operators — send that over NATS with a topic hierarchy, and pull it on the other side to build out what it looks like. Then we have tooling on top to make sense of that for predictive analysis, optimization, and other things. We store a lot of that data at rest in InfluxDB, and we’re figuring out what other interesting things we can do with it. Without giving too much away — I’m trying to figure out what I can and can’t say — if you have a pub/sub system pulling data from a live system that’s monitoring every device, you can get a representation of what it’s monitoring.

Synadia

I loved the bit about pushing NATS to its limits and trying to find things you could break, and feeling like you hadn’t hit that wall yet. If I push you on that — do you have any sense of where that wall might be, or something you tried that was too crazy?

Christopher Coco

There are a lot of practical things. Even sitting here listening to the presentations earlier, I’m looking at scheduled messages thinking, “there’s stuff we were thinking about buying off the shelf that might be useful to just do with the native functionality coming out of NATS.” It’s this conversation again — every time I look at something, someone has already thought about it, or there’s already a way to do it, or the pieces are there for us to put it together ourselves. One thing we did try and backed out of: we were building a deployment system through NATS. It’s bytes, and the object store lets you stream large blobs, so we looked at a small agent running on the edge, subscribed to different NATS subjects as channels. We could publish a manifest — a description of what to do — and the agent, on getting a new message, would download the binary, run whatever was in the manifest, and install the stuff. I realized I was just rebuilding things that already exist, and we probably don’t need to do that. It was a fun experiment messing around with the object store, and an interesting exploration of what the system can do — even if it wasn’t necessarily the best thing to be doing.

Synadia

I know you’re a bit of an open source advocate. How do you compare and contrast the MQTT ecosystem — an open protocol, but maybe not as open or simple as NATS — with the NATS and Synadia experience? How do you view those two in tandem?

Christopher Coco

Good question. I try to couch this because I’m relatively new to the OT space, and I want to be cognizant that my view is peppered by my experience coming into this space a little cold. MQTT is an open protocol. It’s funny — I heard about MQTT years ago; we were looking at potentially using it for pub/sub at Twitter, ended up not using it, and didn’t hear about it again. I think it became popular around that time because Facebook was using it for something. But it wasn’t popular in the OT space, which is actually where it started — it was built for petrochemical command and control, managing remote sites. Now it’s having its heyday back in the OT space after coming through the IT world of web and things, and I think that’s great.

Christopher Coco

The OT space is a little strange in that it moves pretty slowly. You don’t want to say “behind,” but it’s probably been behind standard software engineering by some years — some people would say decades. So when you compare and contrast, MQTT and the environment around it can feel dated. That’s not to say it’s wrong — it’s suitable for what it was meant to do, and the fact that you’re using it is better than the alternatives, where there’s a lot of Modbus everywhere. Modbus TCP is an implementation of the serial protocol over TCP, and it’s a fascinating thing to have to deal with — I’d much rather be dealing with MQTT. Each one has its benefits. I do love the openness of NATS, and that the community is moving forward — there’s a lot going on, and conferences like this that show what Synadia is doing to push NATS forward. Just talking to an engineer on my team, we get excited building things with NATS, because we’re kind of kids with the Lego blocks right now, still figuring out what pieces we can put together. We were doing that with MQTT and just didn’t quite have the same enthusiasm.

Synadia

That’s perfect, because you teed me up — and I swear this is true. I was going to ask: if we made a shirt with the NATS server and a Lego block on it, would you wear it?

Christopher Coco

Oh, yeah, totally. I might have to go make that myself.

Synadia

My commitment is that by next RethinkConn we’ll have a shirt with a Lego block and the NATS server on it. Chris, thank you so much for joining us — a fascinating talk, and I appreciate you making time to join us live.

Christopher Coco

Thank you for having me.

Keep learning

If you’re looking to replace your MQTT broker at edge locations, get in touch with a NATS expert.

Get the NATS Newsletter

News and content from across the community


Cancel