DEV Community

Discussion on: I’m the VP of Engineering at Pusher. Ask me Anything!

Collapse
 
tal_rach profile image
Rachel Tal

What's the Pusher stack and why were the various technologies chosen?

Collapse
 
swstagg profile image
Sam Stagg

The core of the main Pusher platform is written in Ruby using the EventMachine framework. We also use Redis extensively for the internal messaging part. We picked this in 2010 because we spun out of a Ruby on Rails agency, and we never had capacity to change it 😁

In the last year we've been building a new platform built in Go to support our new products, which we're finding much more suited to building scalable distributed systems. We use Kubernetes for infrastructure management and React on our front-end.

Collapse
 
ben profile image
Ben Halpern

I'm surprised Pusher is written in Ruby. What are Pusher's main performance bottlenecks and how do you deal with them?

Thread Thread
 
swstagg profile image
Sam Stagg

It is quite surprising, but EventMachine is actually pretty good for letting us handle a large connection load on a single threaded Ruby process.

We try to handle all performance bottlenecks with horizontally scalability. And Redis is awesome for handling the internal heavy lifting.

Thread Thread
 
ben profile image
Ben Halpern

Thanks, I'm definitely going to check out EventMachine.

Thread Thread
 
mdpye profile image
Mike Pye

I have to say (as a lead developer at Pusher) that I wouldn't recommend EM for new projects. It was a leader in the evented-code-in-dynamic-languages revolution and inspiration for node.js, but it did not take off in the same way. Nowadays it feels quite archaic and unloved. The abstractions have not kept up with the other ecosystems in the space.

If I were to start a concurrent ruby project today, I'd try Celluloid (github.com/celluloid/celluloid), but as Sam mentions, we've mostly moved on to Golang for high-performance work.